Rank tracking tools charge by the keyword. At 500 keywords that is fine. At 10,000 keywords across 30 cities it is a five-figure yearly bill for daily checks you may not need. And you still cannot get the report you want.
A rank tracker API flips the model. You pay per check, you choose the schedule, and the data lands in your own table. This guide shows how to set that up, step by step, using Serplify’s API as the example. The same shape works with any SERP API.
What a rank tracker API does
A rank tracker API fetches the Google results page for a keyword in a location on a device, and tells you where a domain sits on it. Two numbers matter:
- Organic rank (
rank_groupin most APIs): your place among the normal results. - Absolute position (
rank_absolute): your place counting every block on the page, including AI Overviews, ads, and map packs.
In our September 2026 sample of 200 US result pages, the first organic result held the very first spot on only 14.5 percent of pages. Reporting both numbers is the only honest way to explain why clicks and rank do not move together. If you are new to that distinction, read how to check your Google rankings first.
Step 1: Build the keyword list with locations and devices
Start a table with one row per thing you want to track. Not one row per keyword. One row per keyword, location, and device.
| keyword | location_code | device | target | label |
|---|---|---|---|---|
| emergency plumber | 1023191 | mobile | acmeplumbing.com | nyc |
| emergency plumber | 1014221 | mobile | acmeplumbing.com | chicago |
| plumber near me | 1023191 | mobile | acmeplumbing.com | nyc |
Location codes are Google’s own IDs for countries, regions, and cities. 2840 is the United States. 1023191 is New York. You can pull the list from the API for free:
curl "https://api.serplify.io/v1/locations?country=US&limit=5000" \
-H "Authorization: Bearer live_your_key_here"
Use the most specific code your customers match. A city code for local services. A country code for national brands. The difference is large for anything local, which we cover in how to check local rankings.
Device matters as much as location. Mobile and desktop pages differ in blocks and order. See why mobile and desktop rankings differ. Track the device your customers use, or both.
Step 2: Pick a schedule
More checks cost more and show more noise. A good default:
| Keyword group | Frequency |
|---|---|
| Top revenue keywords, 50 to 200 | Daily |
| Everything else | Weekly |
| During a confirmed Google update | Daily for the week |
Rankings wobble by a position or two every day. Weekly checks smooth that out. Daily checks are for the keywords where you would act on a change.
Step 3: Send async requests, not live ones
A live request waits for the page. It is fine for one keyword in a dashboard. For a batch of 10,000 it ties up connections and hits timeouts.
An async request drops a task in a queue and returns at once. You collect results later, by polling or by webhook. Same price on Serplify, no waiting.
Here is one task. The track block tells the API which domain to find and how to label the check:
curl -X POST https://api.serplify.io/v1/serp/tasks \
-H "Authorization: Bearer live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"keyword": "emergency plumber",
"location": { "code": 1023191 },
"language": { "code": "en" },
"device": "mobile",
"depth": 100,
"track": { "target": "acmeplumbing.com", "label": "nyc" },
"webhook": { "result_url": "https://you.example.com/hooks/serplify?id=$id" }
}'
The API answers with a task ID right away. When the page is fetched, it posts the full result to your webhook, or you fetch it from /v1/serp/tasks/{id}. Fetching a result is free.
A nightly job in any language loops over the table and sends one task per row. In Python that is about twenty lines with requests.
Step 4: Read the result
Each result carries the whole page plus a small block with the answer:
"tracked_rank": {
"target": "acmeplumbing.com",
"rank_absolute": 6,
"rank_group": 3,
"url": "https://acmeplumbing.com/emergency",
"found": true
}
That says the site is organic rank 3 and the sixth block on the page. When the domain is not in the top 100, found is false and the ranks are null. Store that too. A gap in the history is information.
Also store feature_types from the result. It lists every block on the page, like ["local_pack", "organic", "people_also_ask", "ai_overview"]. Next month, when a keyword’s clicks fall and its rank did not, this column tells you what arrived above you.
Step 5: Store it
You do not need a big system. One table with these columns covers most reporting:
| column | example |
|---|---|
| checked_at | 2026-09-06T02:10:00Z |
| keyword | emergency plumber |
| location_code | 1023191 |
| device | mobile |
| target | acmeplumbing.com |
| rank_group | 3 |
| rank_absolute | 6 |
| url | https://acmeplumbing.com/emergency |
| feature_types | local_pack, organic, people_also_ask |
| first_organic_position | 4 |
Serplify also keeps its own history for every tracked request. GET /v1/serp/track?keyword=...&target=... returns the snapshots, newest first, at no charge. A spreadsheet or a small script can chart a trend from that without a database at all.
Step 6: Report the two numbers, and the features
A useful weekly report has three columns per keyword: organic rank, absolute position, and a flag when a new feature appeared above you. Add a seven-day average so daily noise does not drive decisions.
Then compare against clicks in Google Search Console. When rank held and clicks fell, look at the feature column. When rank fell across a group of keywords for more than a week, read why Google rankings fluctuate before you change anything.
What it costs
Serplify charges $0.005 per successful SERP, up to 100 results, with every feature parsed. Failed fetches are free. History reads are free.
| Setup | Checks per month | Cost per month |
|---|---|---|
| 1,000 keywords, weekly | 4,300 | about $22 |
| 1,000 keywords, daily | 30,000 | $150 |
| 10,000 keywords, weekly | 43,000 | about $215 |
| 10,000 keywords, daily | 300,000 | $1,500 |
| 10,000 keywords, 5 cities, weekly | 215,000 | about $1,075 |
Compare that with tool pricing, where 10,000 daily-checked keywords runs into thousands of dollars a month. We lay the tool prices side by side in how much a rank tracker costs. The break-even is usually a few thousand keywords, or any setup with many cities.
Tracking the local pack
Local businesses live or die by the map pack. It comes back as separate local_pack items, each with the business title, rating, and Google’s place ID (cid). Match on the title or the ID, record the pack position, and request a city-level or even neighborhood-level location code. Packs differ from one side of a city to the other.
Tracking SERP features, not just yourself
Once you store feature_types for every check, you have a SERP feature tracker for free. Filter for keywords where people_also_ask is present and you are not in it. Filter for keywords where ai_overview appeared this month and was absent last month. Our guide on finding SERP feature opportunities turns that data into a plan.
Mistakes that waste money
- Depth 100 on everything. If you only ever act on top-20 changes, request depth 20 on the weekly list and 100 on the keywords you are trying to move. Serplify charges the same either way, but on per-page providers this is the difference between $0.002 and $0.02 per check.
- Live calls in a batch. Use async. Same data, no timeouts.
- One country code for a local business. Use the city.
- Checking daily and reading daily. Check daily if you like, but report weekly averages.
- Storing only the rank. Store the URL that ranked and the feature list. Both explain changes that rank alone cannot.
Quick recap
- A rank tracker API fetches the real page per keyword, location, and device, and returns your rank and position.
- Build a table of keyword, location code, device, and target. Send async tasks on a schedule. Store rank, position, URL, and feature types.
- Report organic rank and absolute position together, with a seven-day average.
- At $0.005 per check, 10,000 keywords checked weekly is about $215 a month, and history is free.
Frequently asked questions
What is a rank tracker API?
It is an API that fetches Google results for a keyword, location, and device, and returns where a given domain appears. Some APIs return the whole page and let you find your domain. Others, like Serplify, also accept a target domain and return its rank directly, and keep a history you can query.
How many keywords can I track with an API?
As many as you can pay for. There is no plan cap. Each keyword, location, and device combination is one request per check. 10,000 keywords on two devices checked daily is 20,000 requests a day.
Is a rank tracker API cheaper than a rank tracking tool?
Usually, once you pass a few thousand keywords or need many cities. Tools charge per keyword slot per month, whether you check daily or not. An API charges per check, so weekly checks on 10,000 keywords can cost less than a 2,000-keyword tool plan. You do need a little code and somewhere to store results.
How accurate is API-based rank tracking?
As accurate as the location and device you request. A request for mobile results in Denver returns the page a mobile searcher in Denver sees, with no personalization. That is more consistent than checking by hand, and the same method commercial rank trackers use under the hood.
Can I track local map pack rankings with an API?
Yes. The local pack comes back as separate items with the business name, rating, and Google's place ID. Match on your business name or place ID to record your map rank, and request a city-level location code so the pack matches what local searchers see.
Sources and further reading
- Serplify docs: Rank tracking docs.serplify.io
- Serplify docs: Async tasks docs.serplify.io
- Serplify docs: Locations and languages docs.serplify.io
- Google Search Console Help: Performance report support.google.com