Guías
Automatización11 de junio de 202614 min de lectura

Workflow Zapier de generación de leads locales

Crea un Zap que encuentra negocios locales y emails, luego escribe en Sheets o HubSpot. Honesto sobre los límites de polling de Zapier + el setup completo.

Un Zap de Zapier con pasos de webhook, delay, poll y filtro que alimenta leads de negocios locales en una hoja de cálculo.

Si estás construyendo un workflow Zapier de generación de leads para leads de negocios locales, el paso de los datos es la parte difícil: encontrar negocios, sus sitios web, números de teléfono y emails de contacto sin mantener un scraper. biz collect le ofrece a Zapier una vía limpia con Webhooks by Zapier. Una acción hace POST de una localización y palabras clave hacia /v1/search, recibes un job_id asíncrono, y luego un breve esquema esperar-y-poll comprueba /v1/jobs/:id hasta que el JSON estructurado está listo. Esta guía construye un Zap funcional que encuentra negocios locales, extrae emails deduplicados de sus sitios web y envía los resultados a Google Sheets o HubSpot. También es honesta sobre dónde el modelo de polling de Zapier difiere de n8n y Make, porque esa diferencia moldea cómo construyes el Zap.

¿Por qué usar una API para la generación de leads en Zapier?

Zapier es la plataforma de automatización no-code más usada, con miles de integraciones de apps, un modelo trigger-y-acción limpio y herramientas integradas como Webhooks, Delay, Formatter, Filter y Paths. Es excelente moviendo datos entre apps. Pero la generación de leads local tiene un paso de adquisición de datos para el que Zapier por sí solo no está construido, porque Zapier no tiene ni automatización de navegador ni ciclo nativo.

Un enfoque scraping-first en Zapier significa llamar a un servicio de scraping externo, hacer parsing de HTML frágil y ejecutar un segundo scraper para encontrar los emails en cada sitio web. Es frágil y costoso de mantener. El enfoque más limpio es llamar a una API que ya devuelve datos de negocios estructurados con emails, así el Zap solo tiene que enrutar los resultados. Si aún estás comparando las fuentes, esta guía sobre cuál gana para los datos locales: la Places API, un scraper o una API de datos de empresas recorre las opciones.

biz collect está diseñado exactamente para esto. Es una API de contactos de empresas nativa para LLM, construida para agentes, herramientas de workflow, scripts y enriquecimiento CRM. Llamas a /api/v1/search con parámetros como location, keywords, radius_km y scrape_emails. La API devuelve un job en cola. Haces polling en /api/v1/jobs/:id hasta que se completa, y luego usas los registros JSON devueltos en el resto del Zap.

Esto deja que tu Zap se centre en el enrutamiento:

  • Iniciar una búsqueda desde un formulario, una programación o un webhook.
  • Solicitar datos de negocios locales estructurados a biz collect.
  • Esperar el job asíncrono, luego hacer polling del resultado.
  • Dividir los negocios devueltos en filas o registros.
  • Filtrar y limpiar los registros.
  • Enviar los leads cualificados a Google Sheets, HubSpot, Airtable u otra app.

Para los detalles de la API, empieza por los docs de la API, los ejemplos de integración en integraciones y los límites de plan en precios. Para ver el ciclo de búsqueda-y-polling asíncrono antes de construir, la página cómo funciona biz collect lo recorre. La documentación de Zapier es útil para las herramientas usadas aquí, en particular Webhooks by Zapier, Delay by Zapier y Formatter by Zapier.

Sé honesto sobre las restricciones de polling de Zapier

Antes de construir, vale la pena entender cómo Zapier difiere de n8n y Make, porque cambia el diseño.

  • Una única ejecución de Zap es lineal. No hay un "cicla hasta que una condición sea verdadera" nativo, como el Wait-y-ciclo de n8n o el Repeater de Make. Cada ejecución de Zap recorre una vez de arriba abajo.
  • Delay by Zapier espera, pero no cicla. Puedes insertar un retardo entre una petición y un poll, pero una única ejecución te da un único poll. Para hacer polling varias veces, reactivas el Zap o usas Sub-Zaps y ayudantes de ciclo, lo cual añade complejidad.
  • Los límites de tasks importan. Cada paso de acción ejecutado cuenta como un task contra tu plan, así que un esquema de polling multi-paso consume rápidamente tasks a volumen.
  • Code by Zapier es la vía de escape. Un paso de JavaScript o Python puede hacer fetch, esperar y re-hacer polling en un solo paso, sorteando la limitación de ausencia de ciclo para jobs moderados.

La consecuencia práctica: el diseño Zapier más limpio usa o (a) un único retardo generoso dimensionado a la duración habitual de los jobs, y luego hace polling una vez, o (b) un paso Code by Zapier que hace polling en un breve ciclo interno. n8n y Make gestionan el polling multi-intento de forma más natural; el artículo sobre el workflow n8n de generación de leads muestra ese ciclo nativo para comparación. Dentro de Zapier, diseñas en torno al modelo lineal, no contra él.

Qué construye este Zap

El Zap de este tutorial automatiza los leads locales desde la petición de búsqueda hasta la salida hacia el destino, con pasos Zapier estándar y biz collect para la búsqueda de negocios.

El Zap final tiene este aspecto:

  1. Un trigger inicia el Zap desde un formulario, una programación o un webhook.
  2. Una acción Webhooks by Zapier envía un POST a biz collect /api/v1/search.
  3. La respuesta devuelve un job_id y el estado.
  4. Un paso Delay by Zapier espera lo suficiente para que el job termine.
  5. Una segunda acción Webhooks by Zapier llama a /api/v1/jobs/:id.
  6. Un Filter verifica que el estado sea completed.
  7. Un paso Formatter o Code divide y limpia los negocios.
  8. Una acción de destino envía los leads a Google Sheets, HubSpot u otra app.

Puedes adaptar el mismo patrón para prospección puntual, escaneos recurrentes, listas de leads para agencias o enriquecimiento CRM, incluidos workflows de agentes IA que necesitan datos de contacto de negocios locales verificados.

Requisitos previos

Antes de construir, necesitas:

  • Una cuenta de Zapier en un plan que incluya los Zaps multi-paso (requerido para Webhooks, Delay y Formatter).
  • Una clave API de biz collect.
  • Un destino como Google Sheets o HubSpot.
  • Una definición de búsqueda clara: localización, palabras clave de categoría, radio y si extraer emails de los sitios web.

biz collect es gratuito para empezar con 200 créditos de registro y sin tarjeta de crédito. Es suficiente para construir y probar el Zap antes de ponerlo en una programación. Consulta precios para los límites actuales.

Flujo de datos y forma de la API

biz collect usa un flujo de job asíncrono porque la búsqueda de negocios locales y la extracción de emails de los sitios web tardan más que una petición síncrona normal.

La petición base es un POST a:

https://bizcollect.dev/api/v1/search

El body contiene los datos de búsqueda:

{
  "location": "Denver, CO",
  "keywords": ["roofing contractor", "roofer"],
  "radius_km": 25,
  "scrape_emails": true
}

La respuesta contiene el identificador de job. El Zap solo necesita el job_id y el estado:

{
  "job_id": "job_123456",
  "status": "queued",
  "poll_url": "/api/v1/jobs/job_123456"
}

Luego Zapier hace polling:

GET https://bizcollect.dev/api/v1/jobs/job_123456

Una vez completo, el resultado contiene registros estructurados:

{
  "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"]
    }
  ]
}

El contrato es estable: iniciar una búsqueda, recibir un job_id, hacer polling en el endpoint del job, luego procesar JSON estructurado. Para el esquema autoritativo, usa la referencia OpenAPI en los docs de biz collect.

Paso 1: Elegir el trigger

Elige el trigger que corresponde a tu caso de uso:

  • Schedule by Zapier para prospección recurrente, como cada lunes por la mañana.
  • Google Forms, Typeform o Webhook cuando una persona u otro sistema envía una búsqueda.
  • Trigger de prueba manual durante la construcción.

Para una primera versión, usa un trigger Schedule o un formulario, y pasa la localización, las palabras clave y el radio al paso de búsqueda. Si quieres que otra herramienta inicie búsquedas, usa un trigger Catch Hook (Webhooks by Zapier) y envía:

{
  "location": "Vienna, Austria",
  "keywords": ["dental clinic", "dentist"],
  "radius_km": 10,
  "scrape_emails": true
}

Mantén simple el primer Zap, confirma la forma de la respuesta, y luego mapea los campos dinámicos.

Paso 2: Hacer POST hacia /api/v1/search con Webhooks by Zapier

Añade una acción Webhooks by Zapier y elige el evento de acción Custom Request. Llámala Start biz collect Search.

Configúrala:

  • Method: POST
  • URL: https://bizcollect.dev/api/v1/search
  • Data Pass-Through: off
  • Data: el body JSON
  • Headers: autorización y content type

Fija las cabeceras:

Authorization: Bearer YOUR_BIZCOLLECT_API_KEY
Content-Type: application/json

Fija los datos (mapeando los campos del trigger donde los tengas):

{
  "location": "{{location}}",
  "keywords": ["{{keyword_one}}", "{{keyword_two}}"],
  "radius_km": 20,
  "scrape_emails": true
}

Usa el evento Custom Request en lugar de POST para controlar exactamente el body JSON crudo y las cabeceras. Si tu trigger proporciona las palabras clave como una única cadena separada por comas, pásala primero por un paso Formatter "Split Text" y reconstruye el array, porque la API espera una entrada de palabras clave clara.

Después de este paso, tienes un job_id y un status. Si falla, comprueba la clave API, el body y los límites actuales en precios.

Paso 3: Retardo antes del polling

Añade un paso Delay by Zapier, Delay For, después de la acción de búsqueda. Llámalo Wait Before Polling.

Fija un retardo lo bastante largo para que el job esté normalmente terminado en el momento en que haces polling. La extracción de emails requiere que la API visite los sitios web de los negocios, analice las páginas y deduplique las direcciones, así que un retardo demasiado corto significa que el único poll captura un job aún en ejecución. Como un Zap básico solo hace polling una vez, dimensiona este retardo con generosidad:

  • Pequeños jobs de enriquecimiento: 1-2 minutos.
  • Búsquedas de extracción de emails típicas: 2-5 minutos.
  • Grandes búsquedas amplias: 5 minutos o más.

Delay by Zapier puede esperar minutos, horas o días, así que una pausa de varios minutos entra bien en su alcance. Este único retardo generoso es la forma más simple y eficiente en tasks de trabajar con el modelo lineal de Zapier. Si necesitas un verdadero polling multi-intento, mira la alternativa Code by Zapier más abajo.

Paso 4: Hacer polling en /api/v1/jobs/:id

Añade una segunda acción Webhooks by Zapier, Custom Request de nuevo. Llámala Poll biz collect Job.

Configúrala:

  • Method: GET
  • URL: https://bizcollect.dev/api/v1/jobs/{{job_id}}, mapeando el job_id del paso 2
  • Headers: la misma cabecera de autorización

Cabeceras:

Authorization: Bearer YOUR_BIZCOLLECT_API_KEY

La respuesta incluye el estado actual del job. El paso siguiente se ramifica según él.

Opcional: Code by Zapier para un verdadero polling multi-intento

Si un único poll retardado no es lo bastante fiable para tus tamaños de búsqueda, sustituye el Delay y el webhook de poll por un paso Code by Zapier que hace polling en un breve ciclo interno. Esto mantiene todo en una ejecución de Zap y usa un task en lugar de varios:

// 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 || [] };

Mantén el ciclo limitado (aquí, 12 intentos a 10 segundos, unos dos minutos) para que el paso nunca se bloquee. Code by Zapier tiene su propio límite de tiempo de ejecución, así que para jobs muy grandes prefiere el esquema de retardo único generoso o ejecuta el workflow en n8n o Make, que ciclan de forma nativa.

Paso 5: Filtrar los jobs completados

Añade un paso Filter by Zapier. Continúa solo cuando:

status (Text) Exactly matches: completed

Esto detiene el Zap de forma limpia cuando un poll captura un job aún queued o running, o cuando está failed. Para producción, añade un Path separado o una notificación para el caso failed para que una persona sepa cuándo un job no se completó, en lugar de que el Zap se detenga silenciosamente.

Paso 6: Dividir y limpiar los negocios

La respuesta completada contiene un array de negocios. Zapier gestiona los arrays mediante un enfoque line-item o Looping by Zapier, o aplanas los datos en un paso Code o Formatter.

El enfoque más fiable para la mayoría de los usuarios es un pequeño paso Code by Zapier que devuelve un objeto de salida por negocio, lo cual hace que Zapier cree una ejecución posterior por registro:

// 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,
}));

Devolver un array desde Code by Zapier se despliega en una ejecución por item para los pasos que siguen, que es exactamente lo que quieres antes de escribir filas.

Si prefieres sin código, usa las utilidades Formatter para extraer el primer email y unir la lista, y luego un paso Looping sobre los negocios. En ambos casos, añade un Filter después de la división donde primary_email no esté vacío si la campaña es solo email. Conserva los registros con teléfono cuando la llamada es también un canal, ya que la cobertura de emails siempre es parcial.

Paso 7: Enviar los leads a Google Sheets

Google Sheets es el destino más fácil. Añade una acción Google Sheets: Create Spreadsheet Row después de la división.

Columnas recomendadas:

  • Search Job ID
  • Business Name
  • Address
  • Phone
  • Website
  • Primary Email
  • All Emails
  • Email Count
  • Created At

Mapea los campos de salida del paso de división a esas columnas. Para una deduplicación ligera, usa el dominio del sitio web o el email principal como valor único; como "Create Row" solo añade, agrega una comprobación "Lookup Spreadsheet Row" antes de la escritura si la unicidad estricta importa.

Paso 8: Enviar los leads cualificados a HubSpot

Para HubSpot, el flujo común usa las acciones buscar-y-crear de HubSpot:

  1. Encontrar una empresa por dominio o sitio web.
  2. Crear la empresa si no existe ninguna.
  3. Si primary_email existe, encontrar un contacto por email.
  4. Crear el contacto si no existe ninguno.
  5. Asociar el contacto con la empresa.

Mantén la primera versión conservadora. No crees contactos duplicados porque un negocio tenga varios emails; empieza con primary_email y almacena la lista completa en una propiedad personalizada o una nota. Un mapeo de empresa útil:

Name    -> Business Name
Domain  -> the website with https:// and www. stripped (use Formatter)
Phone   -> Phone
Website -> Website

Añade una validación antes de las acciones de creación: crear contactos solo cuando primary_email esté presente, crear empresas solo cuando website o phone exista, y añade un campo de origen como biz collect Zapier más la localización de búsqueda y las palabras clave como contexto de campaña. Esto hace simple reportar qué búsquedas produjeron leads.

Layout de Zap recomendado

Aquí está la secuencia completa de pasos para una versión práctica:

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

Este diseño respeta el modelo lineal de Zapier: un retardo generoso (o un ciclo Code de poll limitado) en lugar de un ciclo abierto, un filtro para detenerse en los jobs incompletos y una división fan-out antes de la escritura. Si tus jobs son grandes o quieres un polling multi-intento nativo, el workflow Make.com de generación de leads y el workflow n8n de generación de leads gestionan los ciclos de forma más natural, y la guía de las mejores herramientas de generación de leads locales en 2026 muestra dónde encaja cada uno.

Empezar a construir

El workflow Zapier de generación de leads más simple pero útil se compone de unos pocos pasos: trigger, Webhooks POST, Delay, Webhooks GET, Filter, división y salida. El valor viene de usar una API que devuelve datos de negocios estructurados y emails de sitios web verificados en lugar de pedirle a Zapier que pilote un scraper para el que nunca fue diseñado.

biz collect está construido exactamente para este patrón: un POST para iniciar una búsqueda local, polling asíncrono hasta el completado, campos JSON estables, docs OpenAPI 3.1 y emails de contacto deduplicados extraídos de los sitios web de los negocios. Encaja con Zapier, Make, n8n, scripts, herramientas LLM y enriquecimiento CRM.

Puedes empezar gratis con 200 créditos de registro y sin tarjeta de crédito. Abre los docs de la API, revisa las integraciones, consulta los precios y construye hoy tu primer Zap de leads locales automatizados.

Preguntas frecuentes

¿Cómo construyo un workflow de generación de leads en Zapier?
Usa Webhooks by Zapier (Custom Request POST) para enviar una ciudad y palabras clave hacia /v1/search, un paso Delay by Zapier para esperar, un segundo Webhooks GET para hacer polling en /v1/jobs/:id, un Filter sobre status igual a completed, y luego un paso de división y una acción Google Sheets o HubSpot para escribir los leads.
¿Puede Zapier hacer polling de una API asíncrona repetidamente?
No de forma nativa en una ejecución. Una única ejecución de Zap es lineal sin un paso cicla-hasta, así que el esquema más simple es un Delay generoso dimensionado a la duración de los jobs, y luego un único poll. Para un verdadero polling multi-intento, usa un paso Code by Zapier que hace fetch en un breve ciclo limitado, o ejecuta el workflow en n8n o Make, que ciclan de forma nativa.
¿Cuánto debe durar el Delay antes de hacer polling en biz collect?
Dimensiónalo al job. Los pequeños jobs de enriquecimiento terminan en 1-2 minutos; las búsquedas de extracción de emails típicas en 2-5 minutos; las grandes búsquedas amplias pueden tardar más. Como un Zap básico hace polling una vez, tiende hacia un retardo más largo para que el poll capture un job completado.
¿Cómo divido el array de negocios en filas separadas en Zapier?
Devuelve un array de objetos desde un paso Code by Zapier, que se despliega en una ejecución por negocio para los pasos siguientes, o usa un paso Looping by Zapier sobre el array. Luego mapea los campos por negocio en tu acción Google Sheets o CRM.
¿Funciona también con Make o n8n?
Sí. La API usa peticiones HTTP estándar, así que el mismo esquema de búsqueda-poll-escritura funciona en Make y n8n. Esas herramientas ciclan de forma más natural que Zapier, así que el polling multi-intento allí es más simple, mientras que Zapier brilla por su enorme catálogo de apps.
¿Hay un plan gratuito para probar el Zap?
Sí. Obtienes 200 créditos de registro más 20 créditos de acceso cada día sin tarjeta de crédito, suficientes para construir y validar el Zap completo antes de ponerlo en una programación.

Recopile contactos de empresas a escala.

Empiece con 200 créditos gratis y 20 más cada día. Sin tarjeta, sin configuración.

Sin tarjeta bancaria200 créditos de registro20 créditos diarios