Du hittar ett lovande företag, öppnar fem flikar, letar efter en kontaktsida, kopierar en e-postadress och börjar sedan jaga LinkedIn-kontext. Sedan gör du det igen. Och igen. Listan växer, men ditt tålamod gör det inte.
Det här är den typen av röra som bromsar growth marketers först, men byråägare och SDR:er känner av det också. Med automatisering för LinkedIn lead enrichment får du ett Google Sheet fyllt med prospekt som faktiskt är redo att pitchas, inte “redo att undersökas.”
Det här arbetsflödet förvandlar en sökfråga till berikade leads med e-post, telefon (när det finns) och LinkedIn-detaljer om företaget. Du får se vad som automatiseras, vilka resultat du kan förvänta dig och vad du behöver för att köra det stabilt.
Så fungerar den här automatiseringen
Hela n8n-flödet, från trigger till slutlig output:
n8n Workflow Template: Google Sheets + LinkedIn, berikade leads att kontakta
flowchart LR
subgraph sg0["When clicking ‘Execute workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Serper Search"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>parse search results"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Normalize leads"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Homepage"]
n7@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields", pos: "b", h: 48 }
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>HTTP Request1"]
n10@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model1", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>output combiner"]
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge"]
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge1"]
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Format output"]
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Linked in Details"]
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>LinkedIN scraper"]
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>convert scrapable link"]
n18@{ icon: "mdi:swap-horizontal", form: "rounded", label: "filter redirecting links", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Linked In specific link", pos: "b", h: 48 }
n20@{ icon: "mdi:database", form: "rounded", label: "Append row in sheet", pos: "b", h: 48 }
n21@{ icon: "mdi:message-outline", form: "rounded", label: "Send a message", pos: "b", h: 48 }
n22@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model3", pos: "b", h: 48 }
n23@{ icon: "mdi:robot", form: "rounded", label: "Linked In Agent", pos: "b", h: 48 }
n24@{ icon: "mdi:robot", form: "rounded", label: "Contact Page Scan Agent", pos: "b", h: 48 }
n25@{ icon: "mdi:robot", form: "rounded", label: "Home Page Analyst", pos: "b", h: 48 }
n26["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Format for Sheets"]
n5 --> n6
n12 --> n26
n13 --> n12
n8 --> n1
n14 --> n18
n14 --> n12
n9 --> n24
n1 --> n2
n6 --> n25
n23 --> n15
n4 --> n21
n4 --> n5
n3 --> n4
n11 --> n13
n16 --> n23
n26 --> n20
n25 --> n14
n15 --> n12
n20 --> n4
n2 --> n3
n17 --> n16
n24 --> n11
n7 -.-> n25
n18 --> n9
n18 --> n19
n18 --> n13
n10 -.-> n24
n22 -.-> n23
n19 --> n17
n0 --> n8
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n23,n24,n25 ai
class n7,n10,n22 aiModel
class n18,n19 decision
class n20 database
class n1,n6,n9,n16 api
class n2,n3,n11,n14,n15,n17,n26 code
classDef customIcon fill:none,stroke:none
class n1,n2,n3,n6,n9,n11,n12,n13,n14,n15,n16,n17,n26 customIcon
Problemet: lead-research är långsam, inkonsekvent och lätt att göra fel
Att bygga en bra outbound-lista är inte svårt för att leads inte finns. Det är svårt för att informationen du behöver är utspridd och rörig. Google-resultat skickar dig till kataloger, döda sidor eller “Kontakt”-formulär utan e-postadress. LinkedIn har kontexten du vill ha (bransch, storlek, plats), men att plocka den manuellt tar tid och hoppas ofta över när du har bråttom. Efter några timmar blir ditt kalkylark en blandning av “riktiga leads” och “kanske senare”, vilket gör att outreach stannar av och pipelinen blir tunnare än den borde.
Det summerar sig snabbt. Här är var det fallerar.
- Du lägger cirka 10 minuter per företag bara på att avgöra om det är värt att kontakta.
- Kataloger och aggregator-sajter smyger sig in i resultaten, så hälften av ditt tidiga arbete måste kastas.
- E-post- och telefonuppgifter är ofta gömda på undersidor, som de flesta aldrig kollar.
- LinkedIn-kontext kopieras manuellt (om alls), så din pitch blir generisk och svarsfrekvensen förblir låg.
Lösningen: ett “lead gen specialist”-arbetsflöde som berikar varje rad
Det här n8n-arbetsflödet fungerar som en autonom research-assistent. Du anger en sökfråga (till exempel “Marketing agencies in Toronto”), och det hämtar ett strukturerad set med leads från Googles resultat via Serper.dev. Därefter besöker det varje företags webbplats, hämtar HTML från startsidan och låter en AI-agent avgöra var den riktiga kontaktinformationen sannolikt finns (Kontakt, Om oss, Karriär, länkar i sidfoten och ibland sociala profiler). Om en kontaktsida finns, skannar en andra AI-agent den sidan och extraherar e-postadresser och telefonnummer som inte syns på startsidan. Parallellt, om en LinkedIn-företagsprofil hittas, skrapar arbetsflödet den och extraherar firmografiska detaljer som antal anställda, bransch och huvudkontorets plats. Till sist slås allt ihop till en prydlig profil och läggs till i Google Sheets.
Arbetsflödet startar med en manuell trigger i n8n, kör sedan en sökning och rensar resultaten innan det loopar igenom leads i batchar. Varje lead får två berikningspass (webbplats och LinkedIn när det finns), och output hamnar som en rad per företag i ditt kalkylark, plus en valfri e-postnotis via Gmail.
Vad du får: automatisering vs. resultat
| Vad det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du behöver 50 prospekt för en nischad kampanj. Manuellt, om du lägger cirka 10 minuter per lead och hoppar mellan Google, företagets webbplats, LinkedIn och ditt kalkylark, blir det ungefär 8 timmars arbete. Med det här arbetsflödet ställer du in sökfrågan en gång och låter det köra. Eftersom det har en inbyggd fördröjning blir en batch med 50 leads normalt klar på cirka 10–15 minuter, och ditt Sheet är redan fyllt med e-post, telefon (när det finns) och firmografisk data från LinkedIn.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra berikade lead-rader
- Serper.dev för resultat via Google Search API
- ScraperAPI för att ta sig förbi bot-detektering på sidor
- Google Gemini eller OpenAI för att driva AI-agenterna
- API-nycklar (skapa dem i respektive leverantörs dashboard)
Svårighetsgrad: Medel. Du kopplar upp autentiseringar, klistrar in API-nycklar och matchar dina Sheet-rubriker exakt.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis konsultation på 15 minuter).
Så fungerar det
Du drar igång med en sökfråga. Starta arbetsflödet och ange en nisch-/platsfråga (som “Plumbers in Chicago”) i startfälten så att systemet vet vilken typ av företag det ska hitta.
Sökresultaten rensas innan något annat händer. Arbetsflödet anropar ett sök-API, extraherar de organiska resultaten och normaliserar dem för att ta bort kataloger och lågkvalitativa länkar så att din lista inte förorenas.
Varje lead undersöks i två spår. Det hämtar HTML från företagets webbplats och frågar en AI-agent vilka sidor som är värda att kontrollera. Om det hittar en “Contact”-sida skannar det djupare efter e-postadresser och telefonnummer. Samtidigt, om det finns en LinkedIn-företagsprofil, hämtar och tolkar det centrala företagsdetaljer.
Allt slås ihop till en felfri rad i Google Sheets. Webbplatsfynd, kontaktuppgifter och LinkedIn-berikning kombineras, formateras till läsbar text och läggs till i ditt kalkylark. Du kan också skicka en Gmail-notis till dig själv medan batchen kör.
Du kan enkelt justera sökfrågan och vilka fält som skrivs till sheetet utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera den manuella triggern
Starta arbetsflödet manuellt för att verifiera varje steg i lead-identifiering och berikning.
- Lägg till Manual Execution Start som trigger för att köra arbetsflödet vid behov.
- Koppla Manual Execution Start till Assign Search Term för att lämna över kontrollen till konfigurationen av sökfrågan.
Steg 2: anslut sök- och leadkällor
Definiera er målsökning och anropa sök-API:t för att generera initiala leadkandidater.
- I Assign Search Term ställer ni in search_query till
Marketing and Advertising agencies in Canada(eller er målmarknad). - Konfigurera Search Engine Query med URL
https://google.serper.dev/searchoch MethodPOST. - Ställ in JSON-body i Search Engine Query till
={ "q": "{{ $json.search_query }}", "num": 50 }. - Autentiseringsuppgift krävs: anslut era
httpHeaderAuth-uppgifter i Search Engine Query.
⚠️ Vanlig fallgrop: Serper API kräver en giltig API-nyckel i headern. Utan den kommer Search Engine Query att returnera 401-fel.
Steg 3: sätt upp leadbearbetning och batchning
Normalisera resultaten och bearbeta leads i batcher för att kontrollera belastningen vid scraping.
- I Extract Search Results och Standardize Lead Data behåller ni JavaScript-blocken som de är för att parsa organiska resultat och filtrera bort skräplistningar.
- Använd Iterate Through Leads för att bearbeta leads i batcher; låt den vara kopplad från Standardize Lead Data.
- Ställ in Delay Cycle Amount till
1.5för att lägga in throttling mellan scraping-anrop.
Tips: Det här arbetsflödet använder flera code-noder (totalt 7). Behåll dem som de är om ni inte är bekväma med JavaScript-ändringar.
Steg 4: konfigurera AI-analys och parallell routning
Analysera webbplatser och kontaktsidor med AI och routa sedan resultaten parallellt till LinkedIn-berikning och kontaktutvinning.
- I Retrieve Website HTML ställer ni in query-parametrarna så att de inkluderar api_key
[CONFIGURE_YOUR_API_KEY], url={{ $json.website }}och rendertrue. - I Homepage Analysis Agent behåller ni Text som
=Analyze the following HTML and extract all contact details: {{ $json.data }}. - Säkerställ att Gemini Chat Engine är ansluten som språkmodell för Homepage Analysis Agent. Autentiseringsuppgift krävs: anslut era
googlePalmApi-uppgifter i Gemini Chat Engine. - Parse Agent Output skickar output parallellt till både Route Contact Links och Combine Data Streams.
- Route Contact Links skickar output parallellt till både Retrieve Contact Page och Filter LinkedIn Link.
- I Retrieve Contact Page behåller ni query-parametern url satt till
={{ $json.Detail }}och ersätter api_key[CONFIGURE_YOUR_API_KEY]med er ScraperAPI-nyckel. - Säkerställ att Gemini Contact Engine är ansluten som språkmodell för Contact Detail Extractor. Autentiseringsuppgift krävs: anslut era
googlePalmApi-uppgifter i Gemini Contact Engine. - Från Filter LinkedIn Link behåller ni kedjan Derive LinkedIn ID → Scrape LinkedIn Page → LinkedIn Data Analyst → Parse LinkedIn Details.
- Säkerställ att Gemini LinkedIn Engine är ansluten som språkmodell för LinkedIn Data Analyst. Autentiseringsuppgift krävs: anslut era
googlePalmApi-uppgifter i Gemini LinkedIn Engine.
⚠️ Vanlig fallgrop: noder för AI-verktyg (Homepage Analysis Agent, Contact Detail Extractor, LinkedIn Data Analyst) lagrar inte autentiseringsuppgifter direkt—lägg till dem i Gemini Chat Engine, Gemini Contact Engine respektive Gemini LinkedIn Engine.
Steg 5: slå samman resultat och förbered output
Aggregera AI-output och forma data till fält som är redo för kalkylblad.
- I Aggregate Contact Results behåller ni JavaScript-koden som slår ihop e-postadresser, telefonnummer och sammanfattningar.
- Använd Select Branch Output med Mode
chooseBranchoch useDataOfInput2för att prioritera deep-scan-data när den finns tillgänglig. - Konfigurera Combine Data Streams med Mode
combine, combineBycombineByPositionoch numberInputs3. - I Prepare Sheet Fields behåller ni utplattningslogiken som sätter
email_string,phone_stringoch standardvärden för LinkedIn-sammanfattning.
Steg 6: konfigurera åtgärder för output
Skriv resultaten till Google Sheets och skicka en e-postavisering när körningen är klar.
- I Append Spreadsheet Row ställer ni in Document till
[YOUR_ID]och Sheet tillSheet1(gid=0). - Mappa kolumner i Append Spreadsheet Row med följande uttryck: Phone
={{ $json.phone_string }}, Emails={{ $json.email_string }}, Website={{ $json.website_url }}, industry={{ $json.industry }}, Company Name={{ $('Iterate Through Leads').item.json.company_name }}, Linked Summary={{ $json.linkedin_summary }}, employee count={{ $json.employee_count }}. - Autentiseringsuppgift krävs: anslut era
googleSheetsOAuth2Api-uppgifter i Append Spreadsheet Row. - I Dispatch Email Alert ställer ni in sendTo till er adress och behåller subject
Extraction Completed. - Autentiseringsuppgift krävs: anslut era
gmailOAuth2-uppgifter i Dispatch Email Alert.
Steg 7: testa och aktivera ert arbetsflöde
Kör ett manuellt test för att verifiera att varje steg ger giltig output och att era integrationer skriver data korrekt.
- Klicka på Execute Workflow i Manual Execution Start för att köra arbetsflödet från början till slut.
- Bekräfta att Search Engine Query returnerar resultat och att Extract Search Results skickar ut en lista med leads.
- Verifiera att Homepage Analysis Agent, Contact Detail Extractor och LinkedIn Data Analyst returnerar giltig JSON som parsas av respektive code-nod.
- Kontrollera Google Sheets för att bekräfta att Append Spreadsheet Row lägger till nya rader med förväntade värden.
- Säkerställ att Dispatch Email Alert skickar ett klart-meddelande efter att batchen har slutförts.
- När ni är nöjda aktiverar ni arbetsflödet för att använda det för lead-research-körningar i produktion.
Vanliga fallgropar
- Google Sheets-inloggningar kan löpa ut eller kräva specifika behörigheter. Om något skapar fel, kontrollera först n8n-skärmen Credentials och delningsinställningarna för det aktuella sheetet.
- Om du använder Wait-noder eller extern scraping varierar processingtiderna. Öka väntetiden om efterföljande noder failar på tomma svar.
- ScraperAPI kan returnera “access denied”-HTML när en målsajt är aggressiv. När AI-output plötsligt blir vag, inspektera hämtad HTML i exekveringsdatan och rotera ScraperAPI-inställningar eller headers.
Vanliga frågor
Cirka 45 minuter om du redan har dina API-nycklar och har skapat Google Sheet.
Nej. Du kopplar konton, klistrar in API-nycklar och kopierar de angivna rubrikerna till ditt Sheet.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på $20/månad för högre volym. Du behöver också räkna in Serper.dev, ScraperAPI och din AI-modellanvändning (Gemini eller OpenAI), vilket vanligtvis ger en liten kostnad per körning.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är det normala sättet att använda det. Uppdatera search_query i fälten “Assign Search Term” och justera sedan Google Sheets-kolumnerna om du vill ha extra fält som “City” eller “Service line.” Om du föredrar en annan AI-leverantör kan du byta ut Gemini chat model-noderna mot en OpenAI Chat Model-nod och behålla samma agentprompter. Du kan också strama upp filtreringen genom att lägga till fler regler i koden som rensar resultaten, så att du exkluderar vissa sajter eller nyckelord.
Oftast handlar det om behörigheter eller att kalkylarket har ändrats. Återanslut Google Sheets-autentiseringen i n8n, bekräfta att målfilen fortfarande är delad med det Google-kontot och säkerställ att dina rubriknamn matchar exakt det arbetsflödet förväntar sig. Om arbetsflödet inte hittar rätt kolumner kan append-steget ge fel även om resten av körningen ser okej ut.
I praktiken hanterar den batchar om 50 leads utan problem, och du kan köra fler batchar direkt efter varandra.
Ofta, ja, eftersom det här inte är en enkel “trigger → action”-zap. Du har förgrenad logik (kontaktssida-spår vs. LinkedIn-berikning), batchning med fördröjningar och flera AI-beslut, vilket snabbt blir både krångligt och dyrt i verktyg som prissätter per task. n8n ger dig också möjligheten att self-hosta, så listbyggande i hög volym inte blir en oväntad faktura. Zapier eller Make kan fortfarande vara bra om du bara vill ha ett lätt berikningssteg efter att ett formulär skickats in, men för fler-stegs research över webbplatser och LinkedIn är n8n oftast en bättre matchning. Om du vill ha en second opinion innan du bygger, prata med en automationsexpert.
När det här väl rullar slutar ditt kalkylark att vara en kyrkogård av halvfärdig research. Du får lead-listor som du faktiskt kan göra outreach från.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.