Integración

Conecta Rivalwin
con n8n

Automatiza la generación de informes de inteligencia competitiva directamente desde tus flujos de n8n. Lanza análisis, espera los resultados y envíalos donde los necesitas — sin intervención manual.

~15 minutos de configuración
Sin nodo oficial — vía HTTP Request
Autenticación vía API Key

Requisitos previos
🔑

API Key de Rivalwin

Generada desde Integraciones & API Keys en tu panel
⚙️

n8n instalado y activo

Cloud, self-hosted o desktop — cualquier versión funciona
🏷️

rival_ref del competidor

El ID interno del rival que quieres analizar (ej: rvl_4a7e9f12)
💳

Plan con acceso a API

Comprueba que tu plan incluya acceso a la API de Rivalwin
El flujo asíncrono en 2 pasos

La API de Rivalwin es asíncrona. Primero creas el informe y recibes un hash; luego consultas el estado hasta obtener los datos completos.

Paso 1
POST /new_report
Envías los parámetros del informe. Recibes un hash identificador de forma inmediata.
↓
Paso 2
POST /report_status (cada 20–30 s)
Consultas el estado con el hash. Cuando es DONE, el campo report tiene todos los datos.
↓
Resultado
Datos del informe disponibles
Anuncios, KPIs, demografía, análisis de IA y PDF. Listo para enrutar a Slack, Sheets, email, etc.
ℹ️
Tiempo de procesamiento: Los informes tardan entre 1 y 5 minutos dependiendo del volumen de anuncios y la plataforma.
Armando el flujo en n8n

Vamos a crear un flujo completo que genera un informe de Meta Ads, espera el resultado y lo procesa. Puedes adaptarlo a cualquier plataforma.

01
Trigger

Configura el disparador del flujo

Abre n8n y crea un nuevo workflow. Elige el nodo de trigger según tu caso de uso.

Schedule Trigger
o
Webhook
o
Manual Trigger

Para testear usa Manual Trigger. Para producción, Schedule Trigger te permite ejecutarlo automáticamente, por ejemplo todos los lunes a las 9:00.

Editor de n8n con el nodo trigger configurado ampliar
02
HTTP Request

Crea el informe con el nodo HTTP Request

Añade un nodo HTTP Request y configúralo para llamar al endpoint /new_report.

CampoValor
MethodPOST
URLhttps://rivalwin.com/api/v1/meta/companies/new_report
Header: X-API-KeyTu API Key de Rivalwin
Header: Content-Typeapplication/json
Body typeJSON

Body JSON del request:

JSON — Body del request
{
  "rival_ref": "rvl_4a7e9f12",
  "date_from": "{{ $now.minus(30, 'days').toFormat('yyyy-MM-dd') }}",
  "date_to": "{{ $now.minus(2, 'days').toFormat('yyyy-MM-dd') }}",
  "country": "ES"
}
⚠️
date_to debe ser como mínimo anteayer. La expresión $now.minus(2, 'days') lo calcula automáticamente.
Panel de configuración del nodo HTTP Request ampliar

Respuesta exitosa — guarda el campo hash para el siguiente paso:

JSON — Respuesta 202
{
  "hash": "abc123def456...",
  "status": "PENDING",
  "created_at": "2026-04-20 09:00:00"
}
03
Espera + Polling

Espera con un nodo Wait y consulta el estado

Añade un nodo Wait de 30 segundos antes de consultar el estado. Luego un segundo HTTP Request llama a /report_status.

HTTP Request
→
Wait 30 s
→
HTTP Request

Body del segundo HTTP Request, referenciando el hash del nodo anterior:

JSON — Body para /report_status
{
  "hash": "{{ $('HTTP Request').item.json.hash }}"
}
Nodo Wait y segundo HTTP Request ampliar
04
Lógica condicional

Verifica el estado con un nodo IF

Añade un nodo IF que evalúe el campo status de la respuesta.

PENDINGEn cola — vuelve a esperar y a consultar
PROCESSINGGenerándose — vuelve a esperar y a consultar
DONEListo — procesa el campo report
ERRORHa fallado — usa Stop and Error
  • Condición: {{ $json.status }} equals DONE
  • True → procesa el informe
  • False → si ERROR usa Stop and Error; si PENDING/PROCESSING vuelve al Wait
💡
Para evitar bucles infinitos, usa un nodo Code que cuente los intentos y corte tras 10 reintentos.
Flujo completo con nodo IF y bucle de polling ampliar
05
Procesamiento

Extrae los datos del informe con un nodo Code

Cuando el estado es DONE, el campo report contiene toda la información.

JavaScript — Nodo Code en n8n
const report = $input.item.json.report;

// Datos generales
const rival = report.rival.name;
const totalAds = report.kpis.ads_total;
const impressionsMax = report.kpis.impressions_upper;
const pdfUrl = report.pdf_url;
const aiAnalysis = report.insights.gpt_analysis;

// Top 3 anuncios con más alcance
const topAds = report.ads
  .filter(ad => ad.reach != null)
  .sort((a, b) => b.reach - a.reach)
  .slice(0, 3)
  .map(ad => ({
    id: ad.ad_id,
    copy: ad.content ? ad.content.slice(0, 120) + '...' : '(sin texto)',
    reach: ad.reach,
    format: ad.display_format,
    image: ad.image_url || null
  }));

return [{
  json: { rival, totalAds, impressionsMax, pdfUrl, aiAnalysis, topAds }
}];
Nodo Code con output de datos procesados ampliar
06
Destino final

Envía los datos donde los necesitas

Con los datos procesados, conecta cualquier nodo destino:

Slack
Google Sheets
Gmail
Notion
Airtable

Ejemplo de mensaje de Slack con el resumen del informe:

Mensaje Slack
🔍 Nuevo informe de competencia listo

*Competidor:* {{ $json.rival }}
*Anuncios activos:* {{ $json.totalAds }}
*Impresiones estimadas:* {{ $json.impressionsMax }}

*Top anuncio:* {{ $json.topAds[0].copy }}

📄 Ver PDF completo: {{ $json.pdfUrl }}
Usar webhook en lugar de polling

Si tienes un servidor público, puedes configurar un webhook en Rivalwin para que te notifique automáticamente cuando el informe esté listo.

✅
Ventaja: Rivalwin llama a tu URL de n8n automáticamente cuando el informe termina — sin polling.
  1. En n8n, crea un workflow con un nodo Webhook como trigger.
  2. Copia la URL pública del webhook (ej: https://tu-n8n.com/webhook/rivalwin).
  3. En Rivalwin, ve a Integraciones & API Keys y pega esa URL en el campo Webhook.
  4. Cuando generes un informe, Rivalwin enviará el payload completo a tu URL en cuanto termine.
Panel de Integraciones de Rivalwin con el campo webhook configurado ampliar
Errores comunes y cómo resolverlos
CódigoErrorSolución en n8n
401invalid_api_keyComprueba que el header X-API-Key esté correctamente configurado
402insufficient_creditsRevisa los créditos en tu panel
403api_not_in_planTu plan no incluye acceso a la API. Actualiza el plan en Rivalwin
404rival_not_foundEl rival_ref no existe. Verifica el ID en tu panel
429cooldown_activeEspera al menos 10 segundos entre informes. Aumenta el tiempo del nodo Wait
400invalid_date_rangedate_to no puede ser hoy ni futuro. Usa $now.minus(2, 'days')