The Cheapest ChatGPT Rank Tracking API for Developers

Every source a ChatGPT answer cited, where your domain sits in that list, and a visibility score. From $1.00/1K.

Try for Free View Documentation
From $1.00/1K queries Free to start Citations with positions Visibility scoring

Call GET /api/ai/rank/chatgpt with a keyword and, optionally, your domain. Every key in the response is present on every call, so one parser handles all of them.

Run a live ChatGPT rank check

One real call, no signup and no key. You get the citation list and the raw JSON beside it.

ChatGPT Citations, Priced Per Call

One call is one ChatGPT-labeled answer and every source cited in it. The rate is flat: prompt style and citation count never change it.

GET /api/ai/rank

All four engines

from $2.00
/1K queries (Scale tier)
  • ChatGPT, Claude, Gemini and Perplexity in one call
  • Half the price of four separate single-engine calls
  • One blended visibility score across the four
  • $10.00 an engine at Default, $0.50 an engine at Scale
Default$40.00/1K queries
Growth$4.00/1K queries
Scale$2.00/1K queries
Compare engines →

Growth unlocks at a one-time $100 deposit and Scale at a one-time $500 deposit. Both are permanent, neither is a monthly plan, and a tier once earned never downgrades. Every account starts with free API calls.

Your First ChatGPT Rank Check

Three parameters, one endpoint. Add domain and the response fills in your position and score; leave it out and the citation list comes back on its own.

cURL — ChatGPT rank check
# One ChatGPT rank check: the answer, and every source cited in it
curl "https://apiserpent.com/api/ai/rank/chatgpt?q=best+crm+software+for+startups" \
  -H "X-API-Key: YOUR_API_KEY"

# With a target domain: target_found, target_position and the score fill in
curl -G "https://apiserpent.com/api/ai/rank/chatgpt" \
  --data-urlencode "q=best crm software for startups" \
  -d "domain=hubspot.com" -d "prompt_type=brand" \
  -H "X-API-Key: YOUR_API_KEY"
Python — requests
# pip install requests
import requests

r = requests.get(
    "https://apiserpent.com/api/ai/rank/chatgpt",
    params={"q": "best crm software for startups", "domain": "hubspot.com"},
    headers={"X-API-Key": "YOUR_API_KEY"},
    timeout=60,
)
row = r.json()["results"]["chatgpt"]

print(row["target_found"], row["target_position"], row["total_citations"])
for c in row["citations"]:
    print(c["position"], c["domain"], c["title"])
Node.js — fetch
// Node 18+ — fetch is built in. Allow a generous timeout.
const qs = new URLSearchParams({
  q: 'best crm software for startups',
  domain: 'hubspot.com',
  prompt_type: 'deep'
});

const res = await fetch('https://apiserpent.com/api/ai/rank/chatgpt?' + qs, {
  headers: { 'X-API-Key': process.env.SERPENT_KEY },
  signal: AbortSignal.timeout(60000)
});
const { results, aggregate } = await res.json();

console.log(aggregate.visibility_score, results.chatgpt.target_position);
for (const c of results.chatgpt.citations) console.log(c.position, c.domain, c.title);
JSON Response (partial)
{
  "success": true,
  "run_id": "550e8400-e29b-41d4-a716-446655440000",
  "keyword": "best crm software for startups",
  "target_domain": "hubspot.com",
  "results": {
    "chatgpt": {
      "llm": "chatgpt",
      "model": "gpt-5.5",
      "citations": [
        {
          "position": 1,
          "url": "https://example.com/best-crm-software",
          "title": "The 12 Best CRM Platforms for Startups in 2026",
          "cited_text": "...teams under 20 seats usually land on a per-seat plan [1]",
          "url_normalized": "example.com/best-crm-software",
          "domain": "example.com"
        },
        {
          "position": 3,
          "url": "https://hubspot.com/products/crm",
          "title": "HubSpot CRM",
          "cited_text": "...a free tier that covers contact management [3]",
          "url_normalized": "hubspot.com/products/crm",
          "domain": "hubspot.com"
        }
      ],
      "target_found": true,
      "target_position": 3,
      "target_match_type": "exact",
      "target_matched_domain": "hubspot.com",
      "total_citations": 9,
      "response_text": "For a startup sales team the shortlist is usually...",
      "error": null
    }
  },
  "aggregate": {
    "visibility_score": 25,
    "found_in": ["chatgpt"],
    "best_position": { "engine": "chatgpt", "position": 3 },
    "all_domains_cited": ["example.com", "hubspot.com"],
    "total_latency_ms": 12480
  },
  "meta": { "elapsed": "12510ms", "timestamp": "2026-09-08T10:00:00.000Z" }
}

Every key above is present on every response. A run that cited nothing returns citations as an empty array rather than dropping the key, and visibility_score is null whenever no domain was passed — so a parser written once never has to branch. position is the order of first appearance in the answer, not a list index.

Every Field a ChatGPT Call Returns

Named JSON fields, not prose you have to parse. Nothing here needs a parser of your own, and nothing changes shape between calls.

Citation fields

  • citations[].position
  • citations[].url
  • citations[].title
  • citations[].cited_text
  • citations[].url_normalized
  • citations[].domain
  • total_citations

Target match fields

  • target_domain
  • target_found
  • target_position
  • target_match_type
  • target_matched_domain
  • aggregate.found_in
  • aggregate.best_position

Answer and run fields

  • run_id
  • keyword
  • llm
  • model
  • response_text
  • aggregate.visibility_score
  • aggregate.all_domains_cited
  • aggregate.total_latency_ms
  • meta.elapsed

Request parameters

  • q (the question, required)
  • keyword (alias for q)
  • domain (optional target)
  • prompt_type=standard (default)
  • prompt_type=deep (up to 15 citations)
  • prompt_type=brand (comparison form)
  • X-API-Key (request header)

What ChatGPT citation data is, and why teams buy it

An answer names a handful of sources. Being one of them is the visibility a blue-link ranking no longer guarantees.

A citation is the whole click

A results page shows ten links and the reader chooses. An answer shows a paragraph and names a few sources inside it. If your domain is not one of them, that query produced nothing for you — whatever your rank on the same keyword.

citations[] is ordered by first appearance in the answer, so position is a real ordering rather than an array index, and target_position is the number worth charting week over week.

Priced per call, not per seat

Most tools in this market sell a monthly dashboard seat and put API access behind their top plan. Athena publishes $295 a month, which works out at $81.94 per 1,000 responses. Profound’s lowest published credit rate is $44.33 per 1,000 responses, on annual billing, with its API on the Enterprise plan only.

This endpoint bills a flat rate per call at every volume. There is no plan to sign and nothing to cancel: ten calls cost ten calls.

The score has a per-engine ceiling

visibility_score is weighted by engine and blended across the engines present in the response. On a single-engine call only that engine contributes, so a ChatGPT check tops out at 35 even when your domain is cited first.

That is a property of the blend, not of your visibility. Chart target_position for one engine, and call /api/ai/rank when you want the full 0–100 figure across all four.

One response shape, four engines

Swap chatgpt for claude, gemini or perplexity in the path and every key stays where it was. The combined endpoint nests the same object under each engine name, so a parser written once reads every one of them.

Subdomain matching is handled for you: ask for example.com, get a citation of docs.example.com, and target_match_type comes back as subdomain with the matched host beside it.

What One ChatGPT Answer Costs, By Vendor

Every cell is that vendor’s lowest published rate, including the ones that beat us, next to what reaching it costs.

Provider Cost per 1,000 Unit What the lowest rate requires Free tier
Serpent (ours)$1.001 call = 1 ChatGPT answerOne-time $500 deposit, permanentFree to start
Oxylabs$0.95Per resultA custom quote. Its cheapest rate on a plan with a published price is $1.00 on $999 a month2,000 results
SearchApi.io$1.00Per search$5,000 a month100 requests
ScrapingBee$1.1215 credits per request$599 a month1,000 credits
DataForSEO LLM Scraper$1.20Per results page$50 minimum deposit, and a queue of up to 45 minutesNone
Bright Data$1.30Per record$499 a month5,000 records a month
cloro.dev$2.147 credits per request$5,000 a month500 credits a month
OpenAI (own API)$10.00 plus tokensPer search callNo flat all-in rate is publishedNone
Profound$44.331 credit = 1 responseAnnual billing; API on Enterprise onlyNone

The Oxylabs, DataForSEO, ScrapingBee and SearchApi.io rows were re-read from those pages on 2026-09-10; the rest were read on 2026-09-08 and are unchanged. Oxylabs also advertises a cheaper non-JavaScript band, but does not state whether it covers the AI targets, so its lowest published JavaScript rate is the one used here. Its plan tiles rotate in a carousel, so a single page view shows only part of the ladder.

At Scale, $1.00 per 1,000 is the lowest rate on this table that a one-time payment reaches. SearchApi.io matches it and needs $5,000 a month; Oxylabs goes lower, to $0.95, but only on a quote-only tier, and its cheapest rate on a plan with a published price is $1.00 on $999 a month. Ours needs a one-time $500 deposit that never expires and never downgrades.

At Default and Growth we are not the cheapest, and it is worth naming who is. DataForSEO’s Standard tier is $1.20 per 1,000 for a $50 minimum deposit — but that is a queue that can take up to 45 minutes rather than a call you wait on, and their live rate is $4.00 per 1,000, twice our Growth rate. ScrapingBee reaches $1.12 on a $599 monthly plan, and Oxylabs $1.00 on a $999 one or $0.95 on a custom quote.

OpenAI’s own API charges $10.00 per 1,000 search calls plus token costs, so the all-in figure moves with answer length and is not knowable before the call. What comes back is an answer, not a citation table with positions, a domain match and a score.

What Teams Run ChatGPT Rank Checks For

Four jobs that account for most traffic on this endpoint, and the field or parameter each one turns on.

Weekly brand visibility log

Run your money keywords once a week with your own domain and store target_found, target_position and total_citations. Three columns and a date is a trend line; nothing else is needed to see movement.

Keep prompt_type=standard for a series. Changing the prompt style mid-run changes the question being asked, and the numbers stop comparing like with like.

Competitor share of citations

all_domains_cited is the deduplicated domain list for the whole run, so one call per keyword gives you the full field rather than only your own placement. Count how often each rival appears across a keyword set and you have share of citations on this engine.

No domain is needed for this. Leave it out and the citation list still arrives in full; only the target fields and the score stay empty.

Buying-question audits

prompt_type=brand asks the comparison form of a query, so the answer names and ranks options instead of explaining a category. It is the shape a buyer actually types, and it is where a missing citation costs revenue rather than traffic.

Pair it with prompt_type=deep, which raises the ceiling from 10 citations to 15, when you want the long tail of sources rather than the top few.

Content briefs from cited pages

Each citation carries the page title and cited_text — the passage around the reference in the answer. That shows which claim on a page was picked up, not merely that the page was named.

Diff the cited domains for a keyword month over month and you catch a competitor page displacing yours before the traffic moves.

Bash — weekly ChatGPT citation log
# One line per keyword: date, keyword, our citation position (0 when not cited).
DOMAIN="example.com"

while IFS= read -r kw; do
  pos=$(curl -s -G "https://apiserpent.com/api/ai/rank/chatgpt" \
      --data-urlencode "q=$kw" \
      -d "domain=$DOMAIN" \
      -H "X-API-Key: $SERPENT_KEY" \
    | jq -r '.results.chatgpt.target_position // 0')
  echo "$(date -u +%F),$kw,$pos" >> chatgpt-citations.csv
done < keywords.txt

ChatGPT Rank Tracking API Questions

One call returns a ChatGPT-labeled answer for your keyword together with the sources cited in it. Each citation carries its position, url, domain, page title, the passage around the reference in cited_text, and a normalized URL for matching. Alongside them you get total_citations, the whole answer in response_text, the public model label and, when you pass a domain, target_found, target_position, target_match_type and a visibility score.
It is $20.00 per 1,000 queries on Default, $2.00 per 1,000 on Growth and $1.00 per 1,000 on Scale. Growth unlocks at a one-time $100 deposit and Scale at a one-time $500 deposit; both are permanent, neither is a monthly plan, and a tier once earned never downgrades. Every new account gets free API calls, shared across every free-eligible endpoint, and AI Ranking is one of them.
Up to 10 with the default prompt style, and up to 15 with prompt_type=deep. Those are ceilings rather than promises: a narrow question often produces fewer, and total_citations tells you how many arrived. A run that cited nothing returns citations as an empty array rather than dropping the key, so your parser never has to branch on a missing field.
Every response carries a model field with the public ChatGPT model label, currently gpt-5.5. Store it beside each result. When the label changes, a shift in your chart has an explanation in your own data instead of looking like unexplained movement.
Because visibility_score is weighted per engine and blended across the engines present in the response. A single-engine ChatGPT call therefore tops out at 35, even when your domain is cited first. For the full 0 to 100 blend, call /api/ai/rank, which runs all four engines. For one engine, chart target_position instead: it is the number that actually moves.
standard asks the query directly and is the right default for a repeatable series. deep asks for a fuller treatment and raises the citation ceiling from 10 to 15. brand asks the comparison form of the query, so the answer names and ranks options rather than explaining the category. Keep one style per series, because changing it changes the question being asked.
Yes, and it tells you which kind of match happened. A citation of the exact domain you passed sets target_match_type to exact. A citation of one of its subdomains sets it to subdomain and puts the matched host in target_matched_domain. Exact is tried first, so a page on your main domain always wins over a subdomain when both are cited.
Yes. GET /api/ai/rank runs all four and nests the same object under each engine name. It costs $40.00 per 1,000 on Default, $4.00 on Growth and $2.00 on Scale, which is half the price of running four single-engine calls. Add engines=chatgpt,gemini to run a subset; any call naming more than one engine bills at that combined rate.
Usually 10 to 25 seconds. That is longer than a search call and normal for this endpoint, so set a client timeout of at least 60 seconds. If you want all four engines, use the combined endpoint rather than four separate single-engine calls: it is half the price.
Yes. Every account starts with free API calls and AI Ranking draws from that shared pool, so you can run a real check before adding any credits. After the free calls are used the endpoint bills per call at your tier. There is nothing to cancel afterwards, because there is no subscription to begin with.

Start tracking ChatGPT citations

free API calls, no card and no subscription. ChatGPT rank checks from $1.00 per 1,000 queries.

Try for Free

Related guides

More on earning and measuring citations inside ChatGPT.

ChatGPT Atlas SEOHow to get cited in ChatGPT Atlas in 2026. Freshness Wins CitationsWhat a recent publish date is worth in an AI answer. 14 AI Rank Trackers AuditedWhich tools publish their method, and which do not. AI Visibility ScoringWhat a visibility score is actually measuring. Citation Tracker in PythonA runnable tracker across all four engines. AI Visibility Tools ComparedSix tools tested for tracking brand presence in AI answers. AI Rank APIAll four engines behind one endpoint and one key. Claude Rank APIThe same response shape for Claude answers.