SEMrush y Ahrefs cobran entre 100 y 450 dólares al mes por los paneles de SEO. Puede crear la misma funcionalidad principal con llamadas API SERP sin procesar a $ 0,005/consulta. Este tutorial crea un rastreador de clasificación, un monitor de funciones SERP y un panel de comparación de competidores. 100 comprobaciones diarias de palabras clave cuestan 0,50 USD al día.
Requisitos previos
- Python 3.8+
- solicita biblioteca
- Una clave API de Scavio de scavio.dev
- Lista de palabras clave objetivo y dominios de la competencia
Guia paso a paso
Paso 1: Crear un rastreador de clasificación de palabras clave
Realice un seguimiento diario de la posición de su dominio para las palabras clave objetivo.
import os, requests, json
from datetime import datetime
API_KEY = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
DOMAIN = 'yourdomain.com'
KEYWORDS = ['search api for agents', 'serp api python', 'web search api 2026', 'mcp search tool']
def check_rank(keyword, domain):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': keyword, 'country_code': 'us'}).json()
organic = data.get('organic_results', [])
for i, r in enumerate(organic):
if domain in r.get('link', ''):
return {'position': i + 1, 'title': r.get('title', ''), 'link': r.get('link', '')}
return {'position': None, 'title': '', 'link': ''}
print(f'=== Rank Tracker - {DOMAIN} - {datetime.now().strftime("%Y-%m-%d")} ===')
ranks = []
for kw in KEYWORDS:
result = check_rank(kw, DOMAIN)
pos = f'#{result["position"]}' if result['position'] else 'Not in top 10'
print(f' {kw:40} | {pos}')
ranks.append({'keyword': kw, **result})
print(f'\nCost: ${len(KEYWORDS) * 0.005:.3f}')Paso 2: Monitorear las funciones SERP por palabra clave
Detecte resúmenes de IA, fragmentos destacados, cuadros PAA y paquetes locales.
def serp_features(keyword):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': keyword, 'country_code': 'us'}).json()
features = []
if data.get('ai_overview') or data.get('answer_box'):
features.append('AI Overview')
if data.get('featured_snippet'):
features.append('Featured Snippet')
if data.get('people_also_ask'):
features.append(f'PAA ({len(data["people_also_ask"])} questions)')
if data.get('local_results'):
features.append(f'Local Pack ({len(data["local_results"])} results)')
if data.get('shopping_results'):
features.append('Shopping')
return features
print(f'\n=== SERP Features ===')
for kw in KEYWORDS:
features = serp_features(kw)
print(f' {kw:40} | {" | ".join(features) if features else "Organic only"}')Paso 3: Comparar con la competencia
Verifique las posiciones de la competencia para las mismas palabras clave.
COMPETITORS = ['tavily.com', 'serpapi.com', 'serper.dev']
def competitor_comparison(keywords, domain, competitors):
print(f'\n=== Competitor Comparison ===')
header = f'{"Keyword":30} | {domain:15}'
for c in competitors:
header += f' | {c:15}'
print(header)
print('-' * len(header))
for kw in keywords:
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': kw, 'country_code': 'us'}).json()
organic = data.get('organic_results', [])
positions = {}
for i, r in enumerate(organic):
link = r.get('link', '')
if domain in link:
positions[domain] = i + 1
for c in competitors:
if c in link:
positions[c] = i + 1
row = f'{kw[:30]:30} | {str(positions.get(domain, "-")):15}'
for c in competitors:
row += f' | {str(positions.get(c, "-")):15}'
print(row)
total_queries = len(keywords)
print(f'\nCost: ${total_queries * 0.005:.3f} (competitors checked in same query)')
competitor_comparison(KEYWORDS, DOMAIN, COMPETITORS)Ejemplo en Python
import os, requests
SH = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}
def rank_check(keyword, domain):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': keyword, 'country_code': 'us'}).json()
for i, r in enumerate(data.get('organic_results', [])):
if domain in r.get('link', ''):
return i + 1
return None
for kw in ['search api', 'serp api python']:
pos = rank_check(kw, 'scavio.dev')
print(f'{kw}: #{pos}' if pos else f'{kw}: not found')
print('Cost: $0.010')Ejemplo en JavaScript
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
async function rankCheck(keyword, domain) {
const data = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: SH,
body: JSON.stringify({ query: keyword, country_code: 'us' })
}).then(r => r.json());
const pos = (data.organic_results || []).findIndex(r => r.link?.includes(domain));
console.log(`${keyword}: ${pos >= 0 ? '#' + (pos+1) : 'not found'}`);
}
await rankCheck('search api', 'scavio.dev');Salida esperada
=== Rank Tracker - yourdomain.com ===
search api for agents | #3
serp api python | #5
web search api 2026 | #2
mcp search tool | Not in top 10
Cost: $0.020
=== SERP Features ===
search api for agents | AI Overview | PAA (4 questions)
serp api python | Featured Snippet
=== Competitor Comparison ===
Keyword | yourdomain.com | tavily.com | serpapi.com
search api for agents | 3 | 7 | 4