How to Scrape Local Businesses for Leads (3 Methods)
Three practical ways to scrape local businesses for leads: a free Chrome extension you can run in two minutes, LocalProspects, and Apify or an open source scraper, with what each one really returns.
Table of contents
If you are trying to scrape local businesses for leads, the first thing to understand is this:
The listing is the easy part.
Getting a business name, phone, address and website from Google Maps is easy. A free Chrome extension does it in two minutes, and I'll show you how below.
The leads are on the website. That's where the emails are, where the owner's name usually is, and where you find out if the business is even worth contacting.
So the real workflow is:
- Search a niche and city.
- Export every business listing.
- Visit every website.
- Pull every email and the owner's name.
- Label each phone mobile or landline.
- Clean it and export.
This article covers three ways to do that: a free Chrome extension, LocalProspects (the one I use, because it does the listing scrape and the website crawl in one search), and Apify or an open source scraper. For each one I'll show what you really get back.
Quick comparison
| Method | Cost | Best for | What you get | Main downside |
|---|---|---|---|---|
| Instant Data Scraper (Chrome extension) | Free | 20 to 120 businesses | Name, rating, category, address, phone, website | No emails, owner names or review counts, about 120 per search |
| LocalProspects | 300 free leads, then $39/mo for 10,000 | Outreach-ready local lead lists | Listings, every email, owner names, phone type, website data, BBB | Not free if you need volume |
| Apify or an open source scraper | Usage-based or your time | Developers building a pipeline | Listings, emails depending on setup | Setup, blocking, cleanup and enrichment are on you |
If you only need a few leads, use the free extension.
If you want a list you can actually send to, use LocalProspects.
If you're a developer and want to own the pipeline, use Apify or the open source route.
Method 1: Free scrape with Instant Data Scraper
This is the way you can do it right now, for free.
Instant Data Scraper is a free Chrome extension with about a million users. It isn't made for Google Maps. It finds any repeating list on a page and turns it into a table, and the Maps results list is exactly that.
I ran it on "roofers in Tampa, FL" on November 13, 2026 (version 1.10.1) to write these steps.
- Install it from the Chrome Web Store and pin it to your toolbar.
- It opens a welcome tab asking you to agree to extra features. Close it. (More on that below.)
- Go to Google Maps and search a niche and city.
- Scroll the results list on the left all the way down until you see "You've reached the end of the list." If you skip this you only get the first 20 or so.
- Click the extension icon. A window opens with a table of the businesses. If it shows something else, click Try another table.
- Click CSV or XLSX.
What I got back
| Result | |
|---|---|
| Businesses exported | 122 (every result Maps showed) |
| Time | About 2 minutes, mostly scrolling |
| Name, rating, category | 122 of 122 |
| Phone | 122 of 122 |
| Website | 120 of 122 |
| Review count | Not included |
| Emails | Not included |
| Owner names | Not included |
| Mobile or landline | Not included |
For a free tool, that's a good listing export.
The file needs cleanup first. It has 17 columns, and they're named after Google's code, not what's in them:
| Column in the export | What it is |
|---|---|
xxVWCe | Business name |
MW4etd | Rating |
W4Efsd | Category |
UsdlK | Phone |
lcr4fd href | Website |
hfpxzc href | Link to the Google Maps listing |
Rename those and delete the rest, which are icons, dots and button labels. The street address lands in one of two columns depending on the row, so merge those two. (Google changes these names now and then, so match them by what's in the column.)
About that welcome tab
The current version of the extension asks you to turn on "presets," "search badges" and an "AI Work Profile." Its own consent text says those features collect the sites you visit, your searches, the ads you click and the prompts you type into AI tools, and that the data can be shared with third parties.
You don't need any of it to scrape. In my test the export worked without agreeing to anything. If you already agreed, there's an "Opt out of data collection" switch in the extension's settings, and the extension says CSV and XLSX export keep working after you opt out.
Getting more than 120 and adding emails
Google Maps stops at about 120 results per search. To cover a metro area, search the suburbs or zip codes one at a time ("roofers in Brandon," "roofers in Riverview," "roofers 33511"), export each, stack the files and remove duplicates by phone number.
Emails are the manual part:
- Open each website.
- Check the footer, Contact and About pages for an email.
- Look for the owner's name on the About page.
- Paste both into your sheet.
That's one to two minutes per business.
When the free method makes sense
Use it to test a niche or build a calling list of 20 to 120. If you're only going to phone people, the free export may be all you need.
Where it breaks:
- about 120 results per search
- no emails or owner names, so you visit every website by hand
- no review counts, so you can't sort by how established a business is
- you don't know which phones are mobile
- the column names can change when Google updates its page
Good for a test. Not for a weekly pipeline.
Method 2: Use LocalProspects
This is the method I use when I want leads I can actually contact.
LocalProspects starts the same way: search a niche and city from Google Maps. Searches go up to 700 businesses deep, well past the 120 you can scroll in Maps.
Then it does the part that takes all day. It visits every website and returns, for each business:
- business name, category, address and Google Maps data
- rating, review count, Maps rank and claimed status
- every email found on the homepage and up to 4 more pages, not just the first one
- owner name when found, from the website, BBB and other public pages
- every phone labeled mobile or landline
- website status: live, no website, down, parked, SSL error
- website builder and tech: WordPress, Wix, Squarespace, blog, chat widget, ad pixel
- social profiles and BBB rating
- services and website text for personalizing
Junk emails (template placeholders, image filenames, developer addresses) are filtered out before you see them.
What you get back
We checked 200,000 businesses scraped through LocalProspects in the 30 days before November 13, 2026, and 9,800 US businesses for website details:
| Field | How often it's available |
|---|---|
| Website on the Google listing | 74% (US) |
| Listed website actually loads | 89% of listed sites (US) |
| At least one email | 53% of all listings |
| At least one email, when the website loaded | 75% |
So no method finds an email for every business. About half don't have one you can reach, mostly because they have no website or a dead one.
That's normal. Use phone for the rest. And if you sell web design, the businesses with no website are your leads. (See how to find web design leads.)
Then you filter. "Has email," "Has mobile," "Has owner name," "No or broken website," "Under 10 reviews." Export to CSV, or pull it through the API into your own tool or an AI agent like Claude Code.
Why this is better than a raw scrape
The free export gives you a row like this (made-up example):
| name | phone | website |
|---|---|---|
| Example Plumbing Co. | (619) 555-0142 | exampleplumbing.com |
LocalProspects gives you this for the same business:
| name | owner | phone | phone type | reviews | website | |
|---|---|---|---|---|---|---|
| Example Plumbing Co. | Jane Doe | jane@exampleplumbing.com | (619) 555-0142 | mobile | 86 | live, WordPress, no blog |
The first one is a starting point. The second one is a lead.
It costs $39 a month for 10,000 leads with emails, owner names and phone types included. No add-ons. New accounts get 300 free leads, no card needed.
Method 3: Use Apify or an open source scraper
This is the technical option.
You have three ways to get listings:
- Apify. Google Maps scraper actors you run in the cloud and pay for by usage.
- gosom/google-maps-scraper. A free, open source scraper you run yourself with Docker. It has a web interface, and an
-emailflag that visits each business website to look for addresses (slower, since it has to load every site). - The Google Places API plus your own code. Each text search returns at most 60 results.
Then the rest of the pipeline is yours:
- Split big cities by zip code and dedupe by place ID or phone.
- Crawl each website for emails.
- Filter out junk emails.
- Add owner names with another tool.
- Add phone type with another tool.
- Clean and export.
If you write the email crawl yourself in Python, it looks something like this:
import re, requests
from bs4 import BeautifulSoup
EMAIL = re.compile(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}")
def find_emails(site):
emails = set()
for path in ["", "/contact", "/contact-us", "/about"]:
try:
html = requests.get(site.rstrip("/") + path, timeout=10).text
except requests.RequestException:
continue
soup = BeautifulSoup(html, "html.parser")
for a in soup.select('a[href^="mailto:"]'):
emails.add(a["href"][7:].split("?")[0].lower())
emails.update(e.lower() for e in EMAIL.findall(soup.get_text(" ")))
return [e for e in emails if not e.endswith((".png", ".jpg", ".webp"))]
That's the easy 80%.
The other 20% is where the time goes: sites that need JavaScript, Cloudflare blocks, user@domain.com placeholders from templates, owner names that only appear in a paragraph on the About page, and keeping it all running when sites change.
If you want to build a custom system, this is the right call. If your goal is "I need a lead list today," it's a lot of extra work. We compared the total cost in Google Maps scraper cost per 1,000 leads.
How to choose the right method
Use the free extension when:
- you're testing a niche
- you need 120 leads or fewer
- you're calling, not emailing
Use LocalProspects when:
- you need hundreds or thousands of local leads
- you want every email, not just the first one
- you want owner names
- you want mobile vs landline for calling
- you want review counts and website data to filter and personalize
- you want a CSV you can send to the same day
Use Apify or open source when:
- you're a developer
- you want full control of the pipeline
- you're fine adding enrichment and cleanup yourself
A simple workflow that works
- Pick one niche and one city you'd actually sell to.
- Pull 100 businesses in LocalProspects.
- Check the email, owner name and mobile rates.
- Spot check 20 rows by hand.
- Filter to the leads that fit your offer.
- Export to your email tool or CRM.
- Run the next city.
Before you send, verify emails and dedupe by phone and domain. Our guide on cleaning a Google Maps lead list before cold outreach goes step by step.
One note on outreach: cold email is covered by CAN-SPAM in the US (FTC) and stricter laws in Canada, the EU and UK. Use business contact details, be honest about who you are and honor opt-outs.
Final recommendation
If you need a small list, export it free with Instant Data Scraper.
If you want local business leads with every email, owner names, phone types and website data in one list, use LocalProspects.
If you want to engineer your own system, use Apify or the open source scraper and be ready to handle the missing pieces.
Scraping the listing isn't the hard part anymore.
The hard part is turning it into someone you can actually reach, and something worth saying.
Run your first search free. Comparing tools? See the best Google Maps scrapers with emails.
