Overview
Track your brand's visibility in Google AI Overviews across target keywords weekly. The report shows which keywords trigger AI Overviews, whether your content is cited, which competitors appear, and week-over-week trends. Cost: $0.005 per keyword check, so 200 keywords costs $1/week.
Trigger
Weekly cron on Monday at 09:00 UTC
Schedule
Weekly on Monday at 09:00 UTC
Workflow Steps
Load keyword list
Read the target keywords from a tracking sheet. Group by category (brand, product, competitor, industry).
Check AI Overview status
Query each keyword with AI Overview extraction enabled. Record whether an AIO appears and its content.
Analyze citations
For each AIO, extract the cited sources, check if your domain appears, and note competitor domains.
Compare to last week
Load the previous week's report and compute changes: new AIOs, lost citations, gained citations, new competitor appearances.
Generate report
Output a structured report with summary stats, per-keyword details, and actionable recommendations.
Python Implementation
import requests, os, json
from datetime import datetime
H = {"x-api-key": os.environ["SCAVIO_API_KEY"], "Content-Type": "application/json"}
def aeo_report(keywords, my_domain, prev_report=None):
report = {"date": datetime.now().strftime("%Y-%m-%d"), "domain": my_domain, "keywords": []}
for kw in keywords:
r = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": "google", "query": kw, "ai_overview": True}).json()
aio = r.get("ai_overview", {})
entry = {"keyword": kw, "has_aio": bool(aio), "cited": False, "competitors": []}
if aio:
sources = aio.get("sources", [])
domains = [s.get("domain", "") for s in sources]
entry["cited"] = my_domain in " ".join(domains)
entry["competitors"] = [d for d in set(domains) if d and d != my_domain][:5]
report["keywords"].append(entry)
total = len(report["keywords"])
with_aio = sum(1 for k in report["keywords"] if k["has_aio"])
cited = sum(1 for k in report["keywords"] if k["cited"])
print(f"AEO Report: {total} keywords, {with_aio} have AIO, cited in {cited}")
return report
report = aeo_report(
["best SERP API", "web scraping API", "search API for LLM"],
"scavio.dev")JavaScript Implementation
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
async function aeoReport(keywords, myDomain) {
const report = {date: new Date().toISOString().split("T")[0], domain: myDomain, keywords: []};
for (const kw of keywords) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google", query: kw, ai_overview: true})
}).then(r => r.json());
const aio = r.ai_overview || {};
const sources = aio.sources || [];
const domains = sources.map(s => s.domain || "");
report.keywords.push({
keyword: kw, hasAio: !!aio.text,
cited: domains.join(" ").includes(myDomain),
competitors: [...new Set(domains.filter(d => d && d !== myDomain))].slice(0, 5),
});
}
const withAio = report.keywords.filter(k => k.hasAio).length;
const cited = report.keywords.filter(k => k.cited).length;
console.log(`AEO Report: ${keywords.length} kws, ${withAio} AIO, cited in ${cited}`);
return report;
}
aeoReport(["best SERP API", "web scraping API"], "scavio.dev");Platforms Used
Web search with knowledge graph, PAA, and AI overviews