Cree un canal de monitoreo de SEO en Make.com conectando la API de búsqueda de Scavio a través de módulos HTTP, programando verificaciones SERP diarias, extrayendo datos de clasificación y enrutando alertas basadas en cambios de posición. Make.com proporciona automatización visual del flujo de trabajo que los no desarrolladores pueden utilizar para crear un seguimiento de SEO sin código. Al conectar una API de búsqueda como fuente de datos HTTP, obtiene instantáneas de clasificación diarias, seguimiento de la competencia y detección de funciones SERP que se ejecutan en piloto automático, sin administrar scripts ni trabajos cron.
Requisitos previos
- Una cuenta de Make.com (1K créditos gratis o Core $9/mes)
- Una clave API de Scavio de scavio.dev
- Palabras clave objetivo para monitorear
- Conocimiento básico del escenario de Make.com
Guia paso a paso
Paso 1: Configurar el módulo HTTP
Configure el módulo HTTP de Make.com para llamar a la API de 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', []))}")Paso 2: Extraer posiciones de clasificación
Analice la respuesta de la API para encontrar la posición de su dominio en los resultados.
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}')Paso 3: Monitorear las funciones SERP
Realice un seguimiento de las funciones SERP que aparecen para sus palabras clave objetivo.
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"])})')Paso 4: Seguimiento de competidores
Supervise qué competidores aparecen para sus palabras clave objetivo y sus posiciones.
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"]}')Paso 5: Construir el oleoducto completo
Combine todas las comprobaciones en un único canal que se ejecuta diariamente y almacena los resultados.
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)Ejemplo en 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'))Ejemplo en 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);Salida esperada
A Make.com-ready SEO pipeline that tracks keyword rankings, monitors SERP features, and detects competitor position changes on a daily automated schedule.