Guías
Automatización23 de mayo de 202615 min de lectura

Workflow n8n de generación de leads (paso a paso)

Crea un workflow n8n que encuentra negocios locales, hace polling del job, filtra los contactos y envía leads verificados a Google Sheets o tu CRM.

Un lienzo de automatización no-code que conecta una petición API, un bucle de polling, filas de leads y una hoja de cálculo.

Si estás construyendo un workflow n8n de generación de leads para la prospección local, la parte difícil es obtener registros de negocios fiables, sitios web, números de teléfono y emails de contacto sin mantener selectores de navegador ni scripts de scraping frágiles. biz collect le ofrece a n8n una vía más limpia: envía una petición HTTP con una localización, palabras clave, radio y opción de extracción de emails, recibe un job_id asíncrono, y luego haz polling hasta que los resultados JSON estructurados estén listos. Esta guía muestra cómo construir un workflow n8n Google Maps completo que encuentra negocios locales, extrae emails deduplicados de sus sitios web y envía los resultados a Google Sheets, HubSpot, Slack o cualquier sistema posterior.

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

n8n es excelente conectando sistemas: triggers, llamadas HTTP, ramas condicionales, transformaciones de datos, hojas de cálculo, CRM, alertas y jobs programados. Pero la generación de leads local tiene un paso de adquisición de datos que puede volverse un caos si intentas automatizarlo solo con scraping de navegador.

Un montaje típico de "n8n Google Maps leads" suele partir de un navegador headless, una URL de búsqueda, selectores para las tarjetas de resultados y una lógica de scraping separada para sitios web y emails. Puede funcionar para pequeños experimentos, pero genera trabajo de mantenimiento. Los diseños de página cambian, las sesiones de navegador fallan, los selectores se rompen y la extracción de emails de los sitios se convierte en un segundo scraper. Si estás en ese punto hoy, la guía sobre la alternativa a un scraper de Google Maps que devuelve JSON muestra la vía API-first en la que se apoya este workflow.

biz collect está diseñado para la forma opuesta. 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 de búsqueda 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 de tu workflow n8n. Si aún estás eligiendo una fuente, esta comparativa de cómo se comparan la Places API, un scraper de Google Maps y una API te ayuda a decidir.

Esto significa que tu workflow n8n puede centrarse en el enrutamiento de leads:

  • Ejecutar búsquedas de forma programada o desde el envío de un formulario.
  • Solicitar datos de negocios locales estructurados a biz collect.
  • Esperar y hacer polling hasta que el job asíncrono se complete.
  • Dividir los negocios devueltos en items individuales.
  • Filtrar, enriquecer, deduplicar o puntuar los registros.
  • Enviar los leads cualificados a Google Sheets, HubSpot, Slack, Airtable, Notion u otro destino.

Para los detalles de la API, empieza por los docs de la API de biz collect, los ejemplos de integración en Integraciones y la información de planes en Precios. Si quieres ver el modelo de búsqueda-y-polling asíncrono antes de construir, la página cómo funciona biz collect recorre el mismo ciclo de petición que este workflow automatiza. La documentación de n8n es útil para los nodos estándar usados aquí, en particular el nodo HTTP Request, el nodo Wait, el nodo IF y el nodo Google Sheets.

Qué construye este workflow

El workflow de este tutorial automatiza los leads locales desde la petición de búsqueda hasta la salida hacia el destino. Usa el comportamiento estándar de n8n y los nodos HTTP, con biz collect encargándose de la búsqueda de negocios y n8n de la orquestación.

El workflow final tiene este aspecto:

  1. Un trigger inicia el workflow manualmente, de forma programada o desde un webhook.
  2. Un nodo HTTP Request envía una petición POST a /api/v1/search de biz collect.
  3. La respuesta devuelve un job_id y el estado del job.
  4. Un nodo Wait pausa brevemente antes del polling.
  5. Un segundo nodo HTTP Request llama a /api/v1/jobs/:id.
  6. Un nodo IF verifica si el estado del job es completed.
  7. Si no está completo, el workflow espera y hace polling de nuevo, con un límite de intentos.
  8. Una vez completo, un nodo Code o de división de items transforma los negocios devueltos en items n8n individuales.
  9. Los nodos de destino envían los leads a Google Sheets, HubSpot, Slack u otro sistema.
  10. Las ramas de error gestionan jobs fallidos, timeouts y conjuntos de resultados vacíos.

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

Requisitos previos

Antes de construir el workflow, necesitas:

  • Una instancia de n8n, ya sea n8n Cloud o self-hosted.
  • Una clave API de biz collect.
  • Un destino para los leads, como Google Sheets, HubSpot o Slack.
  • 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 actualmente gratuito para empezar con 200 créditos de registro y sin tarjeta de crédito. Es suficiente para construir, probar y ejecutar pequeños jobs de prospección antes de poner la automatización en una programación de producción. Consulta Precios para los límites de plan 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 pueden tardar más que una petición HTTP síncrona normal. n8n gestiona esto bien porque los workflows pueden esperar, ramificarse y hacer polling.

La petición base es un POST a:

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

El body contiene los datos de búsqueda local:

{
  "location": "Austin, TX",
  "keywords": ["dentist", "orthodontist"],
  "radius_km": 15,
  "scrape_emails": true
}

La respuesta contiene un identificador de job. La respuesta exacta puede incluir campos adicionales, pero el workflow solo necesita el job_id y el estado:

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

Luego n8n hace polling:

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

Una vez completo, el resultado contiene registros de negocios estructurados. Una respuesta completada representativa tiene este aspecto:

{
  "job_id": "job_123456",
  "status": "completed",
  "businesses": [
    {
      "name": "Example Dental Studio",
      "address": "123 Main St, Austin, TX 78701",
      "phone": "+1 512-555-0101",
      "website": "https://exampledentalstudio.com",
      "emails": ["hello@exampledentalstudio.com", "office@exampledentalstudio.com"]
    }
  ]
}

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

Paso 1: Crear el trigger

Empieza con el trigger que corresponde a tu caso de uso. Las tres opciones comunes son:

  • Manual Trigger para pruebas y búsquedas puntuales.
  • Schedule Trigger para prospección recurrente, como cada lunes por la mañana.
  • Webhook Trigger cuando otro sistema o agente debe iniciar una búsqueda dinámicamente.

Para una primera versión, usa un Manual Trigger y codifica de forma fija una localización y unas palabras clave en el primer nodo HTTP. Una vez estable el workflow, sustituye los valores fijos por datos de un Schedule Trigger, el envío de un formulario, un segmento CRM o un payload de webhook.

Si quieres que el workflow acepte búsquedas dinámicas desde otra herramienta, usa un Webhook Trigger y envía un body como:

{
  "location": "Zurich, Switzerland",
  "keywords": ["law firm", "tax advisor"],
  "radius_km": 10,
  "scrape_emails": true
}

Luego el body de la petición a biz collect puede referirse a los campos entrantes del webhook con expresiones n8n. Mantén simple tu primer workflow, confirma la forma de la respuesta de la API, y luego parametriza.

Paso 2: Añadir el nodo HTTP Request para /api/v1/search

Añade un nodo HTTP Request después del trigger. Llámalo Start biz collect Search.

Configura el nodo:

  • Method: POST
  • URL: https://bizcollect.dev/api/v1/search
  • Authentication: una cabecera con clave API o tu configuración de credential de n8n preferida
  • Response format: JSON
  • Send body: JSON

Usa esta cabecera de autorización:

Authorization: Bearer YOUR_BIZCOLLECT_API_KEY
Content-Type: application/json

Para una búsqueda de prueba fija, usa este body JSON:

{
  "location": "Miami, FL",
  "keywords": ["med spa", "aesthetic clinic"],
  "radius_km": 20,
  "scrape_emails": true
}

Para una versión con Webhook Trigger, usa expresiones:

{
  "location": "={{ $json.location }}",
  "keywords": "={{ $json.keywords }}",
  "radius_km": "={{ $json.radius_km || 15 }}",
  "scrape_emails": "={{ $json.scrape_emails ?? true }}"
}

Si tu trigger pasa keywords como una cadena separada por comas en lugar de un array, normalízala antes de la petición HTTP con un nodo Set o Code. biz collect espera una entrada de palabras clave clara; un array suele ser lo más fácil de controlar en la automatización.

Ejemplo de normalización con un nodo Code:

const keywords = Array.isArray($json.keywords)
  ? $json.keywords
  : String($json.keywords || "")
      .split(",")
      .map((keyword) => keyword.trim())
      .filter(Boolean);

return [
  {
    json: {
      location: $json.location,
      keywords,
      radius_km: Number($json.radius_km || 15),
      scrape_emails: $json.scrape_emails !== false
    }
  }
];

Luego referencia los campos normalizados en el body HTTP:

{
  "location": "={{ $json.location }}",
  "keywords": "={{ $json.keywords }}",
  "radius_km": "={{ $json.radius_km }}",
  "scrape_emails": "={{ $json.scrape_emails }}"
}

Después de que se ejecute este nodo, deberías tener un item con job_id, status y posiblemente poll_url. Si la petición falla, comprueba la clave API, el body de la petición y los límites actuales en Precios.

Paso 3: Guardar el Job ID para el polling

Antes del polling, asegúrate de que el job_id esté disponible para los nodos posteriores. En muchos workflows n8n, el nodo siguiente puede referirse directamente a:

{{ $json.job_id }}

Si prefieres hacer el workflow más explícito, añade un nodo Set llamado Keep Job ID con los campos:

{
  "job_id": "={{ $json.job_id }}",
  "poll_url": "={{ $json.poll_url }}",
  "poll_attempt": 0
}

Esto le da al ciclo de polling una forma de item limpia. Un contador de intentos es útil porque todo workflow asíncrono debería tener una condición de parada clara. Incluso cuando la API está sana, pueden ocurrir fallos de red, entradas erróneas o límites posteriores. Un workflow que solo puede ciclar indefinidamente es difícil de operar.

Paso 4: Esperar antes del primer poll

Añade un nodo Wait después de la petición de búsqueda. Llámalo Wait Before Polling.

Para la mayoría de los workflows, empieza con un retardo corto de 10 a 30 segundos. La extracción de emails requiere que la API visite los sitios web de los negocios, analice las páginas y deduplique las direcciones candidatas, así que hacer polling inmediatamente después de la petición de búsqueda suele añadir ruido sin mejorar el resultado.

Un punto de partida práctico:

  • Wait amount: 15
  • Unit: seconds

Para búsquedas de radio amplio o conjuntos de palabras clave extensos, aumenta el retardo. Para pequeños jobs de enriquecimiento, redúcelo. Puedes ajustarlo tras observar las duraciones reales de los jobs en tu cuenta.

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

Añade otro nodo HTTP Request llamado Poll biz collect Job.

Configúralo:

  • Method: GET
  • URL: =https://bizcollect.dev/api/v1/jobs/{{ $json.job_id }}
  • Authentication: la misma cabecera con clave API que la petición de búsqueda
  • Response format: JSON

Cabeceras:

Authorization: Bearer YOUR_BIZCOLLECT_API_KEY

La respuesta de polling debería incluir el estado actual del job. Tu workflow debería ramificarse según ese estado en lugar de asumir que el primer poll está completo.

Estados típicos a gestionar:

  • queued o running: esperar y hacer polling de nuevo.
  • completed: procesar businesses.
  • failed: detener el workflow y avisar a alguien o registrar el error.

Usa los campos de estado reales de los docs de la API como fuente de verdad. La lógica del workflow permanece igual aunque añadas más gestión específica por estado más adelante.

Paso 6: Añadir un nodo IF para los jobs completados

Añade un nodo IF llamado Is Job Completed?.

La condición principal debería verificar:

{{ $json.status }} equals completed

La rama true continúa hacia el procesamiento de resultados. La rama false necesita más lógica porque un job puede seguir en ejecución o haber fallado.

Para un primer workflow, añade un segundo nodo IF en la rama false, llamado Did Job Fail?:

{{ $json.status }} equals failed

Si failed es verdadero, envía una alerta a Slack, escribe una fila de error o detén la ejecución. Si failed es falso, asume que el job sigue pendiente o en ejecución y continúa hacia un contador de intentos.

Esto crea una rama clara:

  • Completado: dividir y emitir los leads.
  • Fallido: reportar el error.
  • Aún en curso: esperar y hacer polling de nuevo.

Paso 7: Añadir lógica de intentos y timeout

Un workflow n8n de producción para la extracción de emails de empresas no debería hacer polling indefinidamente. Añade un contador de intentos antes de que el ciclo vuelva al nodo Wait.

Un método simple es insertar un nodo Code llamado Increment Poll Attempt en la rama aún-en-ejecución:

const attempt = Number($json.poll_attempt || 0) + 1;

return [
  {
    json: {
      ...$json,
      poll_attempt: attempt,
      max_poll_attempts: Number($json.max_poll_attempts || 20)
    }
  }
];

Luego añade un nodo IF llamado Can Poll Again?:

{{ $json.poll_attempt }} is smaller than {{ $json.max_poll_attempts }}

Si es verdadero, reconecta al nodo Wait y haz polling de nuevo. Si es falso, envía una alerta de timeout o escribe el job hacia un destino de error para el seguimiento.

Con un nodo Wait de 15 segundos y 20 intentos máximos, el workflow espera unos cinco minutos antes del timeout. Puedes ajustar estos números para tu caso de uso:

  • Pruebas de prospección rápidas: 10 intentos a 10 segundos.
  • Jobs de extracción de emails: 20 intentos a 15 segundos.
  • Grandes búsquedas recurrentes: 30 intentos a 30 segundos.

El valor correcto es operativo, no teórico. Fija un límite que dé a los jobs normales tiempo para completarse mientras hace emerger los retrasos inesperados.

Paso 8: Dividir los negocios en items individuales

Una vez que status es completed, la respuesta contiene un array de negocios. La mayoría de los nodos de destino funcionan mejor cuando cada negocio es su propio item n8n.

Añade un nodo Code llamado Split Businesses.

Usa este código:

const businesses = $json.businesses || [];

return businesses.map((business) => ({
  json: {
    job_id: $json.job_id,
    name: business.name || "",
    address: business.address || "",
    phone: business.phone || "",
    website: business.website || "",
    emails: business.emails || [],
    primary_email: Array.isArray(business.emails) && business.emails.length > 0
      ? business.emails[0]
      : "",
    email_count: Array.isArray(business.emails) ? business.emails.length : 0
  }
}));

Esto le da a cada nodo posterior una forma de item predecible:

{
  "job_id": "job_123456",
  "name": "Example Dental Studio",
  "address": "123 Main St, Austin, TX 78701",
  "phone": "+1 512-555-0101",
  "website": "https://exampledentalstudio.com",
  "emails": ["hello@exampledentalstudio.com"],
  "primary_email": "hello@exampledentalstudio.com",
  "email_count": 1
}

Si el workflow es específicamente para la venta saliente, añade un filtro después de la división:

{{ $json.primary_email }} is not empty

Esto mantiene el CRM o la hoja de cálculo centrado en los leads con datos de contacto directos. Si tu equipo de ventas también llama a los prospectos, conserva los registros con números de teléfono aunque no se encuentre ningún email.

Paso 9: Enviar los leads a Google Sheets

Google Sheets es el destino más fácil por el que empezar porque hace la salida visible y fácil de inspeccionar. Añade un nodo Google Sheets después de Split Businesses.

Columnas recomendadas:

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

Mapea los campos así:

{
  "Search Job ID": "={{ $json.job_id }}",
  "Business Name": "={{ $json.name }}",
  "Address": "={{ $json.address }}",
  "Phone": "={{ $json.phone }}",
  "Website": "={{ $json.website }}",
  "Primary Email": "={{ $json.primary_email }}",
  "All Emails": "={{ $json.emails.join(', ') }}",
  "Email Count": "={{ $json.email_count }}",
  "Created At": "={{ new Date().toISOString() }}"
}

Para una estrategia de deduplicación ligera, usa el sitio web o el email principal como valor único. Si tu configuración de Google Sheets solo añade filas, agrega un paso de limpieza posterior o usa un destino de base de datos para una unicidad más estricta. Para los workflows CRM, la deduplicación debería normalmente ocurrir antes de crear nuevos registros de empresa o contacto.

Paso 10: Enviar los leads cualificados a HubSpot

Para HubSpot, el flujo más común es:

  1. Buscar una empresa existente por dominio o sitio web.
  2. Si no existe coincidencia, crear una empresa.
  3. Si primary_email existe, buscar un contacto existente por email.
  4. Si no existe contacto, crear un contacto.
  5. Asociar el contacto con la empresa si tu configuración de HubSpot lo requiere.

La configuración exacta del nodo HubSpot depende de tu cuenta, tus propiedades y tu modelo de objetos, así que mantén la primera versión conservadora. No crees contactos duplicados solo porque un negocio tenga varios emails. Empieza con primary_email, y luego almacena opcionalmente la lista completa de emails deduplicados en una propiedad personalizada o una nota.

Mapeo de empresa útil:

{
  "name": "={{ $json.name }}",
  "domain": "={{ $json.website.replace(/^https?:\\/\\//, '').replace(/^www\\./, '').split('/')[0] }}",
  "phone": "={{ $json.phone }}",
  "address": "={{ $json.address }}",
  "website": "={{ $json.website }}"
}

Mapeo de contacto útil:

{
  "email": "={{ $json.primary_email }}",
  "company": "={{ $json.name }}",
  "phone": "={{ $json.phone }}",
  "website": "={{ $json.website }}"
}

Si tu CRM tiene reglas de datos estrictas, añade una validación antes de HubSpot:

  • Crear contactos solo cuando primary_email no esté vacío.
  • Crear empresas solo cuando website o phone esté presente.
  • Añadir un campo de origen como biz collect n8n workflow.
  • Añadir la localización de búsqueda y el conjunto de palabras clave como contexto de campaña.

Esto facilita reportar qué búsquedas locales generaron leads útiles.

Paso 11: Enviar un resumen a Slack

Slack es útil para la visibilidad operativa. En lugar de publicar cada lead individualmente, publica un resumen compacto cuando un job se completa.

Añade un nodo Code antes del nodo Slack si necesitas resumir el job completado antes de la división:

const businesses = $json.businesses || [];
const withEmail = businesses.filter((business) =>
  Array.isArray(business.emails) && business.emails.length > 0
);

return [
  {
    json: {
      job_id: $json.job_id,
      status: $json.status,
      business_count: businesses.length,
      businesses_with_email: withEmail.length,
      sample_names: businesses.slice(0, 5).map((business) => business.name).join(", ")
    }
  }
];

Luego envía un mensaje a Slack:

biz collect job {{ $json.job_id }} completed.
Businesses found: {{ $json.business_count }}
With email: {{ $json.businesses_with_email }}
Sample: {{ $json.sample_names }}

Para las ramas de error, envía un mensaje diferente:

biz collect job {{ $json.job_id }} did not complete.
Status: {{ $json.status }}
Poll attempts: {{ $json.poll_attempt }}

Esto te da suficiente contexto para monitorizar los workflows recurrentes sin abrir n8n en cada ejecución.

Layout de workflow recomendado

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

Manual Trigger
  -> Start biz collect Search
  -> Keep Job ID
  -> Wait Before Polling
  -> Poll biz collect Job
  -> Is Job Completed?
      true:
        -> Split Businesses
        -> Has Email?
        -> Google Sheets / HubSpot / Slack
      false:
        -> Did Job Fail?
            true:
              -> Slack Error Alert
            false:
              -> Increment Poll Attempt
              -> Can Poll Again?
                  true:
                    -> Wait Before Polling
                  false:
                    -> Slack Timeout Alert

Este patrón es deliberadamente simple. Evita infraestructura a medida mientras gestiona las realidades de las API asíncronas: el trabajo puede ir a cola, los jobs pueden durar un rato, y los jobs fallidos o de larga duración necesitan una vía apta para operadores.

Checklist de gestión de errores

No dejes la gestión de errores para más tarde. Un workflow de generación de leads suele ejecutarse de forma programada, lo que significa que los fallos silenciosos crean pipelines obsoletos.

Añade gestión para estos casos:

  • Petición no autorizada: clave API ausente o inválida. Detener de inmediato y notificar al propietario del workflow.
  • Petición errónea: location ausente, keywords vacío o radius_km inválido. Escribir la entrada fallida en una hoja de errores.
  • Límite de rate o de plan: pausar el workflow y enviar una alerta con un enlace a Precios.
  • Job fallido: notificar a Slack e incluir el job_id.
  • Timeout del job: incluir poll_attempt y el último estado conocido.
  • Ningún negocio devuelto: escribir un resultado exitoso pero vacío con los parámetros de búsqueda.
  • Negocios sin emails: conservarlos si el outreach telefónico o la revisión del sitio importa; filtrarlos si el email es obligatorio.

Para los workflows programados, añade un destino de log de ejecución. Una simple Google Sheet funciona:

{
  "timestamp": "={{ new Date().toISOString() }}",
  "location": "={{ $json.location }}",
  "keywords": "={{ Array.isArray($json.keywords) ? $json.keywords.join(', ') : $json.keywords }}",
  "job_id": "={{ $json.job_id }}",
  "status": "={{ $json.status }}",
  "poll_attempt": "={{ $json.poll_attempt || 0 }}"
}

Esto facilita el debug cuando un stakeholder pregunta por qué un territorio en particular no produjo nuevos leads.

Reglas de deduplicación y calidad de leads

biz collect deduplica los emails de contacto extraídos de los sitios web de los negocios, pero aun así deberías deduplicar a nivel de destino. El mismo negocio puede aparecer en búsquedas diferentes, sobre todo cuando los conjuntos de palabras clave se solapan.

Buenas claves de deduplicación:

  • Dominio del sitio web
  • Email principal
  • Número de teléfono
  • Combinación de nombre del negocio y dirección

Para Google Sheets, una fórmula simple o un lookup puede señalar los duplicados. Para HubSpot y otros CRM, usa los pasos nativos de buscar-antes-de-crear. Para las bases de datos, impón la unicidad sobre un dominio de sitio web normalizado o un email principal cuando sea posible.

También puedes añadir una puntuación de calidad de leads en n8n:

let score = 0;

if ($json.website) score += 20;
if ($json.phone) score += 15;
if ($json.primary_email) score += 40;
if ($json.email_count > 1) score += 10;
if ($json.address) score += 15;

return [
  {
    json: {
      ...$json,
      lead_score: score,
      qualified: score >= 60
    }
  }
];

Luego ramifica:

{{ $json.qualified }} is true

Los leads cualificados van a HubSpot. Los leads con puntuación más baja van a una hoja de revisión. Esto mantiene tu CRM más limpio mientras preserva datos de mercado útiles.

Empezar a construir

El workflow n8n de generación de leads más simple pero útil se compone de unos pocos nodos: trigger, petición HTTP, wait, poll, IF, split 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 n8n que mantenga un scraper.

biz collect está construido exactamente para este patrón: una petición POST para iniciar una búsqueda de negocios locales, 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 n8n, Make, Zapier, scripts, herramientas LLM y workflows de enriquecimiento CRM sin mantenimiento de navegador headless. Si aún estás sopesando opciones, la guía de las mejores herramientas de generación de leads locales en 2026 muestra dónde encaja un workflow n8n-más-API entre scrapers, herramientas no-code y 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 workflow de leads locales automatizados en n8n.

Preguntas frecuentes

¿Cómo construyo un workflow de generación de leads en n8n?
Encadena cinco fases: un trigger, un nodo HTTP Request que hace POST de una ciudad y palabras clave hacia /v1/search, un segundo nodo HTTP Request más un nodo Wait que hacen polling en /v1/jobs/:id hasta el completado, un filtro y un nodo Google Sheets o CRM para escribir los leads.
¿Qué nodos de n8n necesito?
Dos nodos HTTP Request (búsqueda y poll), un nodo Wait con un ciclo para el polling, un nodo Filter o IF y un nodo de destino como Google Sheets o tu CRM. No se requiere código personalizado.
¿Cómo hago polling para el completado en n8n?
Llama a /v1/jobs/:id desde un nodo HTTP Request, añade un nodo Wait y cicla hasta que el estado del job sea completo; luego lee los resultados JSON estructurados.
¿Puedo obtener emails verificados del workflow?
biz collect enriquece cada negocio desde su sitio web, así que los registros pueden incluir email, sitio web, teléfono y perfiles sociales. Filtra los registros que contienen un email y un sitio web para quedarte solo con los leads sobre los que puedes actuar.
¿Funciona también con Zapier o Make?
Sí. La API usa peticiones HTTP estándar, así que el mismo patrón de búsqueda-poll-filtro-escritura funciona en Zapier y Make igual que en n8n.
¿Hay un plan gratuito para probar el workflow?
Sí. Obtienes 200 créditos de registro más 20 créditos de acceso cada día sin tarjeta de crédito, suficientes para montar y validar el workflow completo.

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