n8n+DiffHook

Web scraping con n8n — guiado por el diff, webhook-first

Apunta DiffHook a las páginas que quieres raspar, describe qué extraer con un selector CSS, y n8n recibe el diff HTML cada vez que se mueve — ya cacheado, ya deduplicado, ya firmado.

El scraper habitual en n8n es un Schedule trigger + HTTP Request + HTML Extract + un nodo Code que compara contra un datastore. Funciona, pero raspa en cada tick aunque nada haya cambiado, y la lógica de «¿es distinto a la vez anterior?» acaba reinventando una pequeña base de datos dentro de n8n. DiffHook saca el fetch, el parseo HTML y el diff fuera de n8n: el flujo se ejecuta una vez por cambio real — nada más.

n8n

El hub completo de n8n + DiffHook

Todas las recetas, plantillas y precios de n8n en un solo lugar.

Flujo

Raspa, difiere y entrega a n8n en 5 pasos

Cinco ajustes, ningún nodo Code, ninguna fontanería de almacenamiento. Todo declarativo.

01

Define qué raspar

Elige la URL objetivo y el selector CSS que aísla el bloque que te importa — una ficha de producto, una tabla de precios, una línea de changelog. DiffHook renderiza la página y se queda solo con el HTML que cuadra.

02

Elige qué cuenta como cambio

Diff solo de texto para ignorar retoques de estilo, o diff HTML completo para atrapar cada atributo. Activa include_html: true cuando quieras que n8n vea el markup en crudo junto al texto extraído.

03

Crea el monitor

Un POST a /v1/monitors con la URL, el selector, el intervalo y una entrega webhook apuntando a tu flujo de n8n. Sin cron, sin almacenamiento, sin detección de duplicados — de eso se ocupa DiffHook.

04

Recibe el diff en n8n

El trigger Webhook de n8n dispara con un cuerpo JSON firmado que contiene previous_html, current_html y el texto extraído. Verifica el HMAC en un nodo Crypto y sigue con los pasos posteriores.

05

Parsea, enriquece, enruta

Usa los nodos HTML Extract o Code de n8n para sacar campos estructurados del diff, enriquécelo con un nodo de IA si hace falta y envía el resultado a Slack, Airtable, Notion o una base de datos.

Ejemplo de API

Raspa y difiere en una sola petición

Definición de monitor declarativa — include_html expone el markup en crudo para que n8n pueda parsearlo más adelante.

POST /v1/monitors
POST https://api.diffhook.com/v1/monitors
Authorization: Bearer $DIFFHOOK_API_KEY
Content-Type: application/json

{
  "type": "html_css",
  "url": "https://competitor.example.com/products",
  "css_selector": "main .product-card",
  "include_html": true,
  "interval_seconds": 900,
  "deliveries": [
    {
      "type": "webhook",
      "url": "https://n8n.yourdomain.com/webhook/scrape-products"
    }
  ]
}

Flujo importable

Un flujo de scraping n8n listo para usar

La plantilla parsea el diff, extrae fichas de producto con HTML Extract y envía las filas estructuradas a un Google Sheet. Cambia el nodo de destino por el tuyo.

FAQ

Web scraping con n8n — preguntas frecuentes

¿Por qué mover el scraping de n8n a DiffHook?
Tres razones: cómputo, exactitud y complejidad. Cómputo, porque sondear una docena de URLs desde n8n cada cinco minutos quema minutos de ejecución haya o no cambios. Exactitud, porque programar a mano la lógica «¿es diferente?» en un nodo Code es la receta para recibir duplicados a las tres de la mañana. Complejidad, porque un monitor DiffHook es un solo POST mientras que el equivalente n8n necesita al menos cuatro nodos más un datastore.
¿Puede DiffHook raspar páginas renderizadas en JavaScript?
Sí. Pon type a html_rendered y elige el motor (Playwright o Puppeteer). DiffHook espera un selector o una señal de red en reposo antes de tomar el snapshot, así que las SPA y las apps React renderizadas en cliente funcionan sin más. Mira las páginas específicas de n8n Playwright y n8n Puppeteer para ejemplos por motor.
¿Cómo obtengo datos estructurados y no solo HTML en crudo?
Dos caminos. Usa un selector CSS muy preciso para aislar un elemento (DiffHook devuelve el texto extraído en extracted_text) o activa include_html: true y parsea el fragmento HTML dentro de n8n con el nodo HTML Extract. Ambos caminos aparecen en la plantilla importable.
¿El scraper respeta robots.txt y los límites de velocidad?
Sí. Cada monitor tiene un intervalo configurable (hasta 60 segundos en los planes de pago) y DiffHook añade jitter y backoff exponencial en respuestas 429 / 503. Si el destino sirve un disallow en robots.txt, el monitor se marca como bloqueado en el panel y deja de hacer fetch.
¿Y si el sitio pone un CAPTCHA o bloquea el scraper?
DiffHook muestra el estado del último fetch en cada monitor. Cuando un sitio empieza a bloquear, lo ves en rojo y el último cache válido se conserva para que n8n no reciba un diff inventado. Entonces puedes rotar el user agent, pasar al motor renderizado o añadir cabeceras por monitor — sin tocar n8n.

Flujos relacionados

También geniales con DiffHook

Deja de raspar por cron. Raspa al cambio.

Plan gratuito, chequeos cada 60 segundos, payloads firmados HMAC, motores Playwright y Puppeteer incluidos. Sin tarjeta, sin compromiso.