Du hittar en bra nisch. Du öppnar Google Maps. Sedan börjar du kopiera namn, webbplatser och “kanske” e-postadresser till ett ark. Tjugo minuter senare är raderna en röra och hälften av sajterna har inte ens kontaktuppgifter.
Marknadschefer som försöker mata outreach-kampanjer känner av det här snabbt. Detsamma gäller byråägare som bygger listor åt kunder och solokonsulter som bara vill ha leads från Google Maps utan att betala för ännu en databas. Målet är enkelt: en felfri, användbar lista som du faktiskt kan mejla.
Det här n8n-flödet gör Google Maps-sökningar till avduplicerade, konsekventa rader i Google Sheets med riktiga webbplatser och företagsmejladresser. Du får se hur det fungerar, vad du behöver och var folk brukar köra fast.
Så fungerar den här automationen
Se hur detta löser problemet:
n8n Workflow Template: Google Maps till Google Sheets: rensade e-postleads
flowchart LR
subgraph sg0["When chat message received Flow"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Remove Duplicates", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n2@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n3@{ icon: "mdi:cog", form: "rounded", label: "Wait1", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", 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/code.svg' width='40' height='40' /></div><br/>Extract Emails"]
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/code.svg' width='40' height='40' /></div><br/>Extract URLs"]
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/>Scrape Google Maps"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Scrape Site"]
n9@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Out Empties", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Google URLs", pos: "b", h: 48 }
n11@{ icon: "mdi:cog", form: "rounded", label: "Remove Duplicates (2)", pos: "b", h: 48 }
n12@{ icon: "mdi:database", form: "rounded", label: "Add to Sheet (or whatever yo..", pos: "b", h: 48 }
n13@{ icon: "mdi:play-circle", form: "rounded", label: "When chat message received", pos: "b", h: 48 }
n2 --> n5
n3 --> n9
n4 --> n11
n8 --> n2
n6 --> n10
n5 --> n1
n1 --> n3
n1 --> n8
n0 --> n1
n10 --> n0
n9 --> n4
n7 --> n6
n11 --> n12
n13 --> n7
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 n13 trigger
class n9,n10 decision
class n12 database
class n7,n8 api
class n5,n6 code
classDef customIcon fill:none,stroke:none
class n5,n6,n7,n8 customIcon
Utmaningen: bygga outreach-listor som inte faller isär
Google Maps ser ut som en guldgruva tills du försöker göra om det till en outreach-lista. Du tar ett företagsnamn, klistrar in en URL, öppnar webbplatsen, letar efter en kontaktsida och upprepar. Multiplicera det med 50 eller 200 listningar. Det är inte bara långsamt. Det är mentalt utmattande, och det är lätt att “råka” hoppa över de tråkiga stegen (vilket betyder att du mejlar färre verkliga beslutsfattare). Dessutom är datan inkonsekvent. Vissa rader har webbplatser, andra inte. Vissa “mejl” är bara sociala länkar. En vecka senare litar du inte ens på ditt eget ark.
Här är var det brukar haverera i verkligheten.
- Att öppna webbplatser manuellt för varje listning kan ta cirka 5 minuter per styck, och du missar ändå mejladresser som gömmer sig i footers eller på integritetssidor.
- Google Maps visar ofta spårningslänkar eller interna Google-URL:er, så din kolumn “webbplats” blir oanvändbar för scraping.
- Dubbletter smyger sig in från liknande sökningar (“Miami lawyers” och “Miami injury lawyer”), så outreach blir rörigt och pinsamt.
- Även när du hittar en mejladress varierar formateringen, raderna blir inkonsekventa och listan behöver rensas innan den är säker att skicka.
Lösningen: Google Maps → webbplatser → e-post → felfritt Google Sheet
Det här flödet bygger en praktisk lead-motor med n8n och vanliga HTTP-anrop, så du inte låses in i betalda leaddatabaser eller dyra scraping-API:er. Det startar med en lista av sökfrågor som du styr själv (som “Calgary dentist” eller “Miami lawyers”). För varje fråga hämtar det listningsdata från Google Maps, plockar ut riktiga webbplats-URL:er och filtrerar bort skräplänkar. Sedan besöker det varje webbplats, skannar sidinnehållet och plockar ut e-postadresser med mönstermatchning (i praktiken smart textparsning). Till sist städar det upp allt: tar bort tomma värden, avduplicerar och skickar konsekventa rader till en Google Sheets-flik som är redo för outreach.
Flödet startar via en chatt-liknande trigger i n8n och kör sedan Google Maps-sökningen via HTTP. Därefter extraherar och validerar kodsteg webblänkar, sedan hämtar ett nytt HTTP-anrop webbplatsinnehåll och tolkar fram e-postadresser. I slutet läggs de avduplicerade resultaten prydligt till i Google Sheets.
Vad som förändras: före kontra efter
| Det här elimineras | Effekt du märker |
|---|---|
|
|
Praktisk effekt i verkligheten
Säg att du kör 5 Google Maps-sökningar och hämtar 20 listningar per sökning (cirka 100 företag). Om du lägger ungefär 5 minuter per företag på att öppna sajten, leta efter en mejladress och klistra in allt i ett kalkylark, blir det cirka 8 timmar monotont arbete. Med det här flödet är den “manuella” delen att lägga in de 5 sökningarna i ditt Sheet och starta körningen, vilket tar kanske 10 minuter. Själva scraping och parsning tar tid att processa, men du behöver inte sitta och passa det, och resultaten hamnar i din e-postflik redo att användas.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra sökningar och resultat.
- Google-kontouppgifter för att låta n8n skriva rader.
- Åtkomst till målwebbplatser (vissa sajter blockerar scraping).
Kunskapsnivå: Medel. Du klistrar in ett Sheet-ID, kopplar Google-uppgifter och är bekväm med att testa små batcher först.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödet steg för steg
En chatt-trigger drar igång. Du startar körningen från n8n (flödet använder en chat input-trigger), vilket är smidigt när du vill testa snabbt utan att sätta upp schemaläggning direkt.
Google Maps frågas via HTTP. Flödet skickar din sökfråga till Google Maps, samlar in listningsdata och använder sedan ett kodsteg för att plocka ut webbplatslänkar i ett användbart format.
Länkar rensas och körs i batcher. Filter tar bort Google-ägda URL:er, dubbletter tas bort och en split-in-batches-loop styr hur snabbt flödet besöker webbplatser. Wait-steg lägger in fördröjningar så att du inte belastar sajter och blir blockerad.
Webbplatser hämtas, mejl extraheras och arket uppdateras. Ett annat HTTP-anrop laddar ner varje webbplats innehåll, koden för mejlparsning hittar sannolika adresser, tomma resultat kastas och den slutliga avduplicerade e-postlistan läggs till i din Google Sheets-flik “emails”.
Du kan enkelt ändra fliken för sökningar för att rikta in dig på andra städer eller nischer beroende på behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera Chat Input Trigger
Starta arbetsflödet med en chattbaserad trigger som fångar Maps-sökfrågan.
- Lägg till och öppna Chat Input Trigger.
- Behåll standardinställningarna eller anpassa chattupplevelsen i Options vid behov.
- Koppla Chat Input Trigger till Query Maps Search för att skicka vidare användarens
{{$json.chatInput}}.
Steg 2: Bygg kedjan för Maps-sökning och länkextrahering
Hämta Google Maps-resultat, extrahera webbplatslänkar och ta bort oönskade Google-URL:er.
- Öppna Query Maps Search och ställ in URL till
=https://www.google.com/maps/search/{{ $json.chatInput }}. - I Query Maps Search, behåll Response inställt på full response och låt Allow Unauthorized Certs vara aktiverat om det finns.
- Öppna Pull Web Links och klistra in den tillhandahållna JavaScript Code som extraherar URL:er via regex.
- Konfigurera Exclude Google Links med de fyra Not Contains-villkoren med
{{ $json.website }}motschema,google,ggochgstatic. - Skicka resultaten till Deduplicate Links för att eliminera duplicerade webbplatser.
Steg 3: Konfigurera batchning och hämtningsfördröjningar
Iterera igenom varje webbplats och sprid ut anropen för att undvika rate limiting.
- Öppna Iterate Records för att dela upp inkommande URL:er i batcher med standardalternativen.
- Koppla Iterate Records till Pause Before Fetch för att strypa anrop innan ni filtrerar e-postadresser.
- Koppla Iterate Records till Fetch Website Content för att hämta varje webbplats HTML-innehåll.
- I Fetch Website Content, ställ in URL till
={{ $json.website }}. - Öppna Delay Between Sites och ställ in Amount till
1för att lägga in en paus mellan webbskrapningar. - Säkerställ att Fetch Website Content går vidare till Delay Between Sites, och därefter till Parse Email Addresses.
Steg 4: Extrahera, rensa och avduplicera e-postadresser
Tolka e-postadresser från sidinnehåll, filtrera bort tomma resultat och platta ut till enskilda poster.
- Öppna Parse Email Addresses och behåll den tillhandahållna JavaScript Code med regex för e-postmatchning.
- Koppla Parse Email Addresses till Iterate Records för att fortsätta bearbeta varje batch.
- Konfigurera Remove Empty Emails med villkoret Array exists med
{{ $json.emails }}. - I Expand Email List, ställ in Field to Split Out till
emails. - Skicka resultaten till Deduplicate Emails för att ta bort dubbletter innan ni sparar.
{ emails: [...] } och inte null.Steg 5: Konfigurera utdata till Google Sheets
Lägg till rensade e-postadresser i ert kalkylark.
- Öppna Append to Spreadsheet och ställ in Operation till
append. - Välj ert kalkylark i Document ID och ersätt platshållaren
[YOUR_ID]med rätt fil. - Ställ in Sheet Name till målfliken (för närvarande
gid=0, med namnetemails). - Under Columns, mappa emails till
={{ $json.emails }}. - Credential Required: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter.
Steg 6: Testa och aktivera ert arbetsflöde
Validera hela flödet från chattinput till utdata i kalkylarket och aktivera det sedan för produktion.
- Klicka på Execute Workflow och ange en exempelquery i Chat Input Trigger (t.ex.
dentists in Austin). - Bekräfta att Query Maps Search returnerar HTML, att Pull Web Links extraherar URL:er och att Parse Email Addresses ger en lista med e-postadresser.
- Verifiera att rader dyker upp i ert Google Sheet efter att Append to Spreadsheet har körts.
- Växla arbetsflödet till Active för att använda det i produktion.
Se upp med
- Google Sheets-uppgifter kan löpa ut eller kräva specifika behörigheter. Om något går sönder, börja med att kontrollera n8n:s behörighetsskärm och din Google-kontoåtkomst.
- Om du använder Wait-noder eller extern hämtning varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Scraping via HTTP Request kan blockeras av vissa webbplatser. Om du plötsligt får tomt innehåll, kontrollera svarskoder i HTTP-noderna och överväg att sakta ner batcher eller justera headers.
Vanliga frågor
Cirka 1–2 timmar första gången, främst för uppsättning och test.
Ja, men du behöver någon som är bekväm med att koppla Google Sheets och testköra. Ingen tung kodning, även om flödet innehåller JavaScript-noder som du oftast lämnar som de är.
Ja. n8n har ett gratis alternativ för egen drift 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 generella hostingkostnader om du kör själv (och ibland extra tid för att hantera blockeringar från webbplatser).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärd och hanterar n8n bra. Egen drift ger dig obegränsade körningar men kräver grundläggande serveradministration.
Du kan byta inmatningsmetod genom att ersätta Chat Input Trigger med ett schema eller en manuell webhook, beroende på hur du vill köra jobb. De flesta anpassningar sker i Google Sheets-upplägget (fliken med sökningar) och i kodstegen som “Pull Web Links” och “Parse Email Addresses”. Vanliga justeringar är att lägga till extra filter för vissa branscher, ändra batchstorlek i split-in-batches-loopen och justera vilka kolumner som läggs till i Google Sheets.
Oftast beror det på utgångna Google-uppgifter eller saknade behörigheter för det aktuella kalkylarket. Återanslut Google Sheets-behörigheten i n8n och bekräfta sedan att dokument-ID:t för Google Sheet är korrekt i flödet. Om det fortfarande fallerar, kontrollera om arket ägs av ett annat Google-konto eller är låst av en Workspace-administratör.
Om du kör egen drift beror kapaciteten främst på din server och hur aggressivt du scrape:ar.
För det här användningsfallet oftast ja, eftersom flödet bygger på HTTP-anrop, loopar, filter och några kodsteg som är klumpiga (eller dyra) i Zapier och Make. n8n låter dig också köra egen drift, vilket spelar roll när du kör många körningar och inte vill att prissättning per task ska skena. Zapier och Make fungerar fortfarande bra för lätta tvåstegsautomationer, men lead-flöden med scraping tenderar att växa ur dem snabbt. Ärligt talat är den större faktorn tillförlitlighet: med n8n kan du lägga in väntetider, retries och logikgrenar utan att göra det till en skör kedja av zaps. Prata med en automationsexpert om du vill ha hjälp att välja rätt stack.
När detta väl rullar slutar listbyggande att vara ett ångestprojekt och blir ett repeterbart system. Flödet tar hand om det repetitiva grävandet så att du kan fokusera på budskap och 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.