Dina kalla mejl misslyckas inte för att ditt erbjudande är dåligt. De misslyckas för att ”personaliseringen” är ytlig, stressad och ärligt talat ser automatiserad ut (även när du gjorde jobbet manuellt).
Den här Apify icebreakers-setupen träffar byråägare hårdast, men outbound-SDR:er och konsulter som driver sin egen pipeline känner av den också. Resultatet är enkelt: icebreakers i flera rader i Google Sheets som faktiskt låter pålästa, så att du kan skicka färre mejl och ändå boka fler svar.
Nedan hittar du workflowet, vad det ersätter och hur det förvandlar en lista med Apollo-sökningar till öppningar som är klara att skicka – utan att du behöver leva i en djungel av webbläsarflikar.
Så fungerar den här automatiseringen
Se hur det här löser problemet:
n8n Workflow Template: Google Sheets + Apify: icebreakers för cold email
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Remove Duplicate URLs", pos: "b", h: 48 }
n1@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
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/html.dark.svg' width='40' height='40' /></div><br/>HTML"]
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter", pos: "b", h: 48 }
n5["<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/>Request web page for URL"]
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/markdown.dark.svg' width='40' height='40' /></div><br/>Markdown"]
n7@{ icon: "mdi:robot", form: "rounded", label: "Summarize Website Page", pos: "b", h: 48 }
n8@{ icon: "mdi:cog", form: "rounded", label: "Limit", 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/>Scrape Home"]
n10@{ icon: "mdi:cog", form: "rounded", label: "Aggregate", pos: "b", h: 48 }
n11@{ icon: "mdi:robot", form: "rounded", label: "Generate Multiline Icebreaker", pos: "b", h: 48 }
n12@{ icon: "mdi:database", form: "rounded", label: "Add Row", 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/>Call Apify Scraper"]
n14@{ icon: "mdi:database", form: "rounded", label: "Get Search URL", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Only Websites & Emails", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n18["<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/>Code"]
n18 --> n0
n2 --> n15
n8 --> n5
n4 --> n18
n12 --> n17
n6 --> n7
n10 --> n11
n3 --> n4
n15 --> n17
n9 --> n2
n14 --> n13
n17 --> n3
n13 --> n16
n0 --> n8
n16 --> n9
n7 --> n10
n5 --> n6
n11 --> n12
n1 --> n14
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 n1 trigger
class n7,n11 ai
class n4,n16 decision
class n12,n14 database
class n5,n9,n13 api
class n18 code
classDef customIcon fill:none,stroke:none
class n2,n5,n6,n9,n13,n18 customIcon
Utmaningen: personalisering som inte går att skala
Bra personalisering i kalla mejl kräver riktig research. Du klickar in på sajten, skummar startsidan, letar efter ”Om oss”, scannar tjänster, letar bevis och referenser, och försöker sedan komprimera allt till två rader som inte låter som en mall. Gör du det 30 gånger blir hjärnan mos. Gör du det 300 gånger blir det omöjligt att hålla jämn kvalitet. Det värsta är den dolda kostnaden: du lägger din bästa energi på repetitivt grävande, inte på budskap, erbjudande eller uppföljningsstrategi.
Det går snabbt utför. Här är var det oftast fallerar i verkligheten.
- Research blir till fliksamlande, och du missar ändå intressanta detaljer som ligger gömda på interna sidor.
- Du skriver öppningar i stil med ”Gillade er webbplats” för att tiden är slut, så svarsfrekvensen ser ut som standardkampanjer (1–2% en bra dag).
- Att copy-pasta leads till ett ark skapar fält som inte matchar, duplicerade rader och ibland ett mejl som går till fel person.
- Att skala betyder att anställa hjälp för manuell research, vilket skapar upplärningskostnad och kraftigt varierande kvalitet.
Lösningen: djup webbplatsresearch → icebreakers i Sheets
Det här workflowet börjar med Apollo-sök-URL:er som lagras i Google Sheets, hämtar matchande leads via Apify och filtrerar bort lågkvalitativa rader (ingen e-post, ingen åtkomlig webbplats, skräpresultat). Sedan gör det det du annars gör manuellt, men med mer uthållighet: det hämtar prospektets startsidas HTML, extraherar interna länkar, rensar och normaliserar URL:erna och besöker ett begränsat antal sidor så att det inte belastar sajten. Varje sida konverteras till läsbar markdown, sammanfattas med OpenAI och kombineras till en enda ”prospektprofil”. Till sist använder workflowet en mer strukturerad prompt för att skriva en icebreaker i flera rader som refererar till specifika, icke-uppenbara detaljer. Den färdiga öppningen hamnar tillbaka i din Google Sheets-flik ”Leads” bredvid kontaktposten.
Workflowet startar när du kör det i n8n och det läser arket ”Search URLs”. Apify returnerar leaddata, sedan skrapas och sammanfattas webbplatsen sida för sida. När sammanfattningarna slås ihop genererar OpenAI den slutliga multiline_icebreaker och n8n lägger till den i ditt ark.
Vad som förändras: före vs. efter
| Vad detta eliminerar | Effekten du kommer att se |
|---|---|
|
|
Effekt i verkligheten
Säg att du förbereder 100 leads för en outbound-kampanj. Manuellt kanske du lägger cirka 10 minuter per lead på att researcha sajten och skriva en vettig öppning, vilket blir ungefär 16 timmar. Med det här workflowet klistrar du in en Apollo-sök-URL i Google Sheets, kör n8n och låter det processa i batchar. Även om skrapning och AI-generering tar ett par timmars väntetid i bakgrunden, brukar din aktiva tid landa på cirka 30 minuter för setup, stickprovskontroller och sista justeringar.
Krav
- n8n-instans (testa n8n Cloud gratis)
- Självhostningsalternativ om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra sök-URL:er och resultat.
- Apify för att extrahera Apollo-leads i skala.
- OpenAI API-nyckel (hämta den i din OpenAI-dashboard under API keys).
Kunskapsnivå: Avancerad. Du kommer att koppla credentials, mappa kolumner i arket och finjustera prompts och skrapningsgränser efter din volym.
Behöver du hjälp att implementera detta? Prata med en automationsspecialist (gratis 15-minuters konsultation).
Workflow-flödet
Google Sheets startar allt. Du lagrar en Apollo-sök-URL per rad i en flik som heter ”Search URLs”, sedan hämtar workflowet dessa URL:er och kör motsvarande sökningar automatiskt.
Apify samlar leads och n8n filtrerar skräpet. Apify-HTTP-anropet returnerar kontaktdata i bulk, och workflowet behåller bara prospekt som har en e-postadress och en webbplats som är värd att försöka skrapa.
Webbplatsen skrapas över flera sidor. n8n hämtar startsidans HTML, extraherar interna länkar, normaliserar relativa URL:er, tar bort dubbletter och begränsar antalet sidor som ska hämtas så att du inte triggar blockeringar.
OpenAI sammanfattar och skriver sedan icebreakern. Varje sida blir markdown, sammanfattas, och dessa sammanfattningar slås ihop till ett enda kontextblock som den slutliga prompten använder för att skriva en öppning i flera rader.
Google Sheets tar emot slutresultatet. Workflowet lägger till en rad i fliken ”Leads” med kontaktfälten plus multiline_icebreaker, redo för ditt outreach-verktyg eller en granskningsrunda.
Du kan enkelt justera sidbegränsningen och icebreaker-mallen så att den matchar din marknad. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: Konfigurera den manuella triggern
Det här arbetsflödet startar manuellt och hämtar sedan sök-URL:er från Google Sheets.
- Lägg till noden Manual Run Trigger som startpunkt.
- Bekräfta att körflödet börjar: Manual Run Trigger → Retrieve Search Links.
Steg 2: Anslut Google Sheets
Både indatakällan och utdata-destinationen använder Google Sheets.
- Öppna Retrieve Search Links och ställ in Document på
Deep Icebreaker Generatoroch Sheet påSearch URLs. - Öppna Append to Sheet och ställ in Operation på
append, Document påMultiline Icebreaker Generatoroch Sheet påLeads. - Credential Required: Anslut era Google Sheets-inloggningsuppgifter i både Retrieve Search Links och Append to Sheet.
⚠️ Vanlig fallgrop: Om Google Sheets-inloggningsuppgifterna saknas kommer både indata- och utdata-stegen att misslyckas även om noderna är korrekt konfigurerade.
Steg 3: Ställ in extrahering och lead-mappning
I det här steget berikas varje sök-URL med Apify, resultaten filtreras och webbplatslänkar extraheras för senare bearbetning.
- I Run Apify Extraction, ställ in URL på
https://api.apify.com/v2/acts/jljBwyyQakqrL1wae/run-sync-get-dataset-itemsoch Method påPOST. - Ställ in JSON Body på
={ "getPersonalEmails": true, "getWorkEmails": true, "totalRecords": 500, "url": "{{ $json.URL }}" }. - I Run Apify Extraction, uppdatera värdet för Authorization-headern till er token (ersätt
Bearer [CONFIGURE_YOUR_TOKEN]). - I Filter Sites and Emails, behåll de två kontrollerna som kräver att
={{ $json.organization.website_url }}och={{ $json.email }}finns. - I Fetch Homepage HTML, ställ in URL på
={{ $json.organization.website_url }}. - I Extract Link Elements, använd CSS Selector
amed Attributehrefoch aktivera Return Array. - I Map Lead Fields, mappa fält med uttryck som
={{ $('Filter Sites and Emails').item.json.first_name }}och={{ $json.links }}.
Tips: Kedjan följer Retrieve Search Links → Run Apify Extraction → Filter Sites and Emails → Fetch Homepage HTML → Extract Link Elements → Map Lead Fields.
Steg 4: Konfigurera utdata-/åtgärdsnoder
Det här arbetsflödet skriver den slutliga icebreaker-utmatningen tillbaka till Google Sheets.
- I Append to Sheet, mappa kolumner till fälten med uttryck som
={{ $('Map Lead Fields').item.json.email }}och={{ $json.message.content.icebreaker }}. - Säkerställ att Use Append är aktiverat så att nya rader läggs till utan att skriva över befintlig data.
Steg 5: Ställ in sidbearbetning och AI-sammanfattning
Det här avsnittet expanderar länkar, normaliserar sökvägar, hämtar sidinnehåll och genererar AI-sammanfattningar och icebreakers.
- Använd Batch Processor för att iterera genom leads och skicka sedan länkar till Expand Link List med Field to Split Out
links. - I Filter Relative Links, behåll endast länkar som startsWith
/med={{ $json.links }}. - I Normalize URL Paths, klistra in den angivna JavaScript-koden för att normalisera relativa och absoluta sökvägar.
- Skicka resultaten genom Deduplicate Links och Cap Page Requests med Max Items inställt på
3. - I Request Linked Page, ställ in URL på
={{ $('Batch Processor').item.json.website_url }}{{ $json.links }}. - I Convert to Markdown, ställ in HTML på
={{ $json.data ? $json.data : ".empty" }} - I Summarize Page Content, behåll Model som
GPT-4.1och ha JSON Output aktiverat. - I Combine Abstracts, aggregera fältet
message.content.abstractför sammanfattningar över flera sidor. - I Create Email Icebreaker, behåll Model som
GPT-4.1och Temperature på0.5. - Använd prompt-uttrycket
=Profile: {{ $('Batch Processor').item.json.first_name }} {{ $('Batch Processor').item.json.last_name }} {{ $('Batch Processor').item.json.headline }} Website: {{ $json.abstract.join("/n") }}för att skapa personaliserade icebreakers. - Credential Required: Anslut era OpenAI-inloggningsuppgifter i både Summarize Page Content och Create Email Icebreaker.
⚠️ Vanlig fallgrop: Om OpenAI-inloggningsuppgifter inte är inställda på AI-noderna kommer arbetsflödet att stoppa innan resultaten skrivs till Google Sheets.
Steg 6: Testa och aktivera ert arbetsflöde
Kör ett manuellt test för att validera flödet från indata-URL:er till genererade icebreakers och utdatarrader.
- Klicka på Execute Workflow med start från Manual Run Trigger.
- Verifiera att Retrieve Search Links hämtar URL:er och att Append to Sheet skriver en ny rad med
multiline_icebreaker. - Kontrollera att Summarize Page Content returnerar JSON med ett
abstract-fält och att Create Email Icebreaker returnerar JSON med etticebreaker-fält. - När ni är nöjda, ställ arbetsflödet till Active för att använda det i produktion.
Se upp med
- Google Sheets-credentials kan gå ut eller kräva specifika behörigheter. Om saker slutar fungera, kontrollera först status för credential-anslutningen i n8n och åtkomsten i ditt Google-konto.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre fram fallerar på tomma svar.
- Standardprompts i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du att redigera output för alltid.
Vanliga frågor
Cirka 3–4 timmar om dina konton och arket är redo.
Ja, men det är inte ”klicka och klart”. Du kopplar credentials, säkerställer att kolumnerna i Google Sheets matchar och testar sedan först med en liten batch.
Ja. n8n har ett gratis självhostat alternativ och en gratis testperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna in kostnader för OpenAI API och din Apify-plan.
Två alternativ: n8n Cloud (hanterat, enklast setup) eller självhosting på en VPS. För självhosting är Hostinger VPS prisvärd och hanterar n8n bra. Självhosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Du kan justera hur ”djupt” researchen går genom att ändra sidtaket i steget Cap Page Requests och skärpa filtreringen i Filter Sites and Emails. Om du vill ha andra skrivstilar kan du justera prompten i Create Email Icebreaker och behålla några exempelöppningar i prompten så att tonaliteten blir konsekvent. Många team anpassar också steget Map Lead Fields för att lägga till extra kolumner som bransch, ICP-segment eller kampanjnamn.
Oftast beror det på utgången Google OAuth-åtkomst eller att fel Google-konto är anslutet. Koppla om Google Sheets-credential i n8n och bekräfta sedan att spreadsheet-ID:t är korrekt i varje Sheets-nod. Om workflowet kan läsa ”Search URLs” men inte kan skriva till ”Leads” handlar det ofta om behörigheter på filen (särskilt när flera personer delar arket).
Den är byggd för att hantera hundratals prospekt per körning med batching och sidtak.
För djup skrapning plus AI-generering i flera steg är n8n oftast bättre, eftersom du kan förgrena, loopa igenom sidor, slå ihop sammanfattningar och lägga till skydd utan att betala extra för varje ”avancerat” steg. Du får också möjligheten att självhosta, vilket spelar roll när du börjar processa hundratals leads regelbundet. Zapier eller Make kan fungera, men den här typen av berikning över flera sidor blir snabbt klumpig, och kostnaderna kan dra iväg när du lägger till iterationer och filter. Om du bara behöver en enkel öppning från en sida kan de vara snabbare att komma igång med. Prata med en automationsspecialist om du är osäker på vad som passar.
Det är så här skalad personalisering ska kännas: sätt upp systemet en gång och lägg sedan tiden på erbjudanden och uppföljningar i stället för webbläsarresearch.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.