AI Visibility API
AI Visibility API for ChatGPT, Perplexity, Copilot and Gemini
Searlo's AI visibility API sends your prompts to ChatGPT, Perplexity, Microsoft Copilot and Google Gemini through their live consumer interfaces and returns each answer as JSON, with its citations and the domains it cited. Count those across prompts and runs and you have brand mentions and share of voice in AI search.
{ "searchTime": 0.17, "totalResults": 85000, "page": 1, "organic": [ { "position": 1, "title": "31.10. Connection Pools and Data Sources", "link": "www.postgresql.org/docs/…", "domain": "postgresql.org", "snippet": "For an environment without an application se…" }, { "position": 2, "domain": "medium.com", … }, { "position": 3, "domain": "stackoverflow.blog", … } ], "credits": 1}What is an AI visibility API?
An AI visibility API asks AI answer engines your questions and returns their answers and cited sources as structured data, so you can measure how often a brand is named and a domain is cited. Searlo's covers ChatGPT, Perplexity, Microsoft Copilot and Google Gemini at 2 to 8 credits per answer: $0.60 to $2.40 per 1,000 answers at $0.30 per 1,000 credits.
Each answer is produced live in the engine's consumer interface, so it is what a real visitor sees. Answers vary between runs, and a live one typically takes 10 to 30 seconds.
- Credits per answer
- ChatGPT 8, Microsoft Copilot 8, Google Gemini 4, Perplexity 2
- Per 1,000 answers
- $0.60 to $2.40 at $0.30 per 1,000 credits; $0.40 to $1.60 on the Enterprise pack— our pricing
- Latency and caching
- Typically 10-30 s live; repeats within 1 hour come from cache unless cache=false
- AI citations vs Google's top 10
- On average 12% of URLs cited by ChatGPT, Gemini and Copilot rank in Google's top 10 for the same query; Perplexity 28.6% (15,000 queries, August 2025)— Ahrefs
- Free to start
- 3,000 credits, no card— our pricing
Third-party figures on this page last verified against the sources linked above. Prices change; if you find one of these stale, tell us and we will correct it.
What an AI visibility API measures
Ask an AI assistant which product to buy and the reply names a few brands and cites a handful of sources. AI visibility, what LLM visibility tracking and GEO tools measure, is whether you are in that reply, in three ways: mentions (the answer names you), citations (it links to your pages) and share of voice (the fraction of answers, across a prompt set, that cite your domain).
Google rankings won't tell you. In Ahrefs' study of 15,000 long-tail queries (August 2025, checked 2026-09-29), on average only 12% of the URLs cited by ChatGPT, Gemini and Copilot ranked in Google's top 10 for the same query, against 28.6% for Perplexity. Each engine has to be asked, and measured, on its own.
Send a prompt to /search/ai/chatgpt, /search/ai/perplexity, /search/ai/copilot or /search/ai/gemini and Searlo asks that engine in its public consumer interface, waits for the answer, and returns the text, every citation and a sources array of the unique cited domains. The response shape is the same for all four engines.
Searlo is independent and is not affiliated with, endorsed by or sponsored by OpenAI, Perplexity, Microsoft or Google. ChatGPT, Perplexity, Microsoft Copilot, Gemini and Google are trademarks of their respective owners.
Four engines, one response shape
| Engine | Endpoint | Credits | Per 1,000 answers | What you get |
|---|---|---|---|---|
| ChatGPT | GET /search/ai/chatgpt | 8 | $2.40 | The logged-out chatgpt.com answer, its citations and cited domains |
| Microsoft Copilot | GET /search/ai/copilot | 8 | $2.40 | The Copilot answer on Bing, with citations and citation pills |
| Google Gemini | GET /search/ai/gemini | 4 | $1.20 | The signed-out Gemini web app's answer, citations and markdown |
| Perplexity | GET /search/ai/perplexity | 2 | $0.60 | The perplexity.ai answer, numbered citations, follow-ups and thread link |
Ask any engine in one request
Identical for all four engines; only the last path segment changes. A live answer typically takes 10 to 30 seconds, so allow a generous timeout.
# ChatGPT (8 credits)
curl "https://api.searlo.tech/api/v1/search/ai/chatgpt?q=best+crm+for+a+small+business&gl=us&hl=en" \
-H "x-api-key: YOUR_API_KEY"
# The same prompt on Perplexity (2 credits): only the engine changes
curl "https://api.searlo.tech/api/v1/search/ai/perplexity?q=best+crm+for+a+small+business&gl=us&hl=en" \
-H "x-api-key: YOUR_API_KEY"import requests
API = "https://api.searlo.tech/api/v1/search/ai"
HEADERS = {"x-api-key": "YOUR_API_KEY"}
params = {"q": "best crm for a small business", "gl": "us", "hl": "en"}
for engine in ["chatgpt", "perplexity", "copilot", "gemini"]:
resp = requests.get(f"{API}/{engine}", headers=HEADERS, params=params, timeout=180)
resp.raise_for_status()
data = resp.json()
print(f"{engine:<11} {len(data['citations'])} citations {data['sources']}")const API = "https://api.searlo.tech/api/v1/search/ai";
const params = new URLSearchParams({ q: "best crm for a small business", gl: "us", hl: "en" });
for (const engine of ["chatgpt", "perplexity", "copilot", "gemini"]) {
const resp = await fetch(`${API}/${engine}?${params}`, {
headers: { "x-api-key": "YOUR_API_KEY" },
signal: AbortSignal.timeout(180_000), // live answers typically take 10-30 s
});
if (!resp.ok) throw new Error(`${engine}: HTTP ${resp.status}`);
const data = await resp.json();
console.log(engine, data.citations.length, "citations", data.sources);
}Example response (illustrative)
Real keys, illustrative values, shortened. This one is ChatGPT; Copilot adds citationPills, and Perplexity fills threadUrl and related.
{
"success": true,
"searchParameters": {
"q": "best crm for a small business",
"type": "ai",
"engine": "chatgpt",
"mode": "ui",
"gl": "us",
"hl": "en"
},
"answer": "Popular choices for small businesses include HubSpot CRM, Zoho CRM and Pipedrive. The right one depends on team size, budget and how much of the sales process you want to automate…",
"answerMarkdown": "Popular choices for small businesses include HubSpot CRM, Zoho CRM and Pipedrive. The right one depends on team size, budget and how much of the sales process you want to automate…",
"citations": [
{ "index": 1, "url": "https://www.pcmag.com/picks/…", "title": "The Best CRM Software", "domain": "pcmag.com" },
{ "index": 2, "url": "https://www.forbes.com/advisor/…", "title": "Best CRM Software For Small Business", "domain": "forbes.com" },
{ "index": 3, "url": "https://www.reddit.com/r/smallbusiness/…", "title": "What CRM do you use?", "domain": "reddit.com" }
],
"sources": ["pcmag.com", "forbes.com", "reddit.com"],
"related": [],
"model": "",
"threadUrl": null,
"complete": true,
"fetchedAt": "2026-09-29T09:41:12.087Z",
"source": "searlo.tech(chatgpt)",
"cached": false
}Response fields
| Key | Type | What it holds |
|---|---|---|
| answer | string | The answer as plain text |
| answerMarkdown | string | Markdown: Perplexity keeps its [n] markers, Gemini returns its own markdown, ChatGPT and Copilot the rendered text |
| citations | array | Each cited source as { index, url, title, domain } |
| sources | array | Unique cited domains, www. removed: count these for share of voice |
| citationPills | array | Copilot only: its in-answer source chips |
| related | array | Follow-up questions, where the engine shows them |
| model | string | Perplexity's reported model, a gemini-flash (anonymous) tag on Gemini, empty on ChatGPT and Copilot |
| threadUrl | string or null | Perplexity's thread link; null elsewhere |
| complete | boolean | false if the capture stopped before the answer finished; such answers are never cached |
| cached | boolean | true when served from the 1-hour cache |
Why an AI answer costs more than a search
A Google web search on Searlo is 1 credit; an AI answer is 2 to 8. There is no feed of the answer an engine would give. To see it you have to ask the engine in the interface its users see and wait for it to finish writing, so every live call is a real browser session in that interface, with retries when the engine pushes back.
That is the expensive way, and it is the point: you get the answer the engine's users get. A developer API tells you what a model says to your code, not what the product shows people. Each engine costs a different amount to run live, so each is priced on its own.
Every successful call is charged at the engine's rate, live or cached; refused or failed calls (HTTP 429 or 503, success: false) are refunded automatically. Packs are one-time purchases with no subscription, and new users' credits are valid for 90 days.
What 1,000 answers cost on each pack
| Pack | Per 1,000 credits | Perplexity (2) | Gemini (4) | ChatGPT, Copilot (8) |
|---|---|---|---|---|
| Micro, $3.99 | $0.80 | $1.60 | $3.19 | $6.38 |
| Starter, $9.99 | $0.50 | $1.00 | $2.00 | $4.00 |
| Builder, $29.99 | $0.40 | $0.80 | $1.60 | $3.20 |
| Scale, $74.99 | $0.30 | $0.60 | $1.20 | $2.40 |
| Pro, $199.99 | $0.22 | $0.44 | $0.89 | $1.78 |
| Enterprise, $799 | $0.20 | $0.40 | $0.80 | $1.60 |
Share of voice from the sources field
Every response carries sources, the unique domains cited in that answer, so share of voice is a count: the answers whose sources include your domain, divided by the answers collected, per engine. Mentions work the same way on the answer text. Count subdomains too, since sources keeps hostnames such as support.yourbrand.com with only www. removed.
To budget: 100 prompts on all four engines, three samples each, once a week, is 6,600 credits a week. That is $1.98 at $0.30 per 1,000 credits, or 85,800 credits (about $25.74) over a 13-week quarter.
The share-of-voice workflow
The loop AEO agencies and SEO tools run each week.
- 01Write the prompt set20 to 200 questions buyers really ask: category questions, comparisons and problems. Google Autocomplete suggestions make a good seed.
- 02Ask every engine, several timesThree to five runs per prompt and engine with cache=false, sent one after another so that each is an independent answer.
- 03Store sources and mentionsKeep each answer's sources and citations, and whether it names your brand and each competitor.
- 04Compute rates per engineShare of voice is answers citing your domain divided by answers collected; mention rate is answers naming your brand divided by answers collected. Never average across engines.
- 05Repeat on a scheduleWeekly is typical. Compare rates week over week, not single answers.
- 06Read the pages that winScrape the most-cited URLs with the web scraping API and compare them with your own pages.
Share of voice in Python
Three runs per prompt and engine with cache=false, then the rate at which your domain is cited and your brand is named, plus the five most-cited domains per engine. One run as written: 3 prompts × 3 samples × 22 credits = 198 credits, about 6 cents.
share_of_voice.py
"""Share of voice across four AI engines, from the sources field."""
import time
from collections import Counter
import requests
API = "https://api.searlo.tech/api/v1/search/ai"
HEADERS = {"x-api-key": "YOUR_API_KEY"}
ENGINES = ["chatgpt", "perplexity", "copilot", "gemini"]
PROMPTS = [
"best crm for a small business",
"easiest crm to set up without an admin",
"crm with the best free plan",
]
BRAND, DOMAIN = "YourBrand", "yourbrand.com" # replace with your own
SAMPLES = 3 # answers vary between runs, so sample each prompt
def ask(engine, prompt, attempts=3):
for _ in range(attempts):
r = requests.get(
f"{API}/{engine}",
headers=HEADERS,
params={"q": prompt, "gl": "us", "hl": "en", "cache": "false"},
timeout=180, # a live answer typically takes 10-30 s
)
if r.status_code in (429, 503): # refused or failed: refunded
time.sleep(int(r.headers.get("retry-after", 30)))
continue
r.raise_for_status()
return r.json()
return None
def cites(sources, domain):
# sources holds hostnames without "www.", so count subdomains too
return any(d == domain or d.endswith("." + domain) for d in sources)
for engine in ENGINES:
answers = cited = named = 0
domains = Counter()
for prompt in PROMPTS:
for _ in range(SAMPLES): # one after another, never in parallel
data = ask(engine, prompt)
if data is None:
continue
answers += 1
domains.update(data["sources"]) # each domain once per answer
cited += cites(data["sources"], DOMAIN)
named += BRAND.lower() in data["answer"].lower()
if not answers:
continue
print()
print(f"{engine}: {answers} answers")
print(f" {DOMAIN} cited in {cited / answers:.0%}, {BRAND} named in {named / answers:.0%}")
for domain, n in domains.most_common(5):
print(f" {domain:<28}{n / answers:>5.0%}")Honest limits
Live consumer products come with trade-offs worth planning for.
- Latency: typically 10 to 30 seconds per live answer, sometimes more. Run jobs in the background; the samples allow 180 seconds.
- Variation: wording, brands and sources change between runs of one prompt. Sample, and report rates.
- Caching: the same engine, prompt, gl and hl within 1 hour returns the stored answer (cached: true). cache=false buys an independent, billed run.
- In-flight duplicates: identical requests sent at the same moment can be merged into one run, and both are billed. Send repeat samples one after another.
- Empty citations: ChatGPT and Gemini cite only when they search the web, so a general-knowledge prompt can return none.
- Capacity and country: a full engine returns 429 with Retry-After, and the call is refunded. gl routes through an exit in that country when one is available, so treat it as best-effort.
Measure the Google side too
Google AI Overviews
The AI Overview in a full Google results page: GET /serp, AI Overview included by default, 3 credits per page, plus organic results, ads and People Also Ask.
Rank tracking
Google positions for the same keywords, to see where rankings and AI citations part ways.
Web scraping
Fetch the pages the engines cite as markdown and read what they quote.
Google Autocomplete
Real Google suggestions at 0.5 credits each, to seed a prompt set.
One page per engine
ChatGPT scraper API
Logged-out chatgpt.com answers and citations. 8 credits per answer.
Perplexity scraper API
perplexity.ai answers with numbered citations and thread links. 2 credits per answer.
Copilot scraper API
Microsoft Copilot answers on Bing, with citation pills. 8 credits per answer.
Gemini scraper API
Signed-out Gemini web app answers and citations. 4 credits per answer.
Who uses an AI visibility API
- AEO and GEO agencies reporting mentions, citations and share of voice per client
- SEO platforms adding AI visibility next to rank tracking
- AI search monitoring that flags a competitor entering your category's answers
- PR teams checking which publications the engines cite about a brand
- Content teams finding the pages AI answers quote
- Researchers measuring how answers vary across engines and over time
FAQ
AI visibility API: FAQ
Which AI engines does the AI visibility API cover?
Four: ChatGPT (the logged-out chatgpt.com answer), Microsoft Copilot (the Copilot answer on Bing), Google Gemini (the signed-out web app) and Perplexity (perplexity.ai). Google AI Overviews come from the full SERP endpoint: GET /serp, which includes them by default, at 3 credits per results page.
How much does it cost to track a brand across AI answers?
Per answer, Perplexity is 2 credits, Gemini 4, ChatGPT 8 and Copilot 8: $0.60, $1.20, $2.40 and $2.40 per 1,000 answers at $0.30 per 1,000 credits. One prompt asked three times on all four engines is 66 credits, about 2 cents. Packs are one-time purchases, and new accounts get 3,000 free credits with no card.
Why do I get a different answer each time?
The engines are non-deterministic, and Searlo returns what they actually said rather than smoothing it. That variation is what you are measuring: ask each prompt several times with cache=false and report how often a brand is cited, not whether it was cited once.
How do I calculate share of voice from the response?
Use the sources array, which lists each cited domain once per answer. A domain's share of voice is the number of answers whose sources include it (subdomains counted) divided by the number of answers collected, per engine and prompt set.
What rate limits apply, and what if a call fails?
AI answer calls share your account's search rate limit, the same on every plan: 300 req/s, 10,000/min and 900,000/day. In practice the tighter limit is engine capacity: a full engine returns 429 with a Retry-After header, and a failed run returns 503. Both come back with success: false, and neither is charged.
Is this an official ChatGPT, Perplexity, Copilot or Gemini API?
No. Searlo is independent and not affiliated with OpenAI, Perplexity, Microsoft or Google. Where those companies sell developer APIs, the APIs give you their models; Searlo returns the answers their public consumer products show, which is what AI visibility tracking needs.
Start measuring AI visibility
3,000 free credits and no card: enough for 375 ChatGPT answers or 1,500 Perplexity answers against your own prompt set.