Créez un pipeline de monitoring SEO dans Make.com en connectant l'API de recherche Scavio via des modules HTTP, en planifiant des vérifications quotidiennes des SERP, en extrayant les données de classement et en routant des alertes en fonction des changements de position. Make.com offre une automatisation visuelle des workflows que les non-développeurs peuvent utiliser pour construire un monitoring SEO sans code. En connectant une API de recherche comme source de données HTTP, vous obtenez des instantanés quotidiens des classements, un suivi des concurrents et une détection des fonctionnalités SERP en mode pilotage automatique, sans avoir à gérer des scripts ou des tâches cron.
Prérequis
- Un compte Make.com (gratuit 1 000 crédits ou Core 9 $/mois)
- Une clé API Scavio depuis scavio.dev
- Mots clés cibles à surveiller
- Connaissances de base des scénarios Make.com
Parcours
Étape 1: Configurez le module HTTP
Configurez le module HTTP de Make.com pour appeler l'API Scavio.
import os, requests, json
API_KEY = os.environ['SCAVIO_API_KEY']
# Make.com HTTP Module Configuration:
# Module: HTTP > Make a request
# URL: https://api.scavio.dev/api/v1/search
# Method: POST
# Headers:
# x-api-key: (your Scavio API key, stored in Make.com connection)
# Content-Type: application/json
# Body type: Raw
# Content type: JSON
# Request content: {"platform": "google", "query": "{{1.keyword}}"}
# Python equivalent:
def make_search(keyword: str) -> dict:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'platform': 'google', 'query': keyword}, timeout=15)
return resp.json()
data = make_search('best CRM 2026')
print(f"Results: {len(data.get('organic_results', []))}")Étape 2: Extrayez les positions de classement
Analysez la réponse de l'API pour trouver la position de votre domaine dans les résultats.
def find_my_position(data: dict, my_domain: str) -> dict:
results = data.get('organic_results', [])
for i, r in enumerate(results):
link = r.get('link', '')
if my_domain in link:
return {
'found': True,
'position': i + 1,
'title': r.get('title', ''),
'url': link,
}
return {'found': False, 'position': 0, 'title': '', 'url': ''}
# In Make.com, use a Router module to check:
# Condition: {{2.body.organic_results}} contains your domain
my_domain = 'scavio.dev'
keywords = ['search api', 'serp api alternative', 'google search api']
for kw in keywords:
data = make_search(kw)
pos = find_my_position(data, my_domain)
status = f'#{pos["position"]}' if pos['found'] else 'not found'
print(f' {kw}: {status}')Étape 3: Surveillez les fonctionnalités SERP
Suivez les fonctionnalités SERP qui apparaissent pour vos mots clés cibles.
def check_serp_features(data: dict) -> dict:
features = {
'featured_snippet': 'featured_snippet' in data or 'answer_box' in data,
'people_also_ask': len(data.get('people_also_ask', [])) > 0,
'knowledge_panel': 'knowledge_graph' in data,
'ai_overview': 'ai_overview' in data,
}
active = [k for k, v in features.items() if v]
return {'features': features, 'active': active, 'count': len(active)}
for kw in keywords:
data = make_search(kw)
features = check_serp_features(data)
print(f' {kw}: {features["count"]} features ({', '.join(features["active"])})')Étape 4: Suivez les concurrents
Surveillez quels concurrents apparaissent pour vos mots clés cibles et leurs positions.
def track_competitors(data: dict, competitor_domains: list) -> list:
found = []
results = data.get('organic_results', [])
for i, r in enumerate(results):
link = r.get('link', '')
for domain in competitor_domains:
if domain in link:
found.append({
'competitor': domain,
'position': i + 1,
'title': r.get('title', ''),
})
return found
competitors = ['serpapi.com', 'scrapingbee.com', 'brightdata.com']
for kw in keywords:
data = make_search(kw)
comps = track_competitors(data, competitors)
print(f' {kw}:')
for c in comps:
print(f' #{c["position"]}: {c["competitor"]}')Étape 5: Construisez le pipeline complet
Combinez toutes les vérifications en un seul pipeline qui s'exécute quotidiennement et stocke les résultats.
import datetime
def seo_pipeline(keywords: list, my_domain: str, competitors: list) -> dict:
report = {
'date': datetime.date.today().isoformat(),
'keywords': [],
}
for kw in keywords:
data = make_search(kw)
position = find_my_position(data, my_domain)
features = check_serp_features(data)
comp_positions = track_competitors(data, competitors)
report['keywords'].append({
'keyword': kw,
'my_position': position['position'] if position['found'] else None,
'serp_features': features['active'],
'competitors': comp_positions,
})
# Save report
with open(f'seo_report_{report["date"]}.json', 'w') as f:
json.dump(report, f, indent=2)
# Summary
ranked = sum(1 for k in report['keywords'] if k['my_position'])
print(f'Pipeline complete: {ranked}/{len(keywords)} keywords ranked')
return report
seo_pipeline(keywords, 'scavio.dev', competitors)Exemple Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def seo_check(keyword, my_domain):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': keyword}).json()
for i, r in enumerate(data.get('organic_results', [])):
if my_domain in r.get('link', ''):
return {'keyword': keyword, 'position': i+1}
return {'keyword': keyword, 'position': None}
print(seo_check('search api', 'scavio.dev'))Exemple JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function seoCheck(keyword, myDomain) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({platform: 'google', query: keyword})
});
const results = (await r.json()).organic_results || [];
const idx = results.findIndex(r => (r.link || '').includes(myDomain));
return {keyword, position: idx >= 0 ? idx + 1 : null};
}
seoCheck('search api', 'scavio.dev').then(console.log);Sortie attendue
A Make.com-ready SEO pipeline that tracks keyword rankings, monitors SERP features, and detects competitor position changes on a daily automated schedule.