Le problème
Les outils de suivi de classement facturent par mot-clé par mois. Avec 4,000+ mots-clés, la facture dépasse $200/mois, et les vérifications en temps réel sont inutiles lorsque les classements ne changent que quotidiennement. Les équipes paient trop cher pour des résultats instantanés qu'elles examinent de toute façon le lendemain matin.
La solution Scavio
Mettez en file d'attente toutes les paires mot-clé-emplacement dans un travail batch qui s'exécute pendant la nuit via cron. Scavio retourne des données de classement structurées à $0.005/requête, donc 4,000 mots-clés coûtent $20/nuit. Les résultats atterrissent dans une base de données ou un tableur avant l'arrivée de l'équipe.
Avant
Payer $200+/mois pour une interface graphique de suivi de classement qui vérifie les mots-clés en temps réel, mais personne ne regarde les données avant le standup du matin.
Après
Un cron job vérifie 4,000 mots-clés pendant la nuit pour $20. Les résultats sont dans le tableau de bord avant 8 AM. Le coût mensuel est passé de $200+ à $20.
À qui cela s'adresse
Équipes SEO et agences qui suivent des milliers de mots-clés et souhaitent réduire les coûts de suivi de classement de 80 à 90%.
Avantages clés
- 4,000 mots-clés vérifiés pendant la nuit pour $20
- Pas de taxe GUI ni de tarification par siège
- Résultats prêts avant le standup du matin
- Évolue linéairement: 10K mots-clés = $50/nuit
Exemple Python
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")Exemple JavaScript
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');})();Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA