Análisis de Competencia Semanal
El problema
Tus competidores actualizan precios, lanzan nuevas funcionalidades, cambian su messaging, y tú lo descubres por accidente tres semanas después cuando un cliente te pregunta "¿por qué ellos cobran menos?". El monitoreo manual de 5-10 competidores es inviable: nadie tiene tiempo de revisar sus webs cada semana, comparar con la semana anterior, y sintetizar los cambios relevantes en un informe accionable.
Este flujo ejecuta cada lunes a las 8am, raspa las URLs definidas, extrae el texto visible, y pide a OpenAI que identifique cambios de precios, nuevas features, o cambios en posicionamiento.
Herramientas necesarias
- n8n (self-hosted o cloud)
- Schedule Trigger — lunes 8am
- HTTP Request — descarga HTML de URLs de competidores
- HTML Extract (node nativo n8n) — extrae texto limpio del HTML
- OpenAI Chat (node nativo n8n) — analiza cambios y genera resumen
- Gmail (node nativo n8n) — envía digest semanal al equipo
- Credenciales: OpenAI API key, Gmail OAuth2
- Opcional: Google Sheets para almacenar snapshot semanal y comparar con semana anterior
Configuración paso a paso
Nodo 1 — Schedule Trigger
- Trigger:
Cron - Expression:
0 8 * * 1(cada lunes a las 8:00am) - Timezone:
Europe/Madrid
Nodo 2 — Code node (lista de competidores) Define aquí las URLs a monitorear para no tener un flujo separado por cada competidor:
return [
{ json: { nombre: 'Competidor A', url: 'https://competidor-a.com/pricing', tipo: 'precios' } },
{ json: { nombre: 'Competidor B', url: 'https://competidor-b.com/', tipo: 'homepage' } },
{ json: { nombre: 'Competidor C', url: 'https://competidor-c.com/features', tipo: 'features' } }
];
Esto genera 3 items que n8n procesa en loop automáticamente.
Nodo 3 — HTTP Request (descargar páginas)
- Method:
GET - URL:
{{ $json.url }} - Response Format:
Text - Headers:
User-Agent: Mozilla/5.0 (compatible; research-bot/1.0) - Timeout:
10000ms - Ignore SSL:
truesi alguna web tiene certificado problemático - En caso de error (web caída): añade
On Error: Continue
Nodo 4 — HTML Extract
- Extraction Type:
CSS Selector - CSS Selector:
body(texto completo) o selectores más específicos comomain,article,.pricing-table - Return Value:
Text(no HTML) - Trim:
true
Nodo 5 — Truncar texto (Code node) El HTML extraído puede ser enorme. Limita a 3000 caracteres para no exceder el contexto:
return items.map(item => ({
json: {
...item.json,
texto_truncado: item.json.textContent.substring(0, 3000)
}
}));
Nodo 6 — OpenAI Chat
- Model:
gpt-4o - System: prompt de análisis (ver más abajo)
- User:
{{ $json.texto_truncado }} - Max Tokens:
500
Nodo 7 — Merge (agregar todos los análisis)
- Mode:
Append— combina los outputs de todos los competidores en un array
Nodo 8 — Gmail (Send digest)
- To:
equipo@tuempresa.com - Subject:
Informe semanal de competencia — {{ $now.format('DD/MM/YYYY') }} - Construye el cuerpo iterando sobre los items del Merge y concatenando los análisis
Ejemplo de prompt IA
Eres un analista de inteligencia competitiva. Analiza el siguiente texto extraído de la web de un competidor y detecta información relevante para nuestro negocio.
COMPETIDOR: {{ $json.nombre }}
URL: {{ $json.url }}
TIPO DE PÁGINA: {{ $json.tipo }}
CONTENIDO EXTRAÍDO:
{{ $json.texto_truncado }}
Identifica y reporta ÚNICAMENTE si encuentras:
1. PRECIOS: cualquier precio, tarifa, o plan mencionado (con los valores exactos)
2. NUEVAS FUNCIONALIDADES: features o servicios mencionados que parezcan recientes
3. POSICIONAMIENTO: cambios en cómo se describen o a quién se dirigen
4. OFERTAS/PROMOCIONES: descuentos, trials, o condiciones especiales
Si no hay nada relevante en alguna categoría, escribe "Sin cambios detectados".
Sé conciso. Formato: lista con bullets. Máximo 200 palabras.
Ahorro estimado
- Revisión manual semanal de competidores: 2-3 horas eliminadas
- Latencia en detectar cambios de precio: de semanas a días
- Informe de competencia: de nunca hacerse a entregarse automáticamente cada lunes
- Total: 2-3 horas semanales de investigación manual eliminadas