Du hittar ett bra LinkedIn-inlägg om “ny plats”, kopierar företagsnamnet och hamnar sedan i samma loop: googla webbplatsen, gissa vem som leder teamet, leta efter en e-postadress, klistra in allt i ett kalkylark. Det är långsamt. Det är rörigt. Och det är lätt att tappa bort vad som redan är gjort.
Det här arbetsflödet för Apollo Sheets enrichment träffar först Marketing Ops, men byråteam inom lead gen och grundare som gör sin egen outreach känner av det också. Du får ett strukturerat Google Sheet som redan har domän, beslutsfattare och verifierade e-postadresser, så att din outreach kommer igång snabbare och din lista håller sig strukturerad.
Nedan hittar du automationen, hur den fungerar end-to-end, vad du behöver och vad du ska se upp med när den är live.
Så fungerar den här automationen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: Apollo.io + Google Sheets: berika LinkedIn-leads
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n17@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger2", pos: "b", h: 48 }
n18@{ icon: "mdi:cog", form: "rounded", label: "Wait2", pos: "b", h: 48 }
n19@{ icon: "mdi:database", form: "rounded", label: "Update row in sheet2", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If2", 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/code.svg' width='40' height='40' /></div><br/>Code"]
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/>Code1"]
n23@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items4", pos: "b", h: 48 }
n24@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet3", pos: "b", h: 48 }
n29["<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/>Email Finder"]
n20 --> n23
n21 --> n29
n22 --> n18
n18 --> n19
n29 --> n22
n23 --> n21
n17 --> n24
n24 --> n20
n19 --> n23
end
subgraph sg1["Structured Output Pa 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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook"]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n25@{ icon: "mdi:robot", form: "rounded", label: "Linkedin Scraped Formater", pos: "b", h: 48 }
n26@{ icon: "mdi:database", form: "rounded", label: "Store values", pos: "b", h: 48 }
n0 --> n1
n1 --> n4
n26 --> n4
n4 --> n25
n3 -.-> n25
n2 -.-> n25
n25 --> n26
end
subgraph sg2["Schedule Flow"]
direction LR
n5@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet", pos: "b", h: 48 }
n6@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items1", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Update row in sheet", pos: "b", h: 48 }
n11@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If1", pos: "b", h: 48 }
n27["<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/>Company Name to Domain"]
n16 --> n7
n11 --> n7
n7 --> n27
n6 --> n5
n5 --> n16
n8 --> n11
n27 --> n8
end
subgraph sg3["Schedule Flow"]
direction LR
n9@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger1", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items2", pos: "b", h: 48 }
n12@{ icon: "mdi:cog", form: "rounded", label: "Wait1", pos: "b", h: 48 }
n13@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet1", pos: "b", h: 48 }
n14@{ icon: "mdi:database", form: "rounded", label: "Update row in sheet1", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n28["<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/>People Search"]
n15 --> n10
n12 --> n14
n28 --> n12
n10 --> n28
n9 --> n13
n13 --> n15
n14 --> n10
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 n17,n6,n9 trigger
class n2,n25 ai
class n3 aiModel
class n20,n16,n15 decision
class n19,n24,n26,n5,n8,n13,n14 database
class n29,n0,n27,n28 api
class n21,n22 code
classDef customIcon fill:none,stroke:none
class n21,n22,n29,n0,n27,n28 customIcon
Problemet: LinkedIn-leads blir inte outreach-klara av sig själva
LinkedIn är fullt av köpsignaler, men att göra ett inlägg till en användbar leadpost är där tempot dör. Du kan ha ett företagsnamn i texten, en plats och postaren/profilen, men det räcker inte för outreach. Så du hoppar mellan flikar för att hitta en domän, sedan Apollo för att hitta personer, sedan enrichment igen för att få e-postadresser och sedan tillbaka till kalkylarket för att hålla allt “organiserat”. Ärligt talat är kalkylarket oftast den enda organiserade delen, och även det skapar fel när du skalar bortom några få inlägg.
Det blir snabbt mycket. Här är var det faller isär i verkligheten:
- Att hitta rätt företagsdomän för liknande varumärkesnamn kan ta 10 minuter per lead, och fel domän förgiftar allt nedströms.
- Att plocka fram “rätt” beslutsfattare blir till rollgissning, och du slutar med praktikanter eller irrelevanta titlar i listan.
- E-postletande är repetitivt och inkonsekvent, vilket gör att teamet slösar tid och ändå får studsande mejl.
- Statusspårning blir slarvig, så samma lead blir enrichad två gånger medan andra rader står orörda i veckor.
Lösningen: LinkedIn-signal → enrichat sheet → outreach-klart
Det här arbetsflödet gör om rå LinkedIn-inläggsdata till en strukturerad leaddatabas i Google Sheets och enrichar den sedan i steg med Apollo.io. Det startar när LinkedIn-inläggsdata kommer in som JSON via en n8n-webhook (från din scraper, feed eller övervakningsverktyg). En AI-agent extraherar det användbara ur inläggstexten, som företagsnamn och butikens plats, och skriver en korrekt formaterad rad i Google Sheets. Därifrån kör schemalagda kontroller i bakgrunden: först fyller de i saknade företagsdomäner, sedan hämtar de viktiga beslutsfattare kopplade till domänen, och till sist enrichas personposterna med verifierade företagsmejl. Kalkylarket blir din “single source of truth”, inte en dumpningsplats.
Arbetsflödet börjar med en webhook som fångar LinkedIn-inlägget och normaliserar det till konsekventa fält. Därefter enrichar Apollo.io uppgiften i tre pass (domän, personer, e-post), med väntesteg för att undvika rate limits. Till sist uppdateras Google Sheets i varje steg så att listan hålls aktuell utan manuell rensning.
Det du får: automation vs resultat
| Det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du samlar in 30 LinkedIn-inlägg om butiksöppningar per vecka. Manuellt kanske du lägger cirka 10 minuter på att hitta rätt domän, 15 minuter på att plocka fram en handfull beslutsfattare och ytterligare 10 minuter på att få fram användbara e-postadresser, alltså ungefär 35 minuter per lead (cirka 17 timmar i veckan). Med det här arbetsflödet skickar du JSON:en till webhooken och låter den schemalagda enrichmenten köra; din hands-on-tid hamnar närmare 30 minuter totalt för stickprovskontroll och för att fixa något enstaka udda företagsnamn. Det är i praktiken två arbetsdagar tillbaka.
Det du behöver
- 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 och uppdatera leaddatabasen.
- Apollo.io för att enrica domäner, personer och e-post.
- Apollo.io API-nyckel (hämtas i dina kontoinställningar i Apollo).
Kompetensnivå: Medel. Du kopplar konton, mappar sheet-kolumner och justerar några filter samt API-fält.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett LinkedIn-inlägg kommer in som JSON. Arbetsflödet startar med en inkommande webhook-trigger som tar emot inläggstext plus eventuella extra fält som din scraper skickar med (postarens URL, inläggslänk, bild, extraktionstidpunkt).
Den röriga texten blir användbara fält. En LangChain-agent (tillsammans med en Gemini-chatmodell och en strukturerad output-parser) plockar ut företagsnamn och plats så att du slipper förlita dig på inkonsekvent manuell märkning.
Enrichment kör i tre schemalagda pass. n8n kontrollerar ditt Google Sheet efter saknade fält och använder sedan Apollo.io-endpoints via HTTP Request-noder för att hitta företagsdomänen, hämta upp till de 10 viktigaste beslutsfattarna och till sist hitta verifierade e-postadresser.
Ditt sheet hålls uppdaterat automatiskt. Varje steg skriver tillbaka till Google Sheets och markerar status, så att du kan filtrera på “saknar domän”, “saknar KDM:er” eller “saknar e-post” utan att behöva bygga om processen varje vecka.
Du kan enkelt ändra vilka roller du räknar som “viktiga beslutsfattare” så att det matchar din nisch (till exempel byta retail-roller mot SaaS-roller) utifrån dina behov. Se den fullständiga implementationsguiden nedan för alternativ för anpassning.
Steg-för-steg-guide för implementering
Steg 1: konfigurera webhook-triggern
Det här arbetsflödet tar emot inkommande data och delar upp den i enskilda poster för bearbetning.
- Lägg till noden Incoming Webhook Trigger och kopiera webhook-URL:erna för test och produktion till ert källsystem.
- Koppla Incoming Webhook Trigger till Distribute Items så att inkommande arrayer delas upp i items.
- Koppla Distribute Items till Iterate Records för att bearbeta en post per batch-loop.
Steg 2: anslut Google Sheets
Sju Google Sheets-noder läser och uppdaterar poster genom flera berikningssteg. Konfigurera dem konsekvent mot samma kalkylbladsstruktur.
- Öppna varje Google Sheets-nod: Retrieve Sheet Rows, Retrieve Sheet Rows B, Retrieve Sheet Rows C, Store Values in Sheet, Modify Sheet Row, Modify Sheet Row B och Modify Sheet Row C.
- Välj mål-kalkylblad och worksheet för varje nod och håll kolumnmappningarna konsekventa över alla tre pipelines.
- Bekräfta att Store Values in Sheet skriver de AI-berikade datafälten som returneras av LinkedIn Data Formatter.
Steg 3: konfigurera AI-bearbetning med LinkedIn Data Formatter
AI-pipelinen formaterar LinkedIn-data med en chattmodell och en parser för strukturerad output, och sparar sedan resultaten i Sheets.
- Konfigurera LinkedIn Data Formatter så att den tar emot input från Iterate Records och skickar strukturerade fält till Store Values in Sheet.
- Säkerställ att Gemini Chat Model är ansluten som språkmodell för LinkedIn Data Formatter.
- Säkerställ att Structured Result Parser är ansluten som output-parser för LinkedIn Data Formatter.
Steg 4: konfigurera schemalagda triggers och villkorskontroller
Tre schemalagda pipelines kontrollerar sheets, filtrerar rader och routar data till respektive berikningsflöde.
- Ställ in ett schema på Scheduled Trigger och koppla den till Retrieve Sheet Rows → Conditional Check B → Iterate Records A.
- Ställ in ett schema på Scheduled Trigger B och koppla den till Retrieve Sheet Rows B → Conditional Check → Iterate Records B.
- Ställ in ett schema på Scheduled Trigger C och koppla den till Retrieve Sheet Rows C → Conditional Check C → Iterate Records C.
Steg 5: konfigurera uppslag för företag och personer
Två steg med HTTP-förfrågningar berikar företagsdomäner och persondata och sparar sedan resultaten i Sheets med pacing via wait-noder.
- Konfigurera Company Domain Lookup (HTTP Request) så att den använder fälten som skickas från Iterate Records A, och koppla den sedan till Modify Sheet Row → Pause Execution → Iterate Records A.
- Konfigurera People Lookup (HTTP Request) så att den använder fälten som skickas från Iterate Records B, och koppla den sedan till Pause Step B → Modify Sheet Row B → Iterate Records B.
Steg 6: konfigurera e-postidentifiering och transformlogik
Den tredje pipelinen gör anpassade transformationer och e-postidentifiering och uppdaterar sedan sheetet.
- I Transform Logic formaterar ni posten från Iterate Records C för förfrågan till e-postuppslagningen.
- Konfigurera Email Discovery (HTTP Request) och koppla den till Transform Logic B → Pause Step C → Modify Sheet Row C → Iterate Records C.
Steg 7: testa och aktivera ert arbetsflöde
Validera varje flöde med exempelposter innan ni aktiverar scheman och använder webhooken i produktion.
- Kör Incoming Webhook Trigger manuellt med en test-payload och bekräfta att data flödar genom Distribute Items, Iterate Records, LinkedIn Data Formatter och Store Values in Sheet.
- Kör Scheduled Trigger, Scheduled Trigger B och Scheduled Trigger C manuellt för att verifiera att de tre schemalagda pipelines uppdaterar rader utan fel.
- Kontrollera Google Sheets för att bekräfta att rader uppdaterades av Modify Sheet Row, Modify Sheet Row B och Modify Sheet Row C.
- När resultaten ser korrekta ut aktiverar ni arbetsflödet och slår på schemana i alla tre noderna för schemalagd trigger.
Vanliga fallgropar
- Google Sheets-inloggningar kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera, börja med att kontrollera n8n-sidan för Credentials och Google-kontots åtkomst till just det kalkylarket.
- Om du använder Wait-noder eller extern enrichment varierar processtiderna. Öka väntetiden om nedströms HTTP Request-noder misslyckas på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din ton och extraktionsregler tidigt (till exempel “ignorera hashtags, prioritera juridiska företagsnamn”), annars kommer du redigera output för alltid.
Vanliga frågor
Cirka 45 minuter om ditt Sheet och Apollo-konto är redo.
Nej. Du kommer mest koppla konton och mappa fält i Google Sheets. De inkluderade kodstegen är redan skrivna, och du behöver sällan röra dem.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer startar på $20/månad för högre volym. Du behöver också räkna in Apollo.io API-användning utifrån din plan.
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 obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det bör du. Du kan justera Apollo People Lookup-anropet för att söka efter de roller som är viktiga i din marknad (till exempel “Head of Partnerships” i stället för “Head of Retail”). Vanliga anpassningar är att ändra listan med titlar, begränsa till specifika platser och uppdatera vilka Google Sheets-kolumner du skriver tillbaka till.
Oftast beror det på en utgången eller felaktig Apollo API-nyckel i dina n8n HTTP Request-credentials. Det kan också vara att du saknar API-åtkomst (företagssökning vs personsökning) eller rate limiting om du kör stora batchar utan tillräcklig väntetid mellan anropen. Kolla exekveringsloggen för det exakta Apollo-felmeddelandet och bekräfta sedan att din plan inkluderar endpointen du anropar.
Några hundra per körning är realistiskt för de flesta team, så länge du håller Wait-stegen och batchstorlekarna på en rimlig nivå.
Det beror på hur hård du är med datakvalitet. Zapier eller Make kan fungera för enkla “lägg till en rad”-automationer, men enrichment i flera steg blir ofta till sköra kedjor och kostnaderna drar iväg när du lägger till steg och filterlogik. n8n hanterar förgrening (IF-kontroller), loopar över rader och väntan för rate limits utan att det känns som att du måste kämpa mot verktyget. En annan praktisk vinst: self-hosting betyder att du inte betalar per litet steg när volymen växer. Om du är osäker, prata med en automationsexpert och beskriv er veckovolym av leads och vilka fält ni behöver.
När det här väl rullar slutar ditt kalkylark vara en att-göra-lista och börjar fungera som en leadmotor. Sätt upp det, låt det enrica i bakgrunden och använd tiden du får tillbaka till outreach som faktiskt konverterar.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.