Biblioteca · Marketing, ventas y analítica con IA

Inteligencia competitiva con IA: monitorea a tu competencia en automático

Creador60 minActualizado: octubre de 2026
70 de 105 en la biblioteca

Tiempo: unos 25 min de teoría + 35 min de práctica


Lo esencial

🎨 Imagínalo así: la inteligencia militar trabaja sin parar. Mientras el comandante duerme, los exploradores vigilan las posiciones del adversario, registran cada movimiento y cada cambio, y por la mañana le dejan un resumen en la mesa. Antes, esa "inteligencia" en un negocio la hacía un analista: 3 días juntando datos a mano, Excel y un reporte consolidado una vez por trimestre. Para entonces, el competidor ya había subido precios, lanzado una función nueva y cambiado el enfoque de su sitio. Hoy lo hace un sistema automático durante la noche, y por la mañana recibes el resumen listo en tu correo o en un chat.

En esta lección vas a construir justo ese sistema: configurarás el monitoreo automático de tu competencia y pondrás a correr un reporte semanal con IA.


Conceptos clave

  • Inteligencia competitiva: reunir y analizar de forma sistemática datos sobre lo que hacen tus competidores para tomar decisiones estratégicas
  • Ahrefs MCP: integración de los datos SEO (optimización para buscadores) de Ahrefs en Claude para analizar el tráfico orgánico y las palabras clave de la competencia
  • Playwright: una biblioteca de Microsoft para automatizar el navegador: permite extraer datos (scraping) de cualquier sitio
  • ChangeDetection.io: un servicio que vigila cambios en páginas web y avisa
  • SimilarWeb API (API: interfaz de programación de aplicaciones): datos sobre la audiencia, las fuentes de tráfico y la demografía de los visitantes de la competencia
  • Price scraping: recolección automática y periódica de los precios de la competencia
  • Análisis diferencial: comparar el "antes / después" para detectar cambios estratégicos
  • Síntesis de datos: cuando Claude convierte hechos sueltos en un reporte estratégico coherente

Teoría

Inteligencia competitiva: qué cambió con la IA

Antes de la IA, el análisis de la competencia era un ritual trimestral. Contratas a un becario o a un analista, se pasa una semana revisando sitios, exporta datos de Semrush y arma una tabla. La miras y te das cuenta de que los datos ya son viejos: el competidor lanzó ayer una función nueva.

Hoy la arquitectura es otra:

  • Los datos se reúnen automáticamente (Playwright, ChangeDetection, API)
  • La actualización es diaria o semanal, sin que intervenga una persona
  • El análisis es inmediato, con Claude
  • La entrega llega a un chat o al correo el lunes en la mañana

No es solo más rápido. Es otra clase de herramienta: ves el mercado en tiempo real, no una foto del trimestre pasado.


Qué vigilar: el mapa de observación de la competencia

No todo importa igual. Esto es lo que conviene seguir, en orden de prioridad:

Señal Qué significa Herramienta
Cambio de precios El competidor prueba un nuevo modelo de monetización Scraping con Playwright
Páginas nuevas en el sitio Entran a un nicho nuevo o lanzan una función ChangeDetection.io
Crecimiento del tráfico orgánico Encontraron una estrategia SEO que funciona Ahrefs MCP / Semrush
Palabras clave nuevas A qué le apuestan en contenido Ahrefs / SpyFu
Cambio en la página principal Reposicionamiento del producto o de su propuesta de valor ChangeDetection.io
Vacantes En qué invierten (si contratan desarrolladores, viene un producto) La página de empleos del sitio del competidor (ChangeDetection.io), LinkedIn a mano
Reseñas de clientes Puntos débiles (las quejas = tus oportunidades) G2, Capterra, App Store

🎨 Imagínalo así: un ajedrecista mira todo el tablero, no solo sus piezas. La inteligencia competitiva es tu mirada a la parte del tablero del otro. Si ves hacia dónde se mueven sus piezas, entiendes su plan tres jugadas adelante.


Ahrefs MCP: datos SEO directo en Claude

Ahrefs es una de las herramientas SEO líderes: muestra el tráfico orgánico de los sitios, las palabras clave con las que posicionan y de dónde vienen sus enlaces. La integración MCP (Model Context Protocol) te deja consultar esos datos directamente desde Claude, sin cambiar de herramienta. Ahrefs y Semrush tienen conexión MCP; la disponibilidad depende del plan, revísala en tu cuenta del servicio.

Qué puedes preguntar con Ahrefs MCP:

  • ¿Cuánto tráfico orgánico tiene competitor.com?
  • ¿Con qué palabras clave están en el top 3 de Google?
  • ¿Qué páginas les traen más tráfico?
  • ¿Con qué palabras clave nuevas empezaron a posicionar en el último mes?

Ejemplo práctico de petición en Claude con Ahrefs MCP:

Escribe esto en el chat
Usa Ahrefs MCP para analizar al competidor [URL].

Necesito:
1. El tráfico orgánico total de los últimos 3 meses (tendencia)
2. Las 10 páginas con más tráfico
3. Palabras clave en posiciones 4-10 (opportunity keywords, casi en el top)
4. Palabras clave nuevas de los últimos 30 días

Con base en el análisis:
- ¿Qué le funciona al competidor en SEO?
- ¿Qué palabras clave me conviene atacar?
- ¿Hay temas de contenido que se les pasaron?

Sin MCP: la alternativa con la API de Ahrefs:

python
import requests
import anthropic
import json
from datetime import date

def get_ahrefs_data(domain: str, api_key: str) -> dict:
    """Obtiene las métricas SEO principales de un dominio con la Ahrefs API v3.
    La API está disponible en los planes de pago. Revisa los parámetros obligatorios y los límites en docs.ahrefs.com:
    los parámetros de los endpoints cambian."""
    
    headers = {"Authorization": f"Bearer {api_key}"}
    base = "https://api.ahrefs.com/v3"
    
    # Métricas orgánicas
    metrics_resp = requests.get(
        f"{base}/site-explorer/metrics",
        headers=headers,
        params={"target": domain, "mode": "domain", "date": date.today().isoformat()}
    )
    
    # Páginas principales
    pages_resp = requests.get(
        f"{base}/site-explorer/top-pages",
        headers=headers,
        params={"target": domain, "mode": "domain", "limit": 10}
    )
    
    return {
        "metrics": metrics_resp.json() if metrics_resp.ok else {},
        "top_pages": pages_resp.json() if pages_resp.ok else {}
    }

# Análisis con Claude
client = anthropic.Anthropic()

competitors = ["competitor1.com", "competitor2.com", "competitor3.com"]
# AHREFS_API_KEY = os.getenv("AHREFS_API_KEY")

# Para la demostración, la estructura de datos que vas a recibir:
demo_data = {
    "competitor1.com": {
        "organic_traffic": 45200,
        "organic_keywords": 3840,
        "top_pages": [
            {"url": "/blog/ai-automation-guide", "traffic": 8400},
            {"url": "/pricing", "traffic": 4200},
        ]
    }
}

message = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=1500,
    messages=[{
        "role": "user",
        "content": f"""Analiza los datos SEO de la competencia:

{json.dumps(demo_data, ensure_ascii=False, indent=2)}

Mi sitio es [tu dominio], nicho: herramientas de IA para pequeños negocios.

Responde:
1. ¿Quién lidera en orgánico y por qué?
2. ¿Qué temas o páginas generan más tráfico?
3. ¿Qué palabras clave me conviene atacar primero?
4. ¿Qué se les escapa a los competidores (huecos de contenido)?"""
    }]
)
print("".join(b.text for b in message.content if b.type == "text"))

Playwright: scraping de cualquier sitio

Playwright es una biblioteca de Microsoft para automatizar el navegador. A diferencia de las peticiones HTTP simples, Playwright abre un navegador de verdad, así que funciona incluso con sitios que se dibujan con JavaScript (React, Vue, Next.js).

Instalación:

bash
pip install playwright
playwright install chromium

Scraping de los precios de la competencia:

python
import asyncio
from playwright.async_api import async_playwright
import json
from datetime import datetime

async def scrape_pricing_page(url: str) -> dict:
    """Extrae la página de precios de un competidor"""
    
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()
        
        # Nos presentamos como un navegador normal; no evadimos la protección del sitio
        await page.set_extra_http_headers({
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"
        })
        
        await page.goto(url, wait_until="networkidle", timeout=30000)
        
        # Extraemos el texto de la página
        content = await page.inner_text("body")
        
        # Buscamos los precios con JavaScript
        prices = await page.evaluate("""
            () => {
                const priceElements = document.querySelectorAll('[class*="price"], [class*="plan"], [class*="tier"]');
                return Array.from(priceElements).map(el => el.innerText.trim()).filter(t => t.length > 0);
            }
        """)
        
        await browser.close()
        
        return {
            "url": url,
            "scraped_at": datetime.now().isoformat(),
            "page_text": content[:5000],  # los primeros 5000 caracteres
            "price_elements": prices[:20]
        }

async def monitor_competitors(competitor_urls: list) -> list:
    """Vigila una lista de competidores en paralelo"""
    tasks = [scrape_pricing_page(url) for url in competitor_urls]
    results = await asyncio.gather(*tasks, return_exceptions=True)
    
    return [r for r in results if not isinstance(r, Exception)]

# Arranque
competitors_pricing = [
    "https://competitor1.com/pricing",
    "https://competitor2.com/plans",
]

results = asyncio.run(monitor_competitors(competitors_pricing))

# Guardamos con la fecha (para el análisis diferencial)
filename = f"competitor_data_{datetime.now().strftime('%Y-%m-%d')}.json"
with open(filename, 'w', encoding='utf-8') as f:
    json.dump(results, f, ensure_ascii=False, indent=2)

print(f"Datos guardados: {filename}")

El scraping y las reglas. Reúne solo páginas públicas, lee el robots.txt y los términos de uso del sitio, no evadas la protección contra bots y no generes carga de más: para monitorear, una vez por semana basta. Si necesitas una o dos páginas sin escribir código propio, te sirve Firecrawl (entrega la página como markdown limpio).

Análisis diferencial (qué cambió):

python
import json
from datetime import datetime, timedelta

def find_changes(old_file: str, new_file: str) -> dict:
    """Compara dos fotos de los datos de la competencia"""
    
    with open(old_file) as f:
        old_data = json.load(f)
    with open(new_file) as f:
        new_data = json.load(f)
    
    changes = []
    
    old_by_url = {r['url']: r for r in old_data}
    new_by_url = {r['url']: r for r in new_data}
    
    for url in new_by_url:
        if url in old_by_url:
            old_text = old_by_url[url].get('page_text', '')
            new_text = new_by_url[url].get('page_text', '')
            
            # Comparación simple; en producción usa difflib
            if old_text != new_text:
                changes.append({
                    "url": url,
                    "change_detected": True,
                    "old_length": len(old_text),
                    "new_length": len(new_text),
                    "delta": len(new_text) - len(old_text)
                })
    
    return changes

ChangeDetection.io: monitoreo sin código

Para páginas que no necesitan un análisis complicado, ChangeDetection.io es más sencillo y confiable que escribir tu propio scraper.

Cómo configurarlo:

  1. Regístrate en changedetection.io (la versión que instalas en tu propio servidor es gratis, la versión en la nube es de pago; precios en el sitio)
  2. Agrega la URL del competidor
  3. Indica qué elementos vigilar (puede ser con un selector CSS)
  4. Configura el aviso: correo o webhook

Webhook → n8n → Claude → aviso en un chat:

Código
ChangeDetection.io detectó un cambio
→ Webhook POST a n8n
→ n8n: petición a Claude con el texto de "antes" y "después"
→ Claude analiza: ¿qué cambió en lo estratégico?
→ Te llega un aviso por Telegram (o por correo, o por Slack) con el análisis

Ejemplo de workflow de n8n (mira la lección n8n y workflows con IA) con un paso extra de Claude:

Escribe esto en el chat
Prompt de sistema para Claude en n8n:
Eres un analista de inteligencia competitiva.
Un competidor cambió una página de su sitio.

Esto es lo que había:
{old_content}

Esto es lo que hay ahora:
{new_content}

Analiza:
1. ¿Qué cambió exactamente (en concreto)?
2. ¿Qué dice esto en lo estratégico?
3. ¿Necesitamos reaccionar? ¿Cómo?

Sé breve: 3-5 oraciones.

SimilarWeb API: la audiencia de la competencia

SimilarWeb muestra lo que Ahrefs no: las fuentes de tráfico (no solo orgánico, también publicidad pagada, directo, referidos), la geografía de la audiencia, la demografía y el comportamiento.

Lo que conviene saber:

  • La API oficial está pensada para cuentas empresariales y es cara (precio bajo solicitud)
  • Para vigilar a pocos competidores basta la extensión gratuita de SimilarWeb para el navegador (tomas los datos a mano una vez al mes)
  • En los marketplaces de API hay envoltorios no oficiales, pero sus condiciones y la calidad de sus datos las tienes que revisar tú

Lo que de verdad te sirve saber de un competidor en SimilarWeb:

  • % del tráfico que viene de búsqueda vs. directo vs. redes sociales (el tráfico directo = audiencia leal)
  • Las principales fuentes de tráfico de referidos (alianzas y menciones que funcionan)
  • La duración promedio de la sesión (qué tan involucrada está la audiencia)
  • Los países con más audiencia

El pipeline completo: reporte semanal de inteligencia

Esta es la arquitectura del sistema que vas a construir:

Código
[LUNES 06:00, automático]
    │
    ├─ Scraper con Playwright: reúne los datos de precios de la competencia
    ├─ ChangeDetection: revisa cambios en los sitios
    └─ Ahrefs API: descarga las métricas SEO
    │
    ▼
[Análisis de Claude]
    Junta todos los datos
    Compara con la semana pasada
    Arma un reporte con conclusiones
    │
    ▼
[Bot de Telegram, 08:00]
    📊 Reporte semanal de la competencia
    Competidor 1: sin cambios
    Competidor 2: ⚠️ Bajó el precio de $49 → $39
    Competidor 3: 🆕 Página nueva /ai-assistant
    
    Análisis de Claude: [conclusiones estratégicas]

En el ejemplo el reporte llega por Telegram porque su API para bots es sencilla; puedes cambiar ese último paso por correo o Slack.


Script: reporte semanal automático

python
import asyncio
import anthropic
import json
import os
from datetime import datetime
from playwright.async_api import async_playwright
import requests

ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY")
TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID")

COMPETITORS = [
    {
        "name": "Competidor A",
        "pricing_url": "https://competitorA.com/pricing",
        "homepage": "https://competitorA.com"
    },
    {
        "name": "Competidor B",
        "pricing_url": "https://competitorB.com/plans",
        "homepage": "https://competitorB.com"
    },
]

async def scrape_page_text(url: str) -> str:
    """Devuelve el contenido de texto de la página"""
    try:
        async with async_playwright() as p:
            browser = await p.chromium.launch(headless=True)
            page = await browser.new_page()
            await page.goto(url, wait_until="domcontentloaded", timeout=20000)
            text = await page.inner_text("body")
            await browser.close()
            return text[:8000]
    except Exception as e:
        return f"Error de scraping en {url}: {e}"

def load_previous_data(filename: str) -> dict:
    try:
        with open(filename) as f:
            return json.load(f)
    except FileNotFoundError:
        return {}

def save_current_data(data: dict, filename: str):
    with open(filename, 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

def send_telegram(message: str):
    url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
    requests.post(url, json={
        "chat_id": TELEGRAM_CHAT_ID,
        "text": message,
        "parse_mode": "Markdown"
    })

async def generate_weekly_report():
    print(f"Empiezo a reunir datos: {datetime.now()}")
    
    # Cargamos los datos anteriores
    prev_data = load_previous_data("competitor_snapshot.json")
    current_data = {}
    
    # Hacemos scraping de todos los competidores
    for competitor in COMPETITORS:
        print(f"  Extrayendo {competitor['name']}...")
        pricing_text = await scrape_page_text(competitor['pricing_url'])
        homepage_text = await scrape_page_text(competitor['homepage'])
        
        current_data[competitor['name']] = {
            "scraped_at": datetime.now().isoformat(),
            "pricing": pricing_text,
            "homepage": homepage_text
        }
    
    # Guardamos la foto actual
    save_current_data(current_data, "competitor_snapshot.json")
    
    # Armamos el contexto para Claude
    analysis_input = []
    for name, data in current_data.items():
        prev = prev_data.get(name, {})
        analysis_input.append({
            "competitor": name,
            "current_pricing": data['pricing'][:2000],
            "current_homepage": data['homepage'][:1000],
            "previous_pricing": prev.get('pricing', 'Sin datos')[:2000],
            "change_detected": data['pricing'] != prev.get('pricing', '')
        })
    
    # Análisis con Claude
    client = anthropic.Anthropic(api_key=ANTHROPIC_API_KEY)
    
    message = client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=1500,
        messages=[{
            "role": "user",
            "content": f"""Este es el reporte semanal de inteligencia competitiva.

Datos de los competidores (semana actual vs. la anterior):
{json.dumps(analysis_input, ensure_ascii=False, indent=2)}

Escribe un reporte breve (hasta 500 palabras) para un chat, con emojis:
1. 🔍 Qué cambió en cada competidor
2. ⚠️ Señales importantes que requieren que reaccionemos
3. 💡 Una recomendación estratégica para esta semana

Si no hubo cambios, dilo también de forma directa."""
        }]
    )
    
    report = "".join(b.text for b in message.content if b.type == "text")
    
    # Enviamos a Telegram
    header = f"📊 *Inteligencia semanal*: {datetime.now().strftime('%d/%m/%Y')}\n\n"
    send_telegram(header + report)
    
    print("Reporte enviado a Telegram")

# Arranque
asyncio.run(generate_weekly_report())

Automatización con cron (que corra cada lunes a las 06:00):

bash
# crontab -e
0 6 * * 1 cd /path/to/project && python competitive_monitor.py >> logs/ci_$(date +\%Y\%m\%d).log 2>&1

Práctica

Tarea: configurar el monitoreo de 3 competidores con reporte semanal


Paso 1: preparar el entorno (5 minutos)

bash
mkdir competitive-intel && cd competitive-intel
python3 -m venv venv && source venv/bin/activate
pip install playwright anthropic python-dotenv requests
playwright install chromium

# Crea el archivo .env:
# ANTHROPIC_API_KEY=sk-ant-...
# TELEGRAM_TOKEN=...
# TELEGRAM_CHAT_ID=...

Paso 2: la primera foto a mano (10 minutos)

Crea first_snapshot.py usando el script generate_weekly_report() de la teoría.

Córrelo a mano para obtener la foto base:

bash
python first_snapshot.py

Verifica que se haya creado competitor_snapshot.json con datos reales de la competencia.


Paso 3: configurar ChangeDetection.io (5 minutos)

  1. Instala changedetection.io en tu equipo o servidor (esa versión es gratis) o usa la versión en la nube
  2. Agrega las URL de las páginas de precios de los tres competidores
  3. Activa los avisos por correo o webhook
  4. Programa la revisión: cada 24 horas

Ahora, ante cualquier cambio en la página, te llegará un aviso sin correr scripts.


Paso 4: probar el análisis manual con Claude (10 minutos)

python
# test_analysis.py
import anthropic
import json

client = anthropic.Anthropic()

# Cargamos los datos extraídos
with open('competitor_snapshot.json') as f:
    data = json.load(f)

# Les damos formato para Claude
summary = ""
for name, info in data.items():
    summary += f"\n### {name}\n"
    summary += f"Página de precios (primeros 500 caracteres):\n{info['pricing'][:500]}\n"

message = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=1000,
    messages=[{
        "role": "user",
        "content": f"""Estos son los datos de los sitios de la competencia:

{summary}

Dime:
1. ¿Qué modelo de precios usa cada uno?
2. ¿Quién es el más barato y quién el más caro?
3. ¿Qué parece lo más fuerte de su oferta?
4. ¿Qué puntos débiles ves?"""
    }]
)

print("".join(b.text for b in message.content if b.type == "text"))

Paso 5: configurar el arranque automático (5 minutos)

En Mac, con launchd o simplemente con cron:

bash
# Abrimos el crontab
crontab -e

# Agregamos la línea (cada lunes a las 07:00)
0 7 * * 1 /Users/tu-usuario/competitive-intel/venv/bin/python /Users/tu-usuario/competitive-intel/competitive_monitor.py

En un VPS, la misma línea en el crontab del usuario.

Alternativa: correrlo con el Schedule Trigger de n8n (lección n8n y workflows con IA): sin configurar un servidor, solo un nodo con horario.


Herramientas y recursos

  • Playwright: automatización del navegador para scraping, gratis (Microsoft)
  • ChangeDetection.io: monitoreo de cambios; gratis si lo instalas tú, de pago en la nube
  • Ahrefs: datos SEO de la competencia; hay un Ahrefs Free gratuito para revisar tu propio sitio; precios de los planes de pago y condiciones de la API en su sitio
  • Semrush: alternativa a Ahrefs, con periodo de prueba
  • SpyFu: alternativa enfocada en datos de PPC (de pago)
  • SimilarWeb: audiencia y tráfico, extensión gratuita del navegador para datos básicos
  • Anthropic API: Claude para sintetizar y analizar los datos; los nombres de modelo en el código de la lección son de octubre de 2026; precios y versiones vigentes: Lo vigente
  • G2 / Capterra: reseñas de los clientes de la competencia (una mina de sus debilidades)

Ideas clave

"La inteligencia competitiva antes costaba 3 días de un analista. Ahora, un script de 100 líneas y Claude. Pero el valor no está en los datos: está en actuar con base en ellos antes de que el competidor afiance su posición."

"El mejor hallazgo en un análisis de la competencia no es lo que hacen bien, sino lo que hacen mal. Las reseñas de los clientes de la competencia son, literalmente, una lista de funciones que hay que construir para atraer a su audiencia."

"Un reporte semanal automático no es un lujo. Es higiene. El mercado cambia cada semana. Quien lo mira una vez por trimestre siempre va atrás."


Siguiente lección

→ CRM en piloto automático: HubSpot + IA

Pasamos de observar el mercado a tus propias ventas: cómo Claude llena las fichas de clientes, califica prospectos y escribe los mensajes de seguimiento.

La marca se guarda solo en este navegador y no se envía a ningún sitio. Mi progreso