One prompt in.
Every GEO metric out.
Other APIs hand you a scraped AI answer and leave the hard part to you. API for GEO returns the answer and the whole computed layer: brands mentioned and ranked, citations, share of voice, sentiment, themes, per-brand perception, shopping results, fan-out questions.
Enrichment pipeline
Six stages run before the response leaves us
prompt
A question, a model list, a country and a language. One credit per model, per locale.
US · en · 1 credit
run
Executed natively on each engine, in that country and language, with no translation or proxy in between.
parse
Answer text, every cited URL, the domain and its source category, pulled out of the response.
resolve
Aliases collapsed onto one entity, mention positions counted against your brand list.
→ loopwork
score
Share of voice, sentiment 0–100, theme clusters and per-brand perception inside each theme.
payload
One JSON object. Every metric already computed, ready to store, aggregate and resell.
{
answer_text: "…"
entities: [ 4 ]
share_of_voice: 42.0
} 200Integration
A single POST, all of it
Request bodies carry filters, sorting and paging, so a client-facing report takes one call instead of twelve. Unknown fields are rejected rather than silently dropped, so a typo fails loudly in your CI.
- aREST + JSON, offset pagination, deterministic sort fields
- bScope filters recompute every aggregate and denominator
- cSame data reachable from Claude or Cursor via the MCP server
curl -X POST https://api.apiforgeo.com/v1/prompts/run \
-H "Authorization: Bearer $API_FOR_GEO_KEY" \
-H "x-project-id: $PROJECT_ID" \
-H "Content-Type: application/json" \
-d '{
"prompt": "best project management tool for creative agencies",
"models": [
"chatgpt",
"perplexity",
"google-ai-mode"
],
"country": "US",
"language": "en",
"enrich": [
"entities",
"citations",
"sentiment",
"themes",
"shopping",
"fanouts"
]
}'import os, requests
API = "https://api.apiforgeo.com/v1"
H = {"Authorization": f"Bearer {os.environ['API_FOR_GEO_KEY']}",
"x-project-id": os.environ["PROJECT_ID"]}
r = requests.post(f"{API}/prompts/run", headers=H, json={
"prompt": "best project management tool for creative agencies",
"models": [
"chatgpt",
"perplexity",
"google-ai-mode"
],
"country": "US",
"language": "en",
"enrich": [
"entities",
"citations",
"sentiment",
"themes",
"shopping",
"fanouts"
]
}, timeout=90)
print(r.json())const API = "https://api.apiforgeo.com/v1";
const headers = {
Authorization: `Bearer ${process.env.API_FOR_GEO_KEY}`,
"x-project-id": process.env.PROJECT_ID,
"Content-Type": "application/json",
};
const post = (path, body) =>
fetch(API + path, { method: "POST", headers, body: JSON.stringify(body) }).then((r) => r.json());
console.log(await post("/prompts/run", {
"prompt": "best project management tool for creative agencies",
"models": [
"chatgpt",
"perplexity",
"google-ai-mode"
],
"country": "US",
"language": "en",
"enrich": [
"entities",
"citations",
"sentiment",
"themes",
"shopping",
"fanouts"
]
}));The answer is the raw material. The computed layer is the product.
Every run is parsed, resolved and scored before it reaches you. Entities are matched to a project's brand and alias list, positions are counted, sources are classified, sentiment and themes extracted per brand. You integrate one endpoint instead of building an NLP pipeline.
Answer & citations
Full response text, every cited URL, the domain, its source category and whether the page mentions the brand.
Entities & ranking
Brands, competitors, people and products, deduplicated through aliases, with mention count and average position.
Sentiment
A 0–100 score and label per brand per response, with positive / neutral / negative counts and a timeseries.
Share of voice
Each entity's share of total mentions in scope, so a client dashboard can be computed server-side in one call.
Themes & perception
Clustered themes in the answer (price, support, integrations) and how each brand is framed inside each theme.
Shopping & social
Products, merchants, prices and ratings when the answer carries shopping results; cited YouTube videos and channels.
Ten endpoints, one key
All ten families read the same runs. Filters are scope filters: narrow the set and every aggregate recomputes against it.
POST /v1/visibility/entities Mention rate, share of voice, average position and timeseries for any brand across every model in scope.
REST + JSONoffset pagingscope filtersMCP toolWho builds on it
Ship a GEO product within a sprint
Add a GEO module to your platform
Add AI visibility to an existing rank-tracking product in a sprint. White-label, per-workspace project isolation, resale allowed.
Read the pattern → AgenciesClient reporting that survives an audit
Per-client prompt sets, per-model breakdowns and citation lists piped straight into your reporting stack or a sheet.
Read the pattern → E-commerce & brandsKnow which merchant wins the recommendation
Product, merchant and price data from shopping answers, joined to your catalogue by SKU or external id.
Read the pattern →Pay per credit. One credit is one enriched run.
A credit covers one prompt, on one model, in one locale: entities, citations, sentiment, themes and shopping enrichment included. No per-metric upsell, no seat licence.
FAQ
Generative Engine Optimization, defined
What is GEO (Generative Engine Optimization)?
GEO is the practice of making a brand appear, rank and be described favourably inside AI-generated answers, on ChatGPT, Perplexity, Google AI Mode and the rest. It is measured per prompt, the way SEO is measured per keyword.
What is a GEO API?
A GEO API returns structured data about AI answers for a prompt: which brands are mentioned, in what order, with what sentiment, which sources are cited, and which follow-up questions the model generates. API for GEO returns all of it in one response, so you can store, aggregate and resell it.
How is this different from an AI answer scraping API?
Scraping APIs stop at the answer text. Everything expensive comes after: resolving "Loopwork", "Loop Work" and "loopwork.io" to one entity, counting position, scoring sentiment, clustering themes, extracting shopping offers. That layer is the product here. See the full comparison.
Which AI models and locales are covered?
Six model families across 40+ countries and 25+ languages. Availability is model- and country-specific, and it is exposed as reference data so you can validate a request before spending credits.
Can I resell the data to my own customers?
Yes. The API is built for embedding: one organisation, many isolated projects, no branding in the payload, and no clause preventing you from putting the numbers in your own product.