Strategist
rank-tracking

Rank tracking API: what it returns, what it costs, and how to build daily tracking

Isometric chart on a teal plate: a line of points climbs across faint lanes past a rival line to an amber point

A rank tracking API lets your code ask a search engine for the results page of a keyword and get the ranked results back as JavaScript Object Notation (JSON). You send a keyword, a location, a language and a device. The vendor runs the search and returns the results in order. You track rankings by calling the API on a schedule and storing each answer. This article shows what the API returns, how vendors bill, whether to build or buy, and how to set up daily tracking on one.

How does a rank tracking API work?

Vendors use several names for the same product: rank tracker API, SERP tracker API and keyword position checker API. Many of them sell a search engine results page (SERP) API. It does not return "your rank". It returns the whole results page as structured data, and your code finds your domain in it.

The request names the search to run. In DataForSEO's Google organic API, the fields are:

  • keyword, up to 700 characters.
  • location_code and language_code, such as 2840 and en.
  • device, either desktop (the default) or mobile.
  • depth, the number of results to collect. The default is 10 and the maximum is 700.
A request carries a keyword, a location, a language, a device and a depth. The SERP API runs the search. The response carries positions, URLs and domains, the types of SERP features, and a link to the live results page. request keyword location language device depth SERP API response Position (rank) URL and domain SERP feature types Link to the live SERP You search the response for your own domain.
Fig. 1. Request and response fields as DataForSEO documents them for Google organic results (task_post, task_get). Other vendors use other names.

The response lists the result items. For each organic item, DataForSEO's task results give two position fields. rank_group is the "position within a group of elements with identical type values". rank_absolute is the "absolute position among all the elements in SERP". The item also carries the url and domain. A check_url field gives the direct URL of the search engine results, so that you can check the vendor's answer yourself.

The two position fields differ when a results page holds other elements, such as a featured answer or a local pack. The response lists those in item_types, with values such as organic, paid, answer_box, local_pack and ai_overview. Decide which position you report, and keep to it.

Your code must also decide what counts as your result. Match the domain field exactly, and decide how to treat www and other subdomains. If several of your URLs appear for one keyword, store the highest one and keep the others in a separate column.

Other vendors use other names for these fields. SerpApi returns an organic_results list whose entries carry a position. Scrapingdog returns organic_results entries with a rank.

Rank tracking API or Search Console?

Google Search Console also reports position. The two sources answer different questions.

SERP API Search Console
Covers Any domain that appears in the results you request Your own verified property
What "position" means The place of a result in one search, at one location and on one device An average across queries
Limit to plan for The depth you request The Search Analytics API "exposes a maximum of 50K rows of data per day per search type"

Google defines the Search Console number as "the topmost position occupied by a link to your property or page in search results, averaged across all queries in which your property appeared". It is an average of the top position for each query. A SERP API gives you one search at a time. The two numbers will not match, and that is normal. One is a single search, and the other is an average over many searches. Use the API when you need a position for a chosen keyword, place and device. Use Search Console when you need what Google recorded for your own pages.

Strategist reports daily rank checks next to Search Console data for each tracked keyword, and the page track rankings describes it.

How much does a rank tracking API cost?

Vendors bill in different units, so a price per keyword needs a conversion. The table shows what each vendor's page said on 21 October 2026. Check each page again before you decide, because prices and limits change.

Vendor Unit What the vendor page says
DataForSEO SERP of up to 10 results Standard queue $0.0006, priority queue $0.0012, live $0.002 per SERP. "Your account will be billed per each SERP containing up to 10 results." A depth above 10 may add charges.
SerpApi Successful search "Only successful searches are counted toward your monthly searches." Cached searches are free. Plans start with 250 searches a month at $0, then 1,000 searches for $25 a month.
Scrapingdog Credit "Each successful request costs 5 credits for standard search." Advanced search and mobile search cost 10 credits each.

SerpApi's pricing page states the billing rule, and its Search API docs state "Cache expires after 1h". A tracking job that runs once a day will not hit it by accident, but a job that repeats a search within the hour can.

Convert a price to a cost per keyword

Use one formula for any vendor:

monthly cost = keywords × checks per day × days × price of one check

A check means one keyword, one location and one device. If you track a keyword on desktop and mobile, that is two checks.

Cost grows with each extra dimension, so count carefully. Take 500 keywords, one desktop check a day, 30 days and the DataForSEO standard queue price of $0.0006. The result is 500 × 30 × $0.0006, which is $9. The same 15,000 checks equal the 15,000 searches of SerpApi's Production plan, which its pricing page lists at $150 a month. Scrapingdog bills in credits, so you multiply 15,000 by 5 credits and compare the 75,000 credits with the monthly credits of each plan on Scrapingdog's pricing page. These sums use the vendors' stated prices and your own counts. They are not a test of any vendor.

Delivery method changes the price

DataForSEO bills the same search at three prices because it delivers it three ways. The overview says the live method "delivers results in real-time" and is the most expensive. The standard method "requires making separate POST and GET requests, but it's more affordable."

DataForSEO delivers results three ways. The standard queue and the priority queue need a POST call, then a GET call, and average 5 minutes and up to 1 minute. The live method returns results in the POST response in up to 6 seconds on average. Three ways to get one SERP Standard queue POST task GET result 5 minutes on average Priority queue POST task GET result up to 1 minute on average Live POST, result in response up to 6 seconds on average
Fig. 2. Delivery methods and vendor averages as of October 2026. Sources: DataForSEO, Google SERP API and SERP API overview. For the standard queue, DataForSEO adds that its "target turnaround time is 45 minutes".

A daily job does not need an answer in six seconds. It can use the queue. Strategist's scheduled daily check posts DataForSEO tasks and collects them five minutes later.

Build or buy a rank tracker API?

You have two ways to get positions. You can run the searches yourself, or you can call a vendor.

Build. You run a headless browser, fetch the results page, and parse it yourself. You own the parser and every change to it. You also take the policy risk. Google's terms forbid "using automated means to access content from any of our services in violation of the machine-readable instructions". Read the terms and robots.txt before you automate any search.

Buy. You call a SERP API, and the vendor runs the search. You pay per search, and you depend on the vendor's uptime, coverage and terms.

Google's own Custom Search JSON API returns web search results as JSON. It states that it "is closed to new customers", and its pricing applies to existing customers until the service ends on 1 January 2027. Do not plan a new tracker on it.

Strategist runs rank checks through DataForSEO when you supply a key, and through a Playwright SERP scraper without one.

The two ways can also mix: call a vendor for most keywords and run your own checks for a few. Whichever you pick, keep the same columns in your table, so that you can switch source later without breaking the series.

Read the limits in the documentation

Limits decide whether a vendor fits your job. Look for them on the vendor's page, and note the date. DataForSEO's overview states that you can send "up to 10000 POST and GET API calls per minute in total", and that each POST call can contain "no more than 100 tasks". For the live method it adds that each call "can contain only one task". Scrapingdog's page states no rate limit. A missing limit is not the same as no limit, so ask the vendor.

Location needs the same care. SerpApi recommends that you use gl together with location for more consistent country-specific results. DataForSEO takes a location_code, and for a mobile search it lets you pick android or ios as the operating system.

Questions to ask

Ask these questions before you choose:

  • How many keywords, locations and devices will you check, and how often?
  • How fresh must a result be? A job that can wait for a queue costs less.
  • Who fixes the job when the results page changes?
  • Does the vendor document the fields you need, such as the position type and the SERP feature list?

How to build daily tracking on a SERP API

The figure shows the five parts of a daily job. The six steps below build it.

A daily tracking job starts from a keyword list, runs once a day, calls the SERP API, stores one row per check, then compares with the last row and reports. The job runs again the next day. Daily rank tracking on a SERP API Keyword list Daily job SERP API call Store a row per check Compare and report next day: run the job again
Fig. 3. A daily tracking design for this article. Field names for the call follow the DataForSEO task_post docs.
  1. Fix the check. Choose the keyword, location, language and device, and never change them for a series. SerpApi advises that you "specify location at the city level in order to simulate a real user's search". It adds that if you omit location, the search "may take on the location of the proxy".

  2. Send the tasks. With DataForSEO, one POST call can hold up to 100 tasks. Each task is one search. Here is one task:

    {
      "keyword": "rank tracking api",
      "location_code": 2840,
      "language_code": "en",
      "device": "desktop",
      "depth": 20
    }
    
  3. Collect the results. Poll with the task GET call, or set postback_url so that the vendor sends results to you when a task completes. DataForSEO states that you can get task results "within the next 30 days for free".

  4. Find your domain. Loop over the organic items and take the first one whose domain matches yours. If none matches inside your depth, store an empty position. Do not store 0.

  5. Record failures. A failed call is not a missing ranking. Store the failure, retry it, and keep it out of the position series.

  6. Store one row per check. Never update a row. A new check adds a new row, so the table is a time series.

A table for step 6 needs these columns:

CREATE TABLE rank_check (
  keyword     text        NOT NULL,
  location    text        NOT NULL,
  device      text        NOT NULL,
  checked_at  timestamptz NOT NULL,
  status      text        NOT NULL,  -- 'ok' or 'failed'
  position    integer,
  url         text,
  features    text[]
);

Then compare each row with the last one for the same keyword, location and device. Report moves, and flag keywords that left the depth you track.

What breaks a series

  • A changed check. A new location or device starts a new series.
  • A shallow depth. A page ranked at 14 reads as missing when the depth is 10.
  • A mixed position type. If one run stores rank_group and the next stores rank_absolute, a feature appearing on the page looks like a ranking drop.
  • A stale answer. SerpApi states that its cache expires after one hour, so a cached result can be up to an hour old. Its no_cache parameter asks for a fresh search when the timing matters.

Next steps

  • Read Track keyword rankings to set a check cadence and decide what to report.
  • Read Rank tracking tools to compare the tools that run this job for you.
  • Read SEO share of voice to turn a set of positions into one metric.
  1. content-clusters

    SEO content strategy: from keyword list to publishing calendar

    An SEO content strategy turns a keyword list into clusters, briefs and a publishing calendar. Follow eight steps from goals to measurement and refresh.

  2. aeo-geo

    Generative engine optimization: how AI engines pick sources

    Generative engine optimization (GEO) is the work of getting your pages cited in AI answers. See what the GEO paper tested and what Google says about it.

  3. technical-audit

    Website crawlers: how search engines and SEO crawlers read your site

    A website crawler fetches a page, follows its links and records what it finds. See how Google's crawler and SEO crawlers work and how to crawl your site.