Prérequis
- Une clé API Pubrio avec accès aux monitors
- Un point de terminaison HTTPS accessible publiquement (ou une URL de test depuis usewebhook.com)
Étape 1 : créer un Monitor avec une destination webhook
headers ajoute des en-têtes HTTP personnalisés à chaque envoi (utile pour l’authentification). L’objet body ajoute des champs personnalisés à la racine de la charge utile du webhook.
Étape 2 : valider votre connexion webhook
Utilisez le point de terminaison Validate Webhook pour tester que votre point de terminaison est joignable. Cela envoie une charge utile d’exemple avec des données de substitution — aucun crédit n’est consommé, aucun signal réel n’est récupéré.Étape 3 : tester avec des données réelles
Une fois la connexion validée, déclenchez une exécution réelle avec le point de terminaison Process Try. Cela récupère de vrais signaux et les livre à votre webhook — utiliseztried_at avec une date passée récente pour vous assurer que des données sont disponibles :
Contrairement à validate, le point de terminaison try exécute un vrai scan et consomme des crédits. Utilisez-le pour vérifier que les charges utiles réelles arrivent correctement et obtenir une estimation rapide des résultats avant le déclenchement du scan planifié.
Étape 4 : vérifier les signatures
Chaque monitor dispose d’une signature unique permettant de vérifier que les charges utiles entrantes proviennent bien de Pubrio.x-pubrio-signature (le secret révélé ci-dessus) et x-pubrio-signature-256 (HMAC-SHA256 hexadécimal du corps brut de la requête, avec ce secret comme clé). Vérifiez le HMAC sur les octets reçus avant de parser le JSON.
Structure de la charge utile du webhook
Les charges utiles diffèrent selon ledetection_mode du monitor :
- Signal First
- Company First
En mode Chaque entrée de signal contient les détails du signal ainsi que les entreprises et personnes enrichies associées.
signal_first, la charge utile contient un tableau signals de premier niveau :Les champs
body personnalisés issus de destination_config apparaissent à la racine de la charge utile (par exemple, "pipeline": "my-webhook" s’il est configuré dans votre destination).Signaux d’expansion
Aux côtés dejobs, news et advertisements, un monitor peut surveiller les signaux d’expansion — la preuve datée qu’une entreprise entre sur un nouveau marché ou s’y développe. Ajoutez expansions à signal_types :
froms et tos pour le corridor, plus stages, scopes, momentum, freshness, signal_types, signal_subtypes, signal_strengths, source_types et window_days. Résolvez les slugs valides depuis Expansion Reference.
Un webhook livre les signaux d’expansion dans l’unité d’enregistrement du moniteur. Dans l’unité
signal par défaut (signal_first), chaque entrée est un signal brut (HIRE, AD, OFFICE…) dont companies[0] porte la fiche (entreprise, marché) ; country_code est le marché. Définissez record_unit: "company" pour recevoir une entrée par entreprise avec ses signaux imbriqués. Le digest e-mail regroupe toujours par entreprise et marché.Empreinte cloud
DNS est le signal d’empreinte cloud : une entreprise qui déploie de l’infrastructure cloud ou d’hébergement sur un marché. Restreignez un monitor d’expansion via signal_types dans les filtres :
evidence_url, une page Pubrio qui étaye le signal. Le détail brut de l’infrastructure n’est jamais inclus. Pour recevoir les mêmes hôtes sous forme de flux d’événements avec des filtres par fournisseur, région et ville, utilisez le type de signal dédié cloud_footprints ci-dessous.
Charge utile des signaux d’expansion
Signaux d’empreinte cloud
Ajoutezcloud_footprints à signal_types pour recevoir un enregistrement par hôte qu’une entreprise met en place sur un marché hors de son pays : un nouveau serveur chez un fournisseur cloud ou d’hébergement, ou un serveur qui a changé de région ou de pays. C’est la même preuve d’infrastructure que lit le signal d’expansion DNS, livrée comme un simple flux d’événements plutôt qu’une étape de marché : chaque hôte, dans l’ordre d’arrivée, avec les filtres propres à l’empreinte, sans étape, score ni fenêtre.
Chaque
signal porte provider, cloud_region, city, novelty, country_code, country_name, event_date, un display_label localisé comme AWS · Frankfurt et evidence_url. Les noms d’hôte et adresses IP bruts ne sont jamais inclus. L’infrastructure du marché domestique ne fait pas partie de ce flux.
Règles de livraison
Ce qu’est un enregistrement
Un enregistrement est ce que comptent les plafonds et ce que constitue une entrée de livraison. Par défaut il suit le mode de détection :signal_first livre des signaux (une entrée signals[] par offre, annonce, article ou signal d’expansion), company_first livre des entreprises (une entrée companies[] par entreprise avec ses signaux imbriqués). Utilisez record_unit pour choisir explicitement ; par exemple record_unit: "company" sur un moniteur d’annonces signal_first livre une entrée par annonceur au lieu d’une par annonce.
Exclure des entreprises
excluded_companies (plus excluded_domains et excluded_linkedin_urls, résolus comme companies) est une liste à ne jamais livrer : une entreprise exclue est écartée avant l’enrichissement et la facturation dans les deux modes, et une liste de suivi company_first l’ignore tant qu’elle reste sur la liste. Jusqu’à 100 000 entreprises par moniteur, de quoi accueillir un export CRM des clients existants. Dans Update Monitor, envoyez companies_mode ou excluded_companies_mode à add / remove pour ne modifier que les entrées envoyées, sans renvoyer toute la liste.
Plafonds
Une liste de n’importe quelle taille se lit page par page : Company Search avec
company_groups: [source_group_id] (ou excluded_group_id) ; les deux ids sont renvoyés par Lookup Monitor, qui renvoie aussi les listes complètes.
Le plus récent d’abord
Par défaut, un monitor livre dans l’ordre d’arrivée, le plus ancien d’abord, et un plafond reporte le reste : le retard d’une journée est traité avant les signaux plus récents. Avecis_newest_first: true, c’est l’inverse : chaque exécution livre les enregistrements les plus récents, et ce qu’un plafond laisse de côté est ignoré définitivement, jamais mis en file d’attente. Cela vaut pour chaque type de signal et pour un monitor qui reprend après une pause ou un budget quotidien épuisé.
Déduplication et nouvelle livraison
- Un signal n’est jamais livré deux fois. Chaque livraison réussie journalise les clés des signaux qu’elle portait, et chaque exécution écarte tout candidat déjà présent dans ce journal, pour tous les types de signaux. Offres, actualités et annonces conservent en plus un curseur par type, donc un signal livré n’est même pas récupéré à nouveau.
company_dedupe_days: Ngarantit qu’une entreprise apparaît dans au plus une livraison par N jours, tous types de signaux du moniteur confondus ; ses signaux suivants dans la fenêtre sont ignorés.- Chaque payload porte
metadata.monitor_log_id(la ligne de cette tentative dans les Journaux statistiques) etmetadata.parent_monitor_log_id(nullà la première tentative ; lors d’une nouvelle tentative, automatique ou via Relancer le traitement, l’id de la première tentative). Les mêmes signaux ne peuvent vous revenir que par une telle tentative ; dédupliquez donc surparent_monitor_log_id || monitor_log_id. Une relance renvoie le payload de la première tentative tel quel ; envoyezis_use_original_payload: falsepour réappliquer d’abord les règles actuelles (exclusions et les deux registres), auquel cas une relance sans rien à livrer est ignorée avec le code40085.
Destination e-mail
Pour les équipes qui préfèrent la livraison par e-mail, définissezdestination_type sur "email" :
Pubrio prend en charge la livraison d’e-mails en marque blanche pour les agences et les équipes. Contactez-nous pour en savoir plus sur la personnalisation du domaine expéditeur et de l’image de marque.
Dépannage
Le webhook ne reçoit pas de charges utiles
Le webhook ne reçoit pas de charges utiles
- Vérifiez que votre point de terminaison est accessible publiquement (pas derrière un pare-feu ou un VPN)
- Assurez-vous qu’il renvoie un code de statut
200— les autres codes sont traités comme des échecs - Utilisez le point de terminaison Validate Webhook pour tester la connectivité
- Consultez les Statistic Logs pour les messages d’erreur et les codes de réponse
Monitor mis en pause après des échecs
Monitor mis en pause après des échecs
Si votre webhook renvoie systématiquement des codes non-200, le monitor se met en pause après avoir atteint
max_failure_trigger échecs consécutifs. Corrigez le problème puis réactivez via Update Monitor.Charges utiles en double
Charges utiles en double
Si une livraison échoue et que des tentatives sont configurées, vous pouvez recevoir plusieurs fois la même charge utile. Utilisez
triggered_at ou l’identifiant de journal pour dédupliquer de votre côté.Charge utile trop volumineuse
Charge utile trop volumineuse
Réduisez
max_records_per_trigger pour limiter le nombre d’enregistrements par livraison. Vous pouvez aussi restreindre vos filtres pour réduire le volume de signaux correspondants.
