Skip to main content
Los webhooks son la forma recomendada de recibir los resultados de un monitor. Cuando un monitor se dispara, Pubrio envía una solicitud POST con un payload JSON a tu URL configurada — en tiempo real.

Requisitos previos

  • Una API key de Pubrio con acceso a monitores
  • Un endpoint HTTPS accesible públicamente (o una URL de prueba de usewebhook.com)
Prueba rápida: Usa usewebhook.com para generar una URL de webhook temporal y gratuita. Puedes inspeccionar cada payload entrante sin desplegar nada.

Paso 1: Crear un Monitor con destino Webhook

Respuesta:
El objeto headers añade encabezados HTTP personalizados a cada entrega (útil para autenticación). El objeto body añade campos personalizados a la raíz del payload del webhook.
Guarda el signature de la respuesta — lo necesitarás para verificar los payloads entrantes. Solo se devuelve en el momento de la creación, a través del endpoint Signature Reveal, o desde Monitor Lookup con is_signature_reveal: true.

Paso 2: Validar tu conexión de Webhook

Usa el endpoint Validate Webhook para probar que tu endpoint es accesible. Esto envía un payload de muestra con datos de marcador de posición — no se consumen créditos, no se obtienen señales reales.
Una respuesta exitosa devuelve el payload de solicitud de muestra que se envió y la respuesta que devolvió tu endpoint — así puedes confirmar que la conexión funciona antes de pasar a producción.

Paso 3: Probar con datos reales

Una vez validada la conexión, dispara una ejecución real usando el endpoint Process Try. Esto obtiene señales reales y las entrega a tu webhook — usa tried_at con una fecha pasada reciente para asegurar que haya datos disponibles:
A diferencia de validate, el endpoint try ejecuta un escaneo real y consume créditos. Úsalo para verificar que los payloads reales llegan correctamente y para obtener una estimación rápida de resultados antes de que se ejecute el escaneo programado.

Paso 4: Verificar firmas

Cada monitor tiene una firma única para verificar que los payloads entrantes provienen genuinamente de Pubrio.
Cada entrega lleva dos cabeceras: x-pubrio-signature (el secreto revelado arriba) y x-pubrio-signature-256 (HMAC-SHA256 en hexadecimal del cuerpo bruto de la petición, con ese secreto como clave). Verifica el HMAC sobre los bytes recibidos antes de parsear el JSON.

Estructura del payload del Webhook

Los payloads difieren según el detection_mode del monitor:
En modo signal_first, el payload contiene un arreglo signals de nivel superior:
Cada entrada de señal contiene los detalles de la señal y las empresas y personas asociadas ya enriquecidas.
Los campos personalizados de body en destination_config aparecen en el nivel raíz del payload (por ejemplo, "pipeline": "my-webhook" cuando se configura en tu destino).

Señales de expansión

Junto con jobs, news y advertisements, un monitor puede vigilar señales de expansión — la evidencia fechada de que una empresa está entrando o creciendo en un nuevo mercado. Añade expansions a signal_types:
Los filtros de expansión usan el vocabulario de Expansion Search, no el de trabajos/noticias/anuncios — froms y tos para el corredor, más stages, scopes, momentum, freshness, signal_types, signal_subtypes, signal_strengths, source_types y window_days. Resuelve los slugs válidos en Expansion Reference.
Un webhook entrega las señales de expansión en la unidad de registro del monitor. En la unidad signal por defecto (signal_first), cada entrada es una señal bruta (HIRE, AD, OFFICE…) cuyo companies[0] lleva la ficha (empresa, mercado); country_code es el mercado. Define record_unit: "company" para recibir una entrada por empresa con sus señales anidadas. El resumen por correo siempre agrupa por empresa y mercado.

Huella cloud

DNS es la señal de huella cloud: una empresa desplegando infraestructura cloud o de hosting en un mercado. Acota un monitor de expansión con signal_types dentro de los filtros:
Cada envío incluye evidence_url, una página de Pubrio que respalda la señal. El detalle bruto de la infraestructura nunca se incluye. Para recibir los mismos hosts como un flujo de eventos plano con filtros de proveedor, región y ciudad, usa el tipo de señal dedicado cloud_footprints más abajo.

Payload de señal de expansión

El significado de cada campo está en la Referencia de campos de expansión. Para obtener las mismas filas bajo demanda en lugar de en un disparador, usa Expansion Signal Search.

Señales de huella en la nube

Añade cloud_footprints a signal_types para recibir un registro por cada host que una empresa levanta en un mercado fuera de su país: un servidor nuevo en un proveedor de nube u hosting, o uno que cambió de región o de país. Es la misma evidencia de infraestructura que lee la señal de expansión DNS, entregada como un flujo de eventos plano en lugar de una etapa de mercado: cada host, en orden de llegada, con los filtros propios de la huella y sin etapa, puntuación ni ventana.
Cada signal lleva provider, cloud_region, city, novelty, country_code, country_name, event_date, un display_label localizado como AWS · Frankfurt y evidence_url. Nunca se incluyen nombres de host ni direcciones IP en bruto. La infraestructura del mercado local no está en este flujo.

Reglas de entrega

Qué es un registro

Un registro es lo que cuentan los límites y lo que constituye una entrada de entrega. Por defecto sigue al modo de detección: signal_first entrega señales (una entrada signals[] por oferta, anuncio, artículo o señal de expansión), company_first entrega empresas (una entrada companies[] por empresa con sus señales anidadas). Usa record_unit para elegir explícitamente; por ejemplo, record_unit: "company" en un monitor de anuncios signal_first entrega una entrada por anunciante en lugar de una por anuncio.

Excluir empresas

excluded_companies (más excluded_domains y excluded_linkedin_urls, resueltos igual que companies) es una lista de nunca entregar: una empresa excluida se descarta antes del enriquecimiento y la facturación en ambos modos, y la lista de seguimiento de company_first la omite mientras siga en la lista. Hasta 100.000 empresas por monitor, suficiente para una exportación de clientes actuales desde el CRM. En Update Monitor, envía companies_mode o excluded_companies_mode como add / remove para cambiar solo las entradas enviadas, sin reenviar toda la lista.

Límites

Una lista de cualquier tamaño se lee página a página: Company Search con company_groups: [source_group_id] (o excluded_group_id); ambos ids los devuelve Lookup Monitor, que también devuelve las listas completas.

Lo más reciente primero

Por defecto, un monitor entrega en orden de llegada, lo más antiguo primero, y un límite traslada el resto, de modo que el atraso de un día se procesa antes que las señales más nuevas. Con is_newest_first: true se invierte: cada ejecución entrega los registros coincidentes más recientes, y lo que un límite deja fuera se omite para siempre, nunca se encola. Aplica a todos los tipos de señal y a un monitor que reanuda tras una pausa o un presupuesto diario agotado.

Deduplicación y reentrega

  • Una señal nunca se entrega dos veces. Cada entrega exitosa registra las claves de las señales que llevó, y cada ejecución descarta cualquier candidata ya presente en ese registro, para todos los tipos de señal. Ofertas, noticias y anuncios mantienen además un cursor por tipo, así que una señal entregada ni siquiera se vuelve a obtener.
  • company_dedupe_days: N garantiza que una empresa aparezca como máximo en una entrega cada N días en todos los tipos de señal del monitor; sus señales posteriores dentro de la ventana se omiten.
  • Cada payload lleva metadata.monitor_log_id (la fila de Registros estadísticos de ese intento) y metadata.parent_monitor_log_id (null en un primer intento; en un reintento, automático o mediante Reintento de proceso, el id del primer intento). Las mismas señales solo pueden volver a llegarte mediante ese reintento, así que deduplica por parent_monitor_log_id || monitor_log_id. Un reintento reenvía el payload del primer intento tal cual; envía is_use_original_payload: false para aplicar antes las reglas actuales (exclusiones y ambos registros), y entonces un reintento sin nada que entregar se omite con el código 40085.

Destino por correo electrónico

Para los equipos que prefieren la entrega por correo electrónico, establece destination_type en "email":
Pubrio soporta entrega de correo electrónico de marca blanca para agencias y equipos. Ponte en contacto para conocer cómo personalizar el dominio del remitente y la marca.

Solución de problemas

  • Verifica que tu endpoint sea accesible públicamente (no esté detrás de un firewall o VPN)
  • Asegúrate de que devuelva un código de estado 200 — otros códigos se tratan como fallos
  • Usa el endpoint Validate Webhook para probar la conectividad
  • Revisa Statistic Logs para ver mensajes de error y códigos de respuesta
Si tu webhook devuelve códigos distintos de 200 de forma consistente, el monitor se pausa al alcanzar max_failure_trigger fallos consecutivos. Corrige el problema y reactívalo mediante Update Monitor.
Si una entrega falla y hay reintentos configurados, puedes recibir el mismo payload varias veces. Usa triggered_at o el ID del log para deduplicar en tu extremo.
Reduce max_records_per_trigger para limitar los registros por entrega. También puedes acotar tus filtros para reducir el volumen de señales coincidentes.
Última modificación el 8 de octubre de 2026