The Problem
You need to evaluate a thousand domains for a link building campaign, a competitor analysis, or a lead qualification pipeline. The standard approach is subscribing to Ahrefs, Moz, or Semrush at $100-plus per month for their bulk analysis features. But you only need this data once a month, or for a one-off project. The subscription sits idle between uses, and canceling means losing historical data. For indie developers and small teams, the math never works out.
The Scavio Solution
Scavio lets you search Google for each domain and extract ranking signals, top pages, and SERP presence in bulk at $0.005 per search. Checking 1000 domains costs $5, not $100 per month. You get real SERP visibility data: which domains rank for competitive terms, how many pages appear in top results, whether they have featured snippets or AI Overview mentions. This is actual search presence, not a proprietary score that may or may not correlate with anything.
Before
Before Scavio, checking domain signals at scale meant a triple-digit monthly subscription to an SEO suite used three days a month, or manually spot-checking a handful of domains.
After
After Scavio, a $5 batch run produces SERP presence data for 1000 domains in under an hour. No subscription, no contract, no idle months paying for unused seats.
Who It Is For
Indie developers, freelance SEO consultants, and small agency teams who need domain-level SERP data without committing to a $100/mo SEO suite subscription they will only use a few days per month.
Key Benefits
- 1000 domain checks for $5 instead of $100/mo subscription
- Real SERP presence data, not proprietary scores
- No contract or monthly commitment required
- Results include AI Overview mentions and featured snippets
- Batch-friendly API with consistent response times
Python Example
import requests
import json
import time
from pathlib import Path
API_KEY = "your_scavio_api_key"
def check_domain_presence(domain: str) -> dict:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": f"site:{domain}", "num": 20},
timeout=15,
)
res.raise_for_status()
data = res.json()
organic = data.get("organic", [])
return {
"domain": domain,
"indexed_pages_in_top_20": len(organic),
"has_featured_snippet": bool(data.get("featured_snippet")),
"in_ai_overview": bool(data.get("ai_overview")),
"top_page": organic[0]["link"] if organic else None,
}
def bulk_check(domains: list[str]) -> list[dict]:
results = []
for i, domain in enumerate(domains):
results.append(check_domain_presence(domain))
if i % 50 == 49:
time.sleep(1) # gentle pacing
return results
domains = Path("domains.txt").read_text().strip().split("\n")
report = bulk_check(domains[:1000])
Path("domain_report.json").write_text(json.dumps(report, indent=2))
print(f"Checked {len(report)} domains")JavaScript Example
const API_KEY = "your_scavio_api_key";
async function checkDomainPresence(domain) {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform: "google", query: `site:${domain}`, num: 20 }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
const data = await res.json();
const organic = data.organic ?? [];
return {
domain,
indexedPagesInTop20: organic.length,
hasFeaturedSnippet: !!data.featured_snippet,
inAiOverview: !!data.ai_overview,
topPage: organic[0]?.link ?? null,
};
}
async function bulkCheck(domains) {
const results = [];
for (let i = 0; i < domains.length; i++) {
results.push(await checkDomainPresence(domains[i]));
if (i % 50 === 49) await new Promise((r) => setTimeout(r, 1000));
}
return results;
}
const fs = await import("fs/promises");
const domains = (await fs.readFile("domains.txt", "utf8")).trim().split("\n");
const report = await bulkCheck(domains.slice(0, 1000));
await fs.writeFile("domain_report.json", JSON.stringify(report, null, 2));
console.log(`Checked ${report.length} domains`);Platforms Used
Web search with knowledge graph, PAA, and AI overviews