Try it
Run a live Claude rank check
One real call, no signup and no key. The citation list and the raw JSON come back side by side.
Endpoints & Pricing
Claude Citations, Billed Per Call
One call is one Claude-labeled answer and the sources cited in it. The rate never moves with citation count, prompt style or a domain check.
Single engine
- Up to 10 cited sources, 15 with
prompt_type=deep - Position, URL, domain, title and cited text per source
- Exact and subdomain matching on your
domain - The whole answer in
response_text
All four engines
- Claude, ChatGPT, Gemini and Perplexity in one request
- Half the price of four separate single-engine calls
- A single blended visibility score
- $10.00 an engine at Default, $0.50 an engine at Scale
Both discounts are unlocked by a single deposit — $100 for Growth, $500 for Scale — which is permanent and never downgrades. There is no monthly minimum anywhere in this pricing, and every account starts with free API calls.
Quick Start
A Claude Rank Check in One Request
The endpoint takes a question, an optional domain and an optional prompt style. There is no region or language setting to get wrong.
# The Claude answer for a keyword, plus every source cited in it curl "https://apiserpent.com/api/ai/rank/claude?q=best+project+management+software" \ -H "X-API-Key: YOUR_API_KEY" # Track a domain: match type, position and the score come back filled in curl -G "https://apiserpent.com/api/ai/rank/claude" \ --data-urlencode "q=best project management software" \ -d "domain=asana.com" -d "prompt_type=deep" \ -H "X-API-Key: YOUR_API_KEY"
# pip install requests import requests resp = requests.get( "https://apiserpent.com/api/ai/rank/claude", params={"q": "best project management software", "domain": "asana.com"}, headers={"X-API-Key": "YOUR_API_KEY"}, timeout=60, ) data = resp.json() claude = data["results"]["claude"] print("cited:", claude["target_found"], "at", claude["target_position"]) print("domains:", data["aggregate"]["all_domains_cited"])
// Node 18+ — fetch is built in. Allow a generous timeout. const qs = new URLSearchParams({ q: 'best project management software', domain: 'asana.com' }); const res = await fetch('https://apiserpent.com/api/ai/rank/claude?' + qs, { headers: { 'X-API-Key': process.env.SERPENT_KEY }, signal: AbortSignal.timeout(60000) }); const { results, aggregate } = await res.json(); const claude = results.claude; console.log(claude.target_match_type, claude.target_position, claude.total_citations); console.log(aggregate.all_domains_cited.join(', '));
{
"success": true,
"run_id": "7c1f2a90-3b4d-4c19-9d2e-1f8a6b0c4471",
"keyword": "best project management software",
"target_domain": "asana.com",
"results": {
"claude": {
"llm": "claude",
"model": "claude-sonnet-4-6",
"citations": [
{
"position": 1,
"url": "https://example.com/pm-tools-compared",
"title": "14 Project Management Tools, Compared on Price",
"cited_text": "...teams of 10 to 50 tend to outgrow a board-only tool [1]",
"url_normalized": "example.com/pm-tools-compared",
"domain": "example.com"
},
{
"position": 2,
"url": "https://asana.com/product",
"title": "Asana Product Overview",
"cited_text": "...timeline and workload views on the paid tiers [2]",
"url_normalized": "asana.com/product",
"domain": "asana.com"
}
],
"target_found": true,
"target_position": 2,
"target_match_type": "exact",
"target_matched_domain": "asana.com",
"total_citations": 11,
"response_text": "The right choice depends mostly on team size...",
"error": null
}
},
"aggregate": {
"visibility_score": 13,
"found_in": ["claude"],
"best_position": { "engine": "claude", "position": 2 },
"all_domains_cited": ["asana.com", "example.com"],
"total_latency_ms": 14210
},
"meta": { "elapsed": "14240ms", "timestamp": "2026-09-08T10:00:00.000Z" }
}
The score reads 13 rather than 100 on purpose: visibility_score is weighted per engine and blended across whatever the response holds, and Claude carries the smallest weight of the four, so a Claude-only call tops out at 15. For a single engine, target_position is the number to chart; for the full 0–100 blend, call /api/ai/rank.
Data Fields
Every Field a Claude Call Returns
Typed JSON, not an answer you have to run a regular expression over. Every key is present on every response, whatever the answer happened to contain.
Cited source fields
- citations[].position
- citations[].url
- citations[].title
- citations[].cited_text
- citations[].url_normalized
- citations[].domain
- total_citations
Domain tracking 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)
Why Claude citations
What Claude citation data is, and why it is hard to buy
Claude is the engine most vendors skip. That makes it the cheapest gap in a competitor’s reporting, and the most expensive one to fill anywhere else.
The engine most vendors do not sell
Bright Data’s Claude scraper page returns an HTTP 404. Oxylabs lists ChatGPT, Gemini and Perplexity targets and no Claude — the matching Claude URL is a 404. DataForSEO’s own LLM Scraper page says in writing that only ChatGPT and Gemini are supported. SearchApi.io, cloro.dev, SerpApi and HasData carry no Claude engine on any pricing page.
Every one of those is a single click to verify, which is the point. The four linked above were re-checked on 2026-09-10. This is not a claim about quality; it is a statement about what is on sale.
The one lookalike is a different product
ScrapingBee does publish a Claude scraper. What it reads is publicly shared claude.ai conversation pages, so it cannot tell you whether your domain is cited for a keyword you care about — there is no keyword in the transaction at all.
Worth knowing before the two get compared on price, because they are not the same purchase.
Where a per-response price does exist
Athena’s $295 a month works out at $81.94 per 1,000 responses. Otterly sells Claude as a paid add-on at $29, $109 or $439 a month on top of a $29, $189 or $489 plan. DataForSEO’s LLM Responses product does list Claude, but prices it as a base task fee of $0.0006 plus whatever the model API charges, so no all-in total is published at all.
Against the one figure that can be computed — Athena’s $81.94 — this endpoint is roughly 4 times cheaper on Default, 41 times on Growth and 82 times on Scale.
One shape, four engines, one parser
Swap claude for chatgpt, 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 adding Claude to an existing integration is a change to the URL and nothing else.
Subdomain matches are resolved for you. Ask for example.com, get docs.example.com cited, and target_match_type comes back as subdomain with the matched host beside it.
Price comparison
Who Actually Sells a Claude Answer
A price column is only useful where a product exists, so this table starts with whether the vendor sells a Claude answer at all.
| Provider | Cost per 1,000 | Sells a Claude answer? | What it requires |
|---|---|---|---|
| Serpent (ours) | $1.00 | Yes, per call | One-time $500 deposit, permanent. Free to start |
| Anthropic (own API) | $10.00 plus tokens | An answer, with no citation analysis | Token costs on top, so no per-answer total is published |
| Athena | $81.94 | Subscription only | $295 a month |
| DataForSEO LLM Responses | Not published | Yes | A base task fee of $0.0006 plus the model API’s own charge |
| DataForSEO LLM Scraper | — | No | Its page states that only ChatGPT and Gemini are supported |
| Otterly | Not published | Paid add-on | $29, $109 or $439 a month on top of a $29, $189 or $489 plan |
| ScrapingBee | — | No, a different product | Its Claude scraper reads publicly shared claude.ai pages |
| Bright Data | — | No | Its Claude scraper page returns an HTTP 404 |
| Oxylabs | — | No | ChatGPT, Gemini and Perplexity targets only |
| SearchApi.io, cloro.dev, SerpApi, HasData | — | No | No Claude engine on any of their pricing pages |
The Bright Data, Oxylabs and DataForSEO rows were re-checked against those vendors’ own live pages on 2026-09-10; the rest were checked on 2026-09-08 and are unchanged. A dash means the vendor does not sell the product, not that it is expensive. Peec and Scrunch are left out because neither publishes a rate we could read on their own pricing page.
No vendor on this table publishes a flat per-call rate for a Claude answer. That is the finding, and it takes a few minutes to check: three of them say so on their own pages, one returns a 404, and the rest have no Claude engine to price.
So the honest comparison here is not a margin. It is $1.00 per 1,000 on Scale, $2.00 on Growth and $20.00 on Default, against a $295 monthly subscription, a paid add-on stacked on a plan, or a total the vendor does not publish.
Anthropic’s own API is the closest first-party option here. It charges $10.00 per 1,000 searches plus standard token costs, so the all-in price moves with answer length — and what comes back is prose, not a citation list with positions, a domain match and a score.
Use cases
What Teams Use Claude Rank Checks For
Four jobs this endpoint gets bought for, and the field each one reads.
Covering the engine a rival cannot report on
When a competitor’s AI visibility report has no Claude column, it is usually because their tool has no Claude engine. One call per keyword closes that gap at a rate you can state in a proposal.
Store target_found and target_position per keyword per week. Two columns and a date is enough to show movement to a client.
Comparing Claude against the other three
Run the same keyword through all four engines and compare all_domains_cited. Domains that appear on one engine and nowhere else are where a single page is doing the work — or failing to.
/api/ai/rank does that in one request, and bills less than four separate calls would.
Long-form research questions
prompt_type=deep raises the citation ceiling from 10 to 15 and asks for a fuller treatment, which surfaces sources a short answer never reaches.
Useful when you are auditing a topic rather than a single keyword. Keep the style fixed inside a series so the numbers stay comparable to each other.
Proving a content change worked
Record run_id, the date and the citation list before you publish a change, then run the same keyword again afterwards. The two lists are the before and the after, in your own storage.
cited_text shows the passage each source was referenced for, so you can see which claim was picked up rather than only that the page was named.
# One row per keyword per run. The citation list is the evidence you keep. import csv, requests KEYWORDS = ["best project management software", "cheapest serp api"] with open("claude-citations.csv", "a", newline="") as fh: out = csv.writer(fh) for kw in KEYWORDS: r = requests.get( "https://apiserpent.com/api/ai/rank/claude", params={"q": kw, "domain": "example.com"}, headers={"X-API-Key": "YOUR_API_KEY"}, timeout=60, ) row = r.json()["results"]["claude"] out.writerow([ kw, row["target_position"] or 0, row["total_citations"], "|".join(c["domain"] for c in row["citations"]), ])
FAQ
Claude Rank Tracking API Questions
position, the url and its domain, the page title, a normalized URL for matching, and cited_text — the passage in the answer where the reference sits. Around that list sit total_citations, the answer itself in response_text, the public model label and, if you supplied a domain, the four target fields plus a score.
visibility_score is weighted per engine and blended across the engines in the response, and Claude carries the smallest weight of the four. A Claude-only call therefore tops out at 15, even when your domain is cited first. The number is describing the blend, not grading your page. For a single engine, chart target_position; for the full 0 to 100 figure, call /api/ai/rank.
model field with the public Claude model label, currently claude-sonnet-4-6. Record it beside each result. When the label changes, a shift in your chart has an explanation sitting in your own data rather than looking like unexplained movement.
prompt_type=deep. Neither is a promise: a narrow question routinely produces fewer, which is why total_citations exists. If nothing was cited at all, citations arrives as an empty array rather than vanishing from the response.
target_match_type to exact, while a citation of one of its subdomains sets it to subdomain and puts the matched host in target_matched_domain. Exact is always tried first, so a page on your main domain wins when both are cited.
GET /api/ai/rank covers all four in one request, with the same object nested under each engine name. The combined rate is $40.00 per 1,000 on Default, $4.00 on Growth and $2.00 on Scale — half what four separate single-engine calls would cost. A subset works too, as engines=claude,chatgpt; anything naming more than one engine bills at the combined rate.
Start tracking Claude citations
free API calls, no card and no subscription. Claude rank checks from $1.00 per 1,000 queries.
Try for Free

