n8n+DiffHook

Web scraping com n8n — guiado pelo diff, webhook-first

Aponte o DiffHook para as páginas que quer raspar, descreva o que extrair com um seletor CSS, e o n8n recebe o diff HTML a cada movimento — já cacheado, já deduplicado, já assinado.

O scraper típico em n8n é um Schedule trigger + HTTP Request + HTML Extract + um nó Code que compara contra um datastore. Funciona, mas raspa a cada tick mesmo quando nada mudou, e a lógica de «isso é diferente da última vez?» acaba reinventando um pequeno banco de dados dentro do n8n. O DiffHook tira fetch, parsing HTML e diff de dentro do n8n — o fluxo roda uma vez por mudança real, nada mais.

n8n

O hub completo de n8n + DiffHook

Todas as receitas, templates e planos de n8n em um só lugar.

Fluxo

Raspe, diferencie e entregue ao n8n em 5 passos

Cinco ajustes, nenhum nó Code, nenhuma amarração de storage. Tudo declarativo.

01

Defina o que raspar

Escolha a URL alvo e o seletor CSS que isola o bloco que importa — um cartão de produto, uma tabela de preços, uma entrada de changelog. O DiffHook renderiza a página e guarda só o HTML correspondente.

02

Escolha o que conta como mudança

Diff só de texto para ignorar ajustes de estilo, ou diff HTML completo para pegar cada atributo. Ligue include_html: true quando quiser que o n8n veja o markup cru junto com o texto extraído.

03

Crie o monitor

Um único POST em /v1/monitors com URL, seletor, intervalo e uma entrega do tipo webhook apontando para o seu fluxo n8n. Sem cron, sem storage, sem deduplicação — isso tudo é com o DiffHook.

04

Receba o diff no n8n

O trigger Webhook do n8n dispara com um corpo JSON assinado contendo previous_html, current_html e o texto extraído. Verifique o HMAC num nó Crypto e siga para os passos seguintes.

05

Parseie, enriqueça, roteie

Use os nós HTML Extract ou Code do n8n para extrair campos estruturados do diff, enriqueça com um nó de IA se precisar, e envie o resultado para Slack, Airtable, Notion ou um banco de dados.

Exemplo de API

Raspe e diferencie em uma só requisição

Definição de monitor declarativa — include_html expõe o markup cru para que o n8n consiga parsear mais à frente.

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"
    }
  ]
}

Fluxo importável

Um fluxo de scraping n8n pronto para uso

O template parseia o diff, extrai os cards de produto com HTML Extract e envia as linhas estruturadas para um Google Sheet. Troque o nó de destino pelo seu.

Perguntas frequentes

Web scraping n8n — perguntas comuns

Por que tirar o scraping do n8n e passar para o DiffHook?
Três motivos: computação, correção e complexidade. Computação, porque consultar uma dúzia de URLs pelo n8n a cada cinco minutos queima minutos de execução tenha havido mudança ou não. Correção, porque escrever à mão a lógica «é diferente?» num nó Code é receita para alertas duplicados às 3 da manhã. Complexidade, porque um monitor DiffHook é um único POST, enquanto o equivalente no n8n exige ao menos quatro nós mais um datastore.
O DiffHook raspa páginas renderizadas em JavaScript?
Sim. Defina type como html_rendered e escolha o motor (Playwright ou Puppeteer). O DiffHook espera por um seletor ou por sinal de rede ociosa antes do snapshot, então SPAs e apps React renderizadas no cliente funcionam de cara. Veja as páginas dedicadas de n8n Playwright e n8n Puppeteer para exemplos por motor.
Como obtenho dados estruturados, não só HTML cru?
Duas formas. Use um seletor CSS bem específico para isolar um elemento (o DiffHook devolve o texto extraído em extracted_text) ou ligue include_html: true e parseie o fragmento HTML dentro do n8n com o nó HTML Extract. Ambos os caminhos estão no template importável.
O scraper respeita robots.txt e limites de requisição?
Sim. Cada monitor tem intervalo configurável (até 60 segundos nos planos pagos) e o DiffHook adiciona jitter e backoff exponencial em respostas 429 / 503. Se o destino serve um disallow no robots.txt, o monitor é marcado como bloqueado no painel e para de buscar.
E se o site colocar CAPTCHA ou bloquear o scraper?
O DiffHook exibe o status do último fetch em cada monitor. Quando um site começa a bloquear, ele aparece em vermelho e o último cache válido é preservado para que o n8n não receba um diff fantasma. Aí você pode rotacionar o user agent, trocar para o motor renderizado ou adicionar headers por monitor — sem mexer no n8n.

Fluxos relacionados

Também ótimos com o DiffHook

Pare de raspar por cron. Raspe na mudança.

Plano gratuito, checagens a cada 60 segundos, payloads assinados com HMAC, motores Playwright e Puppeteer inclusos. Sem cartão, sem compromisso.