Du börjar med ett enkelt mål: bygga en felfri lista med prospekt från Google Maps. Sedan inser du att du copy-pastar företagsnamn, rättar till röriga format och tar bort dubbletter för hand. Igen.
Den här automatiseringen för Maps-leads slår hårdast mot marknadsförare när pipelinen är tunn, men byråägare och drivna småföretagare känner av den också. Du förvandlar postnummer och kategorier till ett strukturerat Google Sheet som du faktiskt kan göra outreach från.
Nedan ser du vad workflowet gör, vad du får ut av det och hur du kör det utan att betala för dyra scraping-verktyg.
Så fungerar den här automatiseringen
Hela n8n-workflowet, från trigger till slutresultat:
n8n Workflow Template: Google Maps till Google Sheets: leads loggas strukturerat
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:database", form: "rounded", label: "Update Status to Success", pos: "b", h: 48 }
n1@{ icon: "mdi:database", form: "rounded", label: "Add rows in Google Sheets", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Exponential Backoff"]
n3@{ icon: "mdi:cog", form: "rounded", label: "Remove Duplicates", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Wait", 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/>Exponential Backoff1"]
n6@{ icon: "mdi:cog", form: "rounded", label: "Wait1", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Subcats", pos: "b", h: 48 }
n8@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check maximum retries.", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "get subcategory", pos: "b", h: 48 }
n11@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter subcategori", pos: "b", h: 48 }
n12@{ icon: "mdi:database", form: "rounded", label: "Get Subcategory form sheet", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop", pos: "b", h: 48 }
n14@{ icon: "mdi:database", form: "rounded", label: "Get All Zip Code", pos: "b", h: 48 }
n15@{ icon: "mdi:cog", form: "rounded", label: "Limit", pos: "b", h: 48 }
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/telegram.svg' width='40' height='40' /></div><br/>Send a text message"]
n17@{ icon: "mdi:cog", form: "rounded", label: "Do nothing", pos: "b", h: 48 }
n18@{ icon: "mdi:web", form: "rounded", label: "Rapiwa", 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/discord.svg' width='40' height='40' /></div><br/>Send a message"]
n20@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Place", 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/>Place"]
n22@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Google Map API"]
n24@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set zip", pos: "b", h: 48 }
n25@{ icon: "mdi:database", form: "rounded", label: "Get Status", pos: "b", h: 48 }
n26@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Max Retries", pos: "b", h: 48 }
n22 --> n7
n22 --> n21
n13 --> n12
n4 --> n26
n15 --> n13
n21 --> n20
n6 --> n9
n24 --> n23
n8 --> n14
n20 --> n3
n17 --> n18
n17 --> n16
n17 --> n19
n25 --> n0
n25 --> n17
n7 --> n13
n7 --> n24
n23 --> n22
n10 --> n7
n14 --> n15
n26 --> n17
n26 --> n1
n3 --> n1
n11 --> n10
n2 --> n4
n5 --> n6
n9 --> n17
n9 --> n0
n0 --> n7
n0 --> n5
n1 --> n25
n1 --> n2
n12 --> n11
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 n8 trigger
class n9,n11,n22,n26 decision
class n0,n1,n12,n14,n25 database
class n18,n23 api
class n2,n5,n21 code
classDef customIcon fill:none,stroke:none
class n2,n5,n16,n19,n21,n23 customIcon
Problemet: Google Maps-leads blir snabbt röriga
Att hämta leads från Google Maps låter enkelt tills du gör det i skala. Ett postnummer blir tio. En kategori blir fem underkategorier. Plötsligt hanterar du ett lapptäcke av flikar, halvfärdiga exporter och “har vi redan kontaktat dem?”-gissningar. Än värre: dubbletter smyger in under lite olika namn, så dina säljare kontaktar samma företag två gånger. Det blir stelt. Och dyrt, för den verkliga kostnaden är inte kalkylarket. Det är timmarna av fokus du bränner innan du ens skickar första mejlet.
Friktionen bygger upp sig. Här är var det oftast faller isär.
- Manuell sökning postnummer för postnummer äter upp ett par timmar varje vecka, och du missar ändå företag.
- Dubbletter hopar sig eftersom listningar ändras, namn varierar och ingen vill avduplicera ett ark med 600 rader.
- Rate limits och tillfälliga API-fel stoppar scraping mitt i körningen, så din “automatiserade” process behöver passning.
- Lead-data landar i olika format, vilket betyder sortering, filtrering och formatering innan outreach ens kan börja.
Lösningen: schemalagd Google Maps → Sheets-leadhämtning
Det här n8n-workflowet körs enligt schema och förvandlar en enkel inmatningslista (postnummer plus Google Maps-kategorier) till en felfri, växande leaddatabas i Google Sheets. Det hämtar postnummer från en flik, hämtar underkategorier från en annan, och frågar sedan Google Maps API för varje kombination av postnummer + underkategori. När resultaten kommer tillbaka omvandlar workflowet rå platsdata till konsekventa fält som du kan använda för outreach, rapportering och filtrering. Det hoppar över poster markerade som “N/A”, tar bort dubbletter med det unika place.id, och lägger bara till nya poster i din resultatflik. När något går fel (rate limits är vanliga) väntar det, försöker igen med backoff, och ger upp efter ett definierat max antal försök i stället för att loopa för evigt.
Workflowet startar med en planerad schematrigger. Sedan loopar det igenom underkategorier och postnummer i batchar, anropar Google Maps, strukturerar och avduplicerar datan, och skriver till sist felfria rader till Google Sheets. Aviseringar till Telegram, Discord och WhatsApp kan skickas via en no-op-gren, så att du blir notifierad utan att avbryta leadhämtningen.
Det här får du: automatisering vs. resultat
| Det här automatiserar workflowet | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du bygger leads för 10 postnummer och 5 underkategorier. Att göra det manuellt är ungefär 50 sökningar, och om varje tar cirka 5 minuter att hitta, kopiera detaljer och klistra in i Sheets, är det runt 4 timmars arbete. Med det här workflowet uppdaterar du postnummer- och kategoriflikarna en gång, och låter sedan timschemat köra. Ditt “arbete” blir en snabb kontroll av resultatfliken och en titt på aviseringar, kanske 10 minuter, medan n8n sköter resten i bakgrunden.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger funkar bra)
- Google Sheets för postnummer, kategorier och lagring av resultat
- Google Maps API för att slå upp företag via sökfrågor
- Telegram Bot API (hämta det via BotFather i Telegram)
Kunskapsnivå: Medel. Du är bekväm med att redigera sheet-ID:n, lägga till credentials och testa en körning en gång.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En schemalagd körning drar igång. Workflowet använder en planerad trigger (timmarvis som standard), så leadinsamlingen sker konsekvent i stället för “när du kommer ihåg”.
Postnummer och kategorier hämtas från Sheets. En flik innehåller postnummer, en annan innehåller Maps-kategorier/underkategorier. n8n tillämpar en postgräns (standard batchstorlek är 10 postnummer) så att du kan styra volymen och undvika att belasta API:t för hårt.
Google Maps frågas i batchar. För varje postnummer + underkategori-par skickas en HTTP-förfrågan till Google Maps API. Om API:t rate-limit:ar dig väntar retry-logiken och försöker igen, med ett hårt stopp efter 10 försök så att det inte kör för evigt.
Felfria rader hamnar i din resultatflik. Platsdetaljer omvandlas, dubbletter tas bort via place.id, och bara den slutliga uppsättningen läggs till i resultatfliken. Status spåras så att färdiga postnummer/underkategori-par kan markeras och hoppas över senare.
Du kan enkelt ändra batchgränsen för postnummer för att öka volymen eller sakta ner baserat på din API-kvot. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera Planned Trigger
Ställ in arbetsflödets schema så att lead-insamlingen körs automatiskt.
- Lägg till noden Planned Trigger och öppna dess inställningar.
- Definiera önskat schema (t.ex. dagligen eller varje timme) i Planned Trigger.
- Koppla Planned Trigger till Retrieve Zip Codes för att starta dataflödet.
Steg 2: anslut Google Sheets
Konfigurera kalkylbladsindata och -utdata som används i hela arbetsflödet.
- Öppna Retrieve Zip Codes och välj det kalkylblad och den flik som lagrar era postnummer.
- Öppna Fetch Subcategory Sheet och ange kalkylbladet som innehåller er lista med underkategorier.
- Öppna Append Sheet Rows och konfigurera målfliken för att skriva nya leads.
- Öppna Fetch Status och konfigurera fliken för statusspårning.
- Öppna Mark Status Successful och ställ in den så att den uppdaterar statuskolumnen när ett lead har behandlats framgångsrikt.
- Credential Required: Anslut era Google Sheets-inloggningsuppgifter i alla Google Sheets-noder (5 noder hanterar postnummer, underkategorier, tillägg av leads och statusuppdateringar).
Steg 3: sätt upp underkategori- och batchbearbetning
Förbered datapipelinen som filtrerar underkategorier och itererar genom batchar.
- I Fetch Subcategory Sheet säkerställer ni att den matar vidare till Filter Subcategory List.
- Konfigurera Filter Subcategory List så att endast giltiga underkategorier för er lead-sökning behålls.
- Använd Map Subcategory för att mappa underkategorifält till den struktur som krävs längre fram.
- Konfigurera Iterate Subcategories och Batch Iteration för att bearbeta underkategorier och postnummer i batchar.
- Använd Apply Record Limit för att begränsa antalet postnummer per körning.
Steg 4: konfigurera Maps API och lead-transformering
Anropa Maps API, transformera resultat och förbered poster för lagring.
- I Assign Zip Code mappar ni aktuellt postnummer till de fält som används för API-begäran.
- Konfigurera Google Maps API Call med er API-endpoint och parametrar.
- Credential Required: Lägg till autentisering för Google Maps API Call (API-nyckel eller lämplig autentiseringsmetod).
- Använd Conditional Check för att routa lyckade API-svar till Iterate Subcategories och misslyckade svar till Place Transformation.
- Transformera API-svaret i Place Transformation och mappa fält i Assign Place Fields.
- Använd Deduplicate Records för att ta bort dubbletter innan ni skriver till Google Sheets.
Steg 5: konfigurera utgående notiser och statusuppdateringar
Skicka notiser och hantera statusuppdateringar efter lead-bearbetning.
- Säkerställ att Append Sheet Rows skriver nyligen avdubbletterade leads till er målflik.
- Bekräfta att Fetch Status och Mark Status Successful är kopplade för att uppdatera bearbetningsstatusar.
- Koppla No-Op Handler till dess parallella utgångar för meddelanden.
- No-Op Handler skickar utdata parallellt till både Rapiwa Connector samt Dispatch Telegram Text och Post Discord Message.
- Credential Required: Anslut era Rapiwa-inloggningsuppgifter i Rapiwa Connector.
- Credential Required: Anslut era Telegram-inloggningsuppgifter i Dispatch Telegram Text.
- Credential Required: Anslut era Discord-inloggningsuppgifter i Post Discord Message.
Steg 6: konfigurera logik för försök igen och backoff
Sätt upp arbetsflödets kontroller för omförsök och fördröjning för att hantera rate limits och fel på ett robust sätt.
- Använd Backoff Delay Logic för att beräkna väntetider för omförsök och koppla den till Pause Execution.
- Använd Retry Backoff Logic för att hantera fördröjningar för omförsök efter status och koppla den till Hold Execution.
- Säkerställ att Pause Execution routar till Evaluate Max Retries och att Hold Execution routar till Verify Retry Limit.
- Bekräfta att Evaluate Max Retries och Verify Retry Limit skickar händelser till No-Op Handler när gränserna för omförsök har nåtts.
Steg 7: testa och aktivera ert arbetsflöde
Kör ett manuellt test och aktivera automatiseringen för produktion.
- Klicka på Execute Workflow för att köra ett manuellt test från Planned Trigger.
- Bekräfta att leads läggs till i Append Sheet Rows och att status uppdateras via Fetch Status → Mark Status Successful.
- Verifiera att No-Op Handler skickar meddelanden via Rapiwa Connector, Dispatch Telegram Text och Post Discord Message.
- Om testet lyckas, slå på arbetsflödet Active för att aktivera schemalagda körningar via Planned Trigger.
Vanliga fallgropar
- Google Sheets-credentials kan löpa ut eller kräva specifika behörigheter. Om det skapar fel, kontrollera sidan Credentials i n8n och bekräfta att det anslutna Google-kontot fortfarande har åtkomst till kalkylarket.
- Om du använder Wait-noder eller extern bearbetning varierar tiderna. Öka väntetiden om noder längre fram misslyckas på tomma svar efter en rate limit eller ett långsamt API-svar.
- Google Maps API-kvoter är på riktigt, och workflowet försöker igen upp till 10 gånger. Om du ser upprepade backoff-loopar, kontrollera din Google Cloud-konsol för kvotgränser och faktureringsstatus.
Vanliga frågor
Cirka 30 minuter om ditt Google Sheet är redo.
Nej. Du kopplar mest ihop konton och klistrar in rätt sheet-ID:n och API-nyckel.
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 volym. Du behöver också räkna in användningen av Google Maps API, som beror på din frågevolym och Googles prissättning.
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 dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är huvudskälet till att den här setupen skalar. Byt kategori-/underkategori-inmatning genom att redigera arket “maps categories” och noderna som mappar och filtrerar underkategorilistan (Filter Subcategory List och Map Subcategory). För att ändra volym justerar du Limit-noden (den är som standard 10 postnummer per batch). Du kan också justera schematriggern om timvis är för ofta, eller inte ofta nog.
Oftast beror det på utgången OAuth-åtkomst eller att kalkylarket flyttats till en annan plats i Drive. Återanslut Google Sheets-credentials i n8n och bekräfta sedan att samma Google-konto kan öppna arket i webbläsaren. Kontrollera också dokument-ID:t och varje fliks gid-värde i workflowet, eftersom en omdöpt eller utbytt flik kan se ut som “behörighetsproblem” när det egentligen är ett ID som inte matchar.
Med self-hosted n8n finns ingen körningsgräns, så det beror främst på din server och din Google Maps API-kvot.
För den här typen av workflow är n8n oftast det praktiska valet eftersom batchning, retries och avdupliceringslogik snabbt blir komplexa. Zapier och Make kan göra det, men du hamnar ofta i högre kostnader när antalet tasks växer och logiken förgrenar sig. n8n ger dig också self-host-alternativet, vilket är smidigt när du kör schemalagda hämtningar hela dagen. Nackdelen är uppsättningen: du lägger lite mer tid på att konfigurera ID:n och credentials. Vill du att någon kvalitetssäkrar din approach? Prata med en automationsexpert.
När det här väl rullar växer din lead-lista medan du gör annat. Ärligt talat är det hela poängen.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.