Leadlistor faller isär på de tråkiga ställena. Du hittar företag på Google Maps, öppnar tio flikar, försöker hitta en e-postadress, klistrar in den i ett ark och inser sedan att du råkade ta samma företag två gånger.
Den här Google Maps Airtable-automationen träffar B2B-marknadsförare först, men lead gen-frilansare och små säljteam känner av den lika mycket. Du får en strukturerad tabell med företag med riktiga e-postadresser (när de finns), färre dubbletter och betydligt mindre manuellt efterarbete.
Nedan ser du exakt hur workflowet hämtar resultat från Google Maps, besöker varje webbplats som en riktig användare, extraherar en giltig e-postadress och sedan upsertar den till Airtable så att din outreach kan starta direkt.
Så fungerar den här automationslösningen
Hela n8n-workflowet, från trigger till slutlig output:
n8n Workflow Template: Google Maps till Airtable, rensade leads utan copy paste
flowchart LR
subgraph sg0["On form submission Flow"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Limit", 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/form.svg' width='40' height='40' /></div><br/>On form submission"]
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Run an Actor", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Get dataset items", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Grab Desired Fields", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", 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/markdown.dark.svg' width='40' height='40' /></div><br/>Markdown"]
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items1", pos: "b", h: 48 }
n8@{ icon: "mdi:cog", form: "rounded", label: "Wait1", 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/merge.svg' width='40' height='40' /></div><br/>Merge"]
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "Grab Desired Fields1", 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: "Parse url/website", 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/>Remove Query Parameters & Fr.."]
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "User-Agents", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Website Scraping"]
n16@{ icon: "mdi:cog", form: "rounded", label: "Random Wait", pos: "b", h: 48 }
n17["<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 Email Address"]
n18@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Leads with Email only", 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/airtable.svg' width='40' height='40' /></div><br/>Database"]
n0 --> n5
n9 --> n5
n8 --> n11
n11 --> n7
n6 --> n16
n16 --> n9
n14 --> n15
n2 --> n3
n5 --> n7
n5 --> n12
n5 --> n9
n7 --> n18
n7 --> n17
n7 --> n11
n15 --> n6
n3 --> n4
n12 --> n13
n1 --> n2
n4 --> n0
n10 --> n19
n17 --> n8
n18 --> n10
n13 --> n14
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 n1 trigger
class n2,n3,n18 decision
class n19 database
class n15 api
class n13,n17 code
classDef customIcon fill:none,stroke:none
class n1,n6,n9,n11,n13,n15,n17,n19 customIcon
Problemet: Google Maps-leads är röriga att samla in
Google Maps är bra för att hitta företag, men det är inte byggt för att skapa en användbar outreach-lista. Du klickar in på en profil, kopierar en webbplats, öppnar den, hoppas att det finns en kontaktsida och börjar sedan jaga en e-postadress i sidhuvud, sidfot eller på en nedgrävd “Om oss”-sida. Gör det 20 gånger. Det går långsamt, det splittrar fokus och det är lätt att missa uppenbara e-postadresser när du stressar. Och även när du lyckas blir din “databas” ett kalkylark med inkonsekvent formatering, dubbletter och halvfyllda fält som ingen litar på.
Det bygger snabbt på. Här är var det brukar fallera i verkligheten.
- Att samla 30 leads kan ta runt 2 timmar när du räknar in flikbytande och efterstädning.
- Du får dubbletter eftersom “Acme Plumbing” dyker upp med små skillnader i namnet.
- E-postadresser missas eftersom du bara kollade startsidan och gick vidare.
- Manuell copy-paste bjuder in misstag, och de misstagen syns senare i form av studsad outreach.
Lösningen: hämta leads, skrapa e-post och upserta till Airtable
Det här workflowet gör en Google Maps-sökning till en outreach-klar leadlista utan flikkaoset. Det börjar med ett enkelt formulär där du anger ett nyckelord, en plats och hur många leads du vill ha (10 som standard). n8n kör sedan en Apify Google Maps-actor för att hämta matchande företag, plockar ut nyckelfälten du bryr dig om och processar dem i batcher för att hålla det stabilt. För varje företag besöker det webbplatsen med lätta HTTP-förfrågningar, roterar User-Agent-headers för att se mer ut som normal surfning och väntar några sekunder mellan anropen för att minska blockering. HTML konverteras till strukturerad text, sedan extraherar workflowet den första giltiga e-postadressen det kan hitta, filtrerar bort tomma resultat och sparar strukturerade poster i Airtable med en upsert-metod för att undvika dubbletter.
Workflowet startar när du skickar formuläret i n8n. Därifrån samlar Apify in företagsdata från Google Maps, sedan loopar n8n igenom varje webbplats för att hämta innehåll och extrahera en e-postadress. Till sist får Airtable bara de leads som godkänns i valideringen, formaterade och redo för din nästa kampanj.
Det här får du: automation vs. resultat
| Vad det här workflowet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du vill ha 25 “takläggare” i Austin. Manuellt kan du lägga runt 5 minuter per företag mellan Google Maps, webbplatsen och ditt kalkylark, vilket blir ungefär 2 timmar totalt. Med det här workflowet skickar du formuläret på cirka 2 minuter och låter sedan skrapern jobba i bakgrunden med inbyggda fördröjningar (några sekunder per sida) medan den extraherar e-post och filtrerar bort skräp. Du granskar fortfarande den färdiga Airtable-tabellen, men det är oftast 10 minuter, inte en hel eftermiddag.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger fungerar bra)
- Apify för att skrapa företagsdata från Google Maps.
- Airtable för att lagra leads och avduplicera via upsert.
- Apify API-nyckel (hämta den i inställningarna för ditt Apify-konto)
Kunskapsnivå: Medel. Du kopplar in credentials och kan behöva justera ett par steg för fältmappning i n8n.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En formulärinsändning startar allt. Du anger ett söknyckelord, en målplats och hur många leads du vill få tillbaka. Den enda inputen gör workflowet återanvändbart för olika nischer och städer.
Google Maps-resultat samlas in och begränsas. Apify söker på Google Maps, sedan hämtar n8n datasetposterna, väljer fälten du bryr dig om (som namn, telefon, webbplats, kategori) och begränsar bearbetningen så att du inte råkar hämta hundratals resultat.
Webbplatser besöks försiktigt, inte aggressivt. Varje leads webbplats-URL städas så att endast spårningsskräp tas bort (query strings och fragments), och hämtas sedan via HTTP med roterande User-Agent-headers. Workflowet konverterar HTML till läsbar text och pausar några sekunder mellan anropen, vilket hjälper för att undvika rate limits och enkel bot-detektering.
E-post extraheras, valideras och lagras. Workflowet skannar den strukturerade texten efter en e-postadress, filtrerar bort saknade eller ogiltiga resultat och skickar sedan bara bra leads till Airtable. Airtable-steget använder ett upsert-mönster, så att upprepade körningar inte fortsätter skapa dubbletter.
Du kan enkelt ändra vilka fält du sparar så att det matchar din base, till exempel genom att lägga till betyg eller kategorier från Apify. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera triggern för formulärinsändning
Skapa formuläret som startar arbetsflödet och fångar användarinmatning för nyckelord, plats och antal leads.
- Lägg till och öppna Form Submission Trigger.
- Ställ in Form Title till
Web Scraper. - Ställ in Form Description till
This scrapes website urls from Google Maps to get company information.. - Lägg till formulärfält: Keyword (obligatoriskt), Location (obligatoriskt) och No. Of Leads med platshållaren
10.
Steg 2: Anslut Apify för Google Maps-data
Kör Apify-aktorn och hämta datasetposter baserat på formulärinmatningen.
- Öppna Launch Apify Task och ställ in Operation till
Run actor. - Ställ in Timeout till
120och Wait for Finish till20. - Klistra in Custom Body exakt som:
={ "language": "en", "locationQuery": "{{ $json.Location }}", "maxCrawledPlacesPerSearch": {{ $json['No. Of Leads'] ? Number($json['No. Of Leads']) : 10 }}, "searchStringsArray": [ "{{ $json.Keyword }}" ], "skipClosedPlaces": false, "website": "withWebsite" }. - Autentiseringsuppgifter krävs: Anslut era apifyApi-inloggningsuppgifter i Launch Apify Task.
- Öppna Retrieve Dataset Records och ställ in Resource till
Datasets. - Ställ in Operation till
Get itemsoch Dataset ID till={{ $json.defaultDatasetId }}. - Autentiseringsuppgifter krävs: Anslut era apifyApi-inloggningsuppgifter i Retrieve Dataset Records.
Steg 3: Forma och batcha datasetresultaten
Normalisera datasetutdata, begränsa volymen och dela upp posterna i batchar för vidare bearbetning.
- I Select Target Fields mappar ni fält exakt: Company Name till
={{ $json.title }}, Company Category till={{ $json.categoryName }}, Address till={{ $json.address }}, Website till={{ $json.website }}, Phone Number till={{ $json.phoneUnformatted }}, Rating till={{ $json.totalScore }}och Other Categories till={{ $json.categories }}. - I Cap Items ställer ni in Max Items till
30. - Använd Batch Iterator som split-nod för att bearbeta varje post.
Steg 4: Hämta webbplatsens HTML och extrahera e-postadresser
Förbered URL:er, rotera user agents, skrapa HTML, konvertera till markdown och extrahera e-postadresser.
- I Parse Site URL ställer ni in website till
={{ $json.Website }}. - I Clean URL Parts behåller ni den angivna JavaScript-koden för att normalisera URL:er och ta bort query strings.
- I Assign User Agents ställer ni in website till
={{ $json.website }}och ställer in User-Agent till det slumpade array-uttrycket={{ [ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Safari/605.1.15", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36", "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:118.0) Gecko/20100101 Firefox/118.0" ][Math.floor(Math.random() * 5)] }}. - I Assign User Agents ställer ni in Accept till
text/html,*/*;q=0.8, Accept-Language tillen-US,en;q=0.9och Referer tillhttps://google.com/. - I Fetch Website HTML ställer ni in URL till
={{ $json.website }}och aktiverar Send Headers med User-Agent, Accept-Language, Referer och Accept mappade från inkommande JSON. - I Markdown Converter ställer ni in HTML till
={{ $json.data }}. - I Randomized Pause ställer ni in Amount till
={{ Math.floor(Math.random() * 6 + 2) }}för att strypa förfrågningarna. - Behåll Combine Streams i Mode
combinemed Combine By inställt tillcombineByPosition. - I Extract Email Data behåller ni den angivna JavaScript-koden för att extrahera och avduplicera e-postadresser.
- I Delay Step ställer ni in Amount till
1för att sekvensera sammanslagningen säkert. - Behåll Merge Email Results i Mode
combinemed Combine By inställt tillcombineByPosition.
Steg 5: Filtrera giltiga e-postadresser och färdigställ fält
Ta bort ogiltiga e-postresultat och bygg de slutliga postfälten innan ni skickar till Airtable.
- I Secondary Batch Loop behåller ni split-in-batches-konfigurationen för att iterera över varje skrapad webbplats.
- I Filter Valid Emails behåller ni villkoret: email
notEqualsN/Amed={{ $json.email }}. - I Finalize Field Set mappar ni fält: Company Name till
={{ $json['Company Name'] }}, Company Category till={{ $json['Company Category'] }}, Address till={{ $json.Address }}, Website till={{ $json.Website }}, Phone Number till={{ $json['Phone Number'] }}, Rating till={{ $json.Rating }}, Email till={{ $json.email }}och Other Categories till={{ $json['Other Categories'] }}.
Steg 6: Konfigurera utdata till Airtable
Upserta de färdigställda posterna till Airtable med e-post som matchningsfält.
- Öppna Airtable Upsert och ställ in Operation till
upsert. - Välj er Base och Table för att ersätta
[YOUR_ID]-platshållarna. - Mappa Columns till de angivna uttrycken: Email
={{ $json.Email }}, Rating={{ $json.Rating }}, Website={{ $json.Website }}, Category={{ $json['Company Category'] }}, Location={{ $json.Address }}, Phone Number={{ $json['Phone Number'] }}, Business Name={{ $json['Company Name'] }}och Other Categories={{ $json['Other Categories'].join() }}. - Ställ in Matching Columns till
Email. - Autentiseringsuppgifter krävs: Anslut era airtableTokenApi-inloggningsuppgifter i Airtable Upsert.
Steg 7: Testa och aktivera ert arbetsflöde
Validera att arbetsflödet körs från början till slut och skickar poster till Airtable korrekt.
- Klicka på Execute Workflow och skicka in formuläret från Form Submission Trigger med ett exempel på Keyword och Location.
- Bekräfta att Retrieve Dataset Records matar ut poster och att Select Target Fields visar mappade fält.
- Verifiera att Extract Email Data matar ut en giltig email och att Filter Valid Emails bara släpper igenom värden som inte är
N/A. - Kontrollera Airtable Upsert för lyckade upserts i er måltabell.
- Slå på arbetsflödet till Active för användning i produktion.
Vanliga fallgropar
- Airtable-credentials kan gå ut eller kräva specifika behörigheter. Om något skapar fel, kontrollera först scopes på din Airtable personal access token samt åtkomst till base/tabell.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre fram misslyckas på grund av tomma svar.
- Apify-taskinställningar spelar större roll än de flesta tror. Om du får tunna resultat, verifiera actor-input (nyckelord, platsformat) och bekräfta att datasetet faktiskt fylls på innan n8n försöker läsa det.
Vanliga frågor
Cirka 30 minuter om dina Apify- och Airtable-konton är klara.
Nej. Du kopplar främst in credentials och mappar några fält. De enda “kod”-delarna är redan inbyggda i workflowet.
Ja. n8n har ett gratis self-hosted-alternativ 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 Apify-kostnader baserat på hur många Google Maps-resultat du skrapar.
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 hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja, men du byter lagringssteget. Ersätt Airtable Upsert-noden med en Google Sheets append/upsert-åtgärd och uppdatera sedan “Finalize Field Set”-mappningen så att kolumnnamn matchar ditt ark. Vanliga justeringar är att spara fler Apify-fält (betyg, kategorier), ändra e-postregeln så att den fångar mer än en e-postadress och justera batchstorlek när du hämtar större listor.
Oftast handlar det om token eller scopes. Skapa en ny Airtable personal access token, säkerställ att den kan läsa/skriva till den base du valt, och välj sedan om base/tabell i Airtable-noden så att n8n uppdaterar sitt schema. Kontrollera också ditt val av unikt fält för upsert, eftersom en tom eller felmatchad nyckel kan se ut som ett “anslutningsproblem” när det egentligen är ett mappningsproblem.
I praktiken kan den hantera hundratals per körning, men hastigheten begränsas av de inbyggda väntetiderna (det är avsiktligt) och av webbplatsers svarstider.
För leadinsamling i skrapningsstil är svaret oftast ja. Zapier och Make är bra för enkel “app till app”-synk, men de är inte lika bekväma med loopar i flera steg, HTML-hämtning, slumpade väntetider och filtreringslogik i ett och samma scenario. n8n är också enklare att self-hosta, vilket spelar roll när du kör många exekveringar och inte vill att varje steg ska debiteras. Nackdelen är uppsättningen: du lägger lite mer tid på att finjustera Apify-inputs och fältmappningar. Om du vill ha en snabb rekommendation för din volym och dina verktyg, prata med en automationsexpert.
När detta väl är igång slutar leadinsamling vara en research-uppgift och blir ett repeterbart system. Workflowet tar hand om det monotona, och du kan fokusera på outreach som faktiskt bokar möten.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.