Guides
Automatisierung23. Mai 202615 Min. Lesezeit

n8n Workflow zur Leadgenerierung (Schritt für Schritt)

Bauen Sie einen n8n-Workflow, der lokale Betriebe findet, den Job pollt, Kontakte filtert und verifizierte Leads an Google Sheets oder Ihr CRM sendet.

Ein No-Code-Automatisierungs-Canvas verbindet einen API-Request, eine Poll-Schleife, Lead-Zeilen und eine Tabelle.

Wenn Sie einen n8n-Workflow zur Leadgenerierung für lokales Prospecting bauen, ist der schwierige Teil, zuverlässige Firmensätze, Websites, Telefonnummern und Kontakt-E-Mails zu bekommen, ohne Browser-Selektoren oder brüchige Scraping-Skripte zu pflegen. biz collect gibt n8n einen saubereren Weg: Senden Sie einen HTTP-Request mit Standort, Stichworten, Radius und E-Mail-Scraping-Option, erhalten Sie eine asynchrone job_id, und pollen Sie dann, bis die strukturierten JSON-Ergebnisse bereit sind. Dieser Guide zeigt, wie Sie einen kompletten n8n-Google-Maps-Leads-Workflow bauen, der lokale Betriebe findet, deduplizierte E-Mails aus Firmenwebsites extrahiert und die Ergebnisse an Google Sheets, HubSpot, Slack oder ein beliebiges nachgelagertes System sendet.

Warum eine API für lokale Leadgenerierung in n8n nutzen?

n8n ist hervorragend im Verbinden von Systemen: Trigger, HTTP-Aufrufe, bedingte Verzweigungen, Daten-Transformationen, Tabellen, CRMs, Alerts und geplante Jobs. Aber lokale Leadgenerierung hat einen Datenbeschaffungs-Schritt, der unübersichtlich werden kann, wenn Sie ihn allein mit Browser-Scraping automatisieren.

Ein typisches "n8n Google Maps Leads"-Setup startet oft mit einem Headless-Browser, einer Such-URL, Selektoren für Listing-Karten und separater Scraping-Logik für Websites und E-Mails. Das kann für kleine Experimente funktionieren, aber es erzeugt Wartungsaufwand. Seitenlayouts ändern sich, Browser-Sessions scheitern, Selektoren brechen, und Website-E-Mail-Extraktion wird zum zweiten Scraper. Wenn Sie heute dort stehen, zeigt der Guide zur Google Maps Scraper API Alternative, die JSON liefert den API-first-Weg, auf dem dieser Workflow aufbaut.

biz collect ist für die entgegengesetzte Form gebaut. Es ist eine LLM-native Business-Contacts-API, gebaut für Agenten, Workflow-Tools, Skripte und CRM-Anreicherung. Sie rufen /api/v1/search mit Suchparametern wie location, keywords, radius_km und scrape_emails auf. Die API gibt einen eingereihten Job zurück. Sie pollen /api/v1/jobs/:id, bis er fertig ist, und nutzen dann die zurückgegebenen JSON-Datensätze im Rest Ihres n8n-Workflows. Wählen Sie noch eine Quelle, hilft dieser Vergleich, wie Places API, ein Google Maps Scraper und eine API abschneiden, bei der Entscheidung.

Das heisst, Ihr n8n-Workflow kann sich auf das Lead-Routing konzentrieren:

  • Suchen nach Zeitplan oder aus einer Formular-Übermittlung laufen lassen.
  • Strukturierte lokale Firmendaten von biz collect anfordern.
  • Warten und pollen, bis der Async-Job fertig ist.
  • Zurückgegebene Betriebe in einzelne Items aufteilen.
  • Datensätze filtern, anreichern, deduplizieren oder scoren.
  • Qualifizierte Leads an Google Sheets, HubSpot, Slack, Airtable, Notion oder ein anderes Ziel senden.

Für API-Details starten Sie mit den biz collect API-Docs, Integrationsbeispielen unter Integrationen und Planinfos unter Preise. Wollen Sie das asynchrone Suchen-und-Pollen-Modell vor dem Bauen sehen, führt die Seite wie biz collect funktioniert durch denselben Request-Lebenszyklus, den dieser Workflow automatisiert. n8ns eigene Dokumentation ist nützlich für die verwendeten Standard-Nodes, besonders den HTTP Request Node, den Wait Node, den IF Node und den Google Sheets Node.

Was dieser Workflow baut

Der Workflow in diesem Tutorial automatisiert lokale Leads vom Such-Request bis zur Zielausgabe. Er nutzt Standard-n8n-Verhalten und HTTP-Nodes, wobei biz collect die Firmensuche und n8n die Orchestrierung übernimmt.

Der finale Workflow sieht so aus:

  1. Ein Trigger startet den Workflow manuell, nach Zeitplan oder aus einem Webhook.
  2. Ein HTTP Request Node sendet einen POST-Request an biz collect /api/v1/search.
  3. Die Antwort liefert eine job_id und den Job-Status.
  4. Ein Wait Node pausiert kurz vor dem Pollen.
  5. Ein zweiter HTTP Request Node ruft /api/v1/jobs/:id auf.
  6. Ein IF Node prüft, ob der Job-Status completed ist.
  7. Ist er nicht fertig, wartet und pollt der Workflow erneut, mit einem Retry-Limit.
  8. Ist er fertig, verwandelt ein Code Node oder ein Item-Splitting-Node die zurückgegebenen Betriebe in einzelne n8n-Items.
  9. Ziel-Nodes senden Leads an Google Sheets, HubSpot, Slack oder ein anderes System.
  10. Fehler-Zweige handhaben fehlgeschlagene Jobs, Timeouts und leere Ergebnismengen.

Sie können dasselbe Muster für einmaliges Prospecting, wiederkehrende Marktscans, Agentur-Lead-Listen, CRM-Anreicherung, lokale SEO-Recherche, Partnersuche oder KI-Agenten-Workflows anpassen, die verifizierte lokale Firmenkontaktdaten brauchen.

Voraussetzungen

Bevor Sie den Workflow bauen, brauchen Sie:

  • Eine n8n-Instanz, entweder n8n Cloud oder selbst gehostet.
  • Einen biz collect API-Key.
  • Ein Ziel für die Leads, etwa Google Sheets, HubSpot oder Slack.
  • Eine klare Suchdefinition: Standort, Kategorie-Stichworte, Radius und ob E-Mails von Websites extrahiert werden sollen.

biz collect ist derzeit gratis zu starten mit 200 Startguthaben und ohne Kreditkarte. Das reicht, um kleine Prospecting-Jobs zu bauen, zu testen und zu laufen, bevor Sie die Automatisierung auf einen Produktionszeitplan setzen. Prüfen Sie Preise für die aktuellen Plan-Limits.

Datenfluss und API-Form

biz collect nutzt einen Async-Job-Flow, weil lokale Firmensuche und Website-E-Mail-Extraktion länger dauern können als ein normaler synchroner HTTP-Request. n8n handhabt das gut, weil Workflows warten, verzweigen und pollen können.

Der Basis-Request ist ein POST an:

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

Der Body enthält die lokalen Sucheingaben:

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

Die Antwort enthält einen Job-Identifikator. Die genaue Antwort kann zusätzliche Felder enthalten, aber der Workflow braucht nur die job_id und den Status:

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

Dann pollt n8n:

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

Ist er fertig, enthält das Ergebnis strukturierte Firmensätze. Eine repräsentative fertige Antwort sieht so aus:

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

Der Workflow-Vertrag ist stabil: Suche starten, job_id erhalten, den Job-Endpunkt pollen, dann strukturierte JSON-Datensätze verarbeiten. Für das massgebliche Schema nutzen Sie die OpenAPI-Referenz in den biz collect Docs.

Schritt 1: Den Trigger erstellen

Beginnen Sie mit dem Trigger, der zu Ihrem Anwendungsfall passt. Die drei üblichen Optionen sind:

  • Manual Trigger zum Testen und für einmalige Suchläufe.
  • Schedule Trigger für wiederkehrendes Prospecting, etwa jeden Montagmorgen.
  • Webhook Trigger, wenn ein anderes System oder ein Agent eine Suche dynamisch starten soll.

Für eine erste Version nutzen Sie einen Manual Trigger und hardcodieren Standort und Stichworte im ersten HTTP-Node. Ist der Workflow stabil, ersetzen Sie feste Werte durch Daten aus einem Schedule Trigger, einer Formular-Übermittlung, einem CRM-Segment oder einem Webhook-Payload.

Soll der Workflow dynamische Suchen von einem anderen Tool annehmen, nutzen Sie einen Webhook Trigger und senden Sie einen Body wie:

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

Dann kann der biz collect Request-Body die eingehenden Webhook-Felder mit n8n-Expressions referenzieren. Halten Sie Ihren ersten Workflow einfach, bestätigen Sie die API-Antwortform, dann parametrisieren Sie.

Schritt 2: Den HTTP Request Node für /api/v1/search hinzufügen

Fügen Sie nach dem Trigger einen HTTP Request Node hinzu. Nennen Sie ihn Start biz collect Search.

Konfigurieren Sie den Node:

  • Method: POST
  • URL: https://bizcollect.dev/api/v1/search
  • Authentication: einen API-Key-Header oder Ihr bevorzugtes n8n-Credential-Setup nutzen
  • Response format: JSON
  • Send body: JSON

Nutzen Sie diesen Autorisierungs-Header:

Authorization: Bearer YOUR_BIZCOLLECT_API_KEY
Content-Type: application/json

Für eine feste Testsuche nutzen Sie diesen JSON-Body:

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

Für eine Webhook-Trigger-Version nutzen Sie Expressions:

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

Übergibt Ihr Trigger keywords als kommagetrennten String statt als Array, normalisieren Sie es vor dem HTTP-Request mit einem Set Node oder Code Node. biz collect erwartet klare Stichwort-Eingaben; ein Array ist in der Automatisierung meist am einfachsten zu kontrollieren.

Beispiel für eine Code-Node-Normalisierung:

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

Dann referenzieren Sie die normalisierten Felder im HTTP-Body:

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

Nachdem dieser Node läuft, sollten Sie ein Item mit job_id, status und möglicherweise poll_url haben. Scheitert der Request, prüfen Sie API-Key, Request-Body und aktuelle Limits unter Preise.

Schritt 3: Die Job-ID zum Pollen speichern

Vor dem Pollen stellen Sie sicher, dass die job_id für spätere Nodes verfügbar ist. In vielen n8n-Workflows kann der nächste Node direkt referenzieren:

{{ $json.job_id }}

Wollen Sie den Workflow expliziter machen, fügen Sie einen Set Node namens Keep Job ID mit Feldern hinzu:

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

Das gibt der Poll-Schleife eine saubere Item-Form. Ein Retry-Zähler ist nützlich, weil jeder Async-Workflow eine klare Stopp-Bedingung haben sollte. Selbst wenn die API gesund ist, können Netzwerkfehler, falsche Eingaben oder nachgelagerte Limits auftreten. Ein Workflow, der nur endlos schleifen kann, ist schwer zu betreiben.

Schritt 4: Vor dem ersten Poll warten

Fügen Sie nach dem Such-Request einen Wait Node hinzu. Nennen Sie ihn Wait Before Polling.

Für die meisten Workflows starten Sie mit einer kurzen Verzögerung von 10 bis 30 Sekunden. E-Mail-Extraktion verlangt, dass die API Firmenwebsites besucht, Seiten parst und Kandidatenadressen dedupliziert, also fügt Pollen unmittelbar nach dem Such-Request meist Rauschen hinzu, ohne das Ergebnis zu verbessern.

Ein praktischer Ausgangspunkt:

  • Wait amount: 15
  • Unit: seconds

Für Suchen mit grossem Radius oder breiten Stichwortmengen erhöhen Sie die Verzögerung. Für kleine Anreicherungs-Jobs reduzieren Sie sie. Sie können das nach der Beobachtung echter Job-Dauern in Ihrem Konto tunen.

Schritt 5: /api/v1/jobs/:id pollen

Fügen Sie einen weiteren HTTP Request Node namens Poll biz collect Job hinzu.

Konfigurieren Sie ihn:

  • Method: GET
  • URL: =https://bizcollect.dev/api/v1/jobs/{{ $json.job_id }}
  • Authentication: derselbe API-Key-Header wie beim Such-Request
  • Response format: JSON

Header:

Authorization: Bearer YOUR_BIZCOLLECT_API_KEY

Die Poll-Antwort sollte den aktuellen Job-Status enthalten. Ihr Workflow sollte auf diesen Status verzweigen, statt anzunehmen, der erste Poll sei fertig.

Typische Status, die zu handhaben sind:

  • queued oder running: warten und erneut pollen.
  • completed: businesses verarbeiten.
  • failed: Workflow stoppen und jemanden alarmieren oder den Fehler loggen.

Nutzen Sie die tatsächlichen Status-Felder aus den API-Docs als Quelle der Wahrheit. Die Workflow-Logik bleibt gleich, selbst wenn Sie später mehr statusspezifische Behandlung ergänzen.

Schritt 6: Einen IF Node für fertige Jobs hinzufügen

Fügen Sie einen IF Node namens Is Job Completed? hinzu.

Die Hauptbedingung sollte prüfen:

{{ $json.status }} equals completed

Der true-Zweig fährt mit der Ergebnisverarbeitung fort. Der false-Zweig braucht mehr Logik, weil ein Job noch laufen oder gescheitert sein kann.

Für einen ersten Workflow fügen Sie im false-Zweig einen zweiten IF Node namens Did Job Fail? hinzu:

{{ $json.status }} equals failed

Ist failed wahr, senden Sie einen Slack-Alert, schreiben Sie eine Fehlerzeile oder stoppen Sie die Ausführung. Ist failed falsch, nehmen Sie an, der Job läuft noch, und fahren Sie mit einem Retry-Zähler fort.

Das erzeugt eine klare Verzweigung:

  • Fertig: aufteilen und Leads ausgeben.
  • Gescheitert: den Fehler melden.
  • Noch am Arbeiten: warten und erneut pollen.

Schritt 7: Retry- und Timeout-Logik hinzufügen

Ein produktiver n8n-Workflow zur Business-E-Mail-Extraktion sollte nicht endlos pollen. Fügen Sie einen Retry-Zähler hinzu, bevor die Schleife zum Wait Node zurückkehrt.

Eine einfache Methode ist, einen Code Node namens Increment Poll Attempt im Noch-am-Laufen-Zweig einzufügen:

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

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

Dann fügen Sie einen IF Node namens Can Poll Again? hinzu:

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

Ist er wahr, verbinden Sie zurück zum Wait Node und pollen erneut. Ist er falsch, senden Sie einen Timeout-Alert oder schreiben Sie den Job zur Nachverfolgung an ein Fehlerziel.

Mit einem 15-Sekunden-Wait-Node und 20 maximalen Versuchen wartet der Workflow etwa fünf Minuten vor dem Timeout. Sie können diese Zahlen für Ihren Anwendungsfall anpassen:

  • Schnelle Prospecting-Tests: 10 Versuche à 10 Sekunden.
  • E-Mail-Extraktions-Jobs: 20 Versuche à 15 Sekunden.
  • Grosse wiederkehrende Suchen: 30 Versuche à 30 Sekunden.

Der richtige Wert ist operativ, nicht theoretisch. Setzen Sie ein Limit, das normalen Jobs Zeit zum Fertigwerden gibt, während es unerwartete Verzögerungen dennoch sichtbar macht.

Schritt 8: Betriebe in einzelne Items aufteilen

Ist status completed, enthält die Antwort ein Array von Betrieben. Die meisten Ziel-Nodes arbeiten am besten, wenn jeder Betrieb sein eigenes n8n-Item ist.

Fügen Sie einen Code Node namens Split Businesses hinzu.

Nutzen Sie diesen Code:

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

Das gibt jedem nachgelagerten Node eine berechenbare Item-Form:

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

Ist der Workflow speziell für Outbound-Vertrieb, fügen Sie nach dem Aufteilen einen Filter hinzu:

{{ $json.primary_email }} is not empty

Das hält das CRM oder die Tabelle auf Leads mit direkten Kontaktdaten fokussiert. Ruft Ihr Vertriebsteam auch Prospects an, behalten Sie Datensätze mit Telefonnummern, selbst wenn keine E-Mail gefunden wird.

Schritt 9: Leads an Google Sheets senden

Google Sheets ist das einfachste erste Ziel, weil es die Ausgabe sichtbar und leicht prüfbar macht. Fügen Sie nach Split Businesses einen Google Sheets Node hinzu.

Empfohlene Spalten:

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

Mappen Sie die Felder so:

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

Für eine leichte Dedupe-Strategie nutzen Sie die Website oder die primäre E-Mail als eindeutigen Wert. Hängt Ihr Google-Sheets-Setup nur Zeilen an, fügen Sie einen späteren Bereinigungsschritt hinzu oder nutzen Sie ein Datenbank-Ziel für strengere Eindeutigkeit. Für CRM-Workflows sollte Deduplizierung normalerweise vor dem Erstellen neuer Firmen- oder Kontaktsätze passieren.

Schritt 10: Qualifizierte Leads an HubSpot senden

Für HubSpot ist der häufigste Ablauf:

  1. Nach einer bestehenden Firma per Domain oder Website suchen.
  2. Existiert keine Übereinstimmung, eine Firma erstellen.
  3. Existiert primary_email, nach einem bestehenden Kontakt per E-Mail suchen.
  4. Existiert kein Kontakt, einen Kontakt erstellen.
  5. Den Kontakt mit der Firma verknüpfen, falls Ihr HubSpot-Setup es verlangt.

Die genaue HubSpot-Node-Konfiguration hängt von Ihrem Konto, Ihren Eigenschaften und Ihrem Objektmodell ab, halten Sie die erste Version also konservativ. Erstellen Sie keine doppelten Kontakte nur, weil ein Betrieb mehrere E-Mails hat. Starten Sie mit primary_email, speichern Sie optional die ganze deduplizierte E-Mail-Liste in einer benutzerdefinierten Eigenschaft oder Notiz.

Nützliches Firmen-Mapping:

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

Nützliches Kontakt-Mapping:

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

Hat Ihr CRM strenge Datenregeln, fügen Sie vor HubSpot Validierung hinzu:

  • Kontakte nur erstellen, wenn primary_email nicht leer ist.
  • Firmen nur erstellen, wenn website oder phone vorhanden ist.
  • Ein Quellenfeld wie biz collect n8n workflow ergänzen.
  • Suchstandort und Stichwortmenge als Kampagnenkontext ergänzen.

Das macht es einfacher zu berichten, welche lokalen Suchen nützliche Leads erzeugt haben.

Schritt 11: Eine Slack-Zusammenfassung senden

Slack ist nützlich für operative Sichtbarkeit. Statt jeden Lead einzeln zu posten, posten Sie eine kompakte Zusammenfassung, wenn ein Job fertig ist.

Fügen Sie vor dem Slack Node einen Code Node hinzu, wenn Sie den fertigen Job vor dem Aufteilen zusammenfassen müssen:

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

Dann senden Sie eine Slack-Nachricht:

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

Für Fehler-Zweige senden Sie eine andere Nachricht:

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

Das gibt Ihnen genug Kontext, um wiederkehrende Workflows zu überwachen, ohne für jeden Lauf n8n zu öffnen.

Empfohlenes Workflow-Layout

Hier ist die komplette Node-Sequenz für eine praktische Version:

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

Dieses Muster ist bewusst einfach. Es vermeidet massgeschneiderte Infrastruktur und handhabt dennoch die Realitäten asynchroner APIs: Arbeit kann eingereiht werden, Jobs können eine Weile laufen, und fehlgeschlagene oder langlaufende Jobs brauchen einen operator-freundlichen Weg.

Fehlerbehandlungs-Checkliste

Verschieben Sie die Fehlerbehandlung nicht auf später. Ein Workflow zur Leadgenerierung läuft meist nach Zeitplan, was heisst, dass stille Fehler zu veralteten Pipelines führen.

Fügen Sie Behandlung für diese Fälle hinzu:

  • Unautorisierter Request: API-Key fehlt oder ungültig. Sofort stoppen und den Workflow-Eigentümer benachrichtigen.
  • Fehlerhafter Request: fehlender location, leere keywords oder ungültiger radius_km. Die fehlgeschlagene Eingabe in ein Fehler-Sheet schreiben.
  • Rate- oder Plan-Limit: den Workflow pausieren und einen Alert mit Link zu Preise senden.
  • Job gescheitert: Slack benachrichtigen und die job_id einschliessen.
  • Job-Timeout: poll_attempt und den letzten bekannten Status einschliessen.
  • Keine Betriebe zurückgegeben: ein erfolgreiches, aber leeres Ergebnis mit den Suchparametern schreiben.
  • Betriebe ohne E-Mails: behalten, wenn Telefonansprache oder Website-Review wichtig ist; herausfiltern, wenn E-Mail erforderlich ist.

Für geplante Workflows fügen Sie ein Ausführungslog-Ziel hinzu. Ein einfaches Google Sheet funktioniert:

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

Das macht das Debuggen einfacher, wenn ein Stakeholder fragt, warum ein bestimmtes Gebiet keine neuen Leads erzeugt hat.

Deduplizierungs- und Lead-Qualitätsregeln

biz collect dedupliziert Kontakt-E-Mails, die aus Firmenwebsites extrahiert wurden, aber Sie sollten dennoch auf Ziel-Ebene deduplizieren. Derselbe Betrieb kann über verschiedene Suchen auftauchen, besonders wenn sich Stichwortmengen überschneiden.

Gute Dedupe-Schlüssel:

  • Website-Domain
  • Primäre E-Mail
  • Telefonnummer
  • Kombination aus Firmenname und Adresse

Für Google Sheets kann eine einfache Formel oder ein Lookup Duplikate markieren. Für HubSpot und andere CRMs nutzen Sie native Suchen-vor-Erstellen-Schritte. Für Datenbanken erzwingen Sie Eindeutigkeit auf einer normalisierten Website-Domain oder primären E-Mail, wo möglich.

Sie können in n8n auch Lead-Qualitäts-Scoring ergänzen:

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

Dann verzweigen Sie:

{{ $json.qualified }} is true

Qualifizierte Leads gehen an HubSpot. Niedriger bewertete Leads gehen an ein Review-Sheet. Das hält Ihr CRM sauberer und bewahrt nützliche Marktdaten.

Loslegen

Der einfachste nützliche n8n-Workflow zur Leadgenerierung besteht aus nur wenigen Nodes: Trigger, HTTP-Request, Wait, Poll, IF, Split und Ausgabe. Der Wert kommt daraus, eine API zu nutzen, die strukturierte Firmendaten und verifizierte Website-E-Mails liefert, statt n8n zu bitten, einen Scraper zu pflegen.

biz collect ist für genau dieses Muster gebaut: ein POST-Request, um eine lokale Firmensuche zu starten, asynchrones Pollen auf Fertigstellung, stabile JSON-Felder, OpenAPI-3.1-Docs und deduplizierte Kontakt-E-Mails, extrahiert aus Firmenwebsites. Es passt zu n8n, Make, Zapier, Skripten, LLM-Tools und CRM-Anreicherungs-Workflows ohne Headless-Browser-Wartung. Wägen Sie noch Optionen ab, zeigt der Guide zu den besten Tools für lokale Leadgenerierung 2026, wo ein n8n-plus-API-Workflow zwischen Scrapern, No-Code-Tools und CRMs passt.

Sie können gratis mit 200 Startguthaben und ohne Kreditkarte starten. Öffnen Sie die API-Docs, prüfen Sie die Integrationen, sehen Sie sich die Preise an und bauen Sie noch heute Ihren ersten automatisierten Workflow für lokale Leads in n8n.

Häufige Fragen

Wie baue ich einen Workflow zur Leadgenerierung in n8n?
Verketten Sie fünf Stufen: einen Trigger, einen HTTP Request Node, der eine Stadt und Stichworte an /v1/search POSTet, einen zweiten HTTP Request Node plus Wait Node, der /v1/jobs/:id pollt, bis der Job fertig ist, einen Filter und einen Google Sheets oder CRM Node, um die Leads zu schreiben.
Welche n8n-Nodes brauche ich?
Zwei HTTP Request Nodes (Suche und Poll), einen Wait Node mit einer Schleife zum Pollen, einen Filter- oder IF-Node und einen Ziel-Node wie Google Sheets oder Ihr CRM. Kein eigener Code ist erforderlich.
Wie polle ich in n8n auf Fertigstellung?
Rufen Sie /v1/jobs/:id aus einem HTTP Request Node auf, fügen Sie einen Wait Node hinzu und schleifen Sie, bis der Job-Status fertig ist; dann lesen Sie die strukturierten JSON-Ergebnisse.
Bekomme ich verifizierte E-Mails aus dem Workflow?
biz collect reichert jeden Betrieb von seiner Website an, sodass Datensätze E-Mail, Website, Telefon und Social-Profile enthalten können. Filtern Sie auf Datensätze mit E-Mail und Website, um nur die handlungsfähigen Leads zu behalten.
Funktioniert das auch mit Zapier oder Make?
Ja. Die API nutzt Standard-HTTP-Requests, sodass dasselbe Muster Suchen-Pollen-Filtern-Schreiben in Zapier und Make ebenso funktioniert wie in n8n.
Gibt es einen Gratis-Tarif, um den Workflow zu testen?
Ja. Sie erhalten 200 Startguthaben plus 20 Login-Guthaben pro Tag ohne Kreditkarte, was ausreicht, um den ganzen Workflow zu verdrahten und zu validieren.

Firmenkontakte im grossen Stil.

Starten Sie mit 200 Gratis-Credits und 20 weiteren pro Tag. Ohne Karte, ohne Setup.

Keine Kreditkarte nötig200 Startguthaben20 tägliche Login-Credits