Du börjar med ”bara en snabb lista med leads”. Sedan sitter du plötsligt upp till halsen i flikar: LinkedIn-profiler, företagssidor, Crunchbase, anteckningar och ett halvskrivet mejlutkast som du inte litar på.
Det är här LinkedIn e-postautomatisering ger effekt. En growth marketer behöver volym utan att låta generisk. En säljchef behöver kvalitetskontroll. Och en mindre byråägare behöver något repeterbart som inte faller isär när teamet får mycket att göra.
Det här arbetsflödet hämtar berikningsdata, skriver ett personligt kallt mejl och behåller sedan bara de utkast som går igenom en AI-”domare”. Du får se vad det gör, vad du behöver och hur du får det att passa din outreach-process.
Så fungerar den här automatiseringen
Hela n8n-flödet, från trigger till slutligt resultat:
n8n Workflow Template: LinkedIn + google sheets: godkända cold email-utkast
flowchart LR
subgraph sg0["When clicking ‘Execute workflow’ Flow"]
direction LR
n8@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n11@{ icon: "mdi:cog", form: "rounded", label: "Get row(s)1", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Linkedin_URL"]
n14@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "RapidAPI-Key", pos: "b", h: 48 }
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/>results"]
n17@{ icon: "mdi:cog", form: "rounded", label: "Update row(s)1", pos: "b", h: 48 }
n18@{ icon: "mdi:cog", form: "rounded", label: "Wait1", pos: "b", h: 48 }
n19["<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/>results1"]
n20@{ icon: "mdi:cog", form: "rounded", label: "Update row(s)2", pos: "b", h: 48 }
n21["<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_URL_COMPANY"]
n22@{ icon: "mdi:cog", form: "rounded", label: "Wait2", pos: "b", h: 48 }
n23["<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/>results2"]
n24@{ icon: "mdi:cog", form: "rounded", label: "Update row(s)3", pos: "b", h: 48 }
n25["<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/>Crunchbase_URL"]
n26@{ icon: "mdi:cog", form: "rounded", label: "Call 'My workflow'", pos: "b", h: 48 }
n14 --> n16
n18 --> n19
n22 --> n23
n16 --> n17
n19 --> n20
n23 --> n24
n11 --> n13
n11 --> n21
n11 --> n25
n11 --> n26
n13 --> n14
n15 --> n11
n25 --> n22
n21 --> n18
n8 --> n15
end
subgraph sg1["When Executed by Another Workflow Flow"]
direction LR
n0@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n1@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser1", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Main Loop", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Approval Route", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "Agent One", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Email Context", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "Judge Agent", pos: "b", h: 48 }
n7@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model", pos: "b", h: 48 }
n9@{ icon: "mdi:cog", form: "rounded", label: "Get row(s)", pos: "b", h: 48 }
n10@{ icon: "mdi:cog", form: "rounded", label: "Update row(s)", pos: "b", h: 48 }
n12@{ icon: "mdi:play-circle", form: "rounded", label: "When Executed by Another Wor..", pos: "b", h: 48 }
n4 --> n5
n2 --> n4
n9 --> n2
n6 --> n3
n6 --> n2
n5 --> n6
n10 --> n2
n3 --> n10
n3 --> n9
n7 -.-> n6
n7 -.-> n4
n0 -.-> n4
n1 -.-> n6
n12 --> n9
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 n8,n12 trigger
class n0,n1,n4,n6 ai
class n7 aiModel
class n3 decision
class n13,n16,n19,n21,n23,n25 api
classDef customIcon fill:none,stroke:none
class n13,n16,n19,n21,n23,n25 customIcon
Problemet: kall outreach dör i research-och-omskrivningsloopen
Personliga kalla mejl ska vara ”snabba”. I praktiken är research en kostnad du betalar för varenda meddelande. Du kollar ett leads LinkedIn för att hitta något verkligt att nämna, öppnar företagssidan för att förstå vad de gör och checkar sedan Crunchbase för att bekräfta storlek, finansiering eller marknad. Efter det måste du fortfarande skriva. Och eftersom du gör det snabbt börjar du ifrågasätta utkastet, skriver om det och glömmer allt du nyss lärde dig i samma stund som du går vidare till nästa lead. Det är dränerande, och fel smyger sig in när du försöker jobba fort.
Det blir snabbt mycket. Här är var det faller isär för de flesta team.
- Research tar kanske 10 minuter per lead, och den är utspridd över flikar som du inte fångar upp strukturerat.
- Copy-paste-detaljer blir förvrängda, så namn, titlar och företagskontext hamnar lite fel.
- Kvaliteten på utkasten varierar kraftigt, vilket gör att du antingen spammar folk eller lägger kvällen på att redigera ”mallar”.
- Det finns ingen konsekvent godkännandeport, så tveksamma utkast slinker ändå in i sekvenser när det blir stressigt.
Lösningen: berika leads, skriv utkast och skriv bara tillbaka godkännanden
Det här n8n-flödet utgår från din leadlista i Google Sheets (med n8n:s ”get rows”-upplägg i Data Table-stil) och hittar rader som inte har utkastats ännu. För varje lead kör det berikningsanrop via en RapidAPI-baserad scraper för att hämta data från LinkedIn-profilen, LinkedIn-företagsinfo och Crunchbase-detaljer. Det sparar rå JSON tillbaka på samma rad, så att du alltid kan se vad utkastet baserades på. Sedan skriver en AI-agent (med en Gemini chat model-node) en kort, personlig ämnesrad och mejltext med dina leadfält plus ett ”OM MIG”-block som representerar ditt erbjudande och din ton. Till sist agerar en andra AI-agent domare och godkänner eller avslår varje utkast. Endast godkända utkast skrivs tillbaka till ditt ark.
Flödet startas manuellt i dag, men är byggt för schemaläggning (dagligen, timvis, vad som passar). Berikningen kör parallellt med vänt/pollning så att scrapern hinner bli klar, och därefter sker utkast och QA som en tydlig överlämning. Ditt kalkylark blir en enda sanningskälla, inte en kyrkogård av halvfärdigt arbete.
Det 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 tar fram outreach för 30 nya leads varje vecka. Manuellt kanske du lägger cirka 10 minuter på research (LinkedIn + företag + Crunchbase) och ytterligare 5 minuter på att skriva, alltså runt 15 minuter per lead. Det blir ungefär 7 timmar i veckan. Med det här flödet tar det några minuter att lägga in leads i arket, och sedan berikar, skriver och bedömer automatiseringen i bakgrunden. Du granskar fortfarande de godkända resultaten, men grovjobbet är borta, så de flesta team får tillbaka flera timmar varje vecka.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra leads och utkast
- RapidAPI för berikningsanropen till scrapern
- Google Gemini API-nyckel (hämta den från Google AI Studio)
Svårighetsnivå: Medel. Du kopplar in credentials, mappar kolumner i arket och justerar ett par prompts på ett säkert sätt.
Vill du inte sätta upp detta själv? Prata med en automationsspecialist (gratis 15-minuters konsultation).
Så fungerar det
Körtrigger (manuell nu, schemalägg senare). Du startar det manuellt, eller så byter du till en Schedule Trigger så att det kör varje morgon och betar av dina ”väntande” leads automatiskt.
Hämta väntande rader från Google Sheets. Flödet läser rader där ämnesraden är tom och hanterar dem i batchar så att du inte överbelastar dina beriknings- eller AI-kvoter.
Berika varje lead parallellt. Det skickar HTTP-anrop för LinkedIn-profil, LinkedIn-företag och Crunchbase-företagsdata, väntar på att scraper-jobben blir klara och sparar sedan returnerad JSON tillbaka i din arkrad.
Skriv utkast, bedöm och skriv tillbaka godkända mejl. En AI-agent tar fram ett strukturerat resultat för ämne/brödtext. En andra agent granskar och returnerar GODKÄND eller REVIDERA. Godkända utkast skrivs till raden; avvisade hoppas över så att ditt ark hålls strukturerat.
Du kan enkelt justera godkännandereglerna så att de blir striktare (eller mer förlåtande) 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
Konfigurera startpunkterna som drar igång enrichment och generering av e-post.
- Öppna Manual Launch Trigger och behåll den som den primära manuella startnoden.
- Öppna Triggered by Parent Flow och ställ in Input Source till
passthroughför att tillåta att uppströmsarbetsflöden triggar detta. - Bekräfta körordningen: Manual Launch Trigger → Set RapidAPI Token och Triggered by Parent Flow → Retrieve Pending Rows.
Tips: Använd Manual Launch Trigger för testning och byt sedan till Triggered by Parent Flow för orkestrering i produktion.
Steg 2: koppla datatabeller
Konfigurera datatabellnoderna som läser lead-rader och lagrar enrichment samt e-postresultat.
- I Retrieve Pending Rows ställer ni in Operation till
getoch verifierar att Data Table äremail_linkedin_list. Bekräfta filtervillkoret: email_subject ärisEmpty. - I Fetch Enrichment Rows ställer ni in Operation till
getoch använder samma Data Tableemail_linkedin_listmed villkoret email_subject ärisEmpty. - I Store Profile Data ställer ni in Operation till
updateoch mappar linkedin_profile_scrape till{{ $json.results.toJsonString() }}med filtret email ={{ $('Fetch Enrichment Rows').item.json.email }}. - I Store Company Data och Store Crunchbase Data behåller ni Operation som
updateoch använder samma e-postfilter{{ $('Fetch Enrichment Rows').item.json.email }}. - I Write Email Results ställer ni in Operation till
updateoch mappar email_body till{{ $('Assemble Email Context').item.json.email_content }}och email_subject till{{ $('Assemble Email Context').item.json.email_subject }}.
⚠️ Vanlig fallgrop: Säkerställ att Data Table ID för alla dataTable-noder pekar på samma tabell (email_linkedin_list), annars kommer rader inte att matchas via e-post.
Steg 3: koppla RapidAPI-enrichmentförfrågningar
Ange RapidAPI-nyckeln och konfigurera parallella enrichment-förfrågningar, fördröjningar och hämtning av resultat.
- I Set RapidAPI Token ställer ni in RapidAPI-Key till ert nyckelvärde och ersätter
[CONFIGURE_YOUR_API_KEY]. - Bekräfta att Fetch Enrichment Rows tar emot input från Set RapidAPI Token.
- Fetch Enrichment Rows skickar output parallellt till LinkedIn Profile Request och LinkedIn Company Request och Crunchbase Request och Run Sub-Workflow (Configure Required).
- I LinkedIn Profile Request ställer ni in URL till
https://cold-outreach-enrichment-scraper.p.rapidapi.com/company_urloch använder Query{{ $json.Linkedin_URL }}med header{{ $('Set RapidAPI Token').item.json['RapidAPI-Key'] }}. - I LinkedIn Company Request ställer ni in URL till
https://cold-outreach-enrichment-scraper.p.rapidapi.com/company_urloch använder Query{{ $json.company_linkedin }}med header{{ $('Set RapidAPI Token').item.json['RapidAPI-Key'] }}. - I Crunchbase Request ställer ni in URL till
https://cold-outreach-enrichment-scraper.p.rapidapi.com/url_searchoch använder Query{{ $json.Crunchbase_URL }}med header{{ $('Set RapidAPI Token').item.json['RapidAPI-Key'] }}. - I Delay Profile Fetch, Delay Company Fetch och Delay Crunchbase Fetch behåller ni Unit inställd på
minutesoch justerar den faktiska fördröjningen vid behov. - I Profile Fetch Results, Company Fetch Results och Crunchbase Fetch Results ställer ni in URL till
https://cold-outreach-enrichment-scraper.p.rapidapi.com/resultsoch ställer in task_id till{{ $('LinkedIn Profile Request').item.json.task_id }},{{ $('LinkedIn Company Request').item.json.task_id }}respektive{{ $('Crunchbase Request').item.json.task_id }}. - I Run Sub-Workflow (Configure Required) väljer ni underarbetsflödet i Workflow och avgör om ni vill behålla Wait For Sub-Workflow som
false.
⚠️ Vanlig fallgrop: Om Set RapidAPI Token lämnas som [CONFIGURE_YOUR_API_KEY] kommer alla HTTP-förfrågningar att misslyckas med auktoriseringsfel.
Steg 4: konfigurera AI-generering av e-post
Konfigurera AI-agenten och strukturerade parsers för att generera personaliserat outreach-innehåll.
- I Personalized Outreach Writer behåller ni Prompt Type som
defineoch säkerställer att prompten innehåller enrichment-placeholders som{{ $json.First_name }},{{ $json.Company_Name }}och{{ $json.linkedin_profile_scrape }}. - Koppla Structured Parse Schema till Personalized Outreach Writer så att agenten output:ar JSON med
email_subjectochemail_content. - I Assemble Email Context mappar ni fält till uttryck: email_subject =
{{ $json.output.email_subject }}, email_content ={{ $json.output.email_content }}och email ={{ $('Batch Iteration').item.json.email }}. - Koppla Gemini Chat Engine som språkmodell för Personalized Outreach Writer.
Inloggningsuppgifter krävs: Koppla era googlePalmApi-credentials i Gemini Chat Engine. Parsern Structured Parse Schema och Approval Schema Parser tar inte credentials direkt—lägg dem i Gemini Chat Engine.
Steg 5: konfigurera granskningsrouting och batchflöde
Granska e-post, godkänn eller revidera och hantera loopning genom batcher.
- I Quality Review Agent behåller ni den definierade prompten och säkerställer att den tar emot
{{ $json.email_subject }}och{{ $json.email_content }}som input. - Koppla Approval Schema Parser till Quality Review Agent för att säkerställa strukturerade svar.
- I Approval Decision ställer ni in villkoret att kontrollera att Left Value
{{ $json.output }}innehållerAPPROVED. - Bekräfta flödet: Quality Review Agent → Approval Decision; godkända e-postmeddelanden går till Write Email Results medan icke godkänd output går tillbaka till Retrieve Pending Rows för ombearbetning.
- Säkerställ att Batch Iteration tar emot från Retrieve Pending Rows och loopar tillbaka från Write Email Results för nästa rad.
⚠️ Vanlig fallgrop: Om Approval Decision inte matchar APPROVED kommer arbetsflödet att fortsätta cykla. Verifiera approvals-schemat och agentens output-formatering.
Steg 6: konfigurera uppdateringar av output
Skriv tillbaka slutgiltigt e-postämne och brödtext till datatabellen när det är godkänt.
- I Write Email Results säkerställer ni att email_body mappar till
{{ $('Assemble Email Context').item.json.email_content }}och att email_subject mappar till{{ $('Assemble Email Context').item.json.email_subject }}. - Bekräfta att uppdateringsfiltret använder email =
{{ $('Batch Iteration').item.json.email }}så att endast rätt rad uppdateras.
Tips: Använd den inbyggda tabellvyn för att verifiera att fälten email_subject och email_body fylls i efter en godkänd körning.
Steg 7: testa och aktivera ert arbetsflöde
Kör ett kontrollerat test för att validera enrichment, AI-output och uppdateringar i datatabellen.
- Klicka på Execute Workflow och starta med Manual Launch Trigger för att köra ett test på en enda rad.
- Verifiera att enrichment-data lagras i Store Profile Data, Store Company Data och Store Crunchbase Data, och bekräfta sedan AI-output i Write Email Results.
- En lyckad körning visar nya värden i email_subject och email_body i tabellen
email_linkedin_list. - När allt är validerat aktiverar ni arbetsflödet och triggar det från parent-arbetsflödet med Triggered by Parent Flow.
Vanliga fallgropar
- RapidAPI-credentials kan löpa ut eller kräva specifika behörigheter. Om det skapar fel, kontrollera först din prenumeration i RapidAPI-dashboarden och credential-värdet som är sparat i n8n.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströms noder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din varumärkeston tidigt, annars kommer du redigera output för evigt.
Vanliga frågor
Cirka 45 minuter om ditt Sheet och dina API-nycklar är klara.
Nej. Du mappar främst fält från Google Sheets och klistrar in API-credentials. Den enda ”tekniska” delen är att vara noggrann med kolumnnamn och prompter.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer startar på 20 USD/månad för högre volym. Du behöver också räkna med kostnader för RapidAPI-berikning och Gemini API-användning för skribent + domare.
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 serveradministration.
Ja, och det är en smart uppgradering om du vill ha human-in-the-loop. Lägg till ett Slack-meddelande efter att utkastet har skapats (direkt efter outreach-skribenten) och inkludera ämne/brödtext plus en länk till raden. Routa sedan bara vidare till ”Write Email Results” när en Slack-interaktion (eller en webhook-callback) returnerar ”approve”. Du kan behålla AI-domaren också, så att Slack bara ser de bästa utkasten.
Oftast är det en saknad eller utgången RapidAPI-nyckel i steget ”Set RapidAPI Token”. Dubbelkolla att nyckeln matchar scraper-API:t du prenumererar på och att din plan är aktiv. Om det fungerade en gång och sedan slutade är rate limits en vanlig orsak, särskilt när du ökar batchstorleken. Bekräfta också att host-värdet pekar på rätt berikningsscraper.
Om du self-hostar n8n finns ingen körningsgräns, men genomströmningen beror på din server och väntetiderna i scrapern. I n8n Cloud beror gränserna på din plan, och det praktiska taket är oftast dina RapidAPI- och Gemini-kvoter. I verklig användning kör många team detta i batchar om 10–50 leads per körning för att hålla kostnaderna förutsägbara och undvika rate limiting.
Ofta, ja, eftersom det här flödet har batchning, villkorsrouting, vänt/pollning och ett QA-upplägg med två agenter som blir klumpigt (och dyrt) i enklare verktyg. n8n gör det också enklare att spara rå JSON-berikning tillbaka till raden, vilket är bra för spårbarhet. Nackdelen är uppsättningstid: du lägger lite mer tid på konfigurering i början. Om din process bara är ”ny rad → skicka mejl” kan Zapier eller Make fungera fint. Om du vill ha en godkännandeport med domare är n8n bättre. Prata med en automationsspecialist om du är osäker på vad som passar.
När detta väl rullar slutar ditt kalkylark vara ”en lista med leads” och blir en kontrollerad pipeline för utkast. Du får bort det repetitiva jobbet från bordet och håller kvalitetsnivån där den ska vara.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.