---
title: "n8n PDF Tracking Node - Instant Webhooks"
description: "O nó da comunidade EveryPage para n8n: PDF binário na entrada, link rastreado na saída, gatilhos de webhook instantâneos com HMAC e uso por AI Agent."
canonical: "https://everypage.co/pt/integrations/n8n"
last-updated: "2026-08-28"
---

# n8n PDF Tracking Node - Instant Webhooks

Nó da comunidade n8n

# O nó de compartilhamento de documentos para quem lê o código-fonte

O n8n-nodes-everypage transforma qualquer PDF do seu fluxo em um link de compartilhamento rastreado: binário de entrada, URL de compartilhamento + QR + embed de saída, e gatilhos instantâneos com verificação HMAC no momento em que os documentos são lidos. Os nós de AI Agent podem usar tudo isso como uma ferramenta tipada.

## Como o nó funciona.

Um nó, três recursos - Arquivo, Variante de link e Evento - mais um nó gatilho que assina a atividade de leitura. Os nomes dos campos são os mesmos dos apps do EveryPage no Zapier e no Make, então os fluxos podem ser migrados entre plataformas sem reaprender nada.

### Instale o nó da comunidade

Em um n8n self-hosted: Settings -> Community Nodes -> instale o n8n-nodes-everypage (ou execute npm install dele em ~/.n8n/nodes). O pacote não tem dependências de runtime, um requisito de nó da comunidade verificado, então o que você instala é exatamente o que pode ler.

### Conecte com uma chave de API

Crie uma chave na sua página de conta (Conta -> Chaves de API - ela começa com ep_live_) e cole em uma nova credencial de API do EveryPage. O nó a valida na API imediatamente, e o campo Base URL só muda quando você aponta para um ambiente de staging.

### Conecte ao fluxo

Passe ao nó os dados binários de uma etapa anterior e ele devolve o trio de compartilhamento - link, QR Code, código de embed - para as etapas seguintes. Ative um gatilho e a assinatura do webhook é registrada automaticamente; desative e ela é removida. Não há nada para configurar no servidor.

### Por dentro

#### Toda entrega verificada

Os gatilhos instantâneos chegam por webhooks assinados com HMAC-SHA256, e o nó verifica cada um - comparação de assinatura em tempo constante e tolerância de cinco minutos contra replay - antes de o seu fluxo rodar. Entregas não verificadas são rejeitadas com um 401.

#### Nativo para binários

Os PDFs trafegam como dados binários do n8n - sem o vai-e-vem de enviar por URL. Um agente, um nó de Código ou uma etapa de download entrega os bytes; o QR Code volta do mesmo jeito, como PNG pronto para impressão e fluxos de mesclagem.

#### Feito para quem hospeda o próprio n8n

Um modo de polling de fallback com cursores independentes por stream cobre instâncias que não conseguem receber webhooks de entrada, o código-fonte sob licença MIT permite ler exatamente o que roda, e a parte de multipart e HMAC usa apenas módulos nativos do Node.

#### Análises que o seu DPO vai aprovar

A leitura é medida sem cookies, e os endereços IP dos leitores nunca são armazenados - cada leitor recebe uma identidade pseudônima com sal. Se você hospeda seus fluxos porque se importa com onde os dados ficam, é a mesma preocupação aplicada às análises de documentos.

## Gatilhos: quando isso acontece no EveryPage.

O nó gatilho do EveryPage assina dez tipos de evento por webhooks assinados - enviados no momento em que acontecem - com um fallback de polling para redes fechadas. Você pode limitar qualquer assinatura a um único documento.

### Documento lido

Um leitor terminou de ver um documento - com páginas vistas, tempo gasto, país e atribuição à variante de link.

### Download

Um leitor (não você) salvou uma cópia. Registre, pontue ou faça um acompanhamento.

### Preenchimento de formulário / captura pelo bloqueio por e-mail

Um visualizador concluiu o bloqueio por e-mail ou o formulário de lead - cada campo capturado chega pronto para ser tratado e encaminhado, enquanto o lead ainda está lendo.

### Comentários e confirmações

Um leitor deixou um feedback no documento ou confirmou o recebimento - o feedback é encaminhado enquanto ele ainda está na página, e a confirmação serve como prova de entrega para a trilha de auditoria.

### Eventos de ciclo de vida

Um link esgotou o limite de visualizações, o conteúdo foi substituído por trás de um link, um convite foi visto, uma seleção de revisão mudou - os eventos de manutenção que mantêm os sistemas downstream consistentes.

### Modo de polling

Para instâncias que não conseguem receber webhooks de entrada: percorre o feed de eventos no seu agendamento, com cursores independentes por stream e IDs de evento com namespace - nada dispara duas vezes, nada se perde.

## Operações: um nó, a API inteira.

Recursos de Arquivo, Variante de link e Evento, com campos tipados e sensíveis ao plano. Toda operação que gera um arquivo devolve o trio de compartilhamento - link, URL do QR, código de embed - vinculado a identificadores duráveis, nunca a um slug que pode ser renomeado.

### Enviar

PDF binário de entrada, link rastreado de saída - com toda a área de configurações conforme o plano: modo de visualização, senha, expiração ou sem expiração, bloqueio por e-mail, slug personalizado, marca d’água, limite de visualizações, intervalo de páginas, opções de proteção e notificações.

### Importar a partir de URL

O nó busca um PDF a partir de uma URL por conta própria - sem as suas credenciais do EveryPage anexadas - e o envia.

### Obter / Obter vários / Atualizar configurações

Busca um documento ou lista todos (UUID ou ID curto), e altera qualquer conjunto de configurações no lugar - apenas as opções que você incluir são enviadas.

### Substituir conteúdo

Troca o PDF por trás de um link - UUID, ID curto, slug, QR, configurações e histórico de leitura são preservados.

### Obter QR Code

O QR Code rastreado como PNG binário, pronto para impressão e fluxos de mesclagem.

### Obter leitura

O relatório de análises conforme o plano - resumo, funil, sessões, contatos - como JSON para o próximo nó.

### Variantes de link

Crie, liste, atualize, revogue e exclua links rastreados por destinatário - um documento, leitura por pessoa, incluindo a redação de rótulos conforme o GDPR.

### Eventos: obter vários

Puxa em lote do feed de eventos - visualização, download, bloqueio - com um cursor since e paginação Return All, feito para cargas incrementais em data warehouse.

### Excluir

Vai para a lixeira por padrão - restaurável até a data de purga, com recibo - ou purga de forma permanente.

## Dê ao seu agente um documento cuja leitura ele consegue comprovar.

O nó vem com usableAsTool, então os nós AI Agent do n8n podem chamar o EveryPage diretamente como uma ferramenta tipada: "envie este relatório e me devolva o link rastreado", "quem leu a proposta do terceiro trimestre?". Um agente que publica o trabalho como link rastreado - em vez de anexo - é um agente cujo resultado você consegue auditar.

Agendamento → AI Agent → Código → EveryPage → Slack

### Importe este fluxo: relatório de IA → link rastreado → Slack

Toda segunda-feira um agente de IA escreve o relatório semanal, um nó de Código sem dependências o converte em PDF, o EveryPage devolve um link rastreado, e o Slack recebe o link - assim você descobre se alguém leu o que o agente produziu. Copie o JSON e cole-o diretamente no canvas do n8n (Ctrl/Cmd-V), ou use Workflow -> Import from Clipboard.

```
{
	"name": "AI report → EveryPage tracked link",
	"nodes": [
		{
			"parameters": {
				"content": "## AI report → tracked link\nEvery Monday an AI agent writes the weekly ops report, a Code node renders it to a PDF (no dependencies), and EveryPage turns it into a **tracked share link** — so you know whether anyone actually read what the agent produced.\n\nSwap the Slack step for email, Teams, or your CRM. Add `requireEmail: true` in the EveryPage node's options to gate the report (Pro).",
				"height": 260,
				"width": 420
			},
			"id": "a1b2c3d4-0000-4000-8000-000000000001",
			"name": "Sticky Note",
			"type": "n8n-nodes-base.stickyNote",
			"typeVersion": 1,
			"position": [-220, -180]
		},
		{
			"parameters": {
				"rule": {
					"interval": [{ "field": "weeks", "triggerAtDay": [1], "triggerAtHour": 8 }]
				}
			},
			"id": "a1b2c3d4-0000-4000-8000-000000000002",
			"name": "Every Monday 08:00",
			"type": "n8n-nodes-base.scheduleTrigger",
			"typeVersion": 1.2,
			"position": [-220, 60]
		},
		{
			"parameters": {
				"promptType": "define",
				"text": "Write this week's operations report for the team: a short executive summary, then sections for shipped work, metrics, risks, and next week's focus. Plain text, no markdown syntax. Around 500 words.",
				"options": {}
			},
			"id": "a1b2c3d4-0000-4000-8000-000000000003",
			"name": "AI Agent",
			"type": "@n8n/n8n-nodes-langchain.agent",
			"typeVersion": 1.7,
			"position": [0, 60]
		},
		{
			"parameters": {
				"model": { "__rl": true, "value": "gpt-4.1-mini", "mode": "list" },
				"options": {}
			},
			"id": "a1b2c3d4-0000-4000-8000-000000000004",
			"name": "OpenAI Chat Model",
			"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
			"typeVersion": 1.2,
			"position": [0, 260]
		},
		{
			"parameters": {
				"mode": "runOnceForAllItems",
				"jsCode": "// Render plain text to a minimal, valid, multi-page PDF - no dependencies.\nconst esc = (s) => s.replace(/\\\\/g, '\\\\\\\\').replace(/\\(/g, '\\\\(').replace(/\\)/g, '\\\\)');\nconst text = String($input.first().json.output ?? $input.first().json.text ?? 'Empty report');\n\nconst lines = [];\nfor (const raw of text.split('\\n')) {\n  let line = raw.replace(/[^\\x20-\\x7e]/g, '');\n  if (line === '') { lines.push(''); continue; }\n  while (line.length > 92) { lines.push(line.slice(0, 92)); line = line.slice(92); }\n  lines.push(line);\n}\nconst pages = [];\nfor (let i = 0; i < lines.length; i += 46) pages.push(lines.slice(i, i + 46));\nif (!pages.length) pages.push(['(empty)']);\n\nconst pageCount = pages.length;\nconst fontObj = 3 + pageCount * 2;\nconst objects = [];\nobjects[1] = '<< /Type /Catalog /Pages 2 0 R >>';\nobjects[2] = `<< /Type /Pages /Kids [${pages.map((_, p) => `${3 + p * 2} 0 R`).join(' ')}] /Count ${pageCount} >>`;\npages.forEach((pg, p) => {\n  const contentObj = 4 + p * 2;\n  objects[3 + p * 2] = `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 595 842] /Resources << /Font << /F1 ${fontObj} 0 R >> >> /Contents ${contentObj} 0 R >>`;\n  let stream = 'BT /F1 11 Tf 56 780 Td 16 TL\\n';\n  for (const line of pg) stream += `(${esc(line)}) Tj T*\\n`;\n  stream += 'ET';\n  objects[contentObj] = `<< /Length ${stream.length} >>\\nstream\\n${stream}\\nendstream`;\n});\nobjects[fontObj] = '<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>';\n\nlet pdf = '%PDF-1.4\\n';\nconst offsets = [];\nfor (let n = 1; n <= fontObj; n++) {\n  offsets[n] = pdf.length;\n  pdf += `${n} 0 obj\\n${objects[n]}\\nendobj\\n`;\n}\nconst xref = pdf.length;\npdf += `xref\\n0 ${fontObj + 1}\\n0000000000 65535 f \\n`;\nfor (let n = 1; n <= fontObj; n++) pdf += `${String(offsets[n]).padStart(10, '0')} 00000 n \\n`;\npdf += `trailer\\n<< /Size ${fontObj + 1} /Root 1 0 R >>\\nstartxref\\n${xref}\\n%%EOF`;\n\nconst fileName = `weekly-report-${new Date().toISOString().slice(0, 10)}.pdf`;\nconst binaryData = await this.helpers.prepareBinaryData(Buffer.from(pdf, 'latin1'), fileName, 'application/pdf');\nreturn [{ json: { fileName }, binary: { data: binaryData } }];"
			},
			"id": "a1b2c3d4-0000-4000-8000-000000000005",
			"name": "Render PDF",
			"type": "n8n-nodes-base.code",
			"typeVersion": 2,
			"position": [280, 60]
		},
		{
			"parameters": {
				"resource": "file",
				"operation": "upload",
				"binaryPropertyName": "data",
				"fileName": "={{ $json.fileName }}",
				"options": {
					"viewerMode": "flipbook",
					"notifyOnView": true,
					"expiryHours": 168
				}
			},
			"id": "a1b2c3d4-0000-4000-8000-000000000006",
			"name": "EveryPage",
			"type": "n8n-nodes-everypage.everyPage",
			"typeVersion": 1,
			"position": [560, 60]
		},
		{
			"parameters": {
				"select": "channel",
				"text": "=📄 This week's report is live: {{ $json.shareUrl }}\nEveryPage will tell us who actually reads it.",
				"otherOptions": {}
			},
			"id": "a1b2c3d4-0000-4000-8000-000000000007",
			"name": "Post link to Slack",
			"type": "n8n-nodes-base.slack",
			"typeVersion": 2.2,
			"position": [840, 60]
		}
	],
	"connections": {
		"Every Monday 08:00": { "main": [[{ "node": "AI Agent", "type": "main", "index": 0 }]] },
		"AI Agent": { "main": [[{ "node": "Render PDF", "type": "main", "index": 0 }]] },
		"OpenAI Chat Model": {
			"ai_languageModel": [[{ "node": "AI Agent", "type": "ai_languageModel", "index": 0 }]]
		},
		"Render PDF": { "main": [[{ "node": "EveryPage", "type": "main", "index": 0 }]] },
		"EveryPage": { "main": [[{ "node": "Post link to Slack", "type": "main", "index": 0 }]] }
	},
	"active": false,
	"settings": { "executionOrder": "v1" },
	"pinData": {}
}
```

Nota para self-hosted: as ferramentas de nós da comunidade precisam de N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true antes que os nós AI Agent possam chamá-las.

## Feito para quem constrói com n8n.

Quatro fluxos com os quais o nó funciona desde o primeiro dia.

Operações self-hosted

### Eventos no seu data warehouse, sem intermediário

Events: Get Many percorre o feed com um cursor since e envia para Postgres ou BigQuery - o engajamento com documentos entra na sua própria stack de análises, sem nenhuma nuvem de terceiros no meio.

Criadores de agentes de IA

### Relatórios que comprovam que foram lidos

O agente publica o relatório como link rastreado em vez de anexo - você é avisado na primeira leitura, e o relatório de leitura mostra até onde cada pessoa realmente chegou.

Leads com bloqueio → CRM

### Leads no CRM enquanto leem

Um gatilho instantâneo de preenchimento de formulário trata os campos capturados e os encaminha para o time de vendas - o fluxo de leads com bloqueio para CRM, pronto para importar, vem junto com o nó.

Agentes de chat

### Um agente que responde "quem leu?"

Adicione as operações do EveryPage como ferramentas de um agente de chat e ele consegue listar seus documentos e buscar a leitura sob demanda - o fluxo de agente com ferramenta do EveryPage mostra o padrão.

## O que cada plano libera.

O nó é gratuito para instalar e conecta em todos os planos do EveryPage. Os campos acima do seu plano dizem isso na descrição e apontam para a página de preços; se uma execução cair em um bloqueio do lado do servidor mesmo assim, o erro informa o plano - nunca um 403 seco.

| No nó do n8n | Grátis | Basic | Pro |
|---|---|---|---|
| Gatilhos de leitura, download, comentário, confirmação e ciclo de vida - webhook e polling | ✓ | ✓ | ✓ |
| Operações de Enviar, Importar, Obter/Listar, Atualizar configurações, QR, Leitura, Eventos e Excluir | ✓ | ✓ | ✓ |
| Opções de proteção no envio (bloquear clique direito, impressão, cópia) | — | ✓ | ✓ |
| Gatilho de preenchimento de formulário / captura pelo bloqueio por e-mail | — | — | ✓ |
| Operações de Variantes de link e Substituir conteúdo | — | — | ✓ |

## Perguntas sobre o n8n.

### O que posso automatizar com o nó do EveryPage para n8n?

As duas direções de um fluxo de documentos. As operações transformam qualquer PDF binário de um fluxo em um link de compartilhamento rastreado com códigos QR e de embed, gerenciam configurações e variantes de link por destinatário, substituem o conteúdo por trás de links ativos e exportam em lote os eventos de leitura para o seu data warehouse. O nó gatilho inicia fluxos no momento em que um documento é lido, baixado, comentado, confirmado, protegido por bloqueio ou esgotado - por webhooks verificados ou por um fallback de polling.

### O EveryPage é uma alternativa ao DocSend com integração com o n8n?

Sim - o DocSend não tem nenhum nó para n8n. Se você quer rastreamento de documentos no estilo DocSend que fique dentro dos seus próprios fluxos, o EveryPage cobre isso com um nó nativo para binários, gatilhos instantâneos verificados e análises compatíveis com o GDPR que não armazenam endereços IP de leitores - por um preço fixo, em vez de cobrança por usuário.

### Os gatilhos são instantâneos - e os webhooks são verificados?

Instantâneos por padrão: ativar o gatilho registra uma assinatura de webhook, e os eventos são enviados no momento em que acontecem. Toda entrega é verificada - assinatura HMAC-SHA256, comparação em tempo constante, tolerância de cinco minutos contra replay - e entregas não verificadas são rejeitadas com um 401. Para instâncias que não conseguem receber webhooks de entrada, o modo polling percorre o feed de eventos com cursores por stream, então nada dispara duas vezes e nada se perde.

### Como os nós AI Agent do n8n usam o EveryPage?

O nó está marcado como usableAsTool, então os nós AI Agent podem chamar suas operações como ferramentas tipadas - enviar um relatório gerado e devolver o link rastreado, consultar quem leu um documento, buscar um resumo de leitura. Em um n8n self-hosted, defina N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true; os fluxos importáveis desta página e do pacote mostram configurações de agentes que funcionam.

### Posso instalar no n8n Cloud - e de que planos eu preciso?

Primeiro para self-hosted: o pacote é o n8n-nodes-everypage e é instalado pelo painel de Community Nodes assim que estiver disponível no npm - a publicação está em andamento, junto com a verificação de nós da comunidade do n8n para disponibilidade no Cloud. A API que o nó usa já está disponível hoje em todos os planos do EveryPage (veja a documentação para desenvolvedores). Quanto aos planos, tudo conecta de graça; o gatilho de preenchimento de formulário, as Variantes de link e a Substituição de conteúdo são Pro, porque os recursos do produto que eles acionam são Pro.

### Os links rastreados precisam expirar?

Não - a expiração é um controle que você define por documento, nunca um padrão. Dê ao link uma data de expiração, um limite de visualizações ou nenhum dos dois - sem nenhum dos dois, o link nunca expira, então o link que o seu fluxo publicou continua funcionando pelo tempo que você quiser. Os fluxos também podem gerenciar a expiração sozinhos, pela Atualização de configurações.

## Coloque um link rastreado no fim de todo fluxo.

Instale o nó, cole uma chave de API, e o próximo documento que o seu fluxo produzir vai te dizer se alguém o leu - página por página, por um webhook que você pode verificar.

Relacionados: todas as integrações · a integração com o Make · webhooks brutos · a alternativa ao DocSend · compartilhar PDFs sem armazenar IPs · receitas de automação
