# 📋 Workflow-Beschreibung: LinkedIn Lead Research & Enrichment ## 🎯 Zweck Automatisierte LinkedIn-Recherche mit KI-gestĂŒtzter Datenanreicherung fĂŒr Lead-Generierung. Der Workflow sucht LinkedIn-Profile nach definierten Kriterien, extrahiert Basis-Informationen und reichert diese intelligent mit Kontaktdaten und Unternehmensinformationen an. --- ![n8n Flow Übersicht](https://git.unixweb.net/joachim/n8n-lead-generator/raw/branch/master/n8n-flow-google-search.png) ## 📩 Repository-Struktur ``` n8n-lead-generator/ ├── README.md # Diese Dokumentation ├── google-search.json # Sub-Workflow fĂŒr Google-Suche ├── scraper.csv # Beispiel-Eingabedaten (DataTable) ├── Leads-N8N-Example.xlsx # Beispiel Zwischen-Output └── Leads-N8N-Ergebnisse-Example.xlsx # Beispiel End-Output (angereichert) ``` ### **Datei-Beschreibungen:** #### **scraper.csv** Beispiel-Struktur fĂŒr die n8n DataTable "scraper" - die Eingabedaten fĂŒr den Workflow: **EnthĂ€lt:** - `title` - Berufsbezeichnung/Position (z.B. "Steuerberater") - `city` - Stadt fĂŒr die Suche (z.B. "MĂŒnchen") - `ready` - Boolean Flag (true/false) fĂŒr verarbeitungsbereite EintrĂ€ge - `finished` - Boolean Flag markiert bereits bearbeitete Jobs - `pages` - Anzahl zu durchsuchender Google-Seiten - `startIndex` - Start-Position fĂŒr Pagination **Verwendung:** Import diese CSV in eine n8n DataTable namens "scraper" um den Workflow zu initialisieren. #### **Leads-N8N-Example.xlsx** Beispiel-Output nach Phase 1 (Google Search & Basic Extraction): **EnthĂ€lt:** - ID (LinkedIn-URL) - Titel (vollstĂ€ndiger LinkedIn-Titel) - Beschreibung (LinkedIn-Bio/Beschreibung) - Link (LinkedIn-Profil-URL) - Vorname - Nachname - Branche *(initial leer - Trigger fĂŒr AI)* **Verwendung:** Zeigt die Struktur des Google Sheets "Leads-N8N-2" - erstelle ein entsprechendes Sheet mit diesen Spalten. #### **Leads-N8N-Ergebnisse-Example.xlsx** Beispiel-Output nach Phase 2 (AI-Enrichment): **EnthĂ€lt alle angereicherten Daten:** - ID - Vorname, Nachname - Branche/Industry - Straße, PLZ, Ort, Land - E-Mail - Telefon - Website **Verwendung:** Zeigt die Struktur des Google Sheets "Leads-N8N-Ergebnisse" - erstelle ein entsprechendes Sheet mit diesen Spalten. #### **google-search.json** Sub-Workflow der von "Get Search Results" aufgerufen wird: **FunktionalitĂ€t:** - FĂŒhrt Google-Suche mit Custom Search API durch - Parameter: search query, pages, start index - Gibt strukturierte Suchergebnisse zurĂŒck - Filtert auf LinkedIn-Profile **Installation:** Importiere diesen Workflow separat in n8n und verlinke ihn im Haupt-Workflow. --- ## 🚀 Setup & Installation ### **Schritt 1: DataTable erstellen** ```bash 1. In n8n: Gehe zu "Data" 2. Erstelle neue DataTable "scraper" 3. Importiere scraper.csv ``` ### **Schritt 2: Google Sheets vorbereiten** ```bash 1. Erstelle Google Sheet "Leads-N8N-2" - Importiere Spalten aus Leads-N8N-Example.xlsx 2. Erstelle Google Sheet "Leads-N8N-Ergebnisse" - Importiere Spalten aus Leads-N8N-Ergebnisse-Example.xlsx 3. Verbinde Google Sheets mit n8n (OAuth2) ``` ### **Schritt 3: Workflows importieren** ```bash 1. Importiere google-search.json als Sub-Workflow 2. Importiere Haupt-Workflow (aus deinem n8n) 3. Verlinke "Get Search Results" Node mit Sub-Workflow ``` ### **Schritt 4: API-Credentials konfigurieren** ```bash 1. Google Custom Search API Key 2. OpenAI API Key (GPT-4 oder GPT-4o) 3. Google Sheets OAuth2 Credentials ``` ### **Schritt 5: Test-Run** ```bash 1. FĂŒge 5 Test-EintrĂ€ge in scraper.csv ein 2. Setze ready=true, finished=false 3. Trigger Workflow manuell 4. PrĂŒfe Outputs in beiden Google Sheets ``` --- ## 🔄 Workflow-Ablauf ### **Phase 1: Initialisierung & Suche** 1. **Manual Trigger** - Startet den Workflow manuell 2. **Get Status** (DataTable) - Liest aus `scraper.csv` / DataTable "scraper" - Filtert auf `ready = true` (bereite Jobs) - Liefert typisch ~80 Suchanfragen mit Kriterien (Titel, Stadt, etc.) 3. **Check City** - Validiert ob erforderliche Felder vorhanden sind - PrĂŒft: `city` nicht leer ODER `finished = false` - Filtert ungĂŒltige/bereits bearbeitete EintrĂ€ge aus 4. **Prepare Search** - Bereitet die Suchparameter vor - Kombiniert: `title` + `city` zu Suchstring - Format: z.B. "Steuerberater MĂŒnchen" 5. **Get Search Results** (Sub-Workflow) - Ruft `google-search.json` Workflow auf - Suche mit: `"[title] [city] site:linkedin.com/in"` - Parameter: Seiten-Anzahl, Start-Index - Liefert LinkedIn-URLs und Metadaten zurĂŒck 6. **Fill Sheet** (Google Sheets) - Schreibt Basis-Daten in "Leads-N8N-2" Tabelle (siehe `Leads-N8N-Example.xlsx`) - Felder: ID, Titel, Beschreibung, Link, Vorname, Nachname - Verwendet `appendOrUpdate` mit ID als Matching-Key - Duplikate werden automatisch aktualisiert --- ### **Phase 2: Datenanreicherung (AI-Loop)** 7. **Get row(s) in sheet** (Google Sheets) - Holt frisch geschriebene Daten aus "Leads-N8N-2" zurĂŒck - PrĂŒft Status der einzelnen EintrĂ€ge - Identifiziert EintrĂ€ge die noch angereichert werden mĂŒssen 8. **IF** (Conditional Check) - PrĂŒft ob das Feld "Branche" leer ist - Nur leere EintrĂ€ge werden weiterverarbeitet - Verhindert doppelte AI-Verarbeitung (Kosten-Optimierung) 9. **Loop Over Items** (Split in Batches) - **Batch Size: 5** Items pro Durchlauf - Begrenzt Token-Verbrauch bei ChatGPT - Verhindert Rate-Limiting und Timeouts - Loop lĂ€uft bis alle Items verarbeitet sind 10. **Research Data** (AI Agent) - **OpenAI Chat Model** (GPT-4 oder GPT-4o) - **Structured Output Parser** fĂŒr konsistente Datenstruktur - Extrahiert aus LinkedIn-Profil + Websuche: - ✉ E-Mail-Adresse - 📞 Telefonnummer - 🌐 Website - 🏱 Branche/Industry - 📍 VollstĂ€ndige Adresse (Straße, PLZ, Ort, Land) - **Settings:** - Temperature: **0.0** (maximale Konsistenz) - top_p: **0.1** (deterministisch) - Execute Once: **OFF** (verarbeitet jedes Item einzeln) 11. **Fill Sheet Ergebnisse** (Google Sheets) - Schreibt angereicherte Daten in "Leads-N8N-Ergebnisse" (siehe `Leads-N8N-Ergebnisse-Example.xlsx`) - Verwendet ID als Matching-Key fĂŒr Updates - Felder: Vorname, Nachname, Straße, PLZ, Ort, Land, Mail, Telefon, Website, Branche 12. **Update row index** (Google Sheets) - Markiert verarbeitete EintrĂ€ge in "Leads-N8N-2" - Verhindert Re-Processing im nĂ€chsten Loop - Aktualisiert Status-Felder 13. **Loop zurĂŒck** zu Step 9 - Verarbeitet nĂ€chsten Batch (5 Items) - Wiederholt bis alle Items durch sind - Automatische Loop-Beendigung wenn keine Items mehr --- ### **Phase 3: Abschluss** 14. **Finish Dataset** (DataTable) - Markiert den ursprĂŒnglichen Job in `scraper` als `finished = true` - Verhindert Re-Processing bei erneutem Workflow-Start - Aktualisiert Statistiken/Timestamps --- ## 📊 Datenfluss ``` Eingabe (scraper.csv): ├─ title: "Steuerberater" ├─ city: "MĂŒnchen" ├─ pages: 3 ├─ startIndex: 1 ├─ ready: true └─ finished: false ↓ [Google Search via google-search.json] Zwischen-Output (Leads-N8N-Example.xlsx): ├─ ID: "linkedin.com/in/max-mustermann" ├─ Titel: "Max Mustermann - Steuerberater MĂŒnchen" ├─ Beschreibung: "Steuerberater | WirtschaftsprĂŒfer..." ├─ Link: "https://linkedin.com/in/max-mustermann" ├─ Vorname: "Max" ├─ Nachname: "Mustermann" └─ Branche: [LEER] ← Trigger fĂŒr AI ↓ [AI Research mit GPT-4o] End-Output (Leads-N8N-Ergebnisse-Example.xlsx): ├─ ID: "linkedin.com/in/max-mustermann" ├─ Vorname: "Max" ├─ Nachname: "Mustermann" ├─ Straße: "Maximilianstraße 15" ├─ PLZ: "80539" ├─ Ort: "MĂŒnchen" ├─ Land: "Deutschland" ├─ Mail: "max@stb-mustermann.de" ├─ Telefon: "+49 89 123456" ├─ Website: "www.stb-mustermann.de" └─ Branche: "Steuerberatung" ``` --- ## 📁 Beispieldaten ### **scraper.csv Format:** ```csv title,city,pages,startIndex,ready,finished Steuerberater,MĂŒnchen,3,1,true,false Rechtsanwalt,Berlin,2,1,true,false IT-Berater,Hamburg,3,1,true,false ``` ### **Leads-N8N-Example.xlsx Spalten:** - ID - Titel - Beschreibung - Link - Vorname - Nachname - Branche *(leer)* - Straße *(leer)* - PLZ *(leer)* - Ort *(leer)* - Land *(leer)* - Mail *(leer)* - Telefon *(leer)* - Website *(leer)* ### **Leads-N8N-Ergebnisse-Example.xlsx Spalten:** - ID - Vorname - Nachname - Branche *(gefĂŒllt von AI)* - Straße *(gefĂŒllt von AI)* - PLZ *(gefĂŒllt von AI)* - Ort *(gefĂŒllt von AI)* - Land *(gefĂŒllt von AI)* - Mail *(gefĂŒllt von AI)* - Telefon *(gefĂŒllt von AI)* - Website *(gefĂŒllt von AI)* --- ## ⚙ Technische Details ### **Performance:** - **Verarbeitungsgeschwindigkeit:** ~5-10 Items pro Minute - **Batch-GrĂ¶ĂŸe:** 5 Items (Token-Optimierung) - **Durchsatz:** ~80 Leads in 30-45 Minuten ### **Token-Verbrauch (geschĂ€tzt):** - Pro Item: ~700 Tokens (Input + Output) - Pro Batch (5 Items): ~3.500 Tokens - Gesamt (80 Items): ~56.000 Tokens ### **Kosten (GPT-4o):** - Input: ~$0.28 (56k Tokens × $5/1M) - Output: ~$0.84 (56k Tokens × $15/1M) - **Total: ~$1.12 pro Workflow-Durchlauf** - **Pro Lead: ~$0.014** ### **Error Handling:** - Retry on Fail: Aktiviert im Research Data Node - Loop-basierte Verarbeitung: Fehler stoppen nicht den gesamten Workflow - Duplikat-Prevention: ID-basiertes Matching verhindert doppelte EintrĂ€ge --- ## 🎯 Use Cases **Ideal fĂŒr:** - 🔍 Lead-Generierung fĂŒr B2B-Sales - 📊 Marktforschung & Wettbewerbsanalyse - 🎯 Account-Based Marketing (ABM) - 📈 CRM-Datenanreicherung - đŸ€ Recruiting & Headhunting **Branchen:** - Steuerberatung - Unternehmensberatung - Rechtsberatung - IT-Dienstleistungen - Finanzdienstleistungen - Medizin & Healthcare - Architektur & Ingenieurwesen --- ## 🔒 Datenschutz & Compliance **Wichtig:** - Daten stammen aus **öffentlich zugĂ€nglichen LinkedIn-Profilen** - Keine Speicherung sensibler persönlicher Daten - DSGVO-konform bei korrekter Verwendung (Opt-out respektieren) - Nur geschĂ€ftliche Kontaktdaten werden verarbeitet - Empfehlung: Opt-In fĂŒr Marketing-Kommunikation einholen --- ## 🚀 Vorteile ✅ **Skalierbar:** Verarbeitet hunderte Leads automatisch ✅ **Kosteneffizient:** ~$0.014 pro Lead (bei GPT-4o) ✅ **Konsistent:** Temperature 0.0 = reproduzierbare Ergebnisse ✅ **Robust:** Loop-basiert, fehlertoleranz durch Batch-Verarbeitung ✅ **Wartbar:** Modularer Aufbau, einfach erweiterbar ✅ **Dokumentiert:** VollstĂ€ndige Beispieldaten und Setup-Guide --- ## đŸ› ïž Troubleshooting ### **Problem: Keine Ergebnisse in Leads-N8N-Ergebnisse** **Lösung:** PrĂŒfe ob "Branche" Feld in Leads-N8N-2 leer ist (Trigger fĂŒr AI) ### **Problem: Token Limit Exceeded** **Lösung:** Reduziere Batch Size von 5 auf 3 im Loop Over Items Node ### **Problem: Google Search gibt keine Ergebnisse** **Lösung:** PrĂŒfe Google Custom Search API Quota & Credentials ### **Problem: Workflow stoppt mittendrin** **Lösung:** PrĂŒfe Error Logs - meist OpenAI Rate Limiting, Pause von 30 Sek. einbauen --- ## 📝 Changelog ### Version 3.0 (2026-01-12) - ✅ Stable Production Release - ✅ Loop-basiertes Batch-Processing implementiert - ✅ Beispieldaten hinzugefĂŒgt (CSV + XLSX) - ✅ Sub-Workflow fĂŒr Google-Suche dokumentiert - ✅ VollstĂ€ndige Setup-Anleitung --- ## đŸ€ Contributing Pull Requests sind willkommen! Bei grĂ¶ĂŸeren Änderungen bitte zuerst ein Issue öffnen. --- ## 📄 Lizenz Joachim Hummel © 2026 --- **Version:** 3.0 (Stable) **Erstellt:** Januar 2026 **Status:** Production-Ready âœ