The Problem
Manual SEO audits check keyword rankings, AI Overview presence, and competitor positions one keyword at a time. Auditing 50 keywords takes 2-3 hours. Results are already outdated by the time the report is delivered.
The Scavio Solution
A Python script or Claude Code agent queries the Scavio API for each keyword, extracts positions for your domain and competitors, checks AI Overview presence, and generates a markdown audit report in minutes.
Before
SEO consultant opens Google for each of 50 keywords. Records position manually. Checks if AI Overview appears. Estimates competitor positions. Writes report in Google Docs. Total: 3 hours per site per audit.
After
Script searches 50 keywords via API, extracts your domain's position, competitor positions, and AI Overview status for each. Outputs a markdown table and action plan in under 5 minutes.
Who It Is For
SEO consultants, in-house SEO teams, and agencies who run regular keyword audits and want to eliminate manual data collection.
Key Benefits
- 50 keywords audited in under 5 minutes
- AI Overview presence and citation detection included
- Competitor position comparison in the same pass
- Repeatable and schedulable — run weekly
Python Example
import requests
from datetime import date
API_KEY = "your-scavio-api-key"
def audit_keyword(keyword: str, your_domain: str, competitor_domains: list = []) -> dict:
r = requests.post(
"https://api.scavio.dev/api/v1/search",
json={"query": keyword, "include_ai_overview": True, "num_results": 20},
headers={"x-api-key": API_KEY}, timeout=20
)
r.raise_for_status()
data = r.json()
results = data.get("organic_results", [])
your_pos = next((i+1 for i, res in enumerate(results) if your_domain in res.get("link","")), None)
comp_pos = {d: next((i+1 for i, res in enumerate(results) if d in res.get("link","")), None) for d in competitor_domains}
ao = data.get("ai_overview")
aio_cited = bool(ao and any(your_domain in s.get("link","") for s in ao.get("sources", [])))
return {"keyword": keyword, "your_position": your_pos, "competitors": comp_pos, "has_aio": bool(ao), "aio_cited": aio_cited}
# Example
result = audit_keyword("project management software", "yoursite.com", ["asana.com", "monday.com"])
print(result)JavaScript Example
async function auditKeyword(keyword, yourDomain, competitors = []) {
const res = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'x-api-key': 'your-scavio-api-key' },
body: JSON.stringify({ query: keyword, include_ai_overview: true, num_results: 20 })
});
const data = await res.json();
const results = data.organic_results ?? [];
const yourPos = results.findIndex(r => r.link?.includes(yourDomain)) + 1 || null;
const ao = data.ai_overview;
return { keyword, yourPos, hasAio: !!ao, aioCited: (ao?.sources ?? []).some(s => s.link?.includes(yourDomain)) };
}Platforms Used
Web search with knowledge graph, PAA, and AI overviews