Google Maps to Google Sheets leads with Apify
You find a good batch of businesses on Google Maps… then you lose an afternoon copying names, phones, and links into a spreadsheet. Half the time, you still have to open each website to hunt for an email or a LinkedIn page. And duplicates sneak in anyway.
Agency marketers feel it when they’re building outreach lists fast. Sales ops hits the same wall when reps ask for “fresh leads” every week. Consultants doing market research run into it too. This maps leads automation gives you a clean Google Sheet that’s already enriched with website contact details.
This workflow runs on a schedule, pulls businesses from Google Maps via Apify, and then enriches each row by scraping the business website with Firecrawl. You’ll see what it does, what you need, and where teams usually trip up.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Google Maps to Google Sheets leads with Apify
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Loop Until Complete", pos: "b", h: 48 }
n2@{ icon: "mdi:database", form: "rounded", label: "Read Pending Queries", pos: "b", h: 48 }
n3["<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/>Start Apify Scraping Job"]
n4@{ icon: "mdi:cog", form: "rounded", label: "Wait for Job Succeed", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Check Scraping Status"]
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/>Fetch Scraped Results"]
n7@{ icon: "mdi:database", form: "rounded", label: "Save Business Data", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Businesses with Websi..", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Batch Processing Logic", pos: "b", h: 48 }
n10["<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 Website Content"]
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/code.svg' width='40' height='40' /></div><br/>Extract Contact Information"]
n12@{ icon: "mdi:database", form: "rounded", label: "Save Contact Details", pos: "b", h: 48 }
n13@{ icon: "mdi:database", form: "rounded", label: "Mark as Processed", pos: "b", h: 48 }
n0 --> n2
n13 --> n9
n7 --> n8
n1 --> n4
n1 --> n6
n2 --> n3
n12 --> n13
n4 --> n5
n5 --> n1
n6 --> n7
n9 --> n10
n10 --> n11
n3 --> n4
n11 --> n12
n8 --> n9
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 n1,n8 decision
class n2,n7,n12,n13 database
class n3,n5,n6,n10 api
class n11 code
classDef customIcon fill:none,stroke:none
class n3,n5,n6,n10,n11 customIcon
The Challenge: Turning Google Maps results into usable leads
Google Maps is great for discovery, but terrible for list-building. You search a niche in a city, open 30 listings, copy the basics, then realize the real value (emails, social profiles, decision-maker clues) lives on each company’s site. Now you’re doing two jobs: data entry and detective work. It’s slow, it’s inconsistent, and it’s the kind of repetitive task that quietly pushes real marketing work to “later.” Worse, once your sheet has messy rows and repeats, nobody trusts it, so people start rebuilding lists from scratch.
The friction compounds. Here’s where it breaks down in day-to-day lead gen.
- Copying name, address, phone, and website for 50 businesses easily eats a couple hours.
- You still end up visiting most websites manually just to find a contact email or a social link.
- Duplicates show up when you repeat searches across nearby locations or run the same campaign next month.
- Inconsistent formatting makes sorting and filtering painful, so outreach feels harder than it should.
The Fix: Automated Google Maps scraping + contact enrichment
This workflow turns a “search and copy” chore into a steady stream of ready-to-message leads. Every 30 minutes, it runs an Apify Google Places crawler job to collect businesses that match your criteria (industry, location, keywords). It writes the core listing data into Google Sheets, so your list stays centralized and shareable. Next, it checks which businesses actually have a website, then batches those sites through Firecrawl to pull useful page content. From that content, the workflow extracts outreach-ready details like emails and social profiles, then updates the same rows in your Google Sheet so everything stays organized in one place.
The workflow starts on a schedule and fetches fresh Google Maps results via Apify. It stores them in Google Sheets, then loops through only the rows with websites. Firecrawl scrapes each site, and the workflow merges extracted emails and social links back into your sheet.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you need 60 new leads for a weekly outreach push. Manually, you might spend about 2 minutes per lead copying Google Maps details (2 hours), plus another 3 minutes per lead checking the website for an email or socials (about 3 more hours). With this workflow, you spend maybe 10 minutes setting the search criteria and glancing at the sheet, then let the 30-minute runs fill and enrich rows in the background. That’s roughly 4 hours back in a week, and honestly it’s usually more once context switching is counted.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to store and share the lead list.
- Apify for scraping Google Maps (Google Places).
- Firecrawl API key (get it from your Firecrawl dashboard).
Skill level: Intermediate. You’ll connect accounts, paste API keys, and update a Sheet ID in a few nodes.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
Scheduled run (every 30 minutes). The workflow wakes up automatically, so you’re not relying on someone to “remember to pull leads.” You can change the schedule later if you want daily or hourly runs.
Google Maps scraping via Apify. An HTTP request triggers Apify’s Google Places crawler using your search criteria, then the workflow collects core fields like business name, address, phone, and website. Those basics get written to Google Sheets right away.
Website filtering and batching. An If check keeps the workflow focused on businesses that actually have a website worth scraping. Then it processes sites in batches (so you don’t hammer your scraping tool or run into avoidable failures).
Enrichment with Firecrawl + merge back to Sheets. Firecrawl scrapes the website content, and the workflow extracts emails plus social links like LinkedIn, Facebook, Instagram, and Twitter when it can find them. Finally, those enrichment fields are merged into the same spreadsheet rows so your team has one source of truth.
You can easily modify the Apify search parameters to target a new niche or location based on your needs. See the full implementation guide below for customization options.
Watch Out For
- Google Sheets OAuth credentials can expire or need specific permissions. If things break, check the n8n credential status and the Google account’s access to the target sheet first.
- 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 your Apify, Firecrawl, and Google Sheets access are ready.
Yes, but you’ll want one careful person on setup day. No coding, just credentials, Sheet IDs, and a quick test run.
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 Apify and Firecrawl usage-based API costs.
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.
You can change the Apify search inputs (industry keywords, city, radius) and keep the rest the same. If you want different enrichment fields, update the “set/edit fields” mapping right before the Google Sheets update so new columns get filled consistently. Common tweaks include scraping only certain pages (like /contact), capturing WhatsApp or Telegram links, and adjusting the batch size so Firecrawl stays stable on bigger runs.
Usually it’s an expired OAuth token or the Google account doesn’t have edit access to that specific Sheet. Reconnect the Google Sheets credential in n8n, then confirm the Sheet ID in every Sheets node matches the file you’re actually using. If it still fails, check if the sheet was moved to a shared drive with different permissions.
On n8n Cloud Starter, you can typically handle a few thousand executions per month, which is plenty for scheduled lead pulls and enrichment batches.
Often, yes, because this kind of workflow needs batching, filtering, and merges to keep your sheet clean. n8n handles branching logic without turning every condition into a paid “task,” and you can self-host if you want unlimited runs. Zapier and Make can still work, but the moment you add scraping, dedupe rules, and multi-step enrichment, costs and complexity creep up fast. If you only need “save a place to a sheet,” they may be simpler. Talk to an automation expert if you want a quick recommendation for your exact volume.
Once this is running, your lead list grows while you’re doing actual campaign work. Set it up, tune the search, and let the sheet do its job.
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.