Du får äntligen en hyfsad leadlista… och sen tappar du en hel eftermiddag på att städa den, leta LinkedIn-kontext och gissa vilka mejladresser som kommer studsa. Det är inte ”lead gen”. Det är att vara barnvakt åt ett kalkylark.
B2B-marknadsförare känner igen det här när kampanjdeadlines närmar sig. En grundare som försöker hinna med outbound mellan produktsamtal känner det också. Och en säljchef som vill ha felfria pipeline-inputs kommer definitivt att märka röran. Den här Apollo Sheets enrichment-automationen gör råa Apollo-leads till rader som är klara att använda, komplett med LinkedIn-insikter.
Nedan ser du vad arbetsflödet gör, vad du får ut av det och de praktiska detaljerna som är viktiga innan du lägger tid på att sätta upp det.
Så fungerar automatiseringen
Hela n8n-arbetsflödet, från trigger till slutligt resultat:
n8n Workflow Template: Apollo.io till Google Sheets: berikade LinkedIn-leads
flowchart LR
subgraph sg0["Google Sheets Flow"]
direction LR
n43@{ icon: "mdi:play-circle", form: "rounded", label: "Google Sheets Trigger6", pos: "b", h: 48 }
n44@{ icon: "mdi:database", form: "rounded", label: "Get Pending About and Posts ..", pos: "b", h: 48 }
n45["<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/>Clean Profile Data1"]
n46["<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/>Stringify Data2"]
n47@{ icon: "mdi:robot", form: "rounded", label: "AI Profile Summarizer1", pos: "b", h: 48 }
n48@{ icon: "mdi:database", form: "rounded", label: "Update Profile Summary1", pos: "b", h: 48 }
n49["<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/>Stringify Data3"]
n50@{ icon: "mdi:robot", form: "rounded", label: "Posts AI Summarizer1", pos: "b", h: 48 }
n51["<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/>Get About Profile2"]
n52["<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/>Clean Profile Data2"]
n53["<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"]
n54@{ icon: "mdi:database", form: "rounded", label: "update status to failed1", pos: "b", h: 48 }
n53 --> n48
n46 --> n47
n49 --> n50
n51 --> n45
n51 --> n52
n51 --> n54
n45 --> n46
n52 --> n49
n50 --> n53
n47 --> n53
n43 --> n44
n44 --> n51
end
subgraph sg1["Google Sheets Flow"]
direction LR
n15@{ icon: "mdi:play-circle", form: "rounded", label: "Google Sheets Trigger3", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Get About Profile"]
n18@{ icon: "mdi:database", form: "rounded", label: "Get Pending About and Posts ..", 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/code.svg' width='40' height='40' /></div><br/>Clean Profile Data"]
n32@{ icon: "mdi:robot", form: "rounded", label: "AI Profile Summarizer", pos: "b", h: 48 }
n33@{ icon: "mdi:database", form: "rounded", label: "Update Profile Summary", pos: "b", h: 48 }
n38@{ icon: "mdi:database", form: "rounded", label: "update status to failed", pos: "b", h: 48 }
n40["<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/>Stringify Profile Data1"]
n17 --> n19
n19 --> n40
n19 --> n38
n32 --> n33
n15 --> n18
n40 --> n32
n18 --> n17
end
subgraph sg2["Google Sheets Flow"]
direction LR
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/>Get Profile Posts"]
n20@{ icon: "mdi:play-circle", form: "rounded", label: "Google Sheets Trigger4", pos: "b", h: 48 }
n21@{ icon: "mdi:database", form: "rounded", label: "Get Pending About and Posts ..", pos: "b", h: 48 }
n22["<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/>Clean Posts Data"]
n31@{ icon: "mdi:robot", form: "rounded", label: "Posts AI Summarizer", pos: "b", h: 48 }
n34@{ icon: "mdi:database", form: "rounded", label: "Update Posts Summary", pos: "b", h: 48 }
n39@{ icon: "mdi:database", form: "rounded", label: "Google Sheets", pos: "b", h: 48 }
n41["<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/>Stringify Posts Data"]
n22 --> n41
n22 --> n39
n16 --> n22
n31 --> n34
n41 --> n31
n20 --> n21
n21 --> n16
end
subgraph sg3["Google Sheets Flow"]
direction LR
n4@{ icon: "mdi:play-circle", form: "rounded", label: "Google Sheets Trigger2", pos: "b", h: 48 }
n9@{ icon: "mdi:database", form: "rounded", label: "Add Email Address", pos: "b", h: 48 }
n10@{ icon: "mdi:database", form: "rounded", label: "Mark Invalid Email", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Email from Apollo"]
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/>Confirm Email Validity"]
n14@{ icon: "mdi:database", form: "rounded", label: "Get Pending Email Statuses", pos: "b", h: 48 }
n55@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If email is valid", pos: "b", h: 48 }
n55 --> n9
n55 --> n10
n12 --> n13
n13 --> n55
n4 --> n14
n14 --> n12
end
subgraph sg4["On form submission Flow"]
direction LR
n0["<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/form.svg' width='40' height='40' /></div><br/>On form submission"]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Clean Data", pos: "b", h: 48 }
n6@{ icon: "mdi:database", form: "rounded", label: "Add Leads to Google Sheet", pos: "b", h: 48 }
n42["<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/>Generate Leads with Apollo.io"]
n1 --> n5
n5 --> n6
n0 --> n42
n42 --> n1
end
subgraph sg5["Google Sheets Flow"]
direction LR
n2@{ icon: "mdi:play-circle", form: "rounded", label: "Google Sheets Trigger", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "OpenAI1", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Add Linkedin Username", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Get Pending Username Row", pos: "b", h: 48 }
n3 --> n7
n2 --> n8
n8 --> n3
end
subgraph sg6["Schedule Flow"]
direction LR
n11@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n25@{ icon: "mdi:database", form: "rounded", label: "get invalid email rows", pos: "b", h: 48 }
n26@{ icon: "mdi:database", form: "rounded", label: "update_to_pending", pos: "b", h: 48 }
n11 --> n25
n25 --> n26
end
subgraph sg7["Schedule Flow"]
direction LR
n24@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger2", pos: "b", h: 48 }
n27@{ icon: "mdi:database", form: "rounded", label: "get_failed_profile_summary_r..", pos: "b", h: 48 }
n28@{ icon: "mdi:database", form: "rounded", label: "update_to_pending1", pos: "b", h: 48 }
n24 --> n27
n27 --> n28
end
subgraph sg8["Schedule Flow"]
direction LR
n29@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger3", pos: "b", h: 48 }
n30@{ icon: "mdi:database", form: "rounded", label: "get_failed_posts_summary_rows1", pos: "b", h: 48 }
n36@{ icon: "mdi:database", form: "rounded", label: "update_to_unscraped", pos: "b", h: 48 }
n29 --> n30
n30 --> n36
end
subgraph sg9["Google Sheets Flow"]
direction LR
n23@{ icon: "mdi:play-circle", form: "rounded", label: "Google Sheets Trigger5", pos: "b", h: 48 }
n35@{ icon: "mdi:database", form: "rounded", label: "Get Completely Enriched Prof..", pos: "b", h: 48 }
n37@{ icon: "mdi:database", form: "rounded", label: "Append to Enriched Leads Dat..", pos: "b", h: 48 }
n23 --> n35
n35 --> n37
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 n43,n15,n20,n4,n0,n2,n11,n24,n29,n23 trigger
class n47,n50,n32,n31,n3 ai
class n55 decision
class n44,n48,n54,n18,n33,n38,n21,n34,n39,n9,n10,n14,n6,n7,n8,n25,n26,n27,n28,n30,n36,n35,n37 database
class n51,n17,n16,n12,n13,n42 api
class n45,n46,n49,n52,n19,n40,n22,n41 code
classDef customIcon fill:none,stroke:none
class n45,n46,n49,n51,n52,n53,n17,n19,n40,n16,n22,n41,n12,n13,n0,n42 customIcon
Problemet: leadlistor levererar inte sig själva
Apollo kan hitta leads snabbt, men det levererar inte ”outreach-klart”. Du behöver fortfarande verifierade mejladresser, snabb kontext om vem personen är och något aktuellt att referera till så att ditt meddelande inte låter som copy-paste-spam. De flesta team gör det arbetet manuellt. De öppnar LinkedIn, skummar inlägg, kopierar sammanfattningar, klistrar in i ett ark och hoppas att mejlen fortfarande fungerar. Sedan blir halva listan inaktuell och du fastnar med att felsöka studs och trasig personalisering precis när du egentligen ville lansera.
Friktionen växer snabbt. Här är det som brukar fallera.
- Att hämta leads går snabbt, men att enrich:a varje lead kan ta 10 minuter av flik-hoppande.
- Mejl-”verifiering” antas ofta, vilket betyder att du betalar för utskick som studsar ändå.
- Senaste LinkedIn-aktivitet är det bästa bränslet för personalisering, men det är det första folk hoppar över när det är stressigt.
- När enrichment misslyckas för vissa leads försvinner de tyst i stället för att försöka igen senare.
Lösningen: Apollo → Sheets med LinkedIn-enrichment
Det här arbetsflödet börjar med att hämta leads från Apollo baserat på dina sökfilter (nyckelord, bransch, jobbtitel och liknande målregler). Det skriver in grunderna i Google Sheets direkt, så att du får en levande databas även medan enrichment kör. Därefter extraherar det LinkedIn-användarnamnet från varje profil-URL så att det kan hämta djupare profildata. Sedan slår det upp en verifierad jobbmejl via Apollo och kontrollerar den igen med Mail.so för att filtrera bort mejladresser som inte godkänns i leveransbarhets- eller MX-kontroller. Till sist enrich:ar det varje rad med LinkedIn-profilens sammanfattning och anteckningar om senaste aktivitet (inlägg och återpubliceringar), som du kan använda som personaliseringsvinklar i outreach. När något misslyckas ser statuskolumner till att raden inte skrivs över, och ett schemalagt omförsök kan bearbeta misslyckade rader senare (standard är cirka två veckor).
Arbetsflödet startar när du skickar in dina Apollo-sökparametrar via en formulärtrigger, webhook eller till och med Telegram. Det processar leads i batchar, enrich:ar dem med mejlvalidering plus LinkedIn-profil- och aktivitetsdata och uppdaterar sedan samma Google Sheet utan att skriva över befintliga fält. Du får ett ark med strukturerade, ”klara rader” för outreach.
Vad du får: automatisering vs. resultat
| Vad arbetsflödet automatiserar | Resultatet du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du hämtar 50 Apollo-leads för en veckovis outbound-satsning. Manuellt kanske du lägger cirka 5 minuter per lead för att få LinkedIn-kontext och ytterligare 3 minuter på att kontrollera mejl, vilket blir ungefär 6–7 timmar. Med det här arbetsflödet lägger du kanske 10 minuter på att ange sökparametrar och låta det köra, och sedan 20–30 minuter på att skumma igenom det färdiga arket efter uppenbara specialfall. Det är i princip en hel arbetsdag tillbaka, varje vecka, och din outreach startar med mer strukturerad data.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Självhosting om du föredrar det (Hostinger fungerar bra)
- Apollo.io för att hitta leads och hämta mejladresser.
- Google Sheets för att lagra din enrich:ade leadsdatabas.
- Mail.so API-nyckel (hämta den i din Mail.so-dashboard).
Kunskapsnivå: Medel. Du kommer mest att klistra in API-nycklar, mappa några fält och validera att kolumnerna i ditt ark matchar.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Din sökning startar allt. Du skickar Apollo-sökvariabler (nyckelord, branscher, jobbtitlar och liknande filter) via en formulärtrigger, webhook eller Telegram-meddelande, beroende på hur du vill köra det.
Leads samlas in och mellanlagras. Apollo returnerar en lista med personer och arbetsflödet skriver de centrala fälten (namn, titel, företag, LinkedIn-URL) till Google Sheets tidigt, så att du kan följa progress medan enrichment fortsätter.
Enrichment sker i batchar. n8n loopar igenom varje lead, extraherar LinkedIn-användarnamnet från URL:en, hämtar en verifierad jobbmejl via Apollos användar-ID och kontrollerar sedan leveransbarhet med Mail.so. Det hämtar också LinkedIn-profilens sammanfattning och senaste aktivitet via ett LinkedIn-data-API-alternativ (RapidAPI, med ett Apify-alternativ för team som inte kan öppna ett RapidAPI-konto).
Strukturerade rader landar tillbaka i arket. Samma Google Sheet uppdateras med nya kolumner (sammanfattning, resultat för mejlvaliditet, anteckningar om senaste aktivitet, statusfält) utan att skriva över det som redan finns.
Du kan enkelt ändra Apollo-filtren för att rikta in dig på olika personas utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Vanliga fallgropar
- Apollo.io-inloggningar kan löpa ut eller sakna rätt behörighet. Om det skapar fel, kontrollera först inställningen ”Master API Key” i Apollo och nyckeln som är sparad i n8n-credentials.
- Om du använder Wait-noder eller externa enrichment-anrop varierar processtiderna. Öka väntetiden om efterföljande noder misslyckas på grund av tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du att redigera outputs för alltid.
Vanliga frågor
Cirka en timme om du redan har dina API:er och arket klart.
Nej. Du kopplar konton, klistrar in API-nycklar och mappar fält till kolumnerna i ditt ark.
Ja. n8n har ett gratis självhostat alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volymer. Du behöver också räkna in Apollo, tillgång till LinkedIn-data-API (RapidAPI eller Apify), Mail.so och eventuell OpenAI-användning för sammanfattningar.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller självhosting på en VPS. För självhosting är Hostinger VPS prisvärt och hanterar n8n bra. Självhosting ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja, och det bör du sannolikt göra om RapidAPI inte är tillgängligt i din region. Det här arbetsflödet innehåller redan ett Apify-alternativ, så du kan byta LinkedIn enrichment-HTTP-anropet till Apify actor-endpointen och behålla resten av sheet-mappningen oförändrad. Vanliga justeringar är att ändra vilka aktivitetsfält du sparar (bara inlägg vs. inlägg och återpubliceringar), justera vad som räknas som ”klar/misslyckad” och skriva om AI Agent-instruktionerna så att anteckningarna matchar din outreach-stil.
Oftast är det ett problem med API-nyckeln. Säkerställ att du skapade en Apollo-nyckel med ”Master API Key” aktiverad, uppdatera sedan credential i n8n och kör om ett enda test-lead. Om bara vissa leads misslyckas kan du stöta i rate limits eller hämta fält som din Apollo-plan inte tillåter. Kontrollera också att arbetsflödet sparar rätt Apollo user ID innan anropet för mejluppslag.
Många, men det beror på dina API-gränser.
Ofta, ja, eftersom det här flödet behöver loopar, omförsök och villkorslogik för status som blir dyrt och skört i enklare verktyg. n8n är också bättre när du vill självhosta och köra obegränsat antal körningar, vilket spelar roll när du enrich:ar stora listor varje vecka. Nackdelen är uppsättningstiden: du kommer lägga mer tid på att få credentials och fält rätt första gången. Om du bara enrich:ar ett fåtal leads per månad kan Zapier eller Make vara ”tillräckligt bra”. Om du är osäker, prata med en automationsexpert och få en snabb rekommendation baserat på volym.
När detta väl rullar slutar ditt lead-ark att vara en soptipp och blir i stället en tillgång för outreach. Arbetsflödet tar hand om de repetitiva delarna så att du kan fokusera på att skriva meddelanden som faktiskt får svar.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.