Si vous construisez un workflow Zapier de génération de leads pour des leads d'entreprises locales, l'étape des données est le point difficile : trouver des entreprises, leurs sites web, numéros de téléphone et e-mails de contact sans maintenir de scraper. biz collect offre à Zapier une voie propre avec Webhooks by Zapier. Une action POSTe une localisation et des mots-clés vers /v1/search, vous recevez un job_id asynchrone, puis un court schéma attendre-et-poller vérifie /v1/jobs/:id jusqu'à ce que le JSON structuré soit prêt. Ce guide construit un Zap fonctionnel qui trouve des entreprises locales, extrait des e-mails dédupliqués de leurs sites web et envoie les résultats vers Google Sheets ou HubSpot. Il est aussi honnête sur les différences entre le modèle de polling de Zapier et ceux de n8n et Make, car cette différence façonne la construction du Zap.
Pourquoi utiliser une API pour la génération de leads dans Zapier ?
Zapier est la plateforme d'automatisation no-code la plus utilisée, avec des milliers d'intégrations d'apps, un modèle déclencheur-et-action propre et des outils intégrés comme Webhooks, Delay, Formatter, Filter et Paths. Il excelle à déplacer des données entre apps. Mais la génération de leads locaux comporte une étape d'acquisition de données pour laquelle Zapier seul n'est pas conçu, car Zapier n'a ni automatisation de navigateur ni boucle native.
Une approche scraping-first dans Zapier signifie appeler un service de scraping externe, parser du HTML fragile et lancer un second scraper pour trouver les e-mails sur chaque site web. C'est fragile et coûteux à maintenir. L'approche plus propre est d'appeler une API qui renvoie déjà des données d'entreprises structurées avec e-mails, pour que le Zap n'ait qu'à router les résultats. Si vous comparez encore les sources, ce guide sur laquelle gagne pour les données locales : la Places API, un scraper ou une API de données d'entreprises parcourt les options.
biz collect est conçu exactement pour cela. C'est une API de contacts d'entreprises native pour les LLM, construite pour les agents, les outils de workflow, les scripts et l'enrichissement CRM. Vous appelez /api/v1/search avec des paramètres comme location, keywords, radius_km et scrape_emails. L'API renvoie un job en file d'attente. Vous interrogez /api/v1/jobs/:id jusqu'à ce qu'il se termine, puis utilisez les fiches JSON renvoyées dans le reste du Zap.
Cela laisse votre Zap se concentrer sur le routage :
- Lancer une recherche depuis un formulaire, un planning ou un webhook.
- Demander des données d'entreprises locales structurées à biz collect.
- Attendre le job asynchrone, puis poller le résultat.
- Diviser les entreprises renvoyées en lignes ou fiches.
- Filtrer et nettoyer les fiches.
- Envoyer les leads qualifiés vers Google Sheets, HubSpot, Airtable ou une autre app.
Pour les détails d'API, commencez par les docs API, les exemples d'intégration dans intégrations et les limites de plan dans tarifs. Pour voir le cycle recherche-et-polling asynchrone avant de construire, la page comment fonctionne biz collect le parcourt. La documentation de Zapier est utile pour les outils employés ici, notamment Webhooks by Zapier, Delay by Zapier et Formatter by Zapier.
Soyez honnête sur les contraintes de polling de Zapier
Avant de construire, il vaut la peine de comprendre comment Zapier diffère de n8n et Make, car cela change le design.
- Une exécution de Zap est linéaire. Il n'y a pas de "boucler jusqu'à ce qu'une condition soit vraie" native, comme le Wait-et-boucle de n8n ou le Repeater de Make. Chaque exécution de Zap coule une fois de haut en bas.
- Delay by Zapier attend, mais ne boucle pas. Vous pouvez insérer un délai entre une requête et un poll, mais une exécution unique vous donne un seul poll. Pour poller plusieurs fois, vous re-déclenchez le Zap ou utilisez des Sub-Zaps et des aides de bouclage, ce qui ajoute de la complexité.
- Les limites de tâches comptent. Chaque étape d'action exécutée compte comme une tâche contre votre plan, donc un schéma de polling multi-étapes consomme rapidement des tâches à volume.
- Code by Zapier est l'échappatoire. Une étape JavaScript ou Python peut fetcher, attendre et re-poller dans une seule étape, ce qui contourne la limite d'absence de boucle pour des jobs modérés.
La conséquence pratique : le design Zapier le plus propre utilise soit (a) un délai unique généreux dimensionné à la durée habituelle des jobs, puis poll une fois, soit (b) une étape Code by Zapier qui poll dans une courte boucle interne. n8n et Make gèrent le polling multi-tentatives plus naturellement ; l'article sur le workflow n8n de génération de leads montre cette boucle native pour comparer. Dans Zapier, vous concevez autour du modèle linéaire, pas contre lui.
Ce que construit ce Zap
Le Zap de ce tutoriel automatise les leads locaux de la requête de recherche jusqu'à la sortie vers la destination, avec des étapes Zapier standard et biz collect pour la recherche d'entreprises.
Le Zap final ressemble à ceci :
- Un déclencheur lance le Zap depuis un formulaire, un planning ou un webhook.
- Une action Webhooks by Zapier envoie un
POSTvers biz collect/api/v1/search. - La réponse renvoie un
job_idet le statut. - Une étape Delay by Zapier attend assez longtemps pour que le job finisse.
- Une seconde action Webhooks by Zapier appelle
/api/v1/jobs/:id. - Un Filter vérifie que le statut est
completed. - Une étape Formatter ou Code divise et nettoie les entreprises.
- Une action de destination envoie les leads vers Google Sheets, HubSpot ou une autre app.
Vous pouvez adapter le même schéma pour de la prospection ponctuelle, des scans récurrents, des listes de leads d'agence ou l'enrichissement CRM, y compris des workflows d'agent IA qui ont besoin de données de contact d'entreprises locales vérifiées.
Prérequis
Avant de construire, il vous faut :
- Un compte Zapier sur un plan incluant les Zaps multi-étapes (requis pour Webhooks, Delay et Formatter).
- Une clé API biz collect.
- Une destination comme Google Sheets ou HubSpot.
- Une définition de recherche claire : localisation, mots-clés de catégorie, rayon et si vous voulez extraire les e-mails des sites web.
biz collect est gratuit au départ avec 200 crédits d'inscription et sans carte bancaire. C'est suffisant pour construire et tester le Zap avant de le mettre sur un planning. Consultez tarifs pour les limites actuelles.
Flux de données et forme de l'API
biz collect utilise un flux de job asynchrone car la recherche d'entreprises locales et l'extraction d'e-mails de sites web prennent plus de temps qu'une requête synchrone normale.
La requête de base est un POST vers :
https://bizcollect.dev/api/v1/search
Le corps contient les entrées de recherche :
{
"location": "Denver, CO",
"keywords": ["roofing contractor", "roofer"],
"radius_km": 25,
"scrape_emails": true
}
La réponse contient l'identifiant de job. Le Zap n'a besoin que du job_id et du statut :
{
"job_id": "job_123456",
"status": "queued",
"poll_url": "/api/v1/jobs/job_123456"
}
Puis Zapier interroge :
GET https://bizcollect.dev/api/v1/jobs/job_123456
Une fois terminé, le résultat contient des fiches structurées :
{
"job_id": "job_123456",
"status": "completed",
"businesses": [
{
"name": "Example Roofing Co",
"address": "500 Market St, Denver, CO 80202",
"phone": "+1 303-555-0101",
"website": "https://exampleroofing.com",
"emails": ["office@exampleroofing.com", "info@exampleroofing.com"]
}
]
}
Le contrat est stable : lancer une recherche, recevoir un job_id, interroger le endpoint du job, puis traiter du JSON structuré. Pour le schéma faisant autorité, utilisez la référence OpenAPI dans les docs biz collect.
Étape 1 : Choisir le déclencheur
Choisissez le déclencheur qui correspond à votre cas d'usage :
- Schedule by Zapier pour la prospection récurrente, par exemple chaque lundi matin.
- Google Forms, Typeform ou Webhook lorsqu'une personne ou un autre système soumet une recherche.
- Déclencheur de test manuel pendant la construction.
Pour une première version, utilisez un déclencheur Schedule ou un formulaire, et passez la localisation, les mots-clés et le rayon dans l'étape de recherche. Si vous voulez qu'un autre outil lance des recherches, utilisez un déclencheur Catch Hook (Webhooks by Zapier) et envoyez :
{
"location": "Vienna, Austria",
"keywords": ["dental clinic", "dentist"],
"radius_km": 10,
"scrape_emails": true
}
Gardez le premier Zap simple, confirmez la forme de la réponse, puis mappez les champs dynamiques.
Étape 2 : POSTer vers /api/v1/search avec Webhooks by Zapier
Ajoutez une action Webhooks by Zapier et choisissez l'événement d'action Custom Request. Nommez-la Start biz collect Search.
Configurez-la :
- Method :
POST - URL :
https://bizcollect.dev/api/v1/search - Data Pass-Through : off
- Data : le corps JSON
- Headers : autorisation et content type
Réglez les en-têtes :
Authorization: Bearer YOUR_BIZCOLLECT_API_KEY
Content-Type: application/json
Réglez les données (en mappant les champs du déclencheur quand vous les avez) :
{
"location": "{{location}}",
"keywords": ["{{keyword_one}}", "{{keyword_two}}"],
"radius_km": 20,
"scrape_emails": true
}
Utilisez l'événement Custom Request plutôt que POST pour contrôler exactement le corps JSON brut et les en-têtes. Si votre déclencheur donne les mots-clés comme une seule chaîne séparée par des virgules, passez-la d'abord dans une étape Formatter "Split Text" et reconstruisez le tableau, car l'API attend une entrée de mots-clés claire.
Après cette étape, vous avez un job_id et un status. Si elle échoue, vérifiez la clé API, le corps et les limites actuelles dans tarifs.
Étape 3 : Délai avant le polling
Ajoutez une étape Delay by Zapier, Delay For, après l'action de recherche. Nommez-la Wait Before Polling.
Réglez un délai assez long pour que le job soit habituellement fini au moment où vous pollez. L'extraction d'e-mails exige que l'API visite les sites web des entreprises, analyse les pages et déduplique les adresses, donc un délai trop court signifie que le seul poll attrape un job encore en cours. Comme un Zap basique poll une seule fois, dimensionnez ce délai généreusement :
- Petits jobs d'enrichissement : 1 à 2 minutes.
- Recherches d'extraction d'e-mails typiques : 2 à 5 minutes.
- Grandes recherches larges : 5 minutes ou plus.
Delay by Zapier peut attendre des minutes, heures ou jours, donc une pause de plusieurs minutes est bien dans sa portée. Ce délai unique généreux est le moyen le plus simple et le plus efficace en tâches de travailler avec le modèle linéaire de Zapier. Si vous avez besoin d'un vrai polling multi-tentatives, voir l'alternative Code by Zapier ci-dessous.
Étape 4 : Poller /api/v1/jobs/:id
Ajoutez une seconde action Webhooks by Zapier, Custom Request à nouveau. Nommez-la Poll biz collect Job.
Configurez-la :
- Method :
GET - URL :
https://bizcollect.dev/api/v1/jobs/{{job_id}}, en mappant lejob_iddepuis l'étape 2 - Headers : le même en-tête d'autorisation
En-tête :
Authorization: Bearer YOUR_BIZCOLLECT_API_KEY
La réponse inclut le statut actuel du job. L'étape suivante s'y ramifie.
Optionnel : Code by Zapier pour un vrai polling multi-tentatives
Si un seul poll retardé n'est pas assez fiable pour vos tailles de recherche, remplacez le Delay et le webhook de poll par une étape Code by Zapier qui poll dans une courte boucle interne. Cela garde tout dans une exécution de Zap et utilise une tâche au lieu de plusieurs :
// Code by Zapier (JavaScript). inputData.job_id and inputData.api_key are mapped in.
const base = "https://bizcollect.dev/api/v1/jobs/";
const headers = { Authorization: `Bearer ${inputData.api_key}` };
let data = null;
for (let attempt = 0; attempt < 12; attempt++) {
const res = await fetch(base + inputData.job_id, { headers });
data = await res.json();
if (data.status === "completed" || data.status === "failed") break;
await new Promise((r) => setTimeout(r, 10000)); // wait 10s between polls
}
output = { status: data.status, businesses: data.businesses || [] };
Gardez la boucle bornée (ici, 12 tentatives à 10 secondes, environ deux minutes) pour que l'étape ne bloque jamais. Code by Zapier a sa propre limite de temps d'exécution, donc pour de très gros jobs, préférez le schéma de délai unique généreux ou lancez le workflow dans n8n ou Make, qui bouclent nativement.
Étape 5 : Filtrer les jobs terminés
Ajoutez une étape Filter by Zapier. Ne continuez que lorsque :
status (Text) Exactly matches: completed
Cela arrête le Zap proprement quand un poll attrape un job encore queued ou running, ou quand il a failed. Pour la production, ajoutez un Path séparé ou une notification pour le cas failed afin qu'une personne sache quand un job n'a pas terminé, plutôt que le Zap s'arrête silencieusement.
Étape 6 : Diviser et nettoyer les entreprises
La réponse terminée contient un tableau d'entreprises. Zapier gère les tableaux via une approche line-item ou Looping by Zapier, ou vous aplatissez les données dans une étape Code ou Formatter.
L'approche la plus fiable pour la plupart des utilisateurs est une petite étape Code by Zapier qui renvoie un objet de sortie par entreprise, ce qui fait créer à Zapier une exécution en aval par fiche :
// Code by Zapier (JavaScript). inputData.businesses is mapped from the poll/Code step.
const businesses = JSON.parse(inputData.businesses || "[]");
return businesses.map((b) => ({
name: b.name || "",
address: b.address || "",
phone: b.phone || "",
website: b.website || "",
primary_email: Array.isArray(b.emails) && b.emails.length ? b.emails[0] : "",
all_emails: Array.isArray(b.emails) ? b.emails.join(", ") : "",
email_count: Array.isArray(b.emails) ? b.emails.length : 0,
}));
Renvoyer un tableau depuis Code by Zapier se déploie en une exécution par item pour les étapes qui suivent, ce qui est exactement ce que vous voulez avant d'écrire des lignes.
Si vous préférez sans code, utilisez les utilitaires Formatter pour extraire le premier e-mail et joindre la liste, puis une étape Looping sur les entreprises. Dans les deux cas, ajoutez un Filter après la division où primary_email n'est pas vide si la campagne est uniquement par e-mail. Gardez les fiches avec téléphone quand l'appel est aussi un canal, car la couverture e-mail est toujours partielle.
Étape 7 : Envoyer les leads vers Google Sheets
Google Sheets est la destination la plus facile. Ajoutez une action Google Sheets : Create Spreadsheet Row après la division.
Colonnes recommandées :
Search Job IDBusiness NameAddressPhoneWebsitePrimary EmailAll EmailsEmail CountCreated At
Mappez les champs de sortie de l'étape de division dans ces colonnes. Pour une déduplication légère, utilisez le domaine du site web ou l'e-mail principal comme valeur unique ; comme "Create Row" ne fait qu'ajouter, ajoutez une vérification "Lookup Spreadsheet Row" avant l'écriture si l'unicité stricte compte.
Étape 8 : Envoyer les leads qualifiés vers HubSpot
Pour HubSpot, le flux courant utilise les actions rechercher-et-créer de HubSpot :
- Trouver une entreprise par domaine ou site web.
- Créer l'entreprise si aucune n'existe.
- Si
primary_emailexiste, trouver un contact par e-mail. - Créer le contact si aucun n'existe.
- Associer le contact à l'entreprise.
Gardez la première version conservatrice. Ne créez pas de contacts en double parce qu'une entreprise a plusieurs e-mails ; commencez par primary_email et stockez la liste complète dans une propriété personnalisée ou une note. Un mapping d'entreprise utile :
Name -> Business Name
Domain -> the website with https:// and www. stripped (use Formatter)
Phone -> Phone
Website -> Website
Ajoutez une validation avant les actions de création : ne créer des contacts que lorsque primary_email est présent, ne créer des entreprises que lorsque website ou phone existe, et ajoutez un champ de source tel que biz collect Zapier plus la localisation de recherche et les mots-clés comme contexte de campagne. Cela rend simple le reporting sur quelles recherches ont produit des leads.
Disposition de Zap recommandée
Voici la séquence complète d'étapes pour une version pratique :
Trigger (Schedule / Form / Catch Hook)
-> Webhooks (Custom Request POST): Start biz collect Search
-> Delay For: Wait Before Polling (or Code by Zapier: poll loop)
-> Webhooks (Custom Request GET): Poll biz collect Job
-> Filter: status is completed
-> Code by Zapier: split + clean businesses (fans out per record)
-> Filter: primary_email is not empty (email-only campaigns)
-> Google Sheets / HubSpot
Ce design respecte le modèle linéaire de Zapier : un délai généreux (ou une boucle Code de poll bornée) au lieu d'une boucle ouverte, un filtre pour s'arrêter sur les jobs incomplets et une division fan-out avant l'écriture. Si vos jobs sont gros ou si vous voulez un polling multi-tentatives natif, le workflow Make.com de génération de leads et le workflow n8n de génération de leads gèrent les boucles plus naturellement, et le guide des meilleurs outils de génération de leads locaux en 2026 montre où chacun se place.
Commencer à construire
Le workflow Zapier de génération de leads le plus simple mais utile ne compte que quelques étapes : déclencheur, Webhooks POST, Delay, Webhooks GET, Filter, division et sortie. La valeur vient d'utiliser une API qui renvoie des données d'entreprises structurées et des e-mails de sites web vérifiés plutôt que de demander à Zapier de piloter un scraper pour lequel il n'a jamais été conçu.
biz collect est construit pour exactement ce schéma : un POST pour lancer une recherche locale, un polling asynchrone jusqu'à la fin, des champs JSON stables, des docs OpenAPI 3.1 et des e-mails de contact dédupliqués extraits des sites web d'entreprises. Il s'adapte à Zapier, Make, n8n, aux scripts, aux outils LLM et à l'enrichissement CRM.
Vous pouvez commencer gratuitement avec 200 crédits d'inscription et sans carte bancaire. Ouvrez les docs API, consultez les intégrations, vérifiez les tarifs et construisez aujourd'hui votre premier Zap de leads locaux automatisés.
Questions fréquentes
- Comment construire un workflow de génération de leads dans Zapier ?
- Utilisez Webhooks by Zapier (Custom Request POST) pour envoyer une ville et des mots-clés vers /v1/search, une étape Delay by Zapier pour attendre, un second Webhooks GET pour interroger /v1/jobs/:id, un Filter sur status égale completed, puis une étape de division et une action Google Sheets ou HubSpot pour écrire les leads.
- Zapier peut-il poller une API asynchrone à répétition ?
- Pas nativement en une exécution. Une exécution de Zap est linéaire sans étape boucler-jusqu'à, donc le schéma le plus simple est un Delay généreux dimensionné à la durée des jobs, puis un seul poll. Pour un vrai polling multi-tentatives, utilisez une étape Code by Zapier qui fetche dans une courte boucle bornée, ou lancez le workflow dans n8n ou Make, qui bouclent nativement.
- Quelle durée pour le Delay avant de poller biz collect ?
- Dimensionnez-le au job. Les petits jobs d'enrichissement finissent en 1 à 2 minutes ; les recherches d'extraction d'e-mails typiques en 2 à 5 minutes ; les grandes recherches larges peuvent prendre plus longtemps. Comme un Zap basique poll une fois, penchez vers un délai plus long pour que le poll attrape un job terminé.
- Comment diviser le tableau d'entreprises en lignes séparées dans Zapier ?
- Renvoyez un tableau d'objets depuis une étape Code by Zapier, qui se déploie en une exécution par entreprise pour les étapes suivantes, ou utilisez une étape Looping by Zapier sur le tableau. Puis mappez les champs par entreprise dans votre action Google Sheets ou CRM.
- Est-ce que cela fonctionne aussi avec Make ou n8n ?
- Oui. L'API utilise des requêtes HTTP standard, donc le même schéma recherche-poll-écriture fonctionne dans Make et n8n. Ces outils bouclent plus naturellement que Zapier, donc le polling multi-tentatives y est plus simple, tandis que Zapier brille par son immense catalogue d'apps.
- Existe-t-il une offre gratuite pour tester le Zap ?
- Oui. Vous obtenez 200 crédits d'inscription plus 20 crédits de connexion chaque jour sans carte bancaire, ce qui suffit à construire et valider le Zap complet avant de le mettre sur un planning.


