Workflow

AI Overview Citation Trust Check Workflow

Workflow that monitors Google AI Overview citations for your domain. Tracks citation presence, position, and competing sources across key queries.

Overview

Getting cited in Google AI Overviews drives significant traffic and authority in 2026. This workflow monitors whether your domain appears in AI Overview citations for target queries, tracks which competitors are cited instead, and alerts when your citation is added or dropped. Essential for AEO strategy.

Trigger

Daily monitoring run for target queries.

Schedule

Daily

Workflow Steps

1

Load Target Queries

Read the list of queries where AI Overview citation matters for your domain.

2

Extract AI Overviews

For each query, call Scavio search API to extract the AI Overview text and citation sources.

3

Check Domain Citation

For each AI Overview, check if your domain appears in the citation sources. Record position and surrounding text.

4

Track Changes

Compare today's citations against yesterday's. Flag new citations, lost citations, and position changes.

5

Alert on Changes

Send alerts for citation gains and losses. Include the query, competing sources, and AI Overview text excerpt.

Python Implementation

Python
import requests, os, json
from pathlib import Path
from datetime import datetime

API_KEY = os.environ["SCAVIO_API_KEY"]
H = {"x-api-key": API_KEY, "Content-Type": "application/json"}
HISTORY_FILE = Path("aio_citations.json")

def check_aio_citations(query: str, target_domain: str) -> dict:
    resp = requests.post(
        "https://api.scavio.dev/api/v1/search",
        headers=H,
        json={"query": query, "country_code": "us"},
        timeout=10,
    )
    data = resp.json()
    aio = data.get("ai_overview", {})
    sources = aio.get("sources", [])
    cited = any(target_domain in s.get("link", "") for s in sources)
    competitors = [s.get("link", "").split("/")[2] for s in sources if target_domain not in s.get("link", "")]
    return {
        "query": query,
        "has_aio": bool(aio),
        "cited": cited,
        "competitors": competitors[:5],
        "aio_text_preview": aio.get("text", "")[:200],
    }

def daily_monitor(queries: list, domain: str) -> dict:
    today = datetime.now().strftime("%Y-%m-%d")
    history = json.loads(HISTORY_FILE.read_text()) if HISTORY_FILE.exists() else {}
    today_data = {}
    changes = []

    for q in queries:
        result = check_aio_citations(q, domain)
        today_data[q] = result
        yesterday = history.get(q, {})
        if yesterday.get("cited") and not result["cited"]:
            changes.append({"query": q, "change": "LOST_CITATION"})
        elif not yesterday.get("cited") and result["cited"]:
            changes.append({"query": q, "change": "GAINED_CITATION"})

    history.update(today_data)
    HISTORY_FILE.write_text(json.dumps(history, indent=2))
    return {"date": today, "total_queries": len(queries), "cited_count": sum(1 for d in today_data.values() if d["cited"]), "changes": changes}

report = daily_monitor(["search api for ai agents", "web scraping api alternative"], "scavio.dev")
print(f"Cited in {report['cited_count']}/{report['total_queries']} AI Overviews")
for c in report["changes"]:
    print(f"  {c['change']}: {c['query']}")

JavaScript Implementation

JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const fs = await import('fs');

async function checkAioCitations(query, targetDomain) {
  const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query, country_code:'us'})});
  const d = await r.json();
  const aio = d.ai_overview || {};
  const sources = aio.sources || [];
  const cited = sources.some(s=>(s.link||'').includes(targetDomain));
  const competitors = sources.filter(s=>!(s.link||'').includes(targetDomain)).map(s=>(s.link||'').split('/')[2]).slice(0,5);
  return {query, hasAio:!!d.ai_overview, cited, competitors, aioPreview:(aio.text||'').slice(0,200)};
}

async function dailyMonitor(queries, domain) {
  let history = {};
  try { history = JSON.parse(fs.readFileSync('aio_citations.json','utf8')); } catch {}
  const todayData = {};
  const changes = [];
  for (const q of queries) {
    const result = await checkAioCitations(q, domain);
    todayData[q] = result;
    const yesterday = history[q] || {};
    if (yesterday.cited && !result.cited) changes.push({query:q, change:'LOST_CITATION'});
    else if (!yesterday.cited && result.cited) changes.push({query:q, change:'GAINED_CITATION'});
  }
  Object.assign(history, todayData);
  fs.writeFileSync('aio_citations.json', JSON.stringify(history, null, 2));
  return {totalQueries:queries.length, citedCount:Object.values(todayData).filter(d=>d.cited).length, changes};
}

const report = await dailyMonitor(['search api for ai agents', 'web scraping api alternative'], 'scavio.dev');
console.log('Cited in '+report.citedCount+'/'+report.totalQueries+' AI Overviews');
for (const c of report.changes) console.log('  '+c.change+': '+c.query);

Platforms Used

Google

Web search with knowledge graph, PAA, and AI overviews

Frequently Asked Questions

Getting cited in Google AI Overviews drives significant traffic and authority in 2026. This workflow monitors whether your domain appears in AI Overview citations for target queries, tracks which competitors are cited instead, and alerts when your citation is added or dropped. Essential for AEO strategy.

This workflow uses a daily monitoring run for target queries.. Daily.

This workflow uses the following Scavio platforms: google. Each platform is called via the same unified API endpoint.

Yes. Scavio's free tier includes 250 credits per month with no credit card required. That is enough to test and validate this workflow before scaling it.

AI Overview Citation Trust Check Workflow

Workflow that monitors Google AI Overview citations for your domain. Tracks citation presence, position, and competing sources across key queries.