Du börjar med en enkel lista med företag. Sedan tar det “enkla” slut. Gissa domän, klicka runt på LinkedIn, jaga rätt person och hoppas att mejlet inte studsar. Så äter lead research tyst upp din vecka, en flik i taget.
Den här automatiseringen för Serper NocoDB leads märks som mest när du kör outbound i stor skala. En säljchef som ska mata repsen, en marknadsansvarig som bygger riktade listor och en byråägare som jonglerar flera kunddatabaser känner alla samma friktion. Du behöver beslutsfattare, inte “info@”. Och du behöver dem sparade strukturerat, inte utspridda i kalkylark.
Det här flödet gör om en företagslista till verifierade kontakter (vd, sälj, marknad), flaggar riskabla mejladresser innan du skickar och uppdaterar din databas automatiskt. Du får se vad som automatiseras, vilka resultat du kan förvänta dig och vad du behöver för att köra det utan att behöva sitta och vakta processen.
Så fungerar automatiseringen
Hela n8n-flödet, från trigger till slutligt resultat:
n8n Workflow Template: Serper.dev + NocoDB: verifierade leads från bolagslistor
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["<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/nocodb.svg' width='40' height='40' /></div><br/>Get many rows"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>serper search domains"]
n3@{ icon: "mdi:robot", form: "rounded", label: "extract url & domain", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Sales Decision Maker Email"]
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/>Get Marketing Email"]
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/>Get CEO Email"]
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/nocodb.svg' width='40' height='40' /></div><br/>Update Companies Domains"]
n8["<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/nocodb.svg' width='40' height='40' /></div><br/>Update Company Status"]
n9@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter", pos: "b", h: 48 }
n10@{ icon: "mdi:cog", form: "rounded", label: "Remove Duplicates", pos: "b", h: 48 }
n11["<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/>Merge1"]
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Data3", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Data4", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Data5", pos: "b", h: 48 }
n15["<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/>Determine Email Status by Co.."]
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/nocodb.svg' width='40' height='40' /></div><br/>Get All Company Status"]
n17@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If Only Risky Emails1", pos: "b", h: 48 }
n18@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If Email Found1", 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/>Get All Company Emails"]
n20["<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/nocodb.svg' width='40' height='40' /></div><br/>Update Company Emails"]
n21@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n22@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter1", 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/nocodb.svg' width='40' height='40' /></div><br/>Create Contacts"]
n24@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n25@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger2", pos: "b", h: 48 }
n26["<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"]
n24 --> n22
n26 --> n19
n9 --> n10
n11 --> n9
n22 --> n2
n12 --> n11
n13 --> n11
n14 --> n11
n6 --> n12
n1 --> n21
n23 --> n15
n18 --> n17
n18 --> n26
n21 --> n24
n10 --> n23
n25 --> n1
n5 --> n13
n3 --> n7
n17 --> n26
n20 --> n21
n8 --> n16
n2 --> n3
n19 --> n20
n16 --> n18
n7 --> n4
n7 --> n6
n7 --> n5
n4 --> n14
n15 --> n8
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,n25 trigger
class n3 ai
class n9,n17,n18,n22 decision
class n2,n4,n5,n6,n19 api
class n15 code
classDef customIcon fill:none,stroke:none
class n1,n2,n4,n5,n6,n7,n8,n11,n15,n16,n19,n20,n23,n26 customIcon
Problemet: företagslistor blir inte outreach-klara leads
En lista med företagsnamn känns som framsteg, men den är inte användbar än. Det riktiga arbetet börjar när du ska matcha varje företag mot rätt webbplats (inte en kataloglistning), hitta rätt beslutsfattare och hålla koll på vad du redan har slagit upp. Under tiden blir ditt kalkylark en lappmatta av halvt ifyllda rader, dubbletter och anteckningar som “kanske är det här vd:n?”. Du börjar också skicka utifrån ofullständig data, vilket betyder fler studsar, fler uppföljningar till fel inkorg och mer tid som går åt till att städa upp efteråt.
Det går fort att det blir mycket. Här är var det oftast faller isär.
- Att hitta den officiella domänen manuellt går långsamt, och det är lätt att välja fel webbplats när resultaten innehåller kataloger, gamla domäner eller företag med snarlika namn.
- Även när du hittar domänen behöver du fortfarande specifika roller (vd, sälj, marknad), och generiska adresser konverterar sällan.
- Utan validering riskerar du att bränna avsändarryktet på osäkra mejladresser och lägga tid på att felsöka toppar av studsar.
- Din “databas” blir en mix av kalkylark och verktyg, så deduplicering och statushantering blir ett extrajobb.
Lösningen: gör om företagsnamn till verifierade kontakter hos beslutsfattare
Det här flödet tar en batch med företagsposter från NocoDB, hittar varje företags riktiga webbplats via sökresultat från Serper.dev och låter OpenAI extrahera korrekt domän från den stökiga sökoutputen. När domänen sparats tillbaka i din Companies-tabell kör det automatiskt uppslag på beslutsfattare (säljansvarig, ledning och marknadsansvarig) via ett API för att hitta mejladresser. Kontakterna slås ihop, filtreras så att bara rader med faktiska mejladresser behålls och dedupliceras så att du inte skapar dubbletter mellan roller eller körningar. Till sist klassar det mejlkvalitet (så att du kan undvika riskabla adresser), uppdaterar statusfält på företaget och kör en fallback som hämtar fler företagsmejlar när ingen bra mejladress till beslutsfattare hittas.
Flödet startar via en manuell körning eller en schemalagd trigger och behandlar sedan företag i batcher med inbyggda pauser för att respektera API-gränser. Därefter är det domänidentifiering, rollbaserad mejlsökning, kvalitetskontroller och strukturerade skrivningar till NocoDB. Resultatet är en Contacts-tabell som är redo för outreach och länkad till varje företag, plus en logg med företagsmejlar som reserv.
Vad du får: automatisering vs. resultat
| Vad det här flödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du behöver leads för 100 målkonton. Manuellt är till och med ett “snabbt” upplägg något i stil med 10 minuter för att bekräfta rätt webbplats, och sedan cirka 15 minuter för att hitta och rimlighetskontrollera 2–3 mejladresser till beslutsfattare. Det är ungefär 25 minuter per företag, alltså runt 40 timmars arbete. Med det här flödet laddar du upp de 100 företagen i NocoDB, triggar en körning och låter batchning plus väntetider styra tempot; du lägger främst tid på att granska resultaten i slutet, kanske 30–60 minuter totalt. Resten gör maskinen.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- NocoDB för att lagra tabellerna Companies och Contacts
- Serper.dev för att söka och hitta officiella domäner
- OpenAI API-nyckel (hämta den i OpenAI:s API-dashboard)
- AnyMailFinder API-nyckel (hämta den i kontoinställningarna i AnyMailFinder)
- NocoDB API-token (hämta den i användarinställningarna i NocoDB)
Kunskapsnivå: Medel. Du kopplar API-inloggningar, mappar fält mot dina tabeller och kör en liten testbatch innan du skalar upp.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En körning startar på beställning eller enligt schema. Du kan trigga den manuellt när du laddar upp en ny lista, eller låta den schemalagda triggern köra periodiskt för att hålla databasen i rörelse.
Företag hämtas från NocoDB i batcher. Flödet hämtar företagsrader, filtrerar bort sådana som redan är bearbetade och använder sedan vänt/paus mellan batcher så att dina API-konton inte överbelastas.
Serper.dev hittar webbplatsen och OpenAI städar upp beslutet. Sökresultat är stökiga i verkligheten, så AI-steget extraherar officiell URL och domän och skriver sedan tillbaka dem till företagsposten.
Mejladresser till beslutsfattare hittas, filtreras och dedupliceras. Flödet frågar efter roller för sälj, ledning och marknad, slår ihop svaren, tar bort dubbletter, poängsätter mejlkvalitet och skapar Contact-poster kopplade till rätt företag.
Fallback tar över när det behövs. Om ingen bra mejladress till beslutsfattare hittas växlar det till en bredare sökning efter företagsmejlar (upp till en batch med extra adresser) och loggar dem så att du ändå har alternativ.
Du kan enkelt ändra roller för beslutsfattare för att inkludera HR eller partnerskap utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: Konfigurera schema-triggern
Konfigurera hur arbetsflödet startar, antingen enligt ett schema eller manuellt för testning.
- Öppna Scheduled Annual Trigger och ställ in schemaregeln så att den körs var
12:e månad (interval field set tomonthswithmonthsInterval=12). - Låt Manual Run Trigger vara tillgänglig för ad hoc-körningar och felsökning.
- Säkerställ att båda triggernoderna är kopplade till Fetch Company Records så att samma datapipeline körs oavsett startmetod.
Steg 2: Anslut NocoDB-datakällor
Dessa noder läser in och uppdaterar företagsregister och loggar genom hela arbetsflödet.
- I Fetch Company Records ställer ni in Project ID till
[YOUR_ID], Table till[YOUR_ID], Operation tillgetAlloch Return All tilltrue. Credential Required: Anslut eranocoDbApiToken-uppgifter. - Ställ in Batch Through Records till Batch Size
500så att arbetsflödet hanterar stora datamängder på ett säkert sätt. - I Update Company Domains mappar ni fälten med uttryck: url till
{{ $json.message.content.url || $json.message.content.explanation }}, domain till{{ $json.message.content.domain }}, status till{{ $json.message.content.domain ? "domain found" : "domain not found" }}och Id till{{ $('Fetch Company Records').item.json.Id }}. Credential Required: Anslut eranocoDbApiToken-uppgifter. - Konfigurera Create Contact Entries, Update Company State, Retrieve Company Statuses och Update Company Emails Log med respektive
[YOUR_ID]-värden för projekt/tabell. Credential Required: Anslut eranocoDbApiToken-uppgifter för alla NocoDB-noder (totalt 6).
[YOUR_ID]-platshållare i NocoDB-noderna kommer uppdaterings-/skapa-operationer att misslyckas.Steg 3: Sätt upp domänidentifiering och AI-extraktion
Det här steget filtrerar orörda företag, slår upp domäner och använder AI för att extrahera den bästa officiella webbplatsen.
- I Pause Interval ställer ni in Unit till
minutesoch Amount till1för att strypa batchar. - I Filter Untouched Companies behåller ni villkoret där status är tomt med
{{ $json.status }}. - Konfigurera Serper Domain Lookup med URL
https://google.serper.dev/search, MethodPOSToch body-parametrar: q ={{ $json.company_name || "a" }}och location ={{ $json.location }}. Credential Required: Anslut erahttpHeaderAuth-uppgifter. - I Extract Site & Domain ställer ni in modellen till
gpt-4.1-mini, behåller JSON Output aktiverat och skickar in sökresultatdata via meddelandets innehåll. Credential Required: Anslut eraopenAiApi-uppgifter.
Steg 4: Konfigurera berikning av lead-e-post och mappning
När domäner har hittats förgrenar arbetsflödet för att hitta beslutsfattares e-postadresser och normalisera fält.
- Notera parallellkörningen: Update Company Domains skickar utdata till Find Sales Lead Email, Find Executive Email och Find Marketing Lead Email parallellt.
- För alla tre e-postuppslagsnoder behåller ni endpointen
https://api.anymailfinder.com/v5.1/find-email/decision-makeroch ställer in det dynamiska parameternamnet till{{ $json.domain ? "domain" : "company_name" }}med värdet{{ $json.domain ? $json.domain : $('Fetch Company Records').item.json.company_name.split(",")[0] }}. Credential Required: Anslut erahttpHeaderAuth-uppgifter för alla HTTP Request-noder (totalt 5). - I Map Lead Data A, Map Lead Data B och Map Lead Data C mappar ni fält med uttryck som company_name =
{{ $('Fetch Company Records').item.json.company_name }}, email ={{ $json.email }}och company_id ={{ $('Update Company Domains').item.json.Id }}. - Kombinera alla lead-strömmar i Combine Leads med Number of Inputs inställt på
3, och skicka sedan vidare genom Filter Has Email och Deduplicate Emails (jämför på email).
Steg 5: Konfigurera skapande av kontakter och statusuppdateringar
Det här steget skriver kontakter till NocoDB och beräknar e-postkvalitetsstatus på företagsnivå.
- I Create Contact Entries mappar ni fält till NocoDB: companies_id =
{{ $json.company_id }}, name ={{ $json.name }}, position ={{ $json.person_job_title }}, email ={{ $json.email }}, email_status ={{ $json.email_status }}och linkedin_url ={{ $json.linkedin }}. Credential Required: Anslut eranocoDbApiToken-uppgifter. - Behåll JavaScript-logiken i Compute Email Status för att gruppera e-post per företag och markera som
riskyendast när alla e-postadresser är riskabla. - I Update Company State uppdaterar ni Id till
{{ $json.companies_id }}och sätter status tillEmail Found: {{ $json.email_status }}. Credential Required: Anslut eranocoDbApiToken-uppgifter. - I Retrieve Company Statuses behåller ni Operation
getAlloch Return Alltrueför att mata statuskontrollen. Credential Required: Anslut eranocoDbApiToken-uppgifter.
Steg 6: Konfigurera loopback för e-postverifiering
Riskabla statusar routas till företagsomfattande e-postidentifiering och loggas.
- I Check Email Found behåller ni villkoret där
{{ $json.status }}innehållerEmail Foundför att dela upp lyckade vs. riskabla flöden. - I Filter Risky Only behåller ni villkoret där
{{ $json.status }}innehållerriskyinnan det slås ihop med Combine Status Streams. - Konfigurera Fetch Company Emails med URL
https://api.anymailfinder.com/v5.1/find-email/company, batchstorlek20och body-parametern domain/company_name ={{ $json.domain ? $json.domain : $json.company_name.split(",")[0] }}. Credential Required: Anslut erahttpHeaderAuth-uppgifter. - I Update Company Emails Log sätter ni emails till
{{ $json.emails.join() }}, company_emails_status till{{ $json.email_status }}och Id till{{ $('Combine Status Streams').item.json.Id }}. Credential Required: Anslut eranocoDbApiToken-uppgifter.
Steg 7: Testa och aktivera ert arbetsflöde
Kör arbetsflödet från början till slut för att validera dataflöde och API-svar.
- Klicka Execute Workflow med Manual Run Trigger och bekräfta att Fetch Company Records returnerar data.
- Verifiera att Serper Domain Lookup och Extract Site & Domain returnerar en domän och att Update Company Domains skriver in den korrekt.
- Bekräfta att den parallella grenen från Update Company Domains fyller alla tre lead-noder och slås ihop i Combine Leads utan fel.
- Kontrollera att Create Contact Entries lägger in rader och att Update Company State uppdaterar statusfält som förväntat.
- När ni är nöjda, växla arbetsflödet till Active så att Scheduled Annual Trigger kör det automatiskt.
Vanliga fallgropar
- NocoDB-inloggningar kan löpa ut eller kräva specifika behörigheter. Om det slutar fungera, kontrollera först din NocoDB API-token och reglerna för tabellåtkomst i NocoDB-inställningarna.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om nedströms noder misslyckas på grund av tomma svar.
- Serper.dev och AnyMailFinder har båda rate limits och kvoter, så plötsliga ökningar av batchstorlek kan ge intermittenta HTTP-fel. Om det händer, minska batchstorleken och förläng pausintervallet.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du redigera output i all evighet.
Vanliga frågor
Cirka 60–90 minuter om dina API:er och tabeller är redo.
Nej. Du kopplar främst konton och mappar några fält. Den enda “kod”-delen finns redan med för att poängsätta mejlstatus.
Ja. n8n har ett gratis alternativ för egen hosting och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna in API-kostnader, som Serper.dev på cirka 1 USD per 1000 sökningar, plus AnyMailFinder-krediter och en mindre OpenAI-förbrukning.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och kör n8n bra. Egen hosting ger dig obegränsat antal exekveringar men kräver grundläggande serveradministration.
Ja, och det är en vanlig justering. Duplicera ett av stegen för roll-uppslag (som anropet “Find Marketing Lead Email”), ändra rollparametern till HR eller partnerskap, och mappa sedan vidare via motsvarande steg “Map Lead Data” innan Merge. Du kan också justera OpenAI-prompten i steget för domänextraktion om dina sökningar innehåller mycket irrelevanta resultat.
Oftast beror det på en ogiltig eller utgången API-nyckel, eller att du har nått din sökkvot. Kontrollera Serper.dev-nyckeln som används i inloggningarna för HTTP Request, och titta sedan på senaste response body i n8n:s exekveringsloggar för att bekräfta om det gäller auth, rate limiting eller en felaktigt formad query.
Hundratals per körning är realistiskt, och tusentals går att göra om du finjusterar batchning och pauser så att de matchar dina API-gränser. På n8n Cloud är taket främst antal exekveringar per månad i din plan; om du kör självhostat handlar det mer om serverresurser och hur aggressivt du batchar. AnyMailFinder-krediter blir oftast den riktiga flaskhalsen, eftersom giltiga mejladresser förbrukar krediter. Om du vill skala, börja med en liten batch, mät genomsnittliga krediter per företag och öka sedan batchstorleken långsamt.
För en flerstegs lead-pipeline som den här är n8n ofta bättre, eftersom förgreningar, filtrering, deduplicering och databasskrivningar inte blir en prissättningsgåta. Du får också möjlighet till egen hosting, vilket spelar roll när du bearbetar stora listor. Zapier eller Make kan fungera bra för enklare flöden som “ett uppslag och sedan lägg till en rad”, men de blir snabbt klumpiga när du lägger till batchning, fallbacks och statustracking. Om du är osäker, prata med en automationsexpert och beskriv din volym och dina verktyg.
När det här väl rullar slutar din företagslista vara “research-läxa” och blir en riktig prospektdatabas. Sätt upp det, låt det tugga igenom batcher och lägg tiden på budskap och erbjudanden i stället.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.