ScavioScavio
ProductPricingDocs
Sign InGet Started
  1. Home
  2. Tutorials
  3. How to Build a Weekly AI Overview Visibility Report
Tutorial

How to Build a Weekly AI Overview Visibility Report

Generate weekly AI Overview visibility reports. Track which keywords trigger AI Overviews, which domains get cited, and how visibility changes.

Get Free API KeyAPI Docs

AI Overview visibility is becoming a critical SEO metric as Google surfaces AI-generated answers for more queries. A weekly report that tracks which of your target keywords trigger AI Overviews, whether your domain gets cited, and how citations change over time gives you actionable intelligence for AEO strategy. This tutorial shows how to build an automated weekly AEO report using the Scavio API. You will monitor a keyword list, track citation counts, and generate a formatted report showing week-over-week changes.

Prerequisites

  • Python 3.8+ installed
  • requests library installed
  • A Scavio API key from scavio.dev
  • A list of target keywords to monitor

Walkthrough

Step 1: Define the keyword list

Set up the keywords you want to monitor for AI Overview visibility.

Python
import os, requests, json
from datetime import date, timedelta

API_KEY = os.environ["SCAVIO_API_KEY"]

KEYWORDS = [
    "best crm for startups",
    "how to build a landing page",
    "project management tools comparison",
    "what is product-led growth",
    "saas pricing strategies",
]

Step 2: Check AI Overview for each keyword

Query each keyword and extract AI Overview presence and citation data.

Python
def check_aeo(keyword):
    resp = requests.post("https://api.scavio.dev/api/v1/search",
        headers={"x-api-key": API_KEY},
        json={"platform": "google", "query": keyword})
    data = resp.json()
    aio = data.get("ai_overview", {})
    sources = aio.get("sources", []) if aio else []
    return {
        "keyword": keyword,
        "has_aio": bool(aio),
        "source_count": len(sources),
        "domains": [s.get("link","").split("/")[2] for s in sources if s.get("link")],
    }

Step 3: Build the weekly snapshot

Run checks across all keywords and save the snapshot for comparison.

Python
def weekly_snapshot():
    snapshot = {"date": date.today().isoformat(), "keywords": []}
    for kw in KEYWORDS:
        result = check_aeo(kw)
        snapshot["keywords"].append(result)
    filename = f"aeo_snapshot_{date.today().isoformat()}.json"
    with open(filename, "w") as f:
        json.dump(snapshot, f, indent=2)
    return snapshot

Step 4: Compare with previous week

Load the previous snapshot and calculate week-over-week changes.

Python
def compare_weeks(current, previous_file):
    try:
        with open(previous_file) as f:
            previous = json.load(f)
    except FileNotFoundError:
        return current
    prev_map = {k["keyword"]: k for k in previous.get("keywords", [])}
    for kw in current["keywords"]:
        prev = prev_map.get(kw["keyword"], {})
        kw["aio_change"] = "new" if kw["has_aio"] and not prev.get("has_aio") else \
                           "lost" if not kw["has_aio"] and prev.get("has_aio") else "stable"
        kw["source_delta"] = kw["source_count"] - prev.get("source_count", 0)
    return current

snap = weekly_snapshot()
prev_date = (date.today() - timedelta(days=7)).isoformat()
report = compare_weeks(snap, f"aeo_snapshot_{prev_date}.json")
for kw in report["keywords"]:
    print(f"{kw['keyword']}: AIO={'yes' if kw['has_aio'] else 'no'} sources={kw['source_count']}")

Python Example

Python
import os, requests
API_KEY = os.environ["SCAVIO_API_KEY"]
def aeo_check(kw):
    resp = requests.post("https://api.scavio.dev/api/v1/search",
        headers={"x-api-key": API_KEY},
        json={"platform": "google", "query": kw})
    aio = resp.json().get("ai_overview", {})
    sources = aio.get("sources", []) if aio else []
    return {"keyword": kw, "aio": bool(aio), "sources": len(sources)}

for kw in ["best crm", "what is plg"]:
    print(aeo_check(kw))

JavaScript Example

JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
async function aeoCheck(kw) {
  const r = await fetch("https://api.scavio.dev/api/v1/search", {
    method: "POST", headers: H,
    body: JSON.stringify({platform: "google", query: kw})
  });
  const aio = (await r.json()).ai_overview || {};
  return {keyword: kw, aio: !!Object.keys(aio).length,
    sources: (aio.sources||[]).length};
}
aeoCheck("best crm").then(console.log);

Expected Output

JSON
A weekly AEO report showing which keywords trigger AI Overviews, domain citation counts, and week-over-week changes in AI Overview visibility.

Related Tutorials

  • How to Build an AEO Dashboard
  • How to Track AEO Citations with a Search API

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

Python 3.8+ installed. requests library installed. A Scavio API key from scavio.dev. A list of target keywords to monitor. A Scavio API key gives you 50 free credits on signup.

Yes. The free tier includes 50 credits on signup, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Related Resources

Workflow

Weekly AI Mode Visibility Report

Read more
Best Of

Best AEO Report Generation Tools in 2026

Read more
Best Of

Best GEO/AI Visibility Tracking Tools in 2026

Read more
Workflow

AEO Weekly Report Generation

Read more
Solution

Track AI Overview Citations for Agency Clients

Read more
Use Case

AEO Content Tracking for Local Businesses

Read more

Start Building

Generate weekly AI Overview visibility reports. Track which keywords trigger AI Overviews, which domains get cited, and how visibility changes.

Get Free API KeyRead the Docs
ScavioScavio

Real-time search API for AI agents. Search every platform, not just Google.

Product

  • Features
  • Pricing
  • Dashboard
  • Affiliates

Developers

  • Documentation
  • API Reference
  • Quickstart
  • MCP Integration
  • Python SDK

Alternatives

  • Tavily Alternative
  • SerpAPI Alternative
  • Firecrawl Alternative
  • Exa Alternative

Tools

  • JSON Formatter
  • cURL to Code
  • Token Counter
  • All Tools

© 2026 Scavio. All rights reserved.

Featured on TAAFT
Terms of ServicePrivacy Policy