n8n-Workflow – Leadliste automatisch anreichern

n8n-Workflow für B2B-Leadlisten Schritt für Schritt – Trigger, Apify-Lauf, Impressum-Anreicherung, E-Mail-Verifizierung, Dubletten-Check und Übergabe an HubSpot oder Pipedrive. Jeder Node erklärt.

Aktualisiert am 8 Min. Lesezeit

Ein n8n-Workflow kann eine Leadliste vollständig automatisch aufbauen und anreichern: Er nimmt Suchbegriff und Region entgegen, startet einen Apify-Scraper, bereinigt die Ergebnisse, liest E-Mail-Adressen aus dem Impressum, prüft sie per API und schreibt geprüfte Firmen ins CRM. Diese Anleitung erklärt jeden Node mit Konfiguration und Beispiel-Expressions. Voraussetzung sind eine laufende n8n-Instanz, ein Apify-Konto, ein API-Schlüssel für die E-Mail-Verifizierung und Zugriff auf HubSpot oder Pipedrive.

Der Workflow im Überblick

Nr.NodeAufgabe
1Webhook oder Google SheetsStartet den Lauf mit Suchbegriff und Ort
2HTTP Request (Apify)Führt den Google Maps Scraper aus und liefert die Orte
3FilterEntfernt geschlossene Betriebe und Einträge ohne Website
4Edit FieldsVereinheitlicht Felder und extrahiert die Domain
5Remove DuplicatesEntfernt Dubletten im Lauf und aus früheren Läufen
6HTTP Request (Impressum)Lädt die Impressumsseite der Firma
7CodeExtrahiert E-Mail-Adressen aus dem HTML
8HTTP Request (Verifizierung)Prüft die Zustellbarkeit der Adresse
9SwitchVerzweigt nach Prüfstatus
10HubSpot oder PipedriveSucht die Firma und legt sie an oder aktualisiert sie
11Error TriggerMeldet Fehler in einem separaten Workflow

Wenn Sie n8n noch nicht betreiben, beginnen Sie mit der Anleitung n8n self-hosted. Grundlagen zu Apify und zum Scraper liefern die Apify-Anleitung und der Ratgeber zum Google Maps Scraper.

Node 1 – Trigger

Für den Start gibt es zwei praxistaugliche Varianten. Mit dem Google Sheets Trigger reagiert der Workflow auf neue Zeilen in einer Planungstabelle mit den Spalten Suchbegriff, Ort und Max. Mit dem Webhook-Node starten Sie Läufe aus anderen Systemen per POST-Anfrage. Ein passender Request-Body sieht so aus:

{
  "suchbegriff": "Metallbau",
  "ort": "Reutlingen, Deutschland",
  "max": 30
}

Im Webhook-Node landen die Werte unter body. Damit alle folgenden Nodes einheitlich arbeiten, normalisieren Sie sie direkt mit einem Edit-Fields-Node auf suchbegriff, ort und max. Damit Trigger automatisch reagieren, muss der Workflow veröffentlicht sein, in älteren n8n-Versionen heißt dieser Schritt Aktivieren.

Node 2 – Apify-Lauf starten und Ergebnisse holen

Der einfachste Weg ist ein HTTP-Request-Node mit dem synchronen Endpunkt, der den Lauf startet und die Ergebnisse direkt zurückgibt:

  • Methode: POST
  • URL: https://api.apify.com/v2/acts/compass~crawler-google-places/run-sync-get-dataset-items?clean=true
  • Authentifizierung: Generic Credential vom Typ Header Auth mit dem Header Authorization und dem Wert Bearer plus Ihrem Apify-Token
  • Body: JSON, als Expression
{
  "searchStringsArray": ["{{ $json.suchbegriff }}"],
  "locationQuery": "{{ $json.ort }}",
  "maxCrawledPlacesPerSearch": {{ $json.max || 30 }},
  "language": "de",
  "scrapeReviewsPersonalData": false
}

Laut Apify-Dokumentation bricht der synchrone Endpunkt nach 300 Sekunden ab. Erhöhen Sie in den Node-Optionen den Timeout entsprechend und halten Sie die Trefferzahl pro Lauf klein. Für große Läufe nutzen Sie den Apify-Community-Node mit den Operationen zum Starten eines Actors und zum Abruf des Datasets oder lassen einen zweiten Workflow über den Apify-Trigger starten, sobald der Run beendet ist. Die Einrichtung beschreibt die Apify-Dokumentation zu n8n.

Node 3 – Filter

Der Filter-Node lässt nur verwertbare Einträge durch. Zwei Bedingungen genügen: {{ $json.permanentlyClosed }} ist nicht true, und {{ $json.website }} ist nicht leer. Wenn Sie Einträge ohne Website für die telefonische Recherche sammeln möchten, nutzen Sie statt des Filters einen If-Node und schreiben dessen False-Ausgang in eine eigene Tabelle.

Node 4 – Edit Fields

Der Edit-Fields-Node, früher Set genannt, bringt die Daten in Ihr eigenes Schema. Legen Sie diese Felder an:

firma     {{ $json.title }}
kategorie {{ $json.categoryName }}
telefon   {{ $json.phoneUnformatted || $json.phone }}
website   {{ $json.website }}
domain    {{ $json.website.replace(/^https?:\/\//, '').replace(/^www\./, '').split('/')[0].toLowerCase() }}
plz       {{ $json.postalCode }}
ort       {{ $json.city }}
place_id  {{ $json.placeId }}

Die Domain ist der wichtigste Schlüssel für den Dublettencheck im CRM und für die Anreicherung.

Node 5 – Remove Duplicates

Setzen Sie den Node zweimal hintereinander ein. Der erste nutzt die Operation Remove Items Repeated Within Current Input mit dem Vergleich auf das Feld domain. So bleibt bei Firmen mit mehreren Standorten nur ein Eintrag übrig. Der zweite nutzt Remove Items Processed in Previous Executions mit Value Is New und dem Wert {{ $json.place_id }}. Damit verarbeitet der Workflow keine Orte, die bereits in früheren Läufen angereichert wurden. Details stehen in der n8n-Dokumentation zum Remove-Duplicates-Node.

Node 6 – Impressum laden

Ein weiterer HTTP-Request-Node lädt die Impressumsseite. Viele deutsche Websites verwenden den Pfad /impressum:

  • Methode: GET
  • URL: https://{{ $json.domain }}/impressum
  • Response Format: Text, das Ergebnis landet im Feld data
  • Settings: On Error auf Continue (using error output)

Firmen mit abweichendem Pfad laufen über den Fehlerausgang. Für diese Fälle laden Sie die Startseite, suchen mit dem HTML-Node über den Selektor a[href*="impressum"] den Link und rufen ihn in einem zweiten Schritt auf. Bauen Sie vor diesem Node einen Loop-Over-Items-Node mit kleinen Batches und einen Wait-Node ein, damit Sie fremde Server nicht mit vielen parallelen Anfragen belasten.

Node 7 – E-Mail-Adressen extrahieren

Der Code-Node im Modus Run Once for Each Item zieht Adressen aus dem HTML und verbindet sie mit den Firmendaten aus Node 4:

const html = $json.data || '';
const text = html.replace(/<[^>]+>/g, ' ');
const treffer = text.match(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi) || [];
const emails = [...new Set(treffer.map(e => e.toLowerCase()))]
  .filter(e => !e.startsWith('noreply') && !e.startsWith('datenschutz'));
const firma = $('Edit Fields').item.json;
return { json: { ...firma, email: emails[0] || null, emails_gefunden: emails.length } };

Passen Sie den Node-Namen in $('Edit Fields') an Ihre Benennung an. Manche Impressen schreiben Adressen in verschleierter Form, etwa mit [at] statt @. Solche Fälle bleiben leer und gehen in die manuelle Nachbearbeitung.

Node 8 – E-Mail verifizieren

Für die Verifizierung nutzen Sie den Hunter-Node mit der Operation zur Prüfung der Zustellbarkeit oder einen HTTP-Request-Node:

  • Methode: GET
  • URL: https://api.hunter.io/v2/email-verifier
  • Query Parameter: email mit dem Wert {{ $json.email }}, n8n kodiert ihn automatisch
  • Authentifizierung: Header Auth mit dem Header X-API-KEY

Schalten Sie davor einen If-Node, der nur Items mit vorhandener Adresse weitergibt. Die Antwort enthält unter data.status den Prüfstatus. Hunter nennt in der Dokumentation Ratenlimits pro Sekunde und Minute, die kleinen Batches aus Node 6 halten Sie sicher darunter. Hintergründe zu Bounces und Verifizierung erklärt der Ratgeber E-Mail-Adressen finden.

Node 9 – Switch nach Prüfstatus

Der Switch-Node verteilt die Items anhand von {{ $json.data.status }} auf drei Ausgänge:

  • valid: Firma mit Adresse und Vermerk geprüft ins CRM
  • accept_all, webmail oder unknown: Firma ins CRM, Adresse mit Vermerk ungeprüft
  • invalid oder disposable: Firma ins CRM, Adresse verwerfen

Da die Hunter-Antwort die Firmendaten nicht enthält, holen Sie diese per $('Code').item.json zurück oder führen beide Datenströme mit einem Merge-Node zusammen. Ein klarer Status je Datensatz ist die Grundlage für dauerhafte List Hygiene.

Node 10 – Übergabe ans CRM

Legen Sie Firmen nie blind an. Suchen Sie zuerst, dann entscheiden Sie:

  • HubSpot: Der HubSpot-Node bietet für Unternehmen die Suche nach Domain. Findet er einen Treffer, aktualisieren Sie das Unternehmen, sonst legen Sie es an. Kontakte legt die Operation Create/Update anhand der E-Mail-Adresse an oder aktualisiert sie.
  • Pipedrive: Suchen Sie die Organisation über die Search-Operation nach dem Namen oder einem eigenen Feld für die Domain, legen Sie sie bei Bedarf an und erzeugen Sie anschließend einen Lead, der mit der Organisation verknüpft ist.

Schreiben Sie Herkunft und Datum als eigene Felder mit, etwa quelle mit dem Wert Google Maps und angereichert_am mit {{ $now.toFormat('yyyy-MM-dd') }}. Das hilft bei Auskunftsanfragen und bei späteren Auswertungen. Welches CRM besser zu Ihrem Team passt, vergleicht der Ratgeber Pipedrive vs. HubSpot.

Node 11 – Fehlerbehandlung

Automatisierte Abläufe scheitern irgendwann, etwa an einem abgelaufenen Token, einer geänderten API oder einer nicht erreichbaren Website. Planen Sie das von Anfang an ein:

  1. Retry On Fail in den Node-Einstellungen der API-Nodes aktivieren, mit mehreren Versuchen und Wartezeit dazwischen.
  2. On Error bei unkritischen Nodes wie dem Impressum-Abruf auf Continue (using error output) stellen, damit ein einzelner Fehler nicht den ganzen Lauf stoppt.
  3. Error-Workflow anlegen, der mit dem Error Trigger beginnt, und ihn in den Workflow-Einstellungen hinterlegen. Laut n8n-Dokumentation startet er nur bei automatischen Ausführungen, nicht bei manuellen Tests.

Die Fehlermeldung enthält unter anderem den Workflow-Namen, den zuletzt ausgeführten Node und die Ursache:

Workflow {{ $json.workflow.name }} fehlgeschlagen
Node {{ $json.execution.lastNodeExecuted }}
Fehler {{ $json.execution.error.message }}
Link {{ $json.execution.url }}

Kosten im Blick behalten

BausteinAbrechnungStellschraube
n8n self-hostedServer, Domain, WartungszeitKleine Instanz genügt für diesen Workflow
n8n CloudTarif nach Workflow-AusführungenMehrere Firmen pro Ausführung verarbeiten
ApifyPro gefundenem Ort, Zusatzfunktionen extraTrefferzahl begrenzen, Filter nachträglich anwenden
Verifizierungs-APICredits pro PrüfungNur Items mit gefundener Adresse prüfen
CRMLizenzen pro NutzerKeine Zusatzkosten durch den Workflow selbst

Starten Sie mit einem Testlauf von wenigen Firmen und rechnen Sie die tatsächlichen Kosten pro angereichertem Lead aus. Preise ändern sich, prüfen Sie den aktuellen Stand bei den jeweiligen Anbietern.

Recht kurz

Der Workflow verarbeitet personenbezogene Daten, sobald Namen oder personalisierte Adressen im Spiel sind. Dokumentieren Sie eine Interessenabwägung nach Art. 6 Abs. 1 lit. f DSGVO, informieren Sie Betroffene nach Art. 14 DSGVO und legen Sie Löschfristen fest. Eine verifizierte E-Mail-Adresse ist keine Einwilligung: Werbe-E-Mails erfordern nach § 7 UWG auch im B2B eine vorherige ausdrückliche Einwilligung. Die ausführliche Einordnung bietet der Ratgeber Web Scraping – was ist erlaubt. Diese Hinweise ersetzen keine Rechtsberatung.

Fazit

Mit rund einem Dutzend Nodes wird aus einem Suchbegriff eine bereinigte, geprüfte und dublettenfreie Firmenliste im CRM. Der Workflow spart vor allem Recherchezeit und sorgt für gleichbleibende Datenqualität, weil jeder Datensatz dieselben Schritte durchläuft. Testen Sie mit kleinen Läufen, bauen Sie die Fehlerbehandlung von Anfang an ein und erweitern Sie den Ablauf erst danach, etwa um Lead Scoring oder weitere Datenquellen. Wie sich solche Automatisierungen in Ihre CRM-Strategie einfügen, zeigt die Übersicht Marketing Automation und CRM.

Häufige Fragen

Was ist ein n8n-Workflow?

Ein n8n-Workflow ist eine Abfolge von Nodes, die Daten automatisch verarbeiten. Ein Trigger startet den Ablauf, etwa per Zeitplan, Webhook oder neuer Tabellenzeile, danach folgen Aktionen wie API-Abfragen, Filter oder CRM-Einträge. Sie bauen Workflows im visuellen Editor und steuern Details mit Expressions.

Brauche ich Programmierkenntnisse für diesen Workflow?

Für die meisten Nodes nicht, sie werden über Formulare konfiguriert. Hilfreich sind Grundkenntnisse in JSON und in den Expressions von n8n. Für die Extraktion von E-Mail-Adressen aus dem Impressum nutzt der Workflow einen kurzen Code-Node, den Sie direkt übernehmen können.

Was kostet die automatische Anreicherung?

Die Kosten setzen sich aus n8n, Apify, der Verifizierungs-API und Ihrem CRM zusammen. n8n self-hosted kostet vor allem Server und Wartung, n8n Cloud rechnet nach Workflow-Ausführungen ab, Apify und Verifizierungsdienste nach Ergebnissen oder Credits. Rechnen Sie mit einem kleinen Testlauf die Kosten pro Lead aus, da sich Preise regelmäßig ändern.

Wie verhindere ich doppelte Leads im CRM?

Kombinieren Sie zwei Stufen. Der Remove-Duplicates-Node entfernt Dubletten innerhalb eines Laufs und gegenüber früheren Ausführungen, etwa anhand der Place-ID. Vor dem Anlegen sucht der Workflow zusätzlich im CRM nach der Domain und aktualisiert vorhandene Firmen, statt sie neu anzulegen.

Darf ich die angereicherten Leads per E-Mail anschreiben?

Nicht ohne vorherige ausdrückliche Einwilligung, das gilt nach § 7 UWG auch im B2B. Eine verifizierte Adresse ist keine Erlaubnis. Nutzen Sie die Daten für Anrufe mit mutmaßlicher Einwilligung, Briefe oder LinkedIn und informieren Sie die Betroffenen nach Art. 14 DSGVO. Diese Einordnung ersetzt keine Rechtsberatung.

Porträt Felix Wilhelm

Über den Autor

Felix Wilhelm

Gründer von vertriebsmitarbeiter.ai

Felix Wilhelm ist Gründer von vertriebsmitarbeiter.ai und arbeitet seit über zehn Jahren an SEO- und Vertriebsprojekten für B2B-Unternehmen. Die Ratgeber auf dieser Seite fassen zusammen, was in dieser Praxis funktioniert – und was nicht.

Marketing Automation & CRM

Weitere Artikel zum Thema

Kostenlose Potenzialanalyse

Sie möchten das in Ihrem Unternehmen umsetzen?

In der kostenlosen Potenzialanalyse zeigen wir Ihnen, welche Maßnahmen aus diesem Ratgeber bei Ihnen den größten Effekt hätten – und in welcher Reihenfolge Sie sie angehen.

Kostenlose Potenzialanalyse
Anrufen WhatsApp Termin Potenzialanalyse