How to Scrape Google Maps for Leads With Verified Emails [No-Code]
(updated)
15-Second Summary
- Google Maps is the biggest free B2B lead source on the internet. Name, phone, website, hours, ratings, socials, and owner status, all sitting there in public
- Google's official Places API caps you at 60 results per query and never returns an email. Text Search starts at $32 per 1,000 requests, and business details cost extra on top
- Building your own scraper means proxies, CAPTCHAs, headless browsers, and a rewrite every time Google shifts its markup. Fun project, terrible business decision
- Most third-party scrapers hand you the wrong city, the wrong category, and the same business six times. Then you pay for all of it
- lobstr.io returns 87 data points per business at 200 leads per minute, filters out-of-area and off-category results before billing you, and verifies every email it finds
- This guide shows how to scrape Google Maps for leads step by step, including smart filters, email verification, website and phone filters, and chaining straight into a reviews scraper
So here you are... trying to pull a clean list of local businesses off Google Maps without paying $32 per 1,000 requests for data that arrives half empty.
You've probably already tried a Chrome extension. It crawled at the speed of a dying laptop, choked at 120 rows, and handed you the same dentist four times.
Then you tried a cloud tool. Better speed, same problem... you asked for dentists in Houston and got chiropractors in Katy.

And none of them gave you an email you could actually send to.
Don't worry, I got you. 😉
Here's a no-nerd tutorial on how to scrape Google Maps for leads, with verified emails, without writing a single line of code.
But Google has an official API for this, right? Why not just use that?
Does Google offer an official API for Google Maps business data?
I'll give it to you straight: yes, Google has an API. No, you don't want it for lead generation.

Sounds perfect until you read the fine print.
It caps you at 60 results
This is the one that kills it. Text Search returns a maximum of 20 results per page and 60 results total across all pages.
Sixty. Per query. That's not a lead list, that's a sample.
To pull every dentist in Texas you'd need to slice the state into hundreds of micro-queries and stitch the results back together yourself, deduplicating as you go.
It gets expensive fast
Text Search starts at $32 per 1,000 requests. Place Details, which is what you need for phone numbers and websites, runs another $17 per 1,000 on the Pro tier.

You get a monthly free allowance of 10,000 Essentials events, 5,000 Pro, and 1,000 Enterprise. After that the meter runs.
It never gives you an email

So you'd pay Google for a phone number and a website URL, then pay a second tool to crawl those websites for emails, then pay a third to verify them.
Three vendors, three bills, one spreadsheet you still have to assemble by hand.
And that's exactly why you need a scraper.
But is it even legal to scrape Google Maps business data?
Is it legal to scrape Google Maps?
Disclaimer
This section is for general informational purposes only. It's based on publicly available sources and practical interpretation, not legal advice.
Laws vary by country and change over time. If compliance, contracts, or platform risk matter to you, talk to a qualified legal professional.
Let me break this down into two parts:
- Does Google allow scraping?
- Is it actually legal?
Does Google allow scraping?

Their reasoning is straightforward. Scraping raises their server costs, competes with Places API revenue, and lets competitors build on their data.
But does a Terms of Service clause make it illegal?
Is it legal to scrape Google Maps data?
Absolutely yes! It's generally legal.
Google Maps listings are public business data. You don't need an account to see a restaurant's phone number, and neither does anyone else.

I've covered the court cases, the GDPR angle, and the regulations in detail in our legal series.
But legal doesn't mean reckless. You still need to:
- Respect rate limits and not hammer Google's servers
- Comply with GDPR if you're touching data on EU citizens
- Avoid republishing Google's listings as your own directory
- Use the data responsibly with no harassment, spam blasts, or shady stuff
But how do I actually scrape Google Maps at scale?
2 ways to scrape Google Maps for leads
Practically, you've got two options:
- Build your own scraper
- Use a ready-made scraper
Build your own scraper
This one's for the nerds. People who enjoy mass destruction.
Google Maps doesn't ship its listings in clean HTML. The results panel is rendered client side from a batch endpoint that returns a deeply nested array with no field names.

So you reach for a headless browser. Playwright, Selenium, whatever you like.
It works for about 40 listings. Then the infinite scroll stops firing, or a CAPTCHA lands, or your IP gets a soft ban.

Get ready to deal with:
- Rotating residential proxies that cost more than the data you're collecting
- CAPTCHAs that appear the moment you push real volume
- Geo-targeting because Google serves different results depending on where the request comes from
- Deduplication because the same business shows up across dozens of your queries
- Constant maintenance every time Google reshuffles its response payload
And even after all that, you've got a list of websites with no emails on it. That's a second scraper, plus a verification service.
Use a ready-made scraper
This is what smart people do.
Even here you've got APIs and no-code options. APIs are for nerds. This article is entirely no-code, so I'll skip the nerd stuff.
I already ran a full head-to-head on the leading tools, scored on data, cost, speed, usability, and scalability, with the raw test datasets published so you can check my work.

The short version of what I found. Most scrapers fail on the same four things.
Accuracy. You ask for dentists in Dallas and get chiropractors from Houston. Across the tools I tested, geo accuracy ranged from 77% to 94%.
Speed. Extension-based scrapers run inside your browser, so they can't parallelise and they die the moment you close the tab.
Incomplete and duplicate rows. Fill rates ranged from 53 filled fields per business up to 81. And without deduplication the same lead lands in your sheet ten times.

No email verification. Almost every tool stops at "email found" and leaves the bounce rate as your problem.
Let me show you the one that fixes all four.
Best Google Maps scraper: lobstr.io

Features
- 87 data points per business including address components, coordinates, socials, popular times, owner details, and per-star review breakdowns
- 200 leads per minute with a 99.95% task success rate
- Email extraction from business websites, with optional verification tagging every address as valid, invalid, risky, catch-all, or unknown
- Geo Match and Category Match filter out-of-area and off-category listings during the crawl, so you're never billed for junk
- Website, phone, and claimed-status filters to target exactly the segment you're selling to
- Rating and review-count ranges for chasing either the top of the market or the businesses that need help
- Smart filters that build hundreds of tasks from a category plus a country, region, district, or list of zip codes
- Built-in deduplication across every task in a run
- Chain straight into the Google Maps Reviews Scraper when a run finishes
- Export to CSV, XLSX, JSON, or JSONL, or auto-deliver to Google Sheets, Amazon S3, SFTP, email, n8n, make or a webhook
- Cloud-based with no installation, plus a full API and an MCP server for developers
- Seamlessly integrates to AI tools like ChatGPT, Claude, Cursor as connector via MCP
Proof it works at scale
Geolid, a France-based local marketing platform, monitors brand visibility across 1,280 city and zip-code areas every month. That's 64,000 to 128,000 listings on a recurring schedule.
Their previous provider kept returning listings outside the target zip codes, and priced per listing so costs scaled linearly with volume.
After switching to lobstr.io they cut Google Maps data costs by roughly 75%, improved zip-code-level accuracy by around 70%, and tripled the number of areas they monitor.

Data
Here's everything you get per business.

🏢 IDENTITY name | name_for_emails | category | description | about | url | cid | zero_x | kgmid | place_id 📍 LOCATION address | street_address | city | neighborhood | county | zip_code | state_code | region | country_name | country_code | lat | lng | plus_code | timezone | area_service | streetview_url 📞 CONTACT phone | additional_phone | website | email | email_status | email_verified_at 🔗 SOCIALS facebook | instagram | linkedin | twitter | tiktok | youtube | whatsapp | pinterest ⭐ REVIEWS score | ratings | reviews_link | reviews_tags | reviews_per_score_1 | reviews_per_score_2 | reviews_per_score_3 | reviews_per_score_4 | reviews_per_score_5 🕒 HOURS opening_hours | other_hours | last_opening_hours_updated_at | popular_times | popular_times_live | popular_times_live_percent 👤 OWNER has_owner | is_verified | owner_name | owner_id | owner_link | owner_posts | customer_posts 🖼️ MEDIA main_image_url | images | images_count | image_categories 💰 COMMERCE price | price_range | menu | menu_items | booking_link | order_providers | actions | payment_methods 🏷️ ATTRIBUTES amenities | service_options | accessibility | highlights | health | crowd | poi | people_also_search 🚦 STATUS is_temporarily_closed | is_permanently_closed ✅ RUN META match_filters | no_match_reasons | scraping_timef
Pricing
lobstr.io runs on credits. A business listing costs 1 credit, and the enrichment functions you switch on add to that.

- 100 leads free every month
- Starts at $2 per 1,000 leads
- Drops to $0.50 per 1,000 leads at scale
Here's what each add-on costs on top of the base credit.
| Function | Credits | Notes |
|---|---|---|
| Business listing | 1 | Per row, the base cost |
| Extract Emails from Website | 1 | Per row, only when an email is actually found |
| Only Leads with Emails | 1 | Per row, when enabled |
| Verify Emails | 2 | Per checked email, invalid addresses are free |
| Collect Business Details | 1 | Per row |
| Fetch Business Images | 1 | Per row, up to 250 images |
| Skip Closed Places | 0.2 | Per row kept |
| Website Filter | 0.2 | Per row kept, free when set to all |
| Phone Filter | 0.2 | Per row kept, free when set to all |
| Claimed Status Filter | 0.2 | Per row kept, free when set to all |
| Chained review | 0.2 | Per review scraped |
Geo Match and Category Match cost nothing. Results they reject are never billed, which is the whole reason Geolid's costs dropped.
So how do you actually run it?
How to scrape Google Maps for leads using lobstr.io [Step by Step Guide]
Scraping Google Maps with lobstr.io takes less than 2 minutes. Here's the process:
- Create a Squid
- Add tasks
- Adjust behavior
- Launch
- Enjoy
Step 1: Create a Squid
A Squid is just a scraper instance. To create one:

- Log in to your lobstr.io dashboard
- Click the red New Squid button
- Type "Google Maps" in the search bar
- Select Google Maps Leads Scraper
That's it. Your Squid is ready to configure.
Step 2: Add tasks
A task is simply your input. For this scraper you've got two ways to define one.
- Smart filters
- Google Maps search URLs
Use smart filters
This is the one you want. Instead of hunting down search URLs, you describe the leads you're after and lobstr.io builds the tasks for you.
Toggle Use smart filters on and you get five inputs.

- Category / Search Query... what you're looking for. Takes a plain category like restaurant or something narrower like Italian restaurant or rooftop bar
- Country... the country to search in
- City... a city or town name like San Francisco, and it accepts zip codes too, one or many
- Region... the first-level administrative division, like California or Texas
- District... the second-level division inside that region, like Los Angeles County
Region and district are optional. Add them when they help you narrow things down.
You can stack multiple categories and multiple cities in one Squid, and mix plain categories with specific queries. Only the country is limited to one at a time.
Want the whole country instead? There's a guide for that.
Use Google Maps URLs
If you've already run a search on Google Maps and want exactly those results, toggle smart filters off and paste the search URL.

https://www.google.com/maps/search/restaurant/@43.2928346,5.3662584,14z works fine. Paste it, click Add +, done.
Once your tasks are in, click Save to move to Settings.
Step 3: Adjust behavior
The Settings tab controls how your scraper behaves.
I'm not going to walk you through every toggle. Let me cover the ones you'll actually use.
Basic settings

Extract Emails from Website... lobstr.io visits each business's website and pulls any email address it finds. Costs 1 credit per row, and nothing at all when no email turns up.
Only Leads with Emails... drops every row where no email was found. If your entire workflow is cold email, this stops you paying for rows you'd delete anyway.
Search Language... controls the language of place names, categories, and descriptions in your output.
When to end run... decides what happens if you run out of credits mid-run. End run once no credit left stops and marks the run done, and restarting begins from scratch. End run once all tasks consumed pauses instead, so you top up credits and resume exactly where it stopped.
Advanced settings
This is where the lead quality actually gets decided.

Max Unique Results... caps the total unique listings across the whole run. Leave it empty for unlimited.
Max Results Per Task... caps results per individual search. Google enforces a hard ceiling of 200 here, so 200 is as high as it goes.
Minimum Rating and Maximum Rating... set a rating floor, a ceiling, or both. Combine them to target a band, like everything between 2.0 and 3.5 if you're selling reputation management.
Min Reviews Count and Max Reviews Count... same idea for review volume. Both require Collect Business Details to be on.
Exact Name Match... only keeps places whose name contains your search query, case-insensitive, anywhere in the name. Perfect for chasing one brand or chain across a country.
Fetch Business Images... grabs every image on the listing, up to 250 per business, for 1 credit per row.
Scroll down and you hit the filters that decide who ends up in your list.

Skip Closed Places... drops anything marked temporarily or permanently closed. Adds 0.2 credits per row kept.
That second option is the money filter for web design and local SEO agencies. A restaurant with no website is a pitch waiting to happen.
Phone Filter... same three options for phone presence. Useful when your outreach is cold calling and a row without a number is dead weight.
Unclaimed listings are a whole outreach angle on their own. "Your Google listing is unclaimed and a competitor could take it" is a cold email that gets replies.
Slots... how many bots run on your Squid at the same time. More slots, faster run. The ceiling is 20 per Squid.
Unique Results... strips duplicates so the same business doesn't land in your sheet six times. Leave it on.
No Line Breaks... removes line breaks from text fields so your CSV doesn't explode when Excel opens it.
Verify emails... checks every email found during the run and tags it valid, invalid, risky, catch-all, or unknown. Nothing gets deleted, so you decide the risk threshold yourself. Costs 2 credits per checked email, and invalid addresses are free.
Geo Match... keeps and bills only results inside your target area. This is the filter that fixes the "I asked for Dallas and got Houston" problem, and it's free.
Category Match... only collects and bills places that actually match your category, with translation and fuzzy matching built in. Also free.
Pro tip
Geo Match and Category Match apply during the crawl, not after. Rejected results never reach your file and never touch your credit balance. That's how Geolid cut their data bill by 75% without changing anything else.
Chain output
Here's the part that used to require a workaround.
You can now feed this Squid's results straight into another Squid, automatically, the moment a run finishes successfully.

Flip Autostart on and the reviews run launches itself. Scraped reviews cost 0.2 credits each.
So one run gives you the business list and every review attached to it. No exporting, no re-uploading, no duct tape.
Once you're done, click Save. Next up is Notifications, where you can get an email when a run completes or pauses.

Step 4: Launch
In the Launch tab you've got two options:
- Manually
- Repeatedly
Manually means instant launch. Leave it selected, click Save & Extract, and the scraper starts collecting.

But what if you want fresh leads every week without touching anything?
That's where Repeatedly comes in.
Switch to it and pick an interval... every few minutes, hourly, daily, on weekdays, weekly, or monthly. It runs in your timezone by default and you can change that.
Perfect for tracking new businesses opening in your service area, or monitoring how a client's listings rank across cities.
Step 5: Enjoy
Results populate in the live console as they come in.

You don't have to sit and watch. Close the tab, shut the laptop, go do something useful. If you enabled the success notification, you'll get an email when the data is ready.

Hit Download and pick your format. CSV, XLSX, JSON, or JSONL, and you can export all 87 fields or just the handful you actually need.

But downloading a file after every run? I don't like doing it either.
lobstr.io lets you automate delivery. Click the Delivery icon in the top right corner and pick your method.

Google Sheets is my personal favorite. You can also push to Amazon S3, SFTP, a webhook, or just have a CSV land in your inbox after every run.
You've got the leads. Now what?
What can you do with scraped Google Maps leads?
Raw rows in a spreadsheet aren't leads. Here's how you turn them into pipeline.

Here's what people actually build with this data.
1. Cold email campaigns that don't bounce
You're sending to addresses a verifier confirmed exist, which is the difference between a 2% bounce rate and a burned domain.
2. Web design and local SEO prospecting
3. Claim-your-listing outreach
4. Reputation management leads
Set a Maximum Rating of 3.0 and a minimum review count. You just built a list of businesses actively losing customers to bad reviews, with the review data attached.
5. Franchise and competitor mapping
Turn on Exact Name Match and run a brand name across an entire country. You get every location, with coordinates, ratings, and hours, in one file.
6. Local market research
Popular times, price ranges, review distributions, and amenities across a whole category in one city tells you what the market looks like before you enter it.
7. Review mining with the chained scraper
Chain into the Google Maps Reviews Scraper and you get every review attached to every business in the run.

Feed those into Claude or ChatGPT and you've got a sentiment report on an entire local market.
8. Recurring lead delivery on autopilot
Schedule the Squid weekly, deliver to Google Sheets, and connect that sheet to your CRM. New businesses in your target area show up in your pipeline without anyone touching anything.
FAQs
How many leads can I scrape from one search?
Google caps any single search at 200 results. That's a Google limit, not a lobstr.io one.
To get past it, use smart filters to split your target into multiple searches. One city becomes ten zip codes, and each one runs its own 200-result search.
Do I get business emails from Google Maps?
Not from Google Maps itself, no. Google doesn't publish email addresses on listings.
lobstr.io visits each business's website and extracts emails from there, then optionally verifies each one and tags it valid, invalid, risky, catch-all, or unknown.
How do I find businesses without a website?
Set the Website Filter to without_website in Advanced Settings. It also catches businesses whose website only shows up once business details are collected.
How fast is the Google Maps Leads Scraper?
200 leads per minute with a 99.95% task success rate. Add slots to run multiple bots on the same Squid, up to 20 per Squid.
Why do scrapers return results from the wrong city?
Because Google widens the search when it runs out of local matches. Ask for dentists in one zip code and Google will happily pad the list with results from the next county.
Geo Match solves this by checking each result's location during the crawl and dropping the ones outside your target area, before they're billed.
Can I scrape reviews at the same time as the listings?
Yes. Use the Chain output tab to feed results into the Google Maps Reviews Scraper automatically when a run completes successfully. Reviews cost 0.2 credits each.
What happens if I run out of credits mid-run?
Depends on your When to end run setting. End run once all tasks consumed pauses the run so you can add credits and resume from where it stopped.
End run once no credit left ends it instead, and restarting begins from the beginning.
How much does it cost to scrape 10,000 Google Maps leads?
10,000 credits for plain listings, which is $20 on the Starter plan and $5 at Team plan rates.
Do I get charged for results outside my target area?
No. Geo Match and Category Match reject those results during the crawl, so they never hit your file or your balance. Both filters are free.
Which Google Maps scraper is actually the best?
I benchmarked them on one dataset with a public scoring rubric. Data, cost, speed, usability, and scalability, with the raw test outputs published.
Conclusion
That's a wrap on how to scrape Google Maps for leads without coding, without a $32 per 1,000 requests API bill, and without a spreadsheet full of the wrong city.