Overview
Ships a daily citation report showing which LLM engines mentioned your brand, the prompts that triggered it, and the source URLs cited. Replaces weekly manual checks with an always-on AEO dashboard that feeds a Notion database and a Slack digest at 9 AM daily.
Trigger
Cron schedule (daily at 7 AM UTC)
Schedule
Daily at 7 AM UTC
Workflow Steps
Load tracked brands and prompts
Read target brand queries and competitor set from a JSON config.
Query each LLM engine
Scavio agentic search against ChatGPT, Perplexity, and Gemini citation endpoints.
Extract citation sources
Parse cited URLs and extract domain, anchor text, and position in answer.
Diff against yesterday
Compare today's citation set to the prior run and tag gains, losses, and new entrants.
Write to Notion database
Upsert one row per (brand, engine, day) with citation count and top sources.
Slack digest
Post a morning summary to #aeo-dashboard with wins, losses, and competitor movements.
Python Implementation
import os, requests, json
API_KEY = os.environ["SCAVIO_API_KEY"]
H = {"x-api-key": API_KEY}
BRANDS = ["scavio", "serpapi", "brightdata"]
ENGINES = ["chatgpt", "perplexity", "gemini"]
def citations(brand, engine):
r = requests.post("https://api.scavio.dev/api/v1/search",
headers=H, json={"platform": f"agentic-{engine}", "query": brand})
return r.json().get("citations", [])
report = {}
for b in BRANDS:
report[b] = {e: citations(b, e) for e in ENGINES}
print(json.dumps(report, indent=2))JavaScript Implementation
const API_KEY = process.env.SCAVIO_API_KEY;
const H = { "x-api-key": API_KEY, "content-type": "application/json" };
const BRANDS = ["scavio", "serpapi", "brightdata"];
const ENGINES = ["chatgpt", "perplexity", "gemini"];
async function citations(brand, engine) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({ platform: "agentic-" + engine, query: brand })
});
return (await r.json()).citations || [];
}
const report = {};
for (const b of BRANDS) {
report[b] = Object.fromEntries(await Promise.all(ENGINES.map(async e => [e, await citations(b, e)])));
}
console.log(JSON.stringify(report, null, 2));Platforms Used
Web search with knowledge graph, PAA, and AI overviews
Community, posts & threaded comments from any subreddit