The Problem
Generative Engine Optimization (GEO) requires knowing when and where AI-generated answers cite your content. Google AI Overviews, Bing Copilot, and Perplexity all generate citations differently. There is no standard dashboard that tracks whether your domain gets cited across these generative answer surfaces. SEO teams cannot measure GEO performance because they have no citation data to work with.
The Scavio Solution
Build a monitoring pipeline that queries Scavio for your target keywords with AI Overview enabled, extracts citation sources from each AI Overview response, and tracks your domain's citation rate over time. Run it weekly to build a citation trend dataset. Compare your citation rate against competitors. Flag keywords where you lost or gained citations week-over-week.
Before
Before the pipeline, the SEO team had no systematic way to track AI Overview citations. They spot-checked manually by searching keywords in a browser, which was slow, inconsistent, and could not produce trend data.
After
After deploying the pipeline, the team tracks 500 keywords weekly with citation data for their domain and 3 competitors. Weekly reports show citation rate trends, new wins, and losses. The data drives content optimization decisions.
Who It Is For
SEO teams measuring Generative Engine Optimization performance. Content marketers who need to track whether their content gets cited in AI-generated answers. Agencies delivering GEO reporting to clients.
Key Benefits
- Automated weekly tracking of AI Overview citations per keyword
- Citation rate trends over time for your domain and competitors
- Alert on citation wins and losses week-over-week
- 500 keywords monitored weekly for under $2.50/week
- Structured data output feeds into any BI or reporting tool
Python Example
import requests
import json
from datetime import datetime
from pathlib import Path
API_KEY = "your_scavio_api_key"
def check_citations(keywords: list[str], target_domain: str) -> dict:
results = []
for kw in keywords:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": kw, "ai_overview": True},
timeout=15,
)
res.raise_for_status()
data = res.json()
ai = data.get("ai_overview")
cited = False
all_citations = []
if ai:
all_citations = [c.get("source", "") for c in ai.get("citations", [])]
cited = any(target_domain in c for c in all_citations)
results.append({"keyword": kw, "has_ai_overview": bool(ai), "cited": cited, "citation_sources": all_citations[:5]})
date = datetime.utcnow().strftime("%Y-%m-%d")
cited_count = sum(1 for r in results if r["cited"])
report = {"date": date, "domain": target_domain, "keywords_checked": len(keywords), "citation_count": cited_count, "citation_rate": f"{cited_count/len(keywords)*100:.1f}%", "details": results}
Path(f"geo_citations_{date}.json").write_text(json.dumps(report, indent=2))
return report
report = check_citations(["best search api", "web scraping api", "serp api pricing"], "scavio.dev")
print(f"Citation rate: {report["citation_rate"]} ({report["citation_count"]}/{report["keywords_checked"]})")JavaScript Example
const API_KEY = "your_scavio_api_key";
async function checkCitations(keywords, targetDomain) {
const results = [];
for (const kw of keywords) {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform: "google", query: kw, ai_overview: true }),
});
const data = await res.json();
const citations = (data.ai_overview?.citations ?? []).map((c) => c.source ?? "");
results.push({ keyword: kw, cited: citations.some((c) => c.includes(targetDomain)), sources: citations.slice(0, 5) });
}
const citedCount = results.filter((r) => r.cited).length;
console.log(`Citation rate: ${(citedCount / keywords.length * 100).toFixed(1)}% (${citedCount}/${keywords.length})`);
return results;
}
await checkCitations(["best search api", "web scraping api"], "scavio.dev");Platforms Used
Web search with knowledge graph, PAA, and AI overviews