The Problem
Rank tracking tools price per keyword per month. At 4,000+ keywords the bill crosses $200/month, and real-time checks are unnecessary when rankings only shift daily. Teams overpay for instant results they review the next morning anyway.
The Scavio Solution
Queue all keyword-location pairs into a batch job that runs overnight via cron. Scavio returns structured rank data at $0.005/query, so 4,000 keywords cost $20/night. Results land in a database or sheet before the team arrives.
Before
Paying $200+/month for a rank tracker GUI that checks keywords in real time, but nobody looks at the data until the morning standup.
After
A cron job checks 4,000 keywords overnight for $20. Results are in the dashboard before 8 AM. Monthly cost dropped from $200+ to $20.
Who It Is For
SEO teams and agencies tracking thousands of keywords who want to cut rank tracking costs by 80-90%.
Key Benefits
- 4,000 keywords checked overnight for $20
- No GUI tax or per-seat pricing
- Results ready before the morning standup
- Scales linearly: 10K keywords = $50/night
Python Example
import requests, json, time, os
from datetime import date
API_KEY = os.environ["SCAVIO_API_KEY"]
KEYWORDS = json.load(open("keywords.json")) # [{"kw": "...", "loc": "us"}, ...]
def check_rank(keyword: str, country: str) -> dict:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY, "Content-Type": "application/json"},
json={"query": keyword, "country_code": country},
timeout=15,
)
resp.raise_for_status()
data = resp.json()
return {
"keyword": keyword,
"country": country,
"date": str(date.today()),
"organic": [
{"position": r["position"], "url": r.get("link", ""), "title": r.get("title", "")}
for r in data.get("organic_results", [])[:10]
],
}
results = []
for item in KEYWORDS:
results.append(check_rank(item["kw"], item["loc"]))
time.sleep(0.2)
with open(f"ranks_{date.today()}.json", "w") as f:
json.dump(results, f, indent=2)
print(f"Checked {len(results)} keywords")JavaScript Example
const fs = require('fs');
const KEYWORDS = JSON.parse(fs.readFileSync('keywords.json','utf8'));
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function checkRank(kw, cc) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query:kw, country_code:cc})});
const d = await r.json();
return {keyword:kw, country:cc, date:new Date().toISOString().slice(0,10), organic:(d.organic_results||[]).slice(0,10).map(r=>({position:r.position,url:r.link,title:r.title}))};
}
(async()=>{const results=[];for(const k of KEYWORDS){results.push(await checkRank(k.kw,k.loc));await new Promise(r=>setTimeout(r,200));}fs.writeFileSync('ranks.json',JSON.stringify(results,null,2));console.log(results.length+' keywords checked');})();Platforms Used
Web search with knowledge graph, PAA, and AI overviews