Rank Tracker API: How To Choose One and Build on It in 2026
A rank tracker API gives you concrete data on where a page sits in search results for a given keyword, location, and device. This guide walks through how rank trackers work, how to get your requests running, and what you'll realistically pay per tracked keyword.
Robertas Lisickis
Last updated: Sep 07, 2026
7 min read
TL;DR
- Rank tracker APIs cover 4 different product categories, and they behave differently enough that picking the wrong one might end up costing you
- Traditional SERP APIs return the page instead of a rank, meaning your workflow should calculate and assign a position on its own
- Google's removal of num=100 in September 2025 changed how requests handle bulk scrapes, so result depth is now the biggest single line in your bill
- Most vendors provide request examples and a cost per tracked keyword metric, so you can test and price your own keyword set before you commit.
What a rank tracker API returns
Let's walk one request end to end, because the shape of it explains most of the decisions later on.
With any rank tracking request, you send 5 things: a keyword, the domain, a location, a device type, and a search engine. In turn, you get back an array of organic results, a set of SERP features, and a timestamp saying when the page was fetched. There's more, but we're focusing on the essentials here.
Here's a snippet of a response you'd typically get using the google_search template in our Web Scraping API:
Here, 4 fields matter most:
- pos is the result's place among the organic listings
- pos_overall is its place on the rendered page counting SERP features, so a page with an AI Overview and a video carousel above the fold will push those 2 numbers apart
- url is the ranking URL, which you need because a keyword can move between your pages without moving in rank at all
- page tells you which results page this payload came from, which matters as soon as you go past the first 10
Position is the value you compute, not a field you're handed
This is where many rank tracker projects take longer than expected. It's because nothing in the response above says "your domain is at 4." The API tells you what the whole page looks like, but it has no idea which domain you're tracking, because you never told it.
Getting from that payload to a rank means scanning the organic array, matching hostnames against your target, and handling the page offset yourself. SERP APIs out of the box simply work this way, but dedicated rank APIs fix this problem.
It might sound pedantic, but keep in mind that subdomains, trailing slashes, www prefixes, redirect chains, and country TLDs pointing at the same property all land in your code, not the vendor's.
Why this isn't the same as Google Search Console
Google Search Console is the free reporting tool Google gives site owners, showing how the properties you've verified are performing in search.
The key difference compared to rank trackers is that Google Search Console gives you an average position. While it can be useful for a general look at how well a domain is doing, it gives you very little beyond that.
There are 2 underlying reasons. First, it only covers properties you've verified, and second, "average position" is averaged across every impression, location, device, and query variant. So, not only don't you see any competitors, but it also moves for reasons that have nothing to do with your ranking changing.
Regardless, the practical answer is to run both. Use a rank tracker API for competitive, per-location position data, and use Search Console for the click and impression side that scraping can't give you.
The 4 things people call a rank tracker API
Most of the confusion here comes from a single term covering 4 different products:
- Raw SERP APIs. You get the page as structured JSON, and you calculate the position yourself. It provides maximum control, since you own the parser and can extract anything that shows up on the page. The downside is that it doesn't survive Google's inevitable reshuffle of SERP features and needs maintenance.
- Dedicated rank APIs. It's asynchronous and it returns a computed position for your specified domain. It doesn't hurt the wallet with bulk projects because the queue lets the provider batch work. However, the queue-based nature of the API doesn't allow for on-demand data without either reworking your setup or paying up for a higher tier.
- Live SERP wrappers. These answer in about a second, which is what you need when someone is watching the loading spinner. The catch is that the limits are sized for that pace, so a nightly refresh needs spreading out rather than a blast of requests.
- SEO platforms with an API. With this option, there isn't any infrastructure to run on your end, and the ranking is already computed. The problem arises when you exceed keyword tracking limits or need results the standardized format doesn't cover.
If you're still deciding, the trade-offs between using an API and scraping yourself are worth reading first, since that choice sits underneath everything else here.
What changed in 2025 and 2026
Over the past year, 2 platform changes reset the economics of rank tracking, and a third reset what the data means.
Google removed the num=100 parameter
In September, 2025, Google stopped honoring num=100, the URL parameter that returned 100 results on a single page. It was never officially supported, but effectively the whole tooling industry had built on it. So, whatever people were running until then has increased by 10 overnight.
Take a 5K keyword set tracked daily to depth 100. Before, that was 1 request per keyword, so 5K requests a day or roughly 150K a month. Now each keyword takes 10 requests to reach the same depth, which is 50K a day and 1.5M a month.
That's why a lot of teams saw their SERP bill jump without changing anything about their tracking setup, and why several vendors moved to depth-based billing in the same window. If you want the details on what else the change broke, we covered the fallout when Google dropped that num=100 parameter separately.
Microsoft retired the Bing Search APIs
Microsoft decommissioned the Bing Search and Bing Custom Search APIs on August 11, 2025. The suggested replacement, Grounding with Bing Search in Azure AI Foundry, feeds web context to an AI agent rather than returning structured results to your application, so it isn't a drop-in swap for rank tracking.
As a result, any Bing coverage you have in 2026 sits on scraping, either yours or a vendor's. If Bing matters to your reporting, our rundown of which Bing rank trackers still work covers the current options.
AI surfaces changed what "visibility" means
AI Overviews and AI Mode sit above organic results and answer most queries without a click. A payload that gives you position 3 and nothing else is now a partial answer, since it can't tell you whether an AI Overview pushed those results below the fold or cited you inside it.
Ahrefs, for example, returns an is_main_position flag that excludes AI Overview, sitelinks, top stories, image packs, and video placements, which is a quiet admission that "position" needs qualifying now. If you want to track those surfaces directly rather than infer them, there's a walkthrough of pulling results out of Google AI Mode that covers the mechanics.
What to look for, ranked by what breaks
Here's what to check, ordered by how much damage each one does when it goes wrong, with a test attached to every item:
- Geo and device fidelity. This breaks quietly and poisons everything downstream, so test it first. Run one hyper-local keyword, then check the same keyword manually from that location in an incognito window. Use a local-intent query, since head terms return nearly identical results everywhere.
- Result depth and what it costs. Find out how many results the API will give you per keyword, and how it charges for them. A provider that bills per page and one that bills per request can differ by 10× on the same job.
- AI surface coverage. Check whether the response tells you an AI Overview was included, and whether it gives you the citations inside it. Plenty of APIs return organic results cleanly and simply omit the AI block.
- Latency profile. Measure p50 and p95, avoiding the average, because it hides the tail that breaks your scheduler. Queued APIs will take minutes, while live wrappers should do it in seconds.
- Error and retry semantics. Find out what a failure looks like and whether you're billed for it. Some providers charge only for successful requests, while others return HTTP 200 with an empty body, and the second is much more dangerous to your budget. It's worth pairing this with a sensible client-side approach, and retrying failed Python requests with backoff covers the pattern.
- Documentation. Bad documentation will likely cost you a day whereas bad geo data will cost you a quarter of misleading reports.
A benchmark protocol you can run
If you're comparing 2 or 3 candidates, run the same test against each. Here's an approach that takes about an afternoon:
- Fix a keyword set of 50 terms, mixing head, mid-tail, and local-intent queries
- Run each keyword across 3 locations and 2 devices, so 300 requests per provider
- Record p50 and p95 latency, and the success rate before any retries
- Note which JSON fields came back empty, per provider and per keyword type
That last one is what people typically skip, yet the most important one of the bunch. A provider with a 99% success rate that hands back an empty organic array on local queries is charging you for a failure it never admitted to, which makes it worse than a provider at 95% that tells you when something broke.
If you want to line the geo side up properly, Decodo publishes which geo-targeting locations are available so you can match test locations across vendors.
Rank tracker APIs compared
Here's every entry worth looking into, including the category it belongs to, what a request looks like, what comes back, how pricing works, and where it stops being the right tool. Prices are the published rates as of late August 2026.
Decodo
- Category. It's a raw SERP API with a built-in parser and ready-made templates for fast and simple setup. The SERP scraper is now part of Web Scraping API, and there's a separate low-latency product covered below.
Request example:
- What comes back. The parsed structure shown earlier, with organic, paid, related_questions, featured_snippet, local_pack, and the rest as separate keys. Each organic result carries both pos and pos_overall. Setting parse to false gives you raw HTML instead, and you can also set the format to Markdown, XML, and PNG, whichever best fits your workflow.
- Pricing. You're billed per successful request, priced by proxy pool and rendering mode rather than keyword count. Standard starts at $0.50 per 1K and premium at $1.00, both falling at higher volumes. The free plan gives you 2K requests a month to test with, and full rates are on the Web Scraping API pricing page.
- Where it stops being right. You'd still need to write the code for the position parser and the domain matching.
Decodo Fast Search API
- Category. Fast Search API is a live SERP wrapper, and the closest fit if you need a rank check inside something a person is waiting on.
Request example:
- What comes back. Only the top organic results or top stories, in a minimal schema with title, url, snippet, and position. Ads, widgets, and multi-page payloads are skipped. The API is optimized for <1s responses, with up to 200 requests per second on higher plans.
- Pricing. No free plan this time, but plans start at $0.75/1K requests and decrease with higher tiers. Details are on the Fast Search API page.
- Where it stops being right. The response is deliberately minimal, which is the point for latency but means SERP features aren't in it at all. It's a good fit for live rank checks at any depth, but not for analyzing what else is on the page.
DataForSEO
- Category. It's a dedicated rank API, with 3 delivery speeds that behave like 3 different products.
Request example:
- What comes back. Results nest under tasks[0].result[0].items[], and each item carries rank_group (position among results of the same type) alongside rank_absolute (position on the page overall). Same pair of numbers as Decodo, but different field names.
- Pricing. Pay as you go with a $50 minimum deposit. Standard queue runs about $0.60/1K SERPs and resolves in roughly 5 minutes. Priority tasks are $0.0012, live mode is $0.002 and returns in about 6 seconds. The billing unit is 10 results, and since September 2025 the depth parameter charges for each additional page.
- Where it stops being right. The queue is the cheap tier and the queue is asynchronous, so anything user-facing pushes you onto live mode at more than 3 times the rate. So, budget accordingly for the mode you'll run.
SerpApi
- Category. A live SERP wrapper, and the most established one at the moment.
Request example:
- What comes back. An organic_results array with position, link, title, and snippet, plus separate keys for the SERP features present. It's consistent across engines, which is genuinely useful if you're tracking more than just Google.
- Pricing. Monthly subscriptions with a fixed search allowance starting at $25/1K searches. There's also a free tier at 250 searches. Unused searches don't roll over, so your effective rate is set by what you use rather than what you buy.
- Where it stops being right. The effective cost lands somewhere between $9 and $25 per 1K searches depending on tier and utilization, which is roughly 15 times the queued alternatives. If your workload is a nightly batch with no latency requirement, you're paying a large premium for speed you don't need.
AccuRanker
- Category. An SEO platform with its own API, purpose-built for rank tracking rather.
Request example:
- What comes back. An array of keywords, each carrying a ranks array with rank already computed against your domain, plus created_at for the check date and highest_ranking_page for the URL that ranked. search_type tells you the device, where 1 is desktop and 2 is mobile. Add competitor_ranks.rank and competitor_ranks.competitor.domain to the fields list and competitor positions come back in the same call. Other fields available include share_of_voice, ctr, people_also_ask, and full_serp.
- Pricing. The app is priced by tracked keyword count with the entry Professional plan being around $249/month for 2K keywords, and API access sits on a higher tier.
- Where it stops being right. If you're not careful with the fields parameter, you might get empty objects rather than an error, which is easy to misread as no data. Rate limits are also low by API standards at 100 requests per minute with 4 concurrent connections, so large keyword pulls need proper pacing.
Ahrefs
- Category. SEO platform with an API, where rank tracking is one module of a larger toolset.
Request example:
- What comes back. An overviews array where position is already your domain's rank. You also get serp_features as an enum array, best_position_kind telling you whether your best placement was organic or a feature, and position_diff against a comparison date.
- Pricing mechanics. API access is subscription-based, with a monthly unit allowance per plan and a hard stop when you exhaust it. Subscription tiers start at $29, with Enterprise from $1,499.
- Where it stops being right. There are 2 limitations, namely [1] units running out mid-month and [2] access stopping rather than overflowing into usage billing. In such a case, keywords past your plan limit get frozen. Both are recoverable, but it's easy to not notice.
The comparison table
Here's a quick recap of all the APIs we've mentioned above, with the type, price, and whether a rank is computed.
Vendor
Category
Position criteria
Published rate
Decodo Web Scraping API
Raw SERP API
Per-result pos and pos_overall, but you match your own domain
$0.85 to $1.00 per 1K (premium pool)
Decodo Fast Search API
Live wrapper
position per result, top page only
$0.60 to $0.75 per 1K
DataForSEO
Dedicated rank API
rank_group and rank_absolute, still per result
$0.60 to $2.00 per 1K by speed tier
SerpApi
Live wrapper
position per organic result
About $9 to $25 per 1K effective
AccuRanker
Platform API
Yes, computed against your domain
From about $249/month, API on higher tier
Ahrefs
Platform API
Yes, position is your domain's
No published API rate below Enterprise
Track ranks across multiple search engines
Plug our Web Scraping API or Fast Search API straight into your workflows and track your rankings across Google, Bing, Baidu, and Yahoo.
What it costs to track 2K keywords
Because nobody publishes this number, let's get super nerdy and calculate the cost of tracking keywords. The request volume is a straight multiplication:
Take a baseline of 2K keywords, daily, 1 location, 1 device, 1 engine, top 10 only, with a 5% retry allowance. Following our formula above, that comes to 2.1K requests per day and roughly 63K per month.
Here's what that baseline costs per tracked keyword per day, using the published rates above:
Product
Delivery
Monthly cost
Cost per keyword per day
Time to result
DataForSEO, Standard queue
Queued
About $38
$0.0006
About 5 minutes
Decodo Fast Search API
Live
$49
$0.0008
<1s
Decodo Web Scraping API
Live, full SERP
$99
$0.0017
Varies
DataForSEO, Live mode
Live
About $126
$0.0021
About 6s
AccuRanker
Platform
$249
$0.0042
Daily refresh
SerpApi
Live
About $580
$0.0096
2-3s
Note that both Decodo plans include more requests than this workload uses, so the effective rate improves as your projects grow. At full allowance, Fast Search API works out to $0.0007 per keyword per day and Web Scraping API to $0.0009.
The depth cliff
Now change one variable and track to depth 100 instead of depth 10. The same 2K keywords go from about 63K requests a month to roughly 630K, because reaching 100 results now takes 10 requests per keyword instead of 1. That's enough to move you off a listed plan and into custom pricing, and most teams tracking to 100 haven't re-priced since September 2025.
The honest question is whether you need depth 100 at all. If you're reporting on visibility for pages ranking between 40 and 90, tracking depth 20 and treating everything below as "not ranking" costs a fifth as much and loses very little you'd act on.
Frequency tiering
The other lever is refresh rate. The best approach is to split your keyword sets into 3 parts:
- Head terms, refreshed daily.
- Mid-tail, refreshed weekly.
- Long-tail, refreshed monthly.
A set that's 10% head, 30% mid-tail, and 60% long-tail drops from 30 refreshes per keyword per month to roughly 8, which is close to a 70% cut with no change to what you can report on.
Engineering time is a line item
This is one more thing that belongs in the model, yet never makes it there. A raw SERP API at $0.60 per 1K plus 4 hours of parser maintenance a month isn't cheaper than a platform API at $250 a month, assuming your engineering time is worth anything at all. Put a number on it before the comparison, since otherwise the cheap option always wins on paper. So, if you're sizing this up at volume, the constraints in running web scraping at scale are the same ones that apply here.
Building the tracker: things to keep in mind
If you do decide to go with a raw or dedicated API and you're building on it, the work splits across 5 components.
- Keyword store. This holds the keyword, target domain, location, device, and engine, plus a refresh tier that you'll need later if you want to run head terms daily and long-tail monthly.
- Scheduler. This works out what's due and puts it in the queue. There's more on timing below, since the obvious approach causes problems.
- Fetcher. This calls the API and handles retries, and it should write the raw response somewhere before anything tries to parse it.
- Position parser. This turns a payload into a rank, and it's the piece most guides mention without showing, so there's a working version below.
- History table. This stores results point-in-time, which is the only thing that makes trend analysis possible later on.
The position parser
Here's what the position parser looks like in code against the Decodo response shape from earlier:
There are 3 things to note. The endswith check catches subdomains, so blog.example.com counts as a match for example.com, which is usually what you want and occasionally isn't. Returning None rather than 101 keeps "didn't rank" distinguishable from "ranked last," and you'll want that distinction the first time someone asks why a keyword shows as position 101 across the board.
The offset line is the one to verify against your provider. Some APIs restart pos at 1 on every results page, in which case the multiplication is right. Others count continuously across pages, in which case you'd be double-counting. Check this before starting your data projects, especially long-term ones, to avoid skewing months' worth of data.
The history table
Point-in-time storage is what separates a tracker from a status page, so here's a rough code schema to start from:
position is nullable on purpose, since null means "checked, didn't rank" and a missing row means "never checked." Those are different facts and you'll want to tell them apart. ranking_url catches the case where a keyword holds its position, but moves to a different page of yours, which is a real event that a position-only table hides completely. parser_ver is there so a parser bug becomes a filterable problem rather than a corrupted table.
If SQLite is where you're starting, storing scraped data in SQLite covers the setup.
Scheduling and jitter
On paper, a scheduler and jitter mechanic do a lot to keep your rank tracker running over longer terms. The challenge, however, is two-fold: passing as natural traffic, and keeping your data comparable day to day.
With that said, first, avoid scheduling your scrapes at the same time every day. Setting up a cron job for 9AM with a random jitter interval to fire off your tracker at any time during that hour does the trick. And, second, pace the tracking of the different sets of keywords throughout the day to avoid hitting rate limits.
That second aspect comes with a catch, since rankings can shift over the course of a day. Each keyword should land in roughly the same slot each day rather than drifting, because a keyword checked at 9AM one day and 6PM the next isn't really comparable. Deriving its offset from the keyword ID gives you that. The same goes for weekly and monthly tracking, with spreads across different days and weeks respectively.
If intraday movement is something you need, that's a separate decision rather than something drift gives you for free. Checking head terms 2 or 3 times a day at fixed hours captures it properly, at 2 or 3 times the requests for those keywords.
Store raw responses separately
Keep the raw payload in one place and the parsed positions in another, linked by that raw_id column. The reason is when your parser breaks, you want to fix it and replay the stored payloads rather than re-fetch a month of data you already paid for. Storing those payloads costs almost nothing, while re-fetching 630K requests to get back where you were is a painful invoice incoming.
If you're deciding how to structure that side, working out which parser fits your data is a reasonable next read.
Alert on webhooks, not polling
A keyword dropping out of the top 10, or a competitor climbing into it, are events rather than states, so it makes sense to handle them as events. A webhook fires only when the condition is met, whereas a polling loop spends requests repeatedly asking a question whose answer is nearly always no. This is why webhook-based notifications work out considerably cheaper once you're tracking any real number of keywords.
All of this is a sketch rather than an implementation, since the job of this article is helping you pick a tool. If you want the full build with working code, how to build a rank tracker breaks it all down.
When it stops working
Rank trackers generally fail quietly, which is the whole problem. A scraper returning a 500 gets noticed within the hour, whereas one returning HTTP 200 with a challenge page behind it gets parsed like any other response, finds no organic results, and writes a null position that looks exactly like "didn't rank." Since nobody goes digging into a keyword that dropped out of the top 100, that failure sits in your data until somebody happens to spot-check it by hand.
The defense for this belongs in the parser rather than the fetcher. A response that parses to zero organic results is an error condition rather than a rank of null, so treat a page with no blue links at all as a failed fetch and retry it, since a real SERP essentially always has some.
Why positions 11 and beyond disappear more often
There's a pattern worth knowing if you go beyond the first search results page. Second-page and third-page requests tend to fail at a higher rate than first-page requests, and the usual reason is session reuse.
A first request establishes a session. The follow-up pagination requests reuse it, so by the time you're asking for page 4, you're using a session that's already been flagged as automated. So, your data develops a hole below position 10 that looks like a ranking pattern.
If you see depth-correlated gaps, test it by fetching page 3 as a fresh session rather than a continuation. Managed APIs generally handle this rotation for you, which is part of what you're paying for. Why rank trackers get blocked goes further into the specific symptoms, and there's separate coverage of how anti-bot systems spot automated traffic if you're running collection yourself.
Block rate is a cost input
A useful way to think about it is as a multiplier on the request volume from the last section, since every blocked request is one you pay to send again. As such, a 10% block rate leaves every number in your cost model about 11% low, and at 30% you're roughly 43% under.
It also helps to decide if you need a dedicated API for tracking rankings. Running your own collection means you tackle the block rate, proxy rotation, and CAPTCHAs on your own, whereas a managed API prices all of that in. Sure, neither option is free, but the delivery cost gives you an objective look at what's better for your budget.
By the way, if CAPTCHAs are the specific factor breaking your pipeline, read our blog post on handling Google's CAPTCHA challenges.
Build, buy, or both
Buying a ready-to-use solution or building your own solely depends on what you need. These 3 questions will help you decide what fits best:
- Do you need competitor data or just your own? If it's just your own, on one site, feeding one dashboard, buy a tool and skip everything else here. Building anything yourself would be overkill at this point.
- Does anything need to be live? If a rank check has to return while someone waits, you need a synchronous API, which rules out the cheap queued tiers regardless of what else you decide.
- Does the platform's schema hold everything you need? If yes, buy the platform API and don't build, letting your provider deal with the infrastructure. If not, building on a raw or dedicated API is the way to go.
The hybrid pattern
Teams usually get to this point when the platform prices some of your keywords badly but still does the reporting better than you would, so you move the cheap-to-fetch sets to a raw API and leave the rest where they are.
The platform handles the recurring reporting. It has the dashboards, the share-of-voice math, the exports people expect, and building that presentation layer yourself is a poor use of engineering time. The raw API handles the keyword sets that the platform prices badly, namely very large long-tail sets, unusual locations, and competitor domains you don't want counting against a keyword allowance.
In this case, it's worth keeping your own history table as the source of truth and treating both APIs as feeds into it, so that switching either one means just changing the configuration and nothing else. For the reporting side of that split, what a SERP analysis involves covers what you'd want the platform layer to produce.
Best practices
Avoid wasting your budget and time on debugging by following these best practices:
- Respect rate limits. Use a token bucket on your side because a client that never trips the limit is faster overall than one that retries constantly.
- Cache with a TTL matched to refresh tier. A keyword on a weekly tier doesn't need a fresh fetch because a dashboard was opened.
- Store your own history instead of relying on vendor retention. You might end up switching providers every now and then because of better pricing, feature sets, or performance.
- Validate against manual checks monthly. Pick 10 keywords, check them by hand from the target location, and compare the data to catch factors like geo drift early on.
- Combine with Search Console and analytics. A position without clicks tells you little, especially with AI surfaces absorbing queries.
- Retry with exponential backoff and a jitter term. Fixed-interval retries from many sources might synchronize into exactly the burst you're trying to avoid.
- Version your parser and keep the raw payload. When a SERP layout changes you can replay the stored responses through a fixed parser rather than re-fetching. It's also the difference between a quick backfilling job and months of lost data.
Choosing well comes down to one question
Everything comes down to one question, which is what you're buying. It's either a page you'll parse yourself, a queued position, a live lookup, or a finished platform. Getting that right means the rest of the decisions follow from it, or you'll have to rebuild.
So, to route yourself quickly: if you're building competitive tracking on your own schema, start with a raw SERP API and budget the parser time. If you're feeding rank checks into something user-facing, go with a live wrapper and price the latency premium honestly. And if you're producing recurring reports on a fixed set of keywords, a platform API does the job.
If you're in that first camp, we have something for you. Decodo's SERP Scraping API covers Google, Bing, Yahoo, and Baidu with geo-targeting across 195+ locations, parsed JSON, Markdown, CSV, and PNG outputs with XML support, and billing on successful requests only. There's a free plan too, if you'd rather test the geo fidelity yourself before taking anyone's word for it.
Track rankings with Decodo
Plug our Web Scraping API or Fast Search API straight into your pipelines to scale your projects in the most efficient way possible.
About the author

Robertas Lisickis
Content Specialist
Robertas brings 10+ years of IT content experience to the table. Here, he focuses on creating tutorials and educational pieces that make technical concepts easier to grasp.
Connect with Robertas via LinkedIn.
All information on Decodo Blog is provided on an as is basis and for informational purposes only. We make no representation and disclaim all liability with respect to your use of any information contained on Decodo Blog or any third-party websites that may belinked therein.
