Google Maps to Google Sheets, leads ready to email
You find a solid business on Google Maps, open ten tabs, hunt for a real website, skim for “what they do,” then try to write an email that doesn’t sound copied. It’s exhausting. And the worst part is how slow it is.
Sales reps feel this when pipeline is thin. A marketing agency doing local outreach feels it when they need volume without sounding spammy. Even a freelancer pitching SEO or web design runs into the same wall. This Google Maps leads automation turns “research + draft” into a repeatable, mostly hands-off workflow.
You’ll see how it pulls leads from Google Maps, analyzes each business website, and drops ready-to-review email drafts into Google Sheets so you can send faster (and with more confidence).
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Google Maps to Google Sheets, leads ready to email
flowchart LR
subgraph sg0["Manual Launch Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Launch Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Setup Parameters", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Iterate Records", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Validate Website Presence", 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/>Retrieve Site HTML"]
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/>Parse Site Text"]
n6@{ icon: "mdi:robot", form: "rounded", label: "Compose Tailored Email", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Append to Sheets", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Fetch Actor Runs", pos: "b", h: 48 }
n0 --> n1
n2 --> n3
n4 --> n5
n8 --> n2
n7 --> n2
n5 --> n6
n1 --> n8
n3 --> n4
n6 --> 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 n0 trigger
class n6 ai
class n3,n8 decision
class n7 database
class n4 api
class n5 code
classDef customIcon fill:none,stroke:none
class n4,n5 customIcon
The Challenge: Turning Map Listings Into Outreach That Doesn’t Suck
Google Maps is great for discovery, but terrible for doing outreach at scale. You can find 30 promising businesses in a search, then spend the next couple hours copying names, addresses, phone numbers, and URLs into a sheet. After that comes the “personalization” part: reading each website, trying to understand what makes them different, and writing an email that sounds like you actually looked. Miss a detail, and you send a message with the wrong service, the wrong city, or a generic pitch that gets ignored. It’s not hard work. It’s grindy work.
The friction compounds once you try to do it daily.
- Copy-pasting Google Maps data into a list is repetitive, and small mistakes sneak in fast.
- Website research becomes a tab explosion, so you lose context and start writing vague emails.
- Even “personalized” templates still take about 10 minutes per lead to tweak properly.
- Your sheet ends up inconsistent, which makes follow-ups and reporting a mess later.
The Fix: Google Maps → Website Context → Email Drafts in Sheets
This workflow automates the lead sourcing and first-pass personalization in one run. You start by defining what you want (like “Cafes in Shibuya” or “Gyms in London”) plus how many results to pull and what you’re selling. n8n then triggers an Apify Google Maps Scraper run to fetch the business listings. For each business, it checks if a website exists, pulls the site HTML, and extracts useful text so you’re not reading raw markup. Next, OpenAI uses that site context to generate a tailored email subject and body that connects what the business seems to care about with your service. Finally, everything is appended into Google Sheets, giving you a clean lead list and a draft you can review, edit lightly, and send.
The workflow starts with your search query and offer details. It then loops through results, enriches them with website information, and asks OpenAI to draft outreach. Google Sheets becomes the single place your leads and drafts live, ready for quality control and sending.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you want 30 leads from Google Maps and you normally spend about 10 minutes per business to copy details, check the website, and write a first email draft. That’s about 5 hours for one list. With this workflow, you spend maybe 10 minutes setting the query and offer, then let n8n run while it scrapes and drafts. You’ll still review the emails, but now that’s a quick pass in Google Sheets, not a research marathon.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Apify to scrape Google Maps business listings
- OpenAI to generate personalized email drafts
- Google Sheets to store leads and draft emails
- OpenAI API key (get it from the OpenAI dashboard)
Skill level: Intermediate. You’ll connect credentials, edit a few fields, and test a small batch before running bigger pulls.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
Manual launch with your targeting details. You start the run when you’re ready, then set the search query, how many businesses to fetch, and the basics of your offer (service name and what makes it strong).
Google Maps scraping via Apify. n8n triggers an Apify actor run and then retrieves the results, which means you’re not doing any copy-paste from Maps. The output becomes a list of businesses you can process one by one.
Website check and content extraction. For each business, the workflow confirms there’s a website URL, fetches the page HTML with an HTTP Request, and parses it down to readable text. That text is the “why you’re reaching out” fuel for the email draft.
Email drafting and storage. OpenAI generates a subject and body, then n8n appends the business details plus the draft content into Google Sheets. From there, you can review, edit, and optionally push into sending workflows.
You can easily modify the search query and the email prompt to match different niches, languages, and offers. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
Start the workflow manually and ensure the initial parameter setup is ready before pulling lead data.
- Add the Manual Launch Trigger node as the trigger to run the workflow on demand.
- Open Setup Parameters and keep Include Other Fields enabled to pass through extra fields.
- In Setup Parameters, set searchQuery to
渋谷 カフェ, maxPlaces to5, apifyActorId tocompass/google-maps-scraper, serviceName to飲食店向け予約管理システム「yoyaku-kun」, and serviceStrength to忙しいランチタイムでも電話を取らずに予約完結。オーガニック食材などこだわりをアピールするページ作成機能あり。. - Confirm Manual Launch Trigger connects to Setup Parameters in the canvas.
Step 2: Connect Apify and Lead Iteration
Pull scraped results from Apify and process them one-by-one through the batch loop.
- Add Fetch Actor Runs and set Resource to
Actor runs. - Connect Setup Parameters to Fetch Actor Runs, then connect Fetch Actor Runs to Iterate Records.
- Ensure Iterate Records is configured to process items in batches (defaults are fine).
Step 3: Validate Websites and Extract Site Text
Only process leads with valid websites, then retrieve and parse their HTML to produce clean text for the email prompt.
- In Validate Website Presence, set the condition to check leftValue as
{{ $json.website }}with Operation set tonotEmpty. - Connect the second output of Iterate Records to Validate Website Presence, then connect its true output to Retrieve Site HTML.
- In Retrieve Site HTML, set URL to
{{ $json.website }}. - Configure Parse Site Text with Mode set to
runOnceForEachItemand paste the provided JavaScript in JS Code to generatesite_textand carry forward lead fields.
Step 4: Set Up AI Email Composition
Generate a personalized email message using the extracted site text and lead metadata.
- Add Compose Tailored Email and set Operation to
message. - Connect Parse Site Text to Compose Tailored Email.
Credential Required: Connect your openAiApi credentials in Compose Tailored Email.
Step 5: Configure Google Sheets Output
Append or update each processed lead with the generated email content and extracted site text.
- Add Append to Sheets with Operation set to
appendOrUpdate. - Set Document ID to
<__PLACEHOLDER_VALUE__Google Sheets Document ID__>and Sheet Name to<__PLACEHOLDER_VALUE__Sheet Name (e.g., Sheet1)__>. - Map columns with expressions: 住所 →
{{ $('Iterate Records').item.json.address }}, 店舗名 →{{ $('Iterate Records').item.json.title }}, Webサイト →{{ $('Iterate Records').item.json.website }}, 電話番号 →{{ $('Iterate Records').item.json.phone }}, 生成されたメール件名 →{{ $json.message.content }}, 生成されたメール本文 →{{ $json.message.content }}, サイトから取得した情報 →{{ $('Parse Site Text').item.json.site_text }}. - Connect Compose Tailored Email to Append to Sheets, then route Append to Sheets back to Iterate Records to continue the batch loop.
Step 6: Test and Activate Your Workflow
Validate the end-to-end flow and enable it for ongoing use.
- Click Execute Workflow to run Manual Launch Trigger and watch data flow through Fetch Actor Runs, Iterate Records, Validate Website Presence, and Append to Sheets.
- Confirm that Append to Sheets writes rows with generated email content and
site_textin your target Google Sheet. - Once validated, toggle the workflow to Active for production use.
Watch Out For
- Apify credentials can expire or need specific permissions. If things break, check your Apify token in n8n Credentials first, then confirm the actor access in your Apify account.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Common Questions
About an hour if you already have your Apify, OpenAI, and Google credentials ready.
Yes, but plan for one careful setup pass. You’ll mostly be pasting API keys, selecting your Google Sheet, and testing with a small batch.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs and Apify usage based on how many leads you scrape.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Start by editing the “Setup Parameters” node to change your search query, lead limit, and service positioning. Then adjust the prompt inside “Compose Tailored Email” so the tone matches your brand (formal, casual, short, bilingual, whatever you need). Common customizations include filtering out businesses without websites in “Validate Website Presence,” changing what text gets extracted in “Parse Site Text,” and adding extra columns in “Append to Sheets” for campaign tracking.
Usually it’s an expired or incorrect Apify token saved in n8n credentials.
In practice, most people run this in batches of 20–100 leads to keep scraping and AI costs predictable. On n8n Cloud, capacity depends on your plan’s monthly executions; if you self-host, you’re mainly limited by your server and how quickly Apify returns results. The workflow processes leads one-by-one through a loop, so bigger pulls simply take longer to finish. If you need scale, the easiest win is running multiple small campaigns instead of one huge run.
Often, yes, because this kind of flow needs looping, conditional logic, and data shaping that gets awkward (and pricey) in simpler tools. n8n also gives you the option to self-host, which is a big deal when you’re iterating on lead gen and don’t want to worry about task limits. Another advantage is how easily you can edit the “Parse Site Text” and “Compose Tailored Email” steps when you want better personalization. Zapier or Make can still work if your process is just “new row in Sheets → send email,” but this workflow is closer to a mini research assistant. Talk to an automation expert if you’re not sure which fits.
Once this is set up, your lead list and your first drafts appear in Google Sheets like clockwork. Honestly, it’s a relief to spend your time on real selling instead of tab-hopping.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.