The Problem
Marketing teams cannot measure whether their content appears in AI-generated answers from Perplexity, ChatGPT, or Google AI Overviews. Traditional rank trackers only measure blue-link positions, missing the growing share of traffic from AI-synthesized responses.
The Scavio Solution
Build a citation tracking pipeline that queries target keywords through Scavio's Google search endpoint, parses AI Overview snippets and featured snippets for brand mentions, and tracks citation frequency over time. Extend with Perplexity and ChatGPT monitoring by querying those platforms via their APIs and checking responses for your domain in citations.
Before
Before AEO tracking, the marketing team only tracked Google positions 1-10. They didn't know that their competitor was cited in 40% of AI Overview responses for their target keywords, silently capturing traffic the team thought they were winning.
After
After implementing citation tracking, the team discovered they were cited in only 12% of AI Overview responses vs 40% for the competitor. They restructured 15 key pages with concise, quotable definitions and FAQ schema. Citation rate increased to 35% within 6 weeks.
Who It Is For
SEO managers, content marketers, and growth teams measuring visibility in AI-powered answer engines alongside traditional search rankings.
Key Benefits
- Measure AI answer engine citation share alongside traditional rankings
- Track citation frequency trends over time per keyword
- Compare brand vs competitor citation rates in AI responses
- Identify content structure patterns that increase citation probability
- Automated daily monitoring with threshold alerts
Python Example
import requests, os, json
from datetime import date
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
BRAND = 'scavio'
def track_citations(keywords: list[str]) -> list[dict]:
results = []
for kw in keywords:
r = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': kw}, timeout=15).json()
ai_overview = r.get('aiOverview', '')
featured = r.get('featuredSnippet', {}).get('text', '')
organic = r.get('organic', [])
cited_in_ai = BRAND.lower() in ai_overview.lower() if ai_overview else False
cited_in_featured = BRAND.lower() in featured.lower() if featured else False
organic_pos = next((i+1 for i, o in enumerate(organic)
if BRAND.lower() in o.get('link', '').lower()), None)
results.append({
'keyword': kw, 'date': str(date.today()),
'ai_overview_citation': cited_in_ai,
'featured_snippet_citation': cited_in_featured,
'organic_position': organic_pos
})
return results
keywords = ['best search api 2026', 'serp api for ai agents']
for r in track_citations(keywords):
print(json.dumps(r, indent=2))JavaScript Example
async function trackCitations(keywords, brand = 'scavio') {
const results = [];
for (const kw of keywords) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ platform: 'google', query: kw })
}).then(r => r.json());
results.push({
keyword: kw,
date: new Date().toISOString().slice(0, 10),
aiOverviewCitation: (r.aiOverview || '').toLowerCase().includes(brand),
featuredSnippetCitation: (r.featuredSnippet?.text || '').toLowerCase().includes(brand),
organicPosition: (r.organic || []).findIndex(o => o.link?.toLowerCase().includes(brand)) + 1 || null
});
}
return results;
}Platforms Used
Web search with knowledge graph, PAA, and AI overviews