Skip to main content
Webhooks são a forma recomendada de receber resultados de monitores. Quando um monitor é acionado, a Pubrio envia uma requisição POST com um payload JSON para a sua URL configurada — em tempo real.

Pré-requisitos

  • Uma chave de API Pubrio com acesso a monitores
  • Um endpoint HTTPS publicamente acessível (ou uma URL de teste do usewebhook.com)
Teste rápido: use o usewebhook.com para gerar uma URL de webhook temporária e gratuita. Você pode inspecionar cada payload recebido sem precisar implantar nada.

Etapa 1: Criar um Monitor com Destino de Webhook

Resposta:
O objeto headers adiciona cabeçalhos HTTP personalizados a cada entrega (útil para autenticação). O objeto body adiciona campos personalizados à raiz do payload do webhook.
Salve o signature retornado na resposta — você vai precisar dele para verificar os payloads recebidos. Ele só é retornado no momento da criação, pelo endpoint Signature Reveal, ou pelo Monitor Lookup com is_signature_reveal: true.

Etapa 2: Validar a Conexão do Webhook

Use o endpoint Validate Webhook para testar se o seu endpoint está acessível. Isso envia um payload de amostra com dados fictícios — nenhum crédito é consumido e nenhum sinal real é buscado.
Uma resposta bem-sucedida retorna o payload de amostra que foi enviado e a resposta que o seu endpoint devolveu — assim você confirma que a conexão funciona antes de colocar em produção.

Etapa 3: Testar com Dados Reais

Depois que a conexão for validada, acione uma execução real usando o endpoint Process Try. Isso busca sinais reais e os entrega ao seu webhook — use tried_at com uma data recente no passado para garantir que haja dados disponíveis:
Ao contrário do validate, o endpoint try executa uma varredura real e consome créditos. Use-o para confirmar que os payloads reais chegam corretamente e para ter uma estimativa rápida dos resultados antes que a varredura agendada seja executada.

Etapa 4: Verificar Assinaturas

Cada monitor tem uma assinatura única para verificar que os payloads recebidos vêm de fato da Pubrio.
Cada entrega traz dois cabeçalhos: x-pubrio-signature (o segredo revelado acima) e x-pubrio-signature-256 (HMAC-SHA256 em hexadecimal do corpo bruto da requisição, com esse segredo como chave). Verifique o HMAC sobre os bytes recebidos antes de fazer o parse do JSON.

Estrutura do Payload do Webhook

Os payloads variam de acordo com o detection_mode do monitor:
No modo signal_first, o payload contém um array signals no nível raiz:
Cada entrada de sinal contém os detalhes do sinal e as empresas e pessoas enriquecidas associadas.
Os campos personalizados de body definidos em destination_config aparecem no nível raiz do payload (por exemplo, "pipeline": "my-webhook" quando configurado no seu destino).

Sinais de Expansão

Além de jobs, news e advertisements, um monitor pode observar sinais de expansão — a evidência datada de que uma empresa está entrando ou crescendo em um novo mercado. Adicione expansions a signal_types:
Os filtros de expansão usam o vocabulário do Expansion Search, e não o de vagas/notícias/anúncios — froms e tos para o corredor, além de stages, scopes, momentum, freshness, signal_types, signal_subtypes, signal_strengths, source_types e window_days. Resolva os slugs válidos em Expansion Reference.
Um webhook entrega sinais de expansão na unidade de registro do monitor. Na unidade padrão signal (signal_first), cada entrada é um sinal bruto (HIRE, AD, OFFICE…) cujo companies[0] traz o cartão (empresa, mercado); country_code é o mercado. Defina record_unit: "company" para receber uma entrada por empresa com seus sinais aninhados. O resumo por e-mail sempre agrupa por empresa e mercado.

Pegada cloud

DNS é o sinal de pegada cloud: uma empresa a implementar infraestrutura cloud ou de alojamento num mercado. Restrinja um monitor de expansão com signal_types dentro dos filtros:
Cada entrega inclui evidence_url, uma página Pubrio que sustenta o sinal. O detalhe bruto da infraestrutura nunca é incluído. Para receber os mesmos hosts como um fluxo de eventos simples com filtros de provedor, região e cidade, use o tipo de sinal dedicado cloud_footprints abaixo.

Payload de Sinal de Expansão

O significado de cada campo está detalhado na Expansion Field Reference. Para obter as mesmas linhas sob demanda em vez de por acionamento, use o Expansion Signal Search.

Sinais de pegada em nuvem

Adicione cloud_footprints a signal_types para receber um registro por host que uma empresa sobe em um mercado fora do seu país: um servidor novo em um provedor de nuvem ou hospedagem, ou um que mudou de região ou de país. É a mesma evidência de infraestrutura que o sinal de expansão DNS lê, entregue como um fluxo de eventos simples em vez de uma etapa de mercado: cada host, na ordem de chegada, com os filtros próprios da pegada e sem etapa, pontuação ou janela.
Cada signal traz provider, cloud_region, city, novelty, country_code, country_name, event_date, um display_label localizado como AWS · Frankfurt e evidence_url. Nomes de host e endereços IP brutos nunca são incluídos. A infraestrutura do mercado doméstico não está neste fluxo.

Regras de Entrega

O que é um registro

Um registro é o que os limites contam e o que constitui uma entrada de entrega. Por padrão segue o modo de detecção: signal_first entrega sinais (uma entrada signals[] por vaga, anúncio, artigo ou sinal de expansão), company_first entrega empresas (uma entrada companies[] por empresa com seus sinais aninhados). Use record_unit para escolher explicitamente; por exemplo, record_unit: "company" em um monitor de anúncios signal_first entrega uma entrada por anunciante em vez de uma por anúncio.

Excluir empresas

excluded_companies (mais excluded_domains e excluded_linkedin_urls, resolvidos como companies) é uma lista de nunca entregar: uma empresa excluída é descartada antes do enriquecimento e da faturação em ambos os modos, e a lista de acompanhamento company_first a ignora enquanto permanecer na lista. Até 100.000 empresas por monitor, o suficiente para uma exportação de clientes atuais do CRM. No Update Monitor, envie companies_mode ou excluded_companies_mode como add / remove para alterar apenas as entradas enviadas, sem reenviar a lista inteira.

Limites

Uma lista de qualquer tamanho é lida página a página: Company Search com company_groups: [source_group_id] (ou excluded_group_id); ambos os ids são devolvidos por Lookup Monitor, que também devolve as listas completas.

O mais recente primeiro

Por padrão, um monitor entrega por ordem de chegada, o mais antigo primeiro, e um limite transporta o restante, de modo que o atraso de um dia é processado antes dos sinais mais novos. Com is_newest_first: true isso se inverte: cada execução entrega os registros correspondentes mais recentes, e o que um limite deixa de fora é ignorado de vez, nunca enfileirado. Vale para todos os tipos de sinal e para um monitor que retoma após uma pausa ou um orçamento diário esgotado.

Deduplicação e reentrega

  • Um sinal nunca é entregue duas vezes. Cada entrega bem-sucedida registra as chaves dos sinais que carregou, e cada execução descarta qualquer candidato já presente nesse registro, para todos os tipos de sinal. Vagas, notícias e anúncios mantêm ainda um cursor por tipo, então um sinal entregue nem sequer é buscado de novo.
  • company_dedupe_days: N garante que uma empresa apareça em no máximo uma entrega a cada N dias em todos os tipos de sinal do monitor; seus sinais seguintes dentro da janela são ignorados.
  • Todo payload carrega metadata.monitor_log_id (a linha dessa tentativa nos Logs de Estatísticas) e metadata.parent_monitor_log_id (null na primeira tentativa; em uma nova tentativa, automática ou via Repetir Processamento, o id da primeira tentativa). Os mesmos sinais só voltam a chegar por meio dessa nova tentativa, então deduplique por parent_monitor_log_id || monitor_log_id. Uma nova tentativa reenvia o payload da primeira tentativa como estava; envie is_use_original_payload: false para reaplicar primeiro as regras atuais (exclusões e os dois registros), e então uma tentativa sem nada a entregar é ignorada com o código 40085.

Destino por E-mail

Para equipes que preferem a entrega por e-mail, defina destination_type como "email":
A Pubrio oferece suporte a entrega de e-mail com marca branca para agências e equipes. Entre em contato para saber mais sobre personalização de domínio de envio e identidade visual.

Solução de Problemas

  • Verifique se o seu endpoint é publicamente acessível (não está atrás de um firewall ou VPN)
  • Garanta que ele retorne um código de status 200 — outros códigos são tratados como falhas
  • Use o endpoint Validate Webhook para testar a conectividade
  • Verifique os Statistic Logs em busca de mensagens de erro e códigos de resposta
Se o seu webhook retornar códigos diferentes de 200 de forma consistente, o monitor é pausado ao atingir max_failure_trigger falhas consecutivas. Corrija o problema e reative usando o Update Monitor.
Se uma entrega falhar e houver novas tentativas configuradas, você pode receber o mesmo payload várias vezes. Use triggered_at ou o ID do log para deduplicar do seu lado.
Reduza max_records_per_trigger para limitar os registros por entrega. Você também pode restringir seus filtros para reduzir o volume de sinais correspondentes.
Última modificação em 8 de outubro de 2026