Guide
Automazione23 maggio 202615 min di lettura

Workflow n8n di lead generation (passo dopo passo)

Costruisci un workflow n8n che trova attività locali, fa polling del job, filtra i contatti e invia lead verificati a Google Sheets o al tuo CRM.

Un canvas di automazione no-code che collega una richiesta API, un ciclo di polling, righe di lead e un foglio di calcolo.

Se stai costruendo un workflow n8n di lead generation per la prospezione locale, la parte difficile è ottenere record aziendali affidabili, siti web, numeri di telefono ed email di contatto senza mantenere selettori del browser o script di scraping fragili. biz collect offre a n8n una via più pulita: invia una richiesta HTTP con località, parole chiave, raggio e opzione di estrazione email, ricevi un job_id asincrono, poi fai polling finché i risultati JSON strutturati sono pronti. Questa guida mostra come costruire un workflow n8n Google Maps completo che trova attività locali, estrae email deduplicate dai loro siti web e invia i risultati a Google Sheets, HubSpot, Slack o qualsiasi sistema a valle.

Perché usare un'API per la lead generation locale in n8n?

n8n è eccellente nel collegare sistemi: trigger, chiamate HTTP, rami condizionali, trasformazioni di dati, fogli di calcolo, CRM, alert e job pianificati. Ma la lead generation locale ha un passaggio di acquisizione dati che può diventare disordinato se provi ad automatizzarlo con il solo scraping del browser.

Un tipico setup "n8n Google Maps leads" parte spesso da un browser headless, un URL di ricerca, selettori per le schede dei risultati e una logica di scraping separata per siti web ed email. Può funzionare per piccoli esperimenti, ma crea lavoro di manutenzione. I layout delle pagine cambiano, le sessioni del browser falliscono, i selettori si rompono e l'estrazione email dai siti diventa un secondo scraper. Se sei a questo punto oggi, la guida sull'alternativa a uno scraper Google Maps che restituisce JSON mostra la via API-first su cui si basa questo workflow.

biz collect è progettato per la forma opposta. È un'API di contatti aziendali nativa per gli LLM, costruita per agenti, strumenti di workflow, script e arricchimento CRM. Chiami /api/v1/search con parametri di ricerca come location, keywords, radius_km e scrape_emails. L'API restituisce un job in coda. Fai polling su /api/v1/jobs/:id finché è completo, poi usi i record JSON restituiti nel resto del tuo workflow n8n. Se stai ancora scegliendo una fonte, questo confronto su come si comparano la Places API, uno scraper Google Maps e un'API ti aiuta a decidere.

Questo significa che il tuo workflow n8n può concentrarsi sul routing dei lead:

  • Eseguire ricerche su pianificazione o da un invio di modulo.
  • Richiedere dati aziendali locali strutturati a biz collect.
  • Attendere e fare polling finché il job asincrono è completo.
  • Suddividere le attività restituite in item singoli.
  • Filtrare, arricchire, deduplicare o valutare i record.
  • Inviare i lead qualificati a Google Sheets, HubSpot, Slack, Airtable, Notion o un'altra destinazione.

Per i dettagli dell'API, parti dai docs API di biz collect, dagli esempi di integrazione in Integrazioni e dalle informazioni sui piani in Prezzi. Se vuoi vedere il modello ricerca-e-polling asincrono prima di costruire, la pagina come funziona biz collect percorre lo stesso ciclo di richiesta che questo workflow automatizza. La documentazione di n8n è utile per i node standard usati qui, in particolare il node HTTP Request, il node Wait, il node IF e il node Google Sheets.

Cosa costruisce questo workflow

Il workflow di questo tutorial automatizza i lead locali dalla richiesta di ricerca all'output verso la destinazione. Usa il comportamento standard di n8n e i node HTTP, con biz collect che gestisce la ricerca aziendale e n8n l'orchestrazione.

Il workflow finale ha questo aspetto:

  1. Un trigger avvia il workflow manualmente, su pianificazione o da un webhook.
  2. Un node HTTP Request invia una richiesta POST a /api/v1/search di biz collect.
  3. La risposta restituisce un job_id e lo stato del job.
  4. Un node Wait mette in pausa brevemente prima del polling.
  5. Un secondo node HTTP Request chiama /api/v1/jobs/:id.
  6. Un node IF verifica se lo stato del job è completed.
  7. Se non è completo, il workflow attende e fa polling di nuovo, con un limite di tentativi.
  8. Una volta completo, un node Code o di suddivisione item trasforma le attività restituite in item n8n singoli.
  9. I node di destinazione inviano i lead a Google Sheets, HubSpot, Slack o un altro sistema.
  10. I rami di errore gestiscono job falliti, timeout e set di risultati vuoti.

Puoi adattare lo stesso schema per prospezione occasionale, scansioni di mercato ricorrenti, liste di lead per agenzie, arricchimento CRM, ricerca SEO locale, scoperta di partner o workflow di agenti IA che necessitano di dati di contatto di attività locali verificati.

Prerequisiti

Prima di costruire il workflow, ti serve:

  • Un'istanza n8n, n8n Cloud o self-hosted.
  • Una chiave API biz collect.
  • Una destinazione per i lead, come Google Sheets, HubSpot o Slack.
  • Una definizione di ricerca chiara: località, parole chiave di categoria, raggio e se estrarre le email dai siti web.

biz collect è attualmente gratuito da iniziare con 200 crediti di iscrizione e senza carta di credito. È sufficiente per costruire, testare ed eseguire piccoli job di prospezione prima di mettere l'automazione su una pianificazione di produzione. Controlla Prezzi per i limiti di piano attuali.

Flusso di dati e forma dell'API

biz collect usa un flusso di job asincrono perché la ricerca di attività locali e l'estrazione email dai siti web possono richiedere più tempo di una normale richiesta HTTP sincrona. n8n gestisce bene questo perché i workflow possono attendere, ramificarsi e fare polling.

La richiesta base è un POST a:

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

Il body contiene gli input di ricerca locale:

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

La risposta contiene un identificatore di job. La risposta esatta può includere campi aggiuntivi, ma il workflow ha bisogno solo del job_id e dello stato:

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

Poi n8n fa polling:

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

Una volta completo, il risultato contiene record aziendali strutturati. Una risposta completata rappresentativa ha questo aspetto:

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

Il contratto del workflow è stabile: avviare una ricerca, ricevere un job_id, fare polling sul endpoint del job, poi elaborare record JSON strutturati. Per lo schema autorevole, usa il riferimento OpenAPI nei docs di biz collect.

Passo 1: Creare il trigger

Inizia con il trigger che corrisponde al tuo caso d'uso. Le tre scelte comuni sono:

  • Manual Trigger per test e ricerche occasionali.
  • Schedule Trigger per prospezione ricorrente, ad esempio ogni lunedì mattina.
  • Webhook Trigger quando un altro sistema o agente deve avviare una ricerca dinamicamente.

Per una prima versione, usa un Manual Trigger e codifica in modo fisso una località e delle parole chiave nel primo node HTTP. Una volta stabile il workflow, sostituisci i valori fissi con dati da uno Schedule Trigger, un invio di modulo, un segmento CRM o un payload di webhook.

Se vuoi che il workflow accetti ricerche dinamiche da un altro strumento, usa un Webhook Trigger e invia un body come:

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

Poi il body della richiesta biz collect può riferirsi ai campi in arrivo del webhook con espressioni n8n. Mantieni semplice il tuo primo workflow, conferma la forma della risposta dell'API, poi parametrizza.

Passo 2: Aggiungere il node HTTP Request per /api/v1/search

Aggiungi un node HTTP Request dopo il trigger. Chiamalo Start biz collect Search.

Configura il node:

  • Method: POST
  • URL: https://bizcollect.dev/api/v1/search
  • Authentication: un header con chiave API o la tua configurazione di credential n8n preferita
  • Response format: JSON
  • Send body: JSON

Usa questo header di autorizzazione:

Authorization: Bearer YOUR_BIZCOLLECT_API_KEY
Content-Type: application/json

Per una ricerca di test fissa, usa questo body JSON:

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

Per una versione Webhook Trigger, usa le espressioni:

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

Se il tuo trigger passa keywords come stringa separata da virgole invece di un array, normalizzala prima della richiesta HTTP con un node Set o Code. biz collect si aspetta un input di parole chiave chiaro; un array è di solito il più facile da controllare nell'automazione.

Esempio di normalizzazione con un node 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
    }
  }
];

Poi riferisci i campi normalizzati nel body HTTP:

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

Dopo l'esecuzione di questo node, dovresti avere un item con job_id, status e possibilmente poll_url. Se la richiesta fallisce, controlla la chiave API, il body della richiesta e i limiti attuali in Prezzi.

Passo 3: Memorizzare il Job ID per il polling

Prima del polling, assicurati che il job_id sia disponibile per i node successivi. In molti workflow n8n, il node successivo può riferirsi direttamente:

{{ $json.job_id }}

Se preferisci rendere il workflow più esplicito, aggiungi un node Set chiamato Keep Job ID con i campi:

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

Questo dà al ciclo di polling una forma di item pulita. Un contatore di tentativi è utile perché ogni workflow asincrono dovrebbe avere una condizione di arresto chiara. Anche quando l'API è sana, possono verificarsi guasti di rete, input errati o limiti a valle. Un workflow che può solo ciclare all'infinito è difficile da gestire.

Passo 4: Attendere prima del primo poll

Aggiungi un node Wait dopo la richiesta di ricerca. Chiamalo Wait Before Polling.

Per la maggior parte dei workflow, inizia con un breve ritardo di 10-30 secondi. L'estrazione email richiede che l'API visiti i siti web delle attività, analizzi le pagine e deduplichi gli indirizzi candidati, quindi fare polling immediatamente dopo la richiesta di ricerca di solito aggiunge rumore senza migliorare il risultato.

Un punto di partenza pratico:

  • Wait amount: 15
  • Unit: seconds

Per ricerche a raggio ampio o con ampi set di parole chiave, aumenta il ritardo. Per piccoli job di arricchimento, riducilo. Puoi regolarlo dopo aver osservato le durate reali dei job nel tuo account.

Passo 5: Fare polling su /api/v1/jobs/:id

Aggiungi un altro node HTTP Request chiamato Poll biz collect Job.

Configuralo:

  • Method: GET
  • URL: =https://bizcollect.dev/api/v1/jobs/{{ $json.job_id }}
  • Authentication: lo stesso header con chiave API della richiesta di ricerca
  • Response format: JSON

Header:

Authorization: Bearer YOUR_BIZCOLLECT_API_KEY

La risposta di polling dovrebbe includere lo stato attuale del job. Il tuo workflow dovrebbe ramificarsi su quello stato invece di presumere che il primo poll sia completo.

Stati tipici da gestire:

  • queued o running: attendere e fare polling di nuovo.
  • completed: elaborare businesses.
  • failed: fermare il workflow e avvisare qualcuno o registrare l'errore.

Usa i campi di stato reali dai docs API come fonte di verità. La logica del workflow rimane la stessa anche se aggiungi più gestione specifica per stato in seguito.

Passo 6: Aggiungere un node IF per i job completati

Aggiungi un node IF chiamato Is Job Completed?.

La condizione principale dovrebbe verificare:

{{ $json.status }} equals completed

Il ramo true continua verso l'elaborazione dei risultati. Il ramo false ha bisogno di più logica perché un job può ancora essere in esecuzione o essere fallito.

Per un primo workflow, aggiungi un secondo node IF sul ramo false, chiamato Did Job Fail?:

{{ $json.status }} equals failed

Se failed è vero, invia un alert Slack, scrivi una riga di errore o ferma l'esecuzione. Se failed è falso, presumi che il job sia ancora in attesa o in esecuzione e continua verso un contatore di tentativi.

Questo crea un ramo chiaro:

  • Completato: suddividere ed emettere i lead.
  • Fallito: segnalare l'errore.
  • Ancora in lavorazione: attendere e fare polling di nuovo.

Passo 7: Aggiungere logica di tentativi e timeout

Un workflow n8n di produzione per l'estrazione email aziendali non dovrebbe fare polling all'infinito. Aggiungi un contatore di tentativi prima che il ciclo torni al node Wait.

Un metodo semplice è inserire un node Code chiamato Increment Poll Attempt sul ramo ancora-in-esecuzione:

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

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

Poi aggiungi un node IF chiamato Can Poll Again?:

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

Se è vero, ricollega al node Wait e fai polling di nuovo. Se è falso, invia un alert di timeout o scrivi il job verso una destinazione di errore per il follow-up.

Con un node Wait di 15 secondi e 20 tentativi massimi, il workflow attende circa cinque minuti prima del timeout. Puoi regolare questi numeri per il tuo caso d'uso:

  • Test di prospezione rapidi: 10 tentativi a 10 secondi.
  • Job di estrazione email: 20 tentativi a 15 secondi.
  • Grandi ricerche ricorrenti: 30 tentativi a 30 secondi.

Il valore giusto è operativo, non teorico. Imposta un limite che dia ai job normali il tempo di completarsi mentre fa emergere ritardi inattesi.

Passo 8: Suddividere le attività in item singoli

Una volta che status è completed, la risposta contiene un array di attività. La maggior parte dei node di destinazione funziona meglio quando ogni attività è il proprio item n8n.

Aggiungi un node Code chiamato Split Businesses.

Usa questo codice:

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

Questo dà a ogni node a valle una forma di item prevedibile:

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

Se il workflow è specificamente per la vendita in uscita, aggiungi un filtro dopo la suddivisione:

{{ $json.primary_email }} is not empty

Questo mantiene il CRM o il foglio di calcolo concentrato sui lead con dati di contatto diretti. Se il tuo team di vendita chiama anche i prospect, mantieni i record con numeri di telefono anche quando non viene trovata alcuna email.

Passo 9: Inviare i lead a Google Sheets

Google Sheets è la destinazione più facile da cui iniziare perché rende l'output visibile e facile da ispezionare. Aggiungi un node Google Sheets dopo Split Businesses.

Colonne consigliate:

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

Mappa i campi così:

{
  "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() }}"
}

Per una strategia di deduplicazione leggera, usa il sito web o l'email principale come valore univoco. Se la tua configurazione Google Sheets aggiunge solo righe, aggiungi un passaggio di pulizia successivo o usa una destinazione database per un'unicità più rigorosa. Per i workflow CRM, la deduplicazione dovrebbe normalmente avvenire prima di creare nuovi record di azienda o contatto.

Passo 10: Inviare i lead qualificati a HubSpot

Per HubSpot, il flusso più comune è:

  1. Cercare un'azienda esistente per dominio o sito web.
  2. Se non esiste corrispondenza, creare un'azienda.
  3. Se primary_email esiste, cercare un contatto esistente per email.
  4. Se non esiste contatto, creare un contatto.
  5. Associare il contatto all'azienda se la tua configurazione HubSpot lo richiede.

La configurazione esatta del node HubSpot dipende dal tuo account, dalle tue proprietà e dal tuo modello di oggetti, quindi mantieni la prima versione conservativa. Non creare contatti duplicati solo perché un'attività ha più email. Inizia con primary_email, poi memorizza opzionalmente l'intera lista di email deduplicate in una proprietà personalizzata o una nota.

Mapping azienda utile:

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

Mapping contatto utile:

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

Se il tuo CRM ha regole sui dati rigorose, aggiungi una validazione prima di HubSpot:

  • Creare contatti solo quando primary_email non è vuota.
  • Creare aziende solo quando website o phone è presente.
  • Aggiungere un campo di origine come biz collect n8n workflow.
  • Aggiungere la località di ricerca e il set di parole chiave come contesto di campagna.

Questo rende più facile fare reporting su quali ricerche locali hanno generato lead utili.

Passo 11: Inviare un riepilogo Slack

Slack è utile per la visibilità operativa. Invece di pubblicare ogni lead singolarmente, pubblica un riepilogo compatto quando un job si completa.

Aggiungi un node Code prima del node Slack se devi riassumere il job completato prima della suddivisione:

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(", ")
    }
  }
];

Poi invia un messaggio Slack:

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

Per i rami di errore, invia un messaggio diverso:

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

Questo ti dà abbastanza contesto per monitorare i workflow ricorrenti senza aprire n8n a ogni esecuzione.

Layout di workflow consigliato

Ecco la sequenza completa di node per una versione pratica:

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

Questo schema è volutamente semplice. Evita infrastruttura su misura pur gestendo le realtà delle API asincrone: il lavoro può essere messo in coda, i job possono durare un po', e i job falliti o di lunga durata hanno bisogno di un percorso adatto agli operatori.

Checklist di gestione degli errori

Non rimandare la gestione degli errori a dopo. Un workflow di lead generation di solito gira su pianificazione, il che significa che i fallimenti silenziosi creano pipeline obsolete.

Aggiungi la gestione per questi casi:

  • Richiesta non autorizzata: chiave API mancante o non valida. Fermare immediatamente e notificare il proprietario del workflow.
  • Richiesta errata: location mancante, keywords vuoto o radius_km non valido. Scrivere l'input fallito in un foglio di errori.
  • Limite di rate o di piano: mettere in pausa il workflow e inviare un alert con un link a Prezzi.
  • Job fallito: notificare Slack e includere il job_id.
  • Timeout del job: includere poll_attempt e l'ultimo stato noto.
  • Nessuna attività restituita: scrivere un risultato riuscito ma vuoto con i parametri di ricerca.
  • Attività senza email: tenerle se l'outreach telefonico o la revisione del sito conta; filtrarle se l'email è richiesta.

Per i workflow pianificati, aggiungi una destinazione di log di esecuzione. Un semplice Google Sheet funziona:

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

Questo rende più facile il debug quando uno stakeholder chiede perché un particolare territorio non ha prodotto nuovi lead.

Regole di deduplicazione e qualità dei lead

biz collect deduplica le email di contatto estratte dai siti web delle attività, ma dovresti comunque deduplicare a livello di destinazione. La stessa attività può apparire in ricerche diverse, soprattutto quando i set di parole chiave si sovrappongono.

Buone chiavi di deduplicazione:

  • Dominio del sito web
  • Email principale
  • Numero di telefono
  • Combinazione di nome dell'attività e indirizzo

Per Google Sheets, una semplice formula o un lookup può segnalare i duplicati. Per HubSpot e altri CRM, usa i passaggi nativi cerca-prima-di-creare. Per i database, imponi l'unicità su un dominio di sito web normalizzato o un'email principale quando possibile.

Puoi anche aggiungere uno scoring di qualità dei lead in 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
    }
  }
];

Poi ramifica:

{{ $json.qualified }} is true

I lead qualificati vanno a HubSpot. I lead con punteggio più basso vanno a un foglio di revisione. Questo mantiene il tuo CRM più pulito preservando dati di mercato utili.

Iniziare a costruire

Il workflow n8n di lead generation più semplice ma utile è composto da pochi node: trigger, richiesta HTTP, wait, poll, IF, split e output. Il valore viene dall'usare un'API che restituisce dati aziendali strutturati ed email di siti web verificate invece di chiedere a n8n di mantenere uno scraper.

biz collect è costruito esattamente per questo schema: una richiesta POST per avviare una ricerca di attività locali, polling asincrono fino al completamento, campi JSON stabili, docs OpenAPI 3.1 ed email di contatto deduplicate estratte dai siti web delle attività. Si adatta a n8n, Make, Zapier, script, strumenti LLM e workflow di arricchimento CRM senza manutenzione del browser headless. Se stai ancora valutando le opzioni, la guida ai migliori strumenti di lead generation locale nel 2026 mostra dove si colloca un workflow n8n-più-API tra scraper, strumenti no-code e CRM.

Puoi iniziare gratuitamente con 200 crediti di iscrizione e senza carta di credito. Apri i docs API, rivedi le integrazioni, controlla i prezzi e costruisci oggi il tuo primo workflow di lead locali automatizzati in n8n.

Domande frequenti

Come costruisco un workflow di lead generation in n8n?
Concatena cinque fasi: un trigger, un node HTTP Request che fa POST di una città e parole chiave verso /v1/search, un secondo node HTTP Request più un node Wait che fanno polling su /v1/jobs/:id fino al completamento, un filtro e un node Google Sheets o CRM per scrivere i lead.
Di quali node n8n ho bisogno?
Due node HTTP Request (ricerca e poll), un node Wait con un ciclo per il polling, un node Filter o IF e un node di destinazione come Google Sheets o il tuo CRM. Non è richiesto codice personalizzato.
Come faccio polling per il completamento in n8n?
Chiama /v1/jobs/:id da un node HTTP Request, aggiungi un node Wait e cicla finché lo stato del job è completo; poi leggi i risultati JSON strutturati.
Posso ottenere email verificate dal workflow?
biz collect arricchisce ogni attività dal suo sito web, quindi i record possono includere email, sito web, telefono e profili social. Filtra i record che contengono un'email e un sito web per tenere solo i lead su cui puoi agire.
Funziona anche con Zapier o Make?
Sì. L'API usa richieste HTTP standard, quindi lo stesso schema ricerca-poll-filtro-scrittura funziona in Zapier e Make come in n8n.
C'è un piano gratuito per testare il workflow?
Sì. Ottieni 200 crediti di iscrizione più 20 crediti di accesso ogni giorno senza carta di credito, sufficienti per cablare e validare l'intero workflow.

Raccogli lead aziendali su larga scala.

Inizia con 200 crediti gratuiti e altri 20 ogni giorno. Nessuna carta, nessuna configurazione.

Nessuna carta200 crediti alla registrazione20 crediti giornalieri