ScavioScavio
ProductoPreciosDocumentación
Iniciar sesionComenzar
  1. Inicio
  2. Tutoriales
  3. Cómo crear un informe SEO semanal como una habilidad de Claude Code
Tutorial

Cómo crear un informe SEO semanal como una habilidad de Claude Code

Desarrolle una habilidad de Claude Code de informe semanal que extraiga datos SERP, realice un seguimiento de las clasificaciones y formatee un panel. API de Python + Scavio.

Obtener clave API gratisDocumentacion API

Una habilidad de Claude Code que ejecuta /weekly-report extrae datos SERP en vivo para sus palabras clave objetivo, los compara con la semana pasada y formatea un panel conciso en su terminal. La habilidad se ejecuta como un solo comando, cuesta $0,005 por palabra clave marcada y produce una instantánea que puedes compartir con tu equipo o pegar en Slack.

Requisitos previos

  • Claude Code CLI instalado
  • Python 3.8+
  • Una clave API de Scavio de scavio.dev
  • Orientar palabras clave para realizar un seguimiento

Guia paso a paso

Paso 1: Diseñar el modelo de datos del informe semanal

Defina qué datos necesita el informe y cómo recuperarlos.

Python
import os, requests, json, sqlite3
from datetime import datetime, timedelta

API_KEY = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}

KEYWORDS = ['serp api', 'search api python', 'web scraping api',
            'ai agent search tool', 'mcp search server']
MY_DOMAIN = 'scavio.dev'

db = sqlite3.connect('weekly_report.db')
db.execute('''CREATE TABLE IF NOT EXISTS weekly (
    keyword TEXT, position INTEGER, has_ao INTEGER,
    brand_cited INTEGER, checked_at TEXT
)''')
db.commit()

def check_keyword(keyword):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=SH, json={'query': keyword, 'country_code': 'us',
                          'include_ai_overview': True}).json()
    organic = data.get('organic_results', [])
    pos = next((r['position'] for r in organic if MY_DOMAIN in r.get('link', '')), None)
    has_ao = bool(data.get('ai_overview'))
    ao_text = json.dumps(data.get('ai_overview', {})).lower()
    cited = MY_DOMAIN in ao_text if has_ao else False
    db.execute('INSERT INTO weekly VALUES (?,?,?,?,?)',
        (keyword, pos or 0, int(has_ao), int(cited), datetime.now().isoformat()))
    db.commit()
    return {'keyword': keyword, 'position': pos, 'has_ao': has_ao, 'cited': cited}

print('Weekly report data model ready.')

Paso 2: Construir la lógica de generación de informes

Cree el informe semanal que compare los datos actuales con los anteriores.

Python
def get_previous_week(keyword):
    week_ago = (datetime.now() - timedelta(days=7)).isoformat()
    row = db.execute(
        'SELECT position, has_ao, brand_cited FROM weekly WHERE keyword=? AND checked_at < ? ORDER BY checked_at DESC LIMIT 1',
        (keyword, week_ago)).fetchone()
    return {'position': row[0], 'has_ao': bool(row[1]), 'cited': bool(row[2])} if row else None

def weekly_report():
    results = []
    for kw in KEYWORDS:
        current = check_keyword(kw)
        previous = get_previous_week(kw)
        change = None
        if previous and current['position'] and previous['position']:
            change = previous['position'] - current['position']
        results.append({**current, 'change': change, 'previous': previous})
    return results

def format_report(results):
    now = datetime.now().strftime('%Y-%m-%d')
    lines = []
    lines.append(f'Weekly SEO Report - {now}')
    lines.append(f'Domain: {MY_DOMAIN}')
    lines.append(f'Keywords: {len(results)}')
    lines.append('')
    lines.append(f'{"Keyword":30} | {"Pos":>4} | {"Chg":>4} | {"AO":>3} | {"Cited":>5}')
    lines.append('-' * 60)
    for r in results:
        pos = f'#{r["position"]}' if r['position'] else '-'
        chg = f'{r["change"]:+d}' if r['change'] is not None else 'NEW'
        ao = 'Y' if r['has_ao'] else 'N'
        cited = 'Y' if r['cited'] else 'N'
        lines.append(f'{r["keyword"]:30} | {pos:>4} | {chg:>4} | {ao:>3} | {cited:>5}')
    return '\n'.join(lines)

results = weekly_report()
print(format_report(results))

Paso 3: Agregar métricas resumidas

Calcule métricas agregadas para la instantánea semanal.

Python
def summary_metrics(results):
    ranked = [r for r in results if r['position']]
    improved = [r for r in results if r['change'] and r['change'] > 0]
    declined = [r for r in results if r['change'] and r['change'] < 0]
    ao_count = sum(1 for r in results if r['has_ao'])
    cited_count = sum(1 for r in results if r['cited'])
    avg_pos = sum(r['position'] for r in ranked) / len(ranked) if ranked else 0
    cost = len(results) * 0.005
    lines = []
    lines.append(f'\nSummary:')
    lines.append(f'  Ranked keywords: {len(ranked)}/{len(results)}')
    lines.append(f'  Average position: {avg_pos:.1f}')
    lines.append(f'  Improved: {len(improved)} | Declined: {len(declined)}')
    lines.append(f'  AI Overview coverage: {ao_count}/{len(results)} ({ao_count/len(results)*100:.0f}%)')
    lines.append(f'  Brand cited in AO: {cited_count}/{len(results)} ({cited_count/len(results)*100:.0f}%)')
    lines.append(f'  Report cost: ${cost:.3f}')
    return '\n'.join(lines)

print(summary_metrics(results))

Paso 4: Paquete como script ejecutable

Cree el script que la habilidad Claude Code pueda ejecutar.

Python
def run_weekly_report():
    """Main entry point for /weekly-report skill."""
    print('Generating weekly SEO report...')
    print(f'Checking {len(KEYWORDS)} keywords for {MY_DOMAIN}\n')
    results = weekly_report()
    report = format_report(results)
    summary = summary_metrics(results)
    output = f'{report}{summary}'
    print(output)
    # Save to file for reference
    filename = f'report_{datetime.now().strftime("%Y%m%d")}.txt'
    with open(filename, 'w') as f:
        f.write(output)
    print(f'\nSaved to {filename}')
    return output

# Run: python weekly_report.py
# Or as Claude Code skill: /weekly-report
run_weekly_report()

Ejemplo en Python

Python
import os, requests, json
SH = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}

def report(keywords, domain):
    for kw in keywords:
        data = requests.post('https://api.scavio.dev/api/v1/search',
            headers=SH, json={'query': kw, 'country_code': 'us', 'include_ai_overview': True}).json()
        pos = next((r['position'] for r in data.get('organic_results', [])
            if domain in r.get('link', '')), None)
        ao = bool(data.get('ai_overview'))
        print(f'{kw:30} | #{pos or "-":>3} | AO: {"Y" if ao else "N"}')
    print(f'Cost: ${len(keywords) * 0.005:.3f}')

report(['serp api', 'search api python'], 'scavio.dev')

Ejemplo en JavaScript

JavaScript
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
async function report(keywords, domain) {
  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', include_ai_overview: true })
    }).then(r => r.json());
    const pos = (data.organic_results || []).find(r => (r.link||'').includes(domain))?.position;
    console.log(`${kw.padEnd(30)} | #${pos || '-'} | AO: ${data.ai_overview ? 'Y' : 'N'}`);
  }
}
report(['serp api', 'search api python'], 'scavio.dev').catch(console.error);

Salida esperada

JSON
Generating weekly SEO report...
Checking 5 keywords for scavio.dev

Weekly SEO Report - 2026-05-19
Domain: scavio.dev
Keywords: 5

Keyword                        |  Pos |  Chg |  AO | Cited
------------------------------------------------------------
serp api                       |   #4 |   +1 |   Y |     Y
search api python              |   #7 |   -2 |   Y |     N
web scraping api               |   #6 |    0 |   N |     N
ai agent search tool           |   #3 |   +3 |   Y |     Y
mcp search server              |   #5 |  NEW |   Y |     N

Summary:
  Ranked keywords: 5/5
  Average position: 5.0
  Improved: 2 | Declined: 1
  AI Overview coverage: 4/5 (80%)
  Brand cited in AO: 2/5 (40%)
  Report cost: $0.025

Tutoriales relacionados

  • Cómo crear un rastreador de clasificación de palabras clave hecho por usted mismo
  • Cómo ejecutar una auditoría GEO/AEO con una API de búsqueda
  • Cómo realizar un seguimiento de la visibilidad GEO con una API de búsqueda

Preguntas frecuentes

La mayoria de los desarrolladores completan este tutorial en 15 a 30 minutos. Necesitaras una clave API de Scavio (el plan gratuito funciona) y un entorno de Python o JavaScript.

Claude Code CLI instalado. Python 3.8+. Una clave API de Scavio de scavio.dev. Orientar palabras clave para realizar un seguimiento. Una clave API de Scavio te da 50 creditos gratuitos al registrarte.

Si. El plan gratuito incluye 50 creditos al registrarte, mas que suficiente para completar este tutorial y crear un prototipo funcional.

Scavio tiene un paquete nativo de LangChain (langchain-scavio), un servidor MCP y una API REST simple que funciona con cualquier cliente HTTP. Este tutorial usa the raw REST API, pero puedes adaptarlo al framework que prefieras.

Recursos relacionados

Best Of

Las mejores herramientas de SEO para Claude Code en 2026

Read more
Use Case

Automatización SEO de Claude Code

Read more
Use Case

Informes SEO semanales con Claude Code

Read more
Glossary

Habilidad de Claude Code para SEO

Read more
Comparison

Perplexity Pro CLI (via Comet + MCP) vs Claude Code

Read more
Best Of

La mejor API de búsqueda para Claude Code en 2026

Read more

Empieza a construir

Desarrolle una habilidad de Claude Code de informe semanal que extraiga datos SERP, realice un seguimiento de las clasificaciones y formatee un panel. API de Python + Scavio.

Obtener clave API gratuitaLeer la documentacion
ScavioScavio

API de busqueda en tiempo real para agentes de IA. Busca en todas las plataformas, no solo en Google.

Producto

  • Funciones
  • Precios
  • Panel
  • Afiliados

Desarrolladores

  • Documentacion
  • Referencia de API
  • Inicio rapido
  • Integracion MCP
  • Python SDK

Alternativas

  • Alternativa a Tavily
  • Alternativa a SerpAPI
  • Alternativa a Firecrawl
  • Alternativa a Exa

Herramientas

  • Formateador JSON
  • cURL a codigo
  • Contador de tokens
  • Todas las herramientas

© 2026 Scavio. Todos los derechos reservados.

Featured on TAAFT
Terminos de servicioPolitica de privacidad