You optimize client sites so ChatGPT, Perplexity, Claude, Gemini, and Google AI Overviews cite them. Ollagraph turns every answer-engine check into one API call — so you can audit a whole book of client domains the same way, every time, and render the findings under your agency's brand.
Built on the AEO audits capability. Doing the work solo? See the page for SEO consultants — or browse the full surface.
Run the same scored AEO audit across every domain you manage in one loop. Citation readiness, schema coverage, AI-crawler access, and freshness signals come back as structured JSON per URL — not screenshots you have to read by hand. Slot it straight into a recurring monthly deliverable.
The endpoints return clean JSON; you render the report. Your client sees your agency's branding, your template, your recommendations. There is no forced attribution on the output. Wrap the responses in your existing PDF, Notion, or Looker pipeline and ship it as your own product.
Answer-engine checks (citation readiness, schema coverage, the LLM fetch simulator, llms.txt audit) and classic technical-SEO checks (meta audit, schema validation) come from the same bearer token. One integration covers both halves of a 2026 audit instead of stitching a browser extension to a desktop crawler to a rich-results test.
Crawl a client's whole site, then audit every page the crawl returns. Long jobs run detached and POST to your webhook when done, so a 5,000-page audit never holds a socket open. Schedule the re-audit monthly and report the trend line, not just the snapshot.
Every answer-engine check is one call. These are the ones an agency runs most.
Is the page cite-ready for answer engines? Scored, with the freshness signals AI surfaces weigh.
/v1/aeo/citation-readiness
/v1/aeo/freshness-signal
Can GPTBot, ClaudeBot, and PerplexityBot reach the right paths? Simulate the fetch and audit the llms.txt.
/v1/aeo/ai-bot-allowlist
/v1/aeo/llm-fetch-simulator
/v1/aeo/llms-txt-audit
Which schema types are present, which are missing, and is the markup valid — the difference between a quoted page and an ignored one.
/v1/aeo/schema-coverage
/v1/seo/schema-validate
A combined scored audit for a single URL, the classic meta audit, and a competitor diff for recurring trend reports.
/v1/aeo/page-audit
/v1/seo/meta-audit
/v1/aeo/competitor-diff
The full set lives in the AEO bundle and the SEO bundle — part of the 145-endpoint surface.
Drop any of these into your existing client-services toolkit.
# Audit a whole book of client domains for AI-citation readiness.
# One loop, one bearer token, structured findings you can roll into a report.
export OLLAGRAPH_API_KEY="osk_..."
for DOMAIN in clienta.com clientb.com clientc.com; do
echo "== $DOMAIN =="
# 1. The headline number: how cite-ready is the page for answer engines?
curl -s -X POST https://api.ollagraph.com/v1/aeo/citation-readiness \
-H "Authorization: Bearer $OLLAGRAPH_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"url\": \"https://$DOMAIN\"}"
# 2. Can the AI crawlers even reach it? GPTBot / ClaudeBot / PerplexityBot.
curl -s -X POST https://api.ollagraph.com/v1/aeo/ai-bot-allowlist \
-H "Authorization: Bearer $OLLAGRAPH_API_KEY" \
-d "{\"url\": \"https://$DOMAIN\"}"
# 3. Is the structured data answer engines look for actually present?
curl -s -X POST https://api.ollagraph.com/v1/aeo/schema-coverage \
-H "Authorization: Bearer $OLLAGRAPH_API_KEY" \
-d "{\"url\": \"https://$DOMAIN\"}"
done# White-label pipeline: call the audit endpoints, render with YOUR branding.
# The client sees your agency's report — they never need to know Ollagraph exists.
import os, httpx
API = "https://api.ollagraph.com"
client = httpx.Client(
headers={"Authorization": f"Bearer {os.environ['OLLAGRAPH_API_KEY']}"},
timeout=60.0,
)
def audit_client(domain: str) -> dict:
url = f"https://{domain}"
return {
# One call, the full scored page audit (multiple AEO checks at once).
"page_audit": client.post(f"{API}/v1/aeo/page-audit",
json={"url": url}).json(),
# Does the page lead with the answer? Heading hierarchy + snippet shape.
"citation": client.post(f"{API}/v1/aeo/citation-readiness",
json={"url": url}).json(),
# Schema.org coverage gap analysis — what's missing for rich answers.
"schema": client.post(f"{API}/v1/aeo/schema-coverage",
json={"url": url}).json(),
# Classic technical-SEO meta audit for the same report.
"meta": client.post(f"{API}/v1/seo/meta-audit",
json={"url": url}).json(),
}
# Roll each result into your own PDF / Notion / Looker template.
# JSON in, your-brand report out. One workspace per client keeps it tidy.
report = audit_client("client.example.com")# "Will ChatGPT actually see this page the way the client thinks?"
# The LLM fetch simulator answers that. Pair it with the freshness signal
# so the deliverable shows both reachability AND recency.
export OLLAGRAPH_API_KEY="osk_..."
# Simulate how an answer-engine crawler fetches and parses the page.
curl -X POST https://api.ollagraph.com/v1/aeo/llm-fetch-simulator \
-H "Authorization: Bearer $OLLAGRAPH_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://client.example.com/pricing"}'
# Audit the client's llms.txt — the file answer engines increasingly read.
curl -X POST https://api.ollagraph.com/v1/aeo/llms-txt-audit \
-H "Authorization: Bearer $OLLAGRAPH_API_KEY" \
-d '{"url": "https://client.example.com"}'
# Freshness: are the signals an answer engine uses to judge recency present?
curl -X POST https://api.ollagraph.com/v1/aeo/freshness-signal \
-H "Authorization: Bearer $OLLAGRAPH_API_KEY" \
-d '{"url": "https://client.example.com/blog/guide"}'For a site-wide audit, enumerate the pages with the crawler first, then run these against every URL it returns. Watching each call land is part of the per-URL observability surface.
Call the audit endpoints from your reporting pipeline and render the results with your branding. The client sees your report — clean JSON in, your-brand deliverable out. Run one workspace per client for isolated billing and rate limits, schedule the re-audit, and report the trend instead of a one-off snapshot.
AEO is Answer Engine Optimization — optimizing a site so that ChatGPT, Perplexity, Claude, Gemini, and Google AI Overviews can find it, fetch it, understand it, and cite it in their answers. It overlaps with SEO but adds new checks: can the AI crawlers reach the page, does the content lead with the answer, is the structured data present, is the llms.txt file in good shape. Ollagraph turns each of those checks into one API call so an agency can audit many client domains the same way every time.
The AEO audits page describes the capability itself — the individual endpoints and what each one measures. The for-SEO-consultants page is aimed at independent SEO practitioners doing technical audits. This page is for agencies whose product is AEO: teams that audit many client domains for AI-citation readiness, produce white-label reports, and re-run the same audit on a schedule. Same underlying API, different workflow.
Yes. Every endpoint returns plain JSON, and you build the client-facing deliverable. No Ollagraph branding is forced onto the output. Most agencies render the JSON into their own PDF, Notion, or dashboard template so the client only ever sees the agency's brand.
The core AEO set: citation-readiness, schema-coverage, ai-bot-allowlist, llm-fetch-simulator, llms-txt-audit, freshness-signal, competitor-diff, and a combined page-audit that runs several checks at once. Pair those with the technical-SEO meta-audit and schema-validate endpoints, and use the crawler to enumerate every page on a site before auditing each one.
Start a crawl with the crawl endpoint to enumerate the site, collect the result by webhook or by polling the jobs endpoint, then run the AEO audit endpoints against each URL the crawl returned. The crawler is async and honors robots.txt by default, so a site-wide audit runs detached and never holds a connection open.
Partially. Ollagraph covers the AEO layer and the technical-SEO audit layer — citation readiness, AI-crawler access, schema coverage and validation, meta audits, llms.txt — as a programmable API. It does not do keyword research, backlink profiles, or SERP rank tracking. Agencies pair it with a rank-and-backlink tool for those layers and use Ollagraph for the audit and answer-engine layer.
Yes. Because every check is an API call, you can re-run the full audit monthly from your own scheduler, store each snapshot, and report the trend line to the client. The competitor-diff endpoint is built to compare a client against rivals over time, which makes a clean recurring deliverable.
Sign up for the free tier, pick one existing client, and run the citation-readiness and page-audit endpoints against their top landing pages. Render the result as a one-page branded PDF that says exactly which pages an answer engine can cite and which can't. That single deliverable usually sells the recurring engagement.
1,000 free credits on signup — enough to run a full client audit and ship a polished, branded deliverable. One bearer token, failed calls auto-refund.