Google Maps Scraper - Emails, Phones, Reviews & Leads
Pricing
from $1.00 / 1,000 place scrapeds
Google Maps Scraper - Emails, Phones, Reviews & Leads
Scrape Google Maps by search phrase, URL or place ID. Get emails, phones, websites, social profiles, ratings, reviews, opening hours, photos, search rank and lead scores - in clean, export-ready columns, with a visual run report.
Pricing
from $1.00 / 1,000 place scrapeds
Rating
0.0
(0)
Developer
Shadow Extractor
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
๐บ Google Maps Scraper โ Leads, Emails, Phones & Reviews
Turn any Google Maps search, URL or place ID into clean, export-ready business data.
Paste what you want, press Start, get a spreadsheet you can actually use: business name, category, rating, review count, phone, website, public email addresses, social profiles, address broken into fields, coordinates, opening hours, photos, search rank and ready-made lead scores.
No Playwright, no browser, no captchas to solve โ the actor talks to Google Maps' own data endpoints, so it is fast and cheap.
โจ What makes this one different
| One smart input box | Search phrases, Maps URLs, place IDs and data IDs all go into the same field. The actor detects each type automatically. |
| Three depth levels | โก Quick, ๐ Contacts, ๐ Full โ one switch, no fiddling with ten checkboxes. |
| Column presets | โจ Essentials, ๐ Leads, โญ Reviews, ๐ Everything. Your CSV is readable the moment it downloads, with stable headers in a fixed order. |
| ๐ Visual run report | Every run writes an HTML dashboard to the key-value store: coverage %, pipeline health, top categories and per-search-term results. Open it straight from the run's Output tab. |
| Smart deduplication | Beyond place ID: collapse chains by domain or phone number so you get one row per company. |
| Real filters | Rating, review count, include/exclude keywords, website presence, "must have a phone or email", open-now, closed businesses. |
| Handy deep links | whatsappLink, directionsUrl, reviewsUrl โ generated for every row. |
| Flat text columns | emailsText, phonesText, categoriesText, photoUrlsText โ no more JSON arrays inside your spreadsheet cells. |
๐ Quick start
- Put your targets into ๐ What do you want to scrape?
coffee shops in New York, NYdentists in Austin, TXhttps://www.google.com/maps/place/Blue+Bottle+Coffee/...ChIJN1t_tDeuEmsRUsoyG83frY4
- Leave everything else on its default and press Start.
- Download the dataset as CSV / Excel / JSON, and open the ๐ Run report for a summary.
Need emails? Switch โ๏ธ How deep should we go? to ๐ Contacts and set ๐ Which columns to ๐ Leads.
โ๏ธ Data depth
| Mode | What you get | Speed |
|---|---|---|
| โก Quick | Places, categories, ratings, Google-published phone, address, coordinates, website, photos, opening state, search rank | Fastest, cheapest |
| ๐ Contacts | Everything above + public emails and social profiles crawled from each business website (up to 3 pages, hard time budget) | Medium |
| ๐ Full | Everything above + place detail page + Google reviews with aggregated review statistics | Slowest, richest |
๐ Filters
All optional, all combined with AND, all applied before the row is saved:
- โญ Minimum Google rating and ๐ฌ minimum number of reviews
- โ Keep only these categories โ keyword match on category and title
- ๐ซ Drop places matching these words โ cut chains, franchises, noise
- ๐ Website presence โ with / without a website (the classic agency lead list)
- ๐ Contact requirement โ must have a phone, an email, either, or both
- โ Skip closed businesses and ๐ข only places open right now
๐ Output columns
Pick a preset in ๐ Which columns do you want?
| Preset | Columns | Best for |
|---|---|---|
| โจ Essentials | 23 | A clean CSV to eyeball or hand to someone |
| ๐ Leads | 39 | Cold outreach: emails, phones, socials, WhatsApp links, lead scores |
| โญ Reviews | 37 | Reputation monitoring: star split, owner-reply rate, review recency |
| ๐ Everything | ~150 | Analysis and pipelines โ nothing is dropped |
Fixed presets always emit the same columns in the same order, even when a value is missing, so appended CSV exports line up across runs.
Scores the actor computes for you
| Field | Meaning |
|---|---|
leadScore | 0โ100 โ how usable this row is as a sales lead |
contactCompletenessScore | 0โ100 โ how much contact data was found |
digitalPresenceScore | 0โ100 โ website, email, socials, description, photos |
reputationScore | 0โ100 โ rating, review volume, owner responsiveness |
outreachOpportunityScore / outreachPriority | 0โ100 + high/medium/low, with outreachReasons explaining why |
intelligenceConfidence | How much to trust an absence of contact data (high / medium / partial) |
๐งน Deduplication
Places are always de-duplicated by Google place ID. Choose a stricter rule when you want one row per company:
- ๐ โฆplus website domain โ collapses every branch that shares a site
- โ๏ธ โฆplus phone number โ collapses shared phone lines
- ๐โ๏ธ โฆplus domain or phone โ strictest
๐ Speed & cost
| Setting | Parallel searches | Use when |
|---|---|---|
| ๐ข Gentle | low | You see blocked requests, or you're on a weak proxy |
| โ๏ธ Balanced | medium | Default โ good for almost everything |
| ๐ Turbo | high | Large keyword lists on residential proxies |
Use ๐ Stop after this many places to put a hard cap on a run, and ๐ข Max places per search term to control per-keyword depth.
Proxies: residential proxies are strongly recommended. Google Maps blocks datacenter IPs quickly.
๐ค Output records
| Record | What it is |
|---|---|
| Dataset | One row per business, shaped by your column preset |
REPORT (key-value store) | ๐ Visual HTML run report โ coverage, pipeline health, per-term results |
OUTPUT (key-value store) | ๐งพ JSON summary โ counters, timings, warnings, dataset link |
Sample row (โจ Essentials)
{"title": "Blue Bottle Coffee","categoryName": "Coffee shop","rating": 4.4,"reviewsCount": 1837,"priceLevel": "$$","phone": "(510) 653-3394","website": "https://bluebottlecoffee.com/","email": "hello@bluebottlecoffee.com","address": "300 Webster St, Oakland, CA 94607","city": "Oakland","state": "CA","postalCode": "94607","countryCode": "US","latitude": 37.8007,"longitude": -122.2758,"businessStatus": "open","openingHoursToday": "7 AMโ5 PM","imageUrl": "https://lh5.googleusercontent.com/...","searchQuery": "coffee shops in Oakland, CA","searchRank": 3,"placeId": "ChIJ...","googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJ...","scrapedAt": "2026-09-03T10:21:44Z"}
๐ Mistakes are explained, not crashed on
A wrong setting never kills the run. The actor repairs what it can, keeps scraping, and tells you exactly what it did โ in the run log, in the Input check section of the ๐ run report, and in OUTPUT.inputIssues.
| You do this | What happens |
|---|---|
| Paste a Yelp or Facebook link | That entry is skipped: "is a link, but not a Google Maps link" โ the rest of your list still runs |
| Require an email in โก Quick mode | Warning: "Quick mode never collects emails โ switch to ๐ Contacts or ๐ Full, otherwise every place will be filtered out" |
| Require an email and only places without a website | Warning: emails come from websites, so this combination returns nothing |
| Put the same word in both keep and drop lists | Warning: exclusions win |
| Send a number where a list was expected, an unknown option, or an out-of-range value | Repaired to a sane value, with the valid options listed |
| Turn the proxy off | Warning: Google blocks datacenter IPs quickly |
When a run saves nothing, the run status message says why โ it repeats the specific problem instead of a generic "nothing found".
โ FAQ
Does it scrape emails from Google Maps? Google Maps does not publish emails. In ๐ Contacts and ๐ Full modes the actor visits the business's own website and collects the email addresses published there.
Why did I get fewer places than my limit? Google returns a finite result set per search โ a narrow query in a small town simply has fewer businesses. Broaden the phrase, drop the location, or add more search terms.
Can I re-enrich a list I already have? Yes. Paste your Google Maps URLs, place IDs or data IDs into the same input field and pick a deeper mode.
Is this legal? The actor only collects publicly visible information. You are responsible for how you use it โ in particular for complying with GDPR/CCPA and anti-spam rules when contacting businesses.
๐ Local development
pip install -r requirements.txtpython -m pytest tests -q # unit tests, no networkapify run # run locally with ./storage/key_value_stores/default/INPUT.jsonapify push # deploy