Skip to main content

Rank Tracking API: What Daily Keyword Positions Really Cost to Build

Updated 13 min readMarkdown

A rank tracking API either exposes positions that a rank tracker has already collected, or returns search results that your own code turns into positions. Building on a SERP API gives more control, and the raw request charges can be small, but those charges are not the full cost of running a tracker. At DataForSEO's published Standard queue rate, 100 keywords checked daily to the top 10 come to $1.80 in API requests over a 30 day month. Checking 1,000 keywords daily to the top 100 comes to $180. Both figures assume one location, one language and desktop results only. Below are the formula behind them, the trade-off against a managed product, and an untested Python starting point.

This post includes affiliate links; I may receive compensation if you purchase products or services from the different links provided in this article. An AI assistant helped me draft it. Prices are quoted from official pages checked 1 November 2026, listed under Sources.

Two kinds of rank tracking API

A managed rank tracker and a SERP API can both answer "where does this domain rank?", but they do very different amounts of work before that answer reaches you. Treat the table as a checklist, since included features still need confirming for each product.

Rank tracker product with an API SERP API you build on
Examples SE Ranking DataForSEO, SerpApi, Serper, SearchApi, Bright Data
What comes back Tracked positions, with history and reports that depend on the product Search results as JSON, which your code converts into positions
Ranking history Kept by the vendor; confirm what its API exposes Yours to collect, store and back up
Billing to examine Subscription, credits and API access terms Requests, result depth and optional features
Work to plan Connecting the API to your reports Scheduling, storage, domain matching and reporting
Flexibility Bounded by the vendor's tracking options Keywords, locations, devices and schedule are your choice

When the goal is dashboards and history without a data pipeline, the managed route is shorter. SE Ranking's Rank Tracker API page describes daily positions, ranking history, competitor positions and a recheck endpoint for on demand checks. Its API pricing page splits access in two. The credit based Data API starts with a €45 Wallet for 250K credits. The Project API, which manages tracked keywords, draws on subscription project limits rather than credits, and the pricing page lists it with the API add-on, listed at €25 a month on monthly billing, which requires an existing Core, Growth or Enterprise subscription. That subscription price was not part of this comparison, so no per position cost is worked out for SE Ranking here.

Similarweb also publishes rank tracking API documentation, and Bright Data markets its SERP API for rank tracking. Neither price was checked for this article.

For a product feature, an internal reporting pipeline or custom client output, a SERP API lets you decide how results are requested, matched and stored. The price of that control is owning everything that happens after the response arrives.

How a SERP based rank tracker works

  1. Keep a list of keywords, each paired with a location, a language and a device.
  2. On a schedule, send each combination to a Google organic SERP endpoint.
  3. Collect the results and find the first organic result whose domain matches the site being tracked.
  4. Save the date, keyword, position and ranking URL. When no match appears within the requested depth, store that as "not found in top N".
  5. Build reports from the stored history.

The request is the easy bit. A dependable tracker also needs consistent location and device settings, retries, duplicate prevention, a policy for subdomains and redirects, and history that later reports can compare like for like. A domain missing from the requested depth is not necessarily absent from Google altogether.

The rank tracking API cost formula

DataForSEO's Google Organic SERP pricing bills per SERP, where one SERP means 10 results:

Mode Price per SERP Per 1,000 SERPs Published turnaround
Standard $0.0006 $0.60 About 5 minutes on average, 45 minute target
Priority $0.0012 $1.20 Up to 1 minute on average
Live $0.002 $2.00 Up to 6 seconds on average

Requesting more than 10 results adds one base price for each further block of 10, and depth rounds up to the next ten. A top 100 check therefore bills as 10 SERPs: $0.006 at Standard, $0.012 at Priority and $0.02 at Live. The same page states that location, language and device do not change the price, though checking more combinations still creates more tasks.

For one language and the same requested depth on every check, estimate the base charge as:

keywords × devices × locations × checks per month × (depth / 10, rounded up) × price per SERP

With several languages, count every keyword, location, language and device combination separately. The formula leaves out optional paid features, repeated submissions and the engineering needed to run the tracker.

A daily tracker does not need answers within seconds. Results that arrive within the Standard turnaround are usually adequate for overnight collection, and the Live rate is about 3.3 times the Standard rate.

Worked monthly bills

Assumptions: Standard queue, desktop unless stated, one location and language, a 30 day month, and no optional paid features.

Scenario Tasks per month SERPs billed Standard Live
100 keywords, daily, top 10 3,000 3,000 $1.80 $6.00
500 keywords, daily, desktop + mobile, top 30 30,000 90,000 $54.00 $180.00
1,000 keywords, daily, top 100 30,000 300,000 $180.00 $600.00
2,000 keywords, weekly, top 100 8,000 80,000 $48.00 $160.00

In the second row, 500 keywords on two devices for 30 days make 30,000 tasks, and each top 30 task bills as 3 SERPs. Depth multiplies the bill quickly. The last row shows frequency counts as well: checking 2,000 keywords daily would mean 60,000 checks a month, 7.5 times the 8,000 weekly checks.

These figures are usage drawn from a prepaid balance. The pricing page sets a $50 minimum top up and says the balance does not expire, so even the $1.80 example begins with a $50 payment.

If the requested depth exceeds the results Google actually returns, the organic pricing page says the charge is refunded for the unavailable part. Collecting a queued task's results costs nothing, since only setting the task is billed, and the task_get documentation allows results to be retrieved for free within 30 days. Free retrieval does not reduce the charge for the request itself.

What adds cost

  • AI Overview loading: asynchronous AI Overview loading adds one base price, so a top 10 Standard check costs $0.0012.
  • Search operators: each operator multiplies the base price by 5.
  • Pixel rankings: calculate_rectangles adds one base price.
  • People Also Ask clicks: each click adds $0.00015.

A plain position tracker needs none of these. Leave them off unless a report depends on them.

How this compares with a monthly SERP plan

The 3,000 searches in the first scenario fit within the 5,000 that SerpApi's Developer plan includes for $75 a month. SerpApi's Free plan allows 250 searches a month and Starter allows 1,000 for $25, so neither covers that volume. On DataForSEO the same workload is $1.80 in usage at Standard or $6.00 at Live. This compares one published plan, not every SerpApi option.

Serper's $50 Starter pack provides 50,000 credits valid for 6 months, and the homepage offers 2,500 free queries. If one credit covers one check in your request configuration, 3,000 checks a month would use 18,000 credits across six months. Confirm credit consumption for the exact request before treating credits as checks.

Depth changes these comparisons. SerpApi's documentation pages through results with a start offset of 0, 10, 20 and so on, so a top 100 check may take up to ten searches. Its pricing page also counts an empty result set or a 100 result page as one search, so confirm what one search returns for your parameters.

There are good reasons to choose a competitor. SerpApi publishes an hourly throughput for every plan and Serper typically answers in 1 to 2 seconds, which matters for an interactive "check now" button. Serper's larger packs also fall below DataForSEO's $0.60 Standard rate per 1,000: Scale works out to $0.50 and Ultimate to $0.30, provided one credit covers each request and the credits are used within 6 months. The choice should rest on the cost and reliability of the whole workflow, not on the price of a single first page request.

A minimal tracker in Python

The sketch below submits tasks to DataForSEO's Standard queue and runs a single collection pass. It is untested. It was written from the published documentation and has not been run against a live account, so treat it as the shape of a collector rather than a production rank tracker.

Its limits are deliberate and worth knowing before adapting it:

  • It waits once instead of polling until every submitted task completes.
  • It reads whatever ready tasks the account exposes, not only the batch it just sent. The tasks_ready endpoint lists up to 1,000 tasks completed in the previous three days, and each task stays listed until collected.
  • It prints results instead of storing history.
  • It has no retry logic, deduplication or monitoring.

Credentials come from the DFS_LOGIN and DFS_PASSWORD environment variables. Using the task tag to keep your own keyword identifier is a sensible next step.

import os
# Untested sketch written from the docs.dataforseo.com pages listed below.
import time
import requests

API = "https://api.dataforseo.com/v3"
AUTH = (os.environ["DFS_LOGIN"], os.environ["DFS_PASSWORD"])
TARGET = "example.com"

def post_tasks(keywords, depth=100):
    tasks = [
        {
            "keyword": kw,
            "location_code": 2840,   # United States
            "language_code": "en",
            "device": "desktop",
            "depth": depth,
            "tag": kw,
        }
        for kw in keywords
    ]
    for i in range(0, len(tasks), 100):  # max 100 tasks per POST
        r = requests.post(f"{API}/serp/google/organic/task_post",
                          auth=AUTH, json=tasks[i:i + 100])
        r.raise_for_status()

def ready_ids():
    r = requests.get(f"{API}/serp/google/organic/tasks_ready", auth=AUTH)
    r.raise_for_status()
    ids = []
    for task in r.json().get("tasks") or []:
        for item in task.get("result") or []:
            ids.append(item["id"])
    return ids

def position(task_id):
    r = requests.get(f"{API}/serp/google/organic/task_get/regular/{task_id}",
                     auth=AUTH)
    r.raise_for_status()
    result = r.json()["tasks"][0]["result"][0]
    for item in result.get("items") or []:
        if item.get("type") != "organic":
            continue
        domain = item.get("domain") or ""
        if domain == TARGET or domain.endswith("." + TARGET):
            return result["keyword"], item["rank_group"], item["url"]
    return result["keyword"], None, None

if __name__ == "__main__":
    post_tasks(["rank tracking api", "serp api pricing"])
    time.sleep(300)  # Standard queue averages about 5 minutes
    for task_id in ready_ids():
        print(position(task_id))

A production version should record submitted task IDs, poll until those tasks finish, and write each result to a database keyed by date, keyword, location, language and device. The documentation allows up to 100 tasks in one POST and up to 10,000 calls a minute to task_post, while tasks_ready is limited to 20 calls a minute. Above 1,000 tasks a minute, DataForSEO recommends pingbacks or postbacks instead of polling.

rank_group or rank_absolute?

The task_get documentation defines rank_group as the position among elements of the same type and rank_absolute as the position among all elements found on the SERP. Its own example shows an organic result with rank_group 3 and rank_absolute 4, because another element sits above it. Most organic tracking reports use rank_group. Keep rank_absolute as well if the analysis needs to show when SERP features push organic listings down the page. The regular endpoint returns only organic, paid and featured snippet items, so gaps in rank_absolute are expected there.

Accuracy notes

  • Personalization, location and device all change results, so pin each check to a fixed location, language and device.
  • Positions can shift between days for reasons outside the tracked site. Reporting a rolling average alongside the daily figure can make trends easier to read.
  • Check the ranking URL as well as the domain. When the URL changes, it may point to cannibalization or a redirect.
  • "Not found in top 100" differs from position 101. Store it as a separate state.

To run the sketch against real keywords, it needs API credentials from a DataForSEO account, set as DFS_LOGIN and DFS_PASSWORD.

The pricing page also lists a Sandbox that returns sample responses, which helps build and test the parser before any paid tasks are sent.

FAQ

Is there a free rank tracking API?

Yes, for a limited workload. SerpApi lists 250 searches a month on its Free plan, Serper offers 2,500 free queries, and SE Ranking's API pricing page offers a 14 day trial with 100K credits. DataForSEO's pricing page lists a $1 trial credit for new accounts. At the Standard top 100 rate of $0.006, that is enough for about 166 checks.

Which rank tracking API fits this project?

Start with the output required. For stored positions, history and reports, evaluate a finished rank tracker with an API and confirm which features that API exposes. For raw results inside your own application, evaluate a SERP API. DataForSEO's Standard queue costs $0.0006 per SERP in the pricing used here, but a unit price alone does not settle the choice.

How often should rankings be checked?

Daily suits competitive keywords and close monitoring. Weekly is often enough for long tail terms and cuts the request count to one seventh.

Can rankings be tracked in other countries and languages?

Yes. DataForSEO's task_post accepts location, language and device fields, and its organic pricing page says those settings do not change the price. Each combination is still a separate task.

Sources

Fact used Source
Standard, Priority and Live prices, depth, refund, free collection and paid features https://dataforseo.com/pricing/google-serp/google-organic-serp-api
$50 minimum top up, balance terms, $1 trial credit and Sandbox https://dataforseo.com/pricing
task_post limits, depth and tag fields https://docs.dataforseo.com/v3/serp/google/organic/task_post/
tasks_ready behavior and limits https://docs.dataforseo.com/v3/serp/google/organic/tasks_ready/
task_get billing, result retention, item types and rank fields https://docs.dataforseo.com/v3/serp/google/organic/task_get/regular/
SerpApi plans, throughput and search counting https://serpapi.com/pricing
SerpApi start offset https://serpapi.com/search-api
Serper packs, credit validity, response time and free queries https://serper.dev/
SE Ranking API credits, Wallet, add-on and Project API terms https://seranking.com/api-pricing.html
SE Ranking Rank Tracker API features https://seranking.com/rank-tracker-api.html
Similarweb rank tracking API documentation (named only, not priced) https://developers.similarweb.com/docs/rank-tracking-api-introduction
Bright Data SERP API for rank tracking (named only, not priced) https://brightdata.com/products/serp-api/rank-tracking

No comments yet. Be the first to comment.