ScavioScavio
Pricing
Tools
Sign InsGet Startedg
Blog
SEO9 minMay 19, 2026

Weekly SEO Dashboard with Claude Code

Build SEO dashboard as a Claude Code skill. Type /weekly-report for rank tracking, competitor analysis, and content gaps. Scavio API + SQLite backend.

Scavio Team

May 19, 2026

Try Scavio Free
scavio
Claude Code / Dashboard
SEO

Build an SEO dashboard as a Claude Code skill: type /weekly-report and get rank tracking, AI Overview citations, competitor position changes, and content gap analysis. The architecture: Scavio API for SERP data, SQLite for local storage, and formatted terminal output. No web frontend needed -- the report lives in your coding environment.

Architecture

  • Data collection: Scavio API for rank tracking and AI Overview data
  • Storage: SQLite file in your project directory (portable, no server)
  • Analysis: Python script that compares current vs previous week
  • Output: formatted report printed to terminal via Claude Code skill

Step 1: data collection script

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

DB_PATH = "seo_tracker.db"
API = "https://api.scavio.dev"
H = {"Authorization": f"Bearer {os.environ['SCAVIO_API_KEY']}"}

def init_db():
    conn = sqlite3.connect(DB_PATH)
    conn.execute("""CREATE TABLE IF NOT EXISTS rankings (
        date TEXT, keyword TEXT, position INTEGER, ai_cited INTEGER,
        top_url TEXT, PRIMARY KEY (date, keyword))""")
    conn.commit()
    return conn

def collect_rankings(keywords: list, domain: str):
    conn = init_db()
    today = date.today().isoformat()
    for kw in keywords:
        resp = requests.post(f"{API}/api/v2/google",
            headers=H,
            json={"query": kw, "gl": "us", "hl": "en"},
            timeout=90)
        data = resp.json()
        pos = None
        url = None
        for i, r in enumerate(data.get("organic_results", [])):
            if domain in r.get("link", ""):
                pos = i + 1
                url = r.get("link")
                break
        ai_sources = (data.get("ai_overview") or {}).get("references", [])
        ai_cited = 1 if any(domain in s.get("link", "") for s in ai_sources) else 0
        conn.execute(
            "INSERT OR REPLACE INTO rankings VALUES (?, ?, ?, ?, ?)",
            (today, kw, pos, ai_cited, url))
    conn.commit()
    conn.close()

keywords = ["your keyword 1", "your keyword 2"]
collect_rankings(keywords, "yoursite.com")

Step 2: weekly report generator

Python
from datetime import timedelta

def weekly_report(domain: str):
    conn = sqlite3.connect(DB_PATH)
    today = date.today()
    week_ago = (today - timedelta(days=7)).isoformat()
    today_str = today.isoformat()

    current = dict(conn.execute(
        "SELECT keyword, position FROM rankings WHERE date = ?",
        (today_str,)).fetchall())
    previous = dict(conn.execute(
        "SELECT keyword, position FROM rankings WHERE date = ?",
        (week_ago,)).fetchall())
    ai_citations = dict(conn.execute(
        "SELECT keyword, ai_cited FROM rankings WHERE date = ?",
        (today_str,)).fetchall())

    report = []
    report.append(f"SEO Report: {week_ago} to {today_str}")
    report.append(f"Domain: {domain}")
    report.append("-" * 60)

    improved = []
    declined = []
    for kw, pos in current.items():
        prev_pos = previous.get(kw)
        ai = "AI cited" if ai_citations.get(kw) else ""
        if prev_pos and pos:
            change = prev_pos - pos
            if change > 0:
                improved.append(f"  +{change} {kw}: #{pos} {ai}")
            elif change < 0:
                declined.append(f"  {change} {kw}: #{pos} {ai}")
        elif pos:
            report.append(f"  NEW {kw}: #{pos} {ai}")

    if improved:
        report.append("\nImproved:")
        report.extend(improved)
    if declined:
        report.append("\nDeclined:")
        report.extend(declined)

    conn.close()
    return "\n".join(report)

print(weekly_report("yoursite.com"))

Step 3: competitor tracking

Python
def competitor_snapshot(keywords: list, competitors: list):
    """Check where competitors rank for your target keywords."""
    snapshot = {}
    for kw in keywords:
        resp = requests.post(f"{API}/api/v2/google",
            headers=H, json={"query": kw, "gl": "us", "hl": "en"}, timeout=90)
        results = resp.json().get("organic_results", [])
        for comp in competitors:
            for i, r in enumerate(results):
                if comp in r.get("link", ""):
                    snapshot.setdefault(comp, {})[kw] = i + 1
                    break
    return snapshot

# Track 3 competitors x 20 keywords = 20 API calls = 20 credits
competitors_data = competitor_snapshot(keywords, ["competitor1.com", "competitor2.com"])

Cost for a weekly dashboard

  • 50 keywords, weekly collection: 50 credits/week, about 200 credits/mo = $2/mo at $0.01 per credit
  • 50 keywords + 3 competitor checks: 50 + 50 = 100 credits/week, about 400 credits/mo = $4/mo
  • Daily collection (for faster alerts): 50 x 30 = 1,500 credits/mo = $15/mo
  • The 50 free credits on signup cover your first weekly run of 50 keywords

Search, social and ecommerce data as JSON

  • One API key for every platform
  • Pay per request with credits
  • Works with MCP, LangChain and n8n
Try Scavio Free

50 free credits, no credit card

On this page

  1. Architecture
  2. Step 1: data collection script
  3. Step 2: weekly report generator
  4. Step 3: competitor tracking

Related articles

View all
  • scavio
    Claude Code / SEO
    Gsc
    GSC + Claude Code: Modern SEO Workflow
  • scavio
    SEO / Pricing
    SERP API
    SEO API with no monthly subscription: yes, it exists (2026)
ScavioScavio

One scraper API for every social, search, e-commerce and real estate platform. Built for AI agents.

Product

  • Features
  • Pricing
  • Dashboard
  • Affiliates

Developers

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

Alternatives

  • Tavily Alternative
  • SerpAPI Alternative
  • Firecrawl Alternative
  • Exa Alternative
  • Serper Alternative
  • Tavily vs Scavio
  • SerpAPI vs Scavio
  • All alternatives
  • Compare Scavio vs alternatives

Search APIs

  • Google Search API
  • Amazon Product API
  • YouTube API
  • Reddit API
  • Walmart Product API
  • TikTok API
  • Instagram API

Tools

  • All Tools

© 2026 Scavio. All rights reserved.

Featured on TAAFT
Terms of ServicePrivacy Policy