Aucune source unique de volume de mots-clés n'est parfaitement exacte. DataForSEO fournit des estimations de clics, Google Keyword Planner donne des fourchettes, et les nombres de résultats SERP de Scavio indiquent la concurrence de contenu. La vérification croisée entre les sources met en évidence les mots-clés où les estimations divergent et vous aide à prendre de meilleures décisions. Ce comparateur collecte des données provenant de plusieurs sources et signale les écarts.
Prérequis
- Python 3.8+
- bibliothèque requests
- Une clé API Scavio provenant de scavio.dev
- Optionnel : clé API DataForSEO pour les données de volume
Parcours
Étape 1: Configurer la collecte de données multi-sources
Configurer les clients API pour les données SERP et l'estimation de volume de Scavio.
import os, requests, json, re
API_KEY = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
def serp_signals(keyword):
"""Get competition and volume signals from SERP results."""
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': keyword, 'country_code': 'us'}).json()
organic = data.get('organic_results', [])
total_results_str = data.get('search_information', {}).get('total_results', '0')
try: total_results = int(re.sub(r'[^\d]', '', str(total_results_str)))
except: total_results = 0
has_ads = bool(data.get('ads', []))
has_ao = bool(data.get('ai_overview'))
paa_count = len(data.get('related_questions', []))
return {
'keyword': keyword, 'total_results': total_results,
'organic_count': len(organic), 'has_ads': has_ads,
'has_ai_overview': has_ao, 'paa_count': paa_count
}
signals = serp_signals('best serp api 2026')
for k, v in signals.items():
print(f' {k}: {v}')Étape 2: Estimer le volume relatif à partir des signaux SERP
Utiliser les fonctionnalités SERP pour estimer la compétitivité et le niveau de volume des mots-clés.
def estimate_volume_tier(signals):
"""Estimate volume tier from SERP signals (not exact volume)."""
score = 0
if signals['total_results'] > 1000000: score += 3
elif signals['total_results'] > 100000: score += 2
elif signals['total_results'] > 10000: score += 1
if signals['has_ads']: score += 2 # Ads = commercial intent + volume
if signals['has_ai_overview']: score += 1 # AO = Google considers query important
if signals['paa_count'] >= 4: score += 1
tiers = {0: 'very_low', 1: 'low', 2: 'low', 3: 'medium',
4: 'medium', 5: 'high', 6: 'high', 7: 'very_high'}
tier = tiers.get(min(score, 7), 'very_high')
return {'tier': tier, 'score': score, 'signals': signals}
keywords = ['best serp api', 'python web scraping', 'curl to python converter',
'tiktok analytics api free', 'how to make money online']
for kw in keywords:
signals = serp_signals(kw)
est = estimate_volume_tier(signals)
print(f' {kw:35} | tier: {est["tier"]:10} | score: {est["score"]} | ads: {signals["has_ads"]} | AO: {signals["has_ai_overview"]}')Étape 3: Comparer les mots-clés côte à côte
Classer les mots-clés par compétitivité estimée et volume pour la priorisation.
def compare_keywords(keywords):
results = []
for kw in keywords:
signals = serp_signals(kw)
est = estimate_volume_tier(signals)
results.append({**signals, **est})
results.sort(key=lambda x: x['score'], reverse=True)
cost = len(keywords) * 0.005
print(f'\nKeyword Volume Comparison ({len(keywords)} keywords, ${cost:.3f}):')
print(f'{"Keyword":35} | {"Tier":10} | {"Results":>12} | {"Ads":4} | {"AO":3} | {"PAA":3}')
print('-' * 85)
for r in results:
print(f'{r["keyword"]:35} | {r["tier"]:10} | {r["total_results"]:12,} | {"Y" if r["has_ads"] else "N":4} | {"Y" if r["has_ai_overview"] else "N":3} | {r["paa_count"]:3}')
return results
ranked = compare_keywords(keywords)Étape 4: Générer un rapport de recherche de mots-clés
Produire un rapport de mots-clés priorisé avec des recommandations.
def keyword_report(keywords):
results = compare_keywords(keywords)
print(f'\n=== Keyword Research Report ===')
# Group by tier
tiers = {}
for r in results:
tier = r['tier']
if tier not in tiers: tiers[tier] = []
tiers[tier].append(r)
for tier in ['very_high', 'high', 'medium', 'low', 'very_low']:
if tier in tiers:
print(f'\n {tier.upper()} volume ({len(tiers[tier])} keywords):')
for r in tiers[tier]:
opportunity = 'HIGH' if not r['has_ads'] and r['score'] >= 3 else 'MEDIUM' if r['score'] >= 2 else 'LOW'
print(f' {r["keyword"]:35} | opportunity: {opportunity}')
# Quick wins: medium+ volume without ads
quick_wins = [r for r in results if r['score'] >= 3 and not r['has_ads']]
if quick_wins:
print(f'\n QUICK WINS (volume without ad competition):')
for r in quick_wins:
print(f' - {r["keyword"]}')
cost = len(keywords) * 0.005
print(f'\n Report cost: ${cost:.3f}')
keyword_report(keywords)Exemple Python
import os, requests
SH = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}
def compare(keywords):
for kw in keywords:
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': kw, 'country_code': 'us'}).json()
total = data.get('search_information', {}).get('total_results', 0)
ads = bool(data.get('ads'))
ao = bool(data.get('ai_overview'))
print(f'{kw:30} | results: {total:>10} | ads: {ads} | AO: {ao}')
print(f'Cost: ${len(keywords) * 0.005:.3f}')
compare(['serp api', 'web scraping tool', 'python tutorial'])Exemple JavaScript
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
async function compare(keywords) {
for (const kw of keywords) {
const data = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: SH,
body: JSON.stringify({ query: kw, country_code: 'us' })
}).then(r => r.json());
const total = data.search_information?.total_results || 0;
console.log(`${kw.padEnd(30)} | results: ${total} | ads: ${!!data.ads} | AO: ${!!data.ai_overview}`);
}
}
compare(['serp api', 'web scraping tool']).catch(console.error);Sortie attendue
Keyword Volume Comparison (5 keywords, $0.025):
Keyword | Tier | Results | Ads | AO | PAA
-------------------------------------------------------------------------------------
how to make money online | very_high | 4,230,000,000 | Y | Y | 4
python web scraping | high | 89,400,000 | Y | Y | 3
best serp api | medium | 12,300,000 | Y | N | 4
tiktok analytics api free | low | 2,100,000 | N | N | 2
curl to python converter | low | 1,800,000 | N | Y | 1
QUICK WINS (volume without ad competition):
- tiktok analytics api free
Report cost: $0.025