Du har äntligen en prospektlista… och sedan försvinner en hel eftermiddag på att ta reda på företagsdomäner och gissa e-postadresser. Kopiera-klistra in. Öppna tio flikar. Tvivla på allt. Det är monotont, och det är den typen av sysselsättning som i tysthet dödar momentum i outbound.
Rekryterare märker det när de försöker kontakta kandidater snabbt. En lead gen-ansvarig märker det när arket växer förbi 200 rader. Och om du driver en byrå har du förmodligen lovat ”färska leads varje vecka” medan teamet sitter fast med att göra Hunter Google Sheets-berikning för hand.
Det här arbetsflödet hämtar kontakter från Google Sheets, använder AI för att lista ut rätt företagsdomän och anropar sedan Hunter.io för att hitta den e-postadress som matchar bäst. Du får se hur automatiseringen fungerar, vad du behöver och vilka resultat du kan förvänta dig när den väl är igång.
Så fungerar automatiseringen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: Google Sheets + Hunter.io – berikade leads klara
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@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model", pos: "b", h: 48 }
n4["<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 in JavaScript"]
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", 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/>HTTP Request"]
n7["<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"]
n8@{ icon: "mdi:database", form: "rounded", label: "Append or update row in sheet", 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 Request2"]
n10["<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 in JavaScript1"]
n11@{ icon: "mdi:robot", form: "rounded", label: "AI Agent1", pos: "b", h: 48 }
n12@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model1", 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/code.svg' width='40' height='40' /></div><br/>Code in JavaScript2"]
n14@{ icon: "mdi:database", form: "rounded", label: "Append or update row in sheet1", pos: "b", h: 48 }
n5 --> n6
n5 --> n7
n2 --> n4
n11 --> n13
n6 --> n8
n7 --> n10
n9 --> n14
n4 --> n5
n10 --> n11
n13 --> n9
n1 --> n2
n3 -.-> n2
n12 -.-> n11
n0 --> n1
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 n2,n11 ai
class n3,n12 aiModel
class n5 decision
class n1,n8,n14 database
class n6,n7,n9 api
class n4,n10,n13 code
class n10 disabled
classDef customIcon fill:none,stroke:none
class n4,n6,n7,n9,n10,n13 customIcon
Problemet: lead-berikning blir ett hoppande mellan flikar
Ett Google Sheet med ”Namn, Titel, Beskrivning” ser organiserat ut. I verkligheten är det ofullständigt. För att faktiskt kunna använda det måste någon översätta stökig profiltext till en riktig företagsdomän och sedan använda den domänen för att hitta en e-postadress som går att leverera. Om du hämtar profiler från LinkedIn blir det värre eftersom beskrivningar är inkonsekventa, företag förkortas och en enda fel domän skickar dig ner i ett kaninhål. Efter några dussin leads kommer den mentala belastningen. Du börjar gissa. De gissningarna blir studs, bortkastade uppföljningar och obekväma ”fel person”-svar.
Det växer snabbt. Så här brukar det haverera i riktiga team.
- Varje lead kan ta cirka 5–10 minuter att researcha när företagsnamnet är otydligt.
- Folk ”fixar” arket på olika sätt, så domäner och e-postadresser blir inkonsekventa mellan rader.
- Manuella Hunter-sökningar bjuder in till misstag, som att blanda ihop två liknande företag eller kopiera fel resultat.
- Du vet inte vilka poster som är säkra att mejla förrän någon kontrollerar dem en och en.
Lösningen: Google Sheets-berikning med AI + Hunter.io
Det här n8n-arbetsflödet börjar med ditt befintliga Google Sheet, läser varje kontaktrad (namn, roll, beskrivning och eventuell befintlig domän) och fattar sedan ett smart beslut om nästa steg. En AI-agent försöker först härleda företagets domän direkt från profiltexten, vilket ofta räcker när beskrivningen tydligt nämner företaget. Om domänen inte är uppenbar skapar flödet automatiskt en bättre sökfråga och anropar Google Custom Search för att hämta riktiga webbresultat. En annan AI-agent granskar resultaten för att välja den mest korrekta domänen (inte en slumpmässig katalogsajt). När domänen är bekräftad anropar flödet Hunter.io för att hitta den e-postadress som matchar personen bäst på den domänen. Till sist skriver det tillbaka domän och e-post till samma Google Sheet och uppdaterar raden så att listan blir direkt användbar.
Arbetsflödet startar från en n8n-trigger och bearbetar sedan arket i batchar så att det klarar större listor utan att sätta igen sig. Det skickar kontakter antingen via en väg där ”domänen redan är känd” eller en där ”domänen behöver hittas”, och slår sedan ihop allt till ett enda utflöde som uppdaterar arket med berikade fält.
Det du får: automatisering vs. resultat
| Det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du samlar 200 LinkedIn-profiler i ett ark varje vecka. Manuell hantering, även med en snabb process, tar vanligtvis runt 7 minuter per lead (hitta domän, köra Hunter-sökning, klistra in resultat), vilket är ungefär 23 timmars arbete. Med det här flödet kan du starta det på cirka 5 minuter, låta n8n bearbeta listan i bakgrunden i ungefär en timme och sedan granska arket och stickprova ett par rader. Det är i praktiken två arbetsdagar tillbaka, varje vecka.
Det du behöver
- n8n-instans (testa n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra leads och skriva tillbaka resultat.
- Hunter.io för att hitta bästa matchande e-post utifrån domän.
- Google Gemini (PaLM) API-nyckel (hämta den från Google AI Studio / Google Cloud).
- Google Custom Search API-nyckel + CSE-ID (hämta från Google Cloud och Custom Search Engine-konfigurationen).
- Google Sheets OAuth2-uppgifter (skapa i Google Cloud-konsolen).
Svårighetsnivå: Medel. Du kommer att koppla in autentiseringar och matcha dina kolumner i arket, samt göra små prompt-justeringar om du vill ha bättre precision.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En manuell körning (eller schemalagd körning) startar berikningen. I mallen klickar du på Manual Run i n8n, och den hämtar direkt rader från ditt Google Sheet. Många team byter senare den här triggern till ett schema så att nya leads berikas varje morgon.
Arbetsflödet läser arket och skickar varje kontakt till en AI-pass för ”domänidentifiering”. AI:n tittar på personens namn, roll och beskrivning för att härleda en sannolik företagsdomän. Om den kan plocka ut en domän med hög säkerhet skickar den vidare den.
Om domänen saknas använder det Google Custom Search och en andra AI-kontroll. n8n kör en sökförfrågan, extraherar kandidatdomäner från resultaten och ber sedan en annan AI-agent att välja rätt match. Det här är skillnaden mellan ”troligen rätt” och ”tillräckligt säkert för outreach”.
Hunter.io hittar bästa e-post och Google Sheets uppdateras. När en domän är bekräftad anropar flödet Hunters API för att hämta bästa matchande e-post för kontakten och uppdaterar sedan raden med e-posten (och domänen om den saknades). Ditt ark blir källan till sanningen.
Du kan enkelt ändra vilka kolumner i arket som läses in så att det matchar din CRM-export, och du kan byta prompten för domänidentifiering så att den passar din marknad. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera den manuella triggern
Det här arbetsflödet startar manuellt så att ni kan styra när berikningen körs.
- Lägg till noden Manual Run Trigger som starttrigger.
- Behåll standardinställningarna – inga fält krävs för den här triggern.
- Bekräfta att flödet kopplas från Manual Run Trigger till Fetch Sheet Rows.
Steg 2: Anslut Google Sheets
Hämta LinkedIn-profilrader från Google Sheets som indata.
- Öppna Fetch Sheet Rows och ställ in Document till
[YOUR_ID]och Sheet tillSheet1(värde:gid=0). - Inloggning krävs: Anslut era
googleSheetsOAuth2Api-uppgifter i Fetch Sheet Rows. - I Update Sheet with Email behåller ni Operation inställd på
appendOrUpdateoch verifierar att kolumnmappningarna använder uttryck som{{ $('Fetch Sheet Rows').item.json.name }}. - Inloggning krävs: Anslut era
googleSheetsOAuth2Api-uppgifter i Update Sheet with Email. - I Update Sheet with Domain behåller ni Operation inställd på
appendOrUpdateoch bekräftar att mappningarna för name, email och domain är satta till{{ $('Fetch Sheet Rows').item.json.name }},{{ $json.data.email }}och{{ $json.data.domain }}. - Inloggning krävs: Anslut era
googleSheetsOAuth2Api-uppgifter i Update Sheet with Domain.
Steg 3: Sätt upp AI-baserad domänidentifiering
AI-agenten extraherar en domän eller skapar en sökterm när ingen domän hittas.
- Öppna Domain Discovery Agent och behåll prompttexten som konfigurerad, inklusive kravet på JSON-utdata.
- Säkerställ att platshållarna för indata är satta till
{{ $json.name }},{{ $json.position }}och{{ $json.description }}. - Bekräfta att Gemini Chat Engine är ansluten som språkmodell för Domain Discovery Agent.
- Inloggning krävs: Anslut era
googlePalmApi-uppgifter i Gemini Chat Engine (uppgifterna tillämpas på språkmodellen, inte på agentnoden). - Låt koden i Parse AI Output vara oförändrad för att ta bort code fences och tolka JSON på ett tillförlitligt sätt.
Steg 4: Konfigurera domänrouting och Hunter-uppslag
Routa baserat på om en domän finns och berika e-postadresser via Hunter.
- I Branch by Domain behåller ni reglerna som kontrollerar att
{{ $json.domain }}inte är lika mednulloch att{{ $json["search term"] }}inte är lika mednull. - Konfigurera Hunter Email Lookup så att den använder URL
https://api.hunter.io/v2/email-finder?och behåll Query Parameters satta tilldomain={{ $json.domain }},first_name={{ $('Fetch Sheet Rows').item.json.name }}ochlast_name={{ $('Fetch Sheet Rows').item.json.name }}. - Inloggning krävs: Anslut era
httpBearerAuth-uppgifter i Hunter Email Lookup. - Bekräfta att flödet från Hunter Email Lookup går till Update Sheet with Email för att skriva tillbaka berikad data.
Steg 5: Konfigurera Google-sökning och domänmatchning
När ingen domän är känd söker arbetsflödet på Google och matchar den bästa domänen med hjälp av AI.
- I Google Search Request ställer ni in URL till
https://www.googleapis.com/customsearch/v1och behåller query-parametrarnacx=[YOUR_ID]ochq={{ $json["search term"] }}. - Inloggning krävs: Anslut era
httpBasicAuth-uppgifter i Google Search Request (noden innehåller ävenhttpBearerAuthi credentials; säkerställ att rätt auth matchar er API-konfiguration). - Aktivera Extract Domains Script (den är för närvarande inaktiverad) och behåll den tillhandahållna JavaScript-koden för att normalisera och extrahera domäner från sökresultat.
- Öppna Domain Match Agent och behåll prompten som använder
{{ $('Branch by Domain').item.json["search term"] }}och{{ $json.domains }}för matchning. - Bekräfta att Gemini Chat Engine 2 är ansluten som språkmodell för Domain Match Agent.
- Inloggning krävs: Anslut era
googlePalmApi-uppgifter i Gemini Chat Engine 2 (uppgifterna tillämpas på språkmodellen, inte på agentnoden). - Låt koden i Parse Match Output vara oförändrad så att JSON-utdata tolkas korrekt.
Steg 6: Konfigurera sekundärt Hunter-uppslag och återkoppling
Efter att en domän har matchats gör arbetsflödet ett andra Hunter-uppslag och skriver resultaten till arket.
- Konfigurera Hunter Email Lookup 2 med URL
https://api.hunter.io/v2/email-finder?och query-parametrarnadomain={{ $json.domain }},first_name={{ $('Fetch Sheet Rows').item.json.name }}ochlast_name={{ $('Fetch Sheet Rows').item.json.name }}. - Inloggning krävs: Anslut era
httpBearerAuth-uppgifter i Hunter Email Lookup 2. - Bekräfta att flödet från Hunter Email Lookup 2 går till Update Sheet with Domain för att spara den matchade domänen och e-postadressen.
Steg 7: Testa och aktivera ert arbetsflöde
Kör ett manuellt test för att validera berikningen och aktivera sedan arbetsflödet för löpande användning.
- Klicka på Execute Workflow och trigga Manual Run Trigger för att starta körningen.
- Verifiera att Fetch Sheet Rows returnerar rader och att Domain Discovery Agent matar ut ett JSON-objekt som Parse AI Output kan tolka.
- Kontrollera att antingen Hunter Email Lookup eller Google Search Request körs beroende på utdata från Branch by Domain.
- Bekräfta att Update Sheet with Email eller Update Sheet with Domain uppdaterar rätt rad med
emailochdomain. - När allt fungerar växlar ni arbetsflödet till Active för användning i produktion.
Vanliga fallgropar
- Google Sheets-autentisering kan löpa ut eller kräva specifika behörigheter. Om saker slutar fungera, kontrollera först din OAuth-medgivandeskärm i Google Cloud och åtkomsten för det anslutna kontot i n8n.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Hunter.io ger svaga matchningar om domänen är fel. När resultat ser märkliga ut, inspektera utdataraden från ”Update Sheet with Domain” och bekräfta att domänen är en riktig företagswebbplats, inte en profildatabas.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du att redigera utdata i all evighet.
Vanliga frågor
Cirka en timme om dina API-nycklar och arket är redo.
Nej. Du kopplar konton, klistrar in några API-nycklar och matchar kolumnnamnen i ditt ark.
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 volymer. Du behöver också räkna in Hunter.io och Google API-användning, samt kostnader för Gemini-modeller beroende på hur många rader du kör.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärt och klarar n8n bra. Self-hosting ger obegränsade körningar men kräver grundläggande serveradministration.
Ja, och det är en av de bästa anledningarna att använda n8n. Du kan peka noden ”Fetch Sheet Rows” mot ett annat kalkylark och sedan uppdatera noderna ”Update Sheet with Domain” och ”Update Sheet with Email” så att de skriver till dina önskade kolumner. Vanliga justeringar är att lägga till branschtaggar, lägga till LinkedIn-profil-URL:er eller flytta ”klara”-rader till en separat flik för outreach. Om du vill byta AI-leverantör ersätter du Gemini-chatnoderna och behåller resten av flödet likadant.
Oftast beror det på en ogiltig eller utgången API-nyckel. Skapa en ny Hunter.io API-nyckel, uppdatera den i HTTP Request-noderna som används för ”Hunter Email Lookup” och kör sedan en enda testrad för att bekräfta att du får ett svar. Om det fortfarande misslyckas, kontrollera kontogränser i Hunter och se till att domänen du skickar in är en riktig företagsdomän (inte en LinkedIn-URL eller en katalogsajt). Rate limiting kan också dyka upp när du trycker igenom stora batchar samtidigt, så mindre batchar hjälper.
Många, så länge dina API-kvoter klarar det. På n8n Cloud Starter begränsas du av månatliga körningar, medan self-hosting tar bort n8n:s körningsbegränsning och flyttar gränsen till din server och dina API-leverantörer. I praktiken kör de flesta team hundratals leads per dag utan problem när batchning är rimligt inställd. Om du vill processa tusentals åt gången, planera för begränsningar i Google Custom Search och Hunters anropsgränser, eftersom de oftast tar slut först.
Ofta, ja, eftersom flödet behöver förgreningar, fallback-logik och ett par AI-baserade ”beslutspunkter”. Zapier och Make kan göra det, men det blir pilligt och dyrt när du lägger till sökningar, parsning och flera HTTP-anrop per lead. n8n ger också möjlighet att self-hosta, vilket spelar roll när du vill köra stora listor utan att hålla koll på task-kostnader. Den ärliga brasklappen: om du bara behöver ”domän finns → Hunter-sökning → skriv tillbaka” är Zapier snabbt att sätta upp. Om du vill ha hela vägen med domänidentifiering och validering passar n8n bättre. Prata med en automationsexpert om du är osäker.
När det här är på plats slutar arket vara ”råa leads” och blir ”klart att mejla”. Arbetsflödet tar hand om de repetitiva delarna, och du kan fokusera på 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.