Google Maps Lead Enrichment - Emails, Phones, Socials
Pricing
from $2.60 / 1,000 results
Google Maps Lead Enrichment - Emails, Phones, Socials
Turn Google Maps searches into sales-ready lead lists with business names, addresses, ratings, websites, public emails, phone numbers, social profiles, contact pages, and optional email-domain validation. You can also enrich existing website or business lists.
Pricing
from $2.60 / 1,000 results
Rating
0.0
(0)
Developer
Thirdwatch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
Share
Google Maps Lead Enrichment — Emails, Phones & Social Profiles
Turn a plain Google Maps search into a sales-ready lead list in one run.
Most Google Maps scrapers stop at the map pin: name, address, rating, website. That is a
directory listing, not a lead. This Actor takes the extra step — it opens each business's
website, reads the homepage and the pages a human would click to find a contact
(/contact, /about, /impressum, /enquiry), and pulls out the email addresses,
phone numbers and social profiles you actually need to start a conversation. It then
checks whether the email's domain can receive mail at all, so obvious placeholder
addresses never reach your CRM.
You give it plumbers in Austin TX. You get back rows with
service@austinplumbing.com, +15129004663, a LinkedIn URL, a Facebook URL, the
coordinates, the rating and the place ID — one row per business.
What you get
| Stage | What happens |
|---|---|
| 1. Find | Each search query is resolved against Google Maps' structured business search. Up to 20 businesses per request, up to about 120 per query. Name, address, phone, rating, category, coordinates, place ID and website come from here. |
| 2. Enrich | The business website and its most relevant contact or about pages are checked, up to your page budget. |
| 3. Extract | Public emails, phone numbers, and social profile URLs are collected and deduplicated. |
| 4. Validate | The primary email's domain gets a DNS MX lookup, so you can tell a real mailbox domain from a theme placeholder, and you learn which mail provider the business runs on. |
Honest hit rates
Measured across 118 real small-business websites found through Google Maps in six countries (US, UK, India, Australia), plus a further live verification run:
| Signal | Share of businesses |
|---|---|
| Website reachable | ~89% (up to ~95% with the blocked-site retry enabled) |
| At least one email address | ~71–75% |
| At least one phone number | ~65–85% |
| At least one social profile | ~83–87% |
| At least one contact channel of any kind | ~95% |
These rates vary a lot by vertical. In our measurements: US home services (plumbers, HVAC) landed around 55–60% email, because those businesses deliberately push click-to-call and hide email behind JavaScript contact forms. Wellness and design businesses in Australia and India landed around 85–90% email. Professional services (law, dental) sit in between. Plan your list size around the low end of that range, not the high end.
Around 5% of the email domains we found do not resolve at all — theme placeholders
shipped with a website template. The email_domain_mx_ok field flags those for you.
Input parameters
{"queries": ["dentists in Portland OR","interior designers Bangalore","law firms Manchester UK"],"maxResults": 100,"maxPagesPerSite": 4,"concurrency": 8,"verifyEmailDomains": true,"onlyWithContact": false,"retryBlockedWithProxy": false}
| Field | Type | Default | Description |
|---|---|---|---|
queries | string[] | [] | Google Maps searches, written exactly as you'd type them into Maps. Put the location in the text ("plumbers in Austin TX"), not in a separate field. |
websites | string[] | [] | Optional. Enrich these URLs directly and skip the Maps step. Can be combined with queries. |
businesses | object[] | [] | Optional. Business objects that each carry a website field (e.g. output from a Maps place scraper). Their fields are carried through onto the enriched rows. |
maxResults | integer | 10 | Maximum enriched rows across all queries. Max 1000. |
maxPagesPerSite | integer | 4 | Homepage plus up to 3 ranked contact pages. Capped at 4 — see Limitations. |
concurrency | integer | 8 | Websites fetched in parallel. Max 32. Raise the run's memory to 512 MB before going above 16. |
verifyEmailDomains | boolean | true | DNS MX check on the primary email's domain. |
onlyWithContact | boolean | false | Drop businesses with no email, phone or social profile at all. Fewer rows, fewer charges. |
retryBlockedWithProxy | boolean | false | Retry websites that restrict the first visit. This improves coverage but can make runs slower. |
proxyConfiguration | object | preconfigured | Optional connection settings used only for restricted-site retries. |
You can run with queries alone, websites alone, or both together.
Output fields
One row per business.
Business (from Google Maps)
| Field | Type | Description |
|---|---|---|
source_query | string | The query this business came from (or direct-input). |
business_name | string | Business name. |
business_address | string | Full formatted address. |
business_phone | string | Phone listed on the Maps profile. |
business_category | string | Primary category, e.g. Plumber. |
business_categories | string[] | All categories on the listing. |
business_rating | number | Star rating, e.g. 4.8. |
latitude | number | Decimal latitude. |
longitude | number | Decimal longitude. |
place_id | string | Google place ID. |
google_maps_cid | string | Google Maps CID. |
google_maps_url | string | Absolute link to the Maps listing. |
Contact intelligence (from the website)
| Field | Type | Description |
|---|---|---|
website | string | Website as listed on Google Maps. |
final_url | string | URL actually reached after redirects. |
emails | string[] | All email addresses found, deduplicated, best-signal first. |
primary_email | string | The highest-confidence address. |
primary_email_source | string | mailto, cfemail (decoded from obfuscated markup) or text. |
emails_count | number | Number of distinct emails found. |
email_domain | string | Domain of the primary email. |
email_is_freemail | boolean | true for gmail/yahoo/outlook-type addresses — normal and usable for small businesses. |
email_domain_mx_ok | boolean | true when the domain has MX records and can receive mail. |
email_mx_provider | string | google, microsoft365, zoho, godaddy or other. Useful for segmentation. |
phones | string[] | Phone numbers found on the site, tel: links first. |
primary_phone | string | Best phone number, falling back to the Maps phone. |
phones_count | number | Number of distinct phones found. |
facebook_url | string | Facebook profile/page URL. |
instagram_url | string | Instagram profile URL. |
linkedin_url | string | LinkedIn company/person URL. |
youtube_url | string | YouTube channel URL. |
x_url | string | X (Twitter) profile URL. |
tiktok_url | string | TikTok profile URL. |
pinterest_url | string | Pinterest profile URL. |
social_profiles_count | number | How many distinct social networks were found. |
contact_pages | string[] | The contact/about pages that were actually read. |
has_contact | boolean | true if any contact channel was found. |
Run diagnostics
| Field | Type | Description |
|---|---|---|
fetch_status | string | ok, http_4xx, http_5xx, blocked_shell, dns_error, ssl_error, timeout, connect_error, not_html, social_website, no_website. |
http_status | number | HTTP status of the homepage request. |
pages_fetched | number | Pages read for this business. |
bytes_fetched | number | Bytes of HTML read for this business. |
elapsed_ms | number | Wall time spent on this business. |
scraped_at | string | ISO 8601 UTC timestamp. |
Example output
{"source_query": "plumbers in Austin TX","business_name": "Austin Plumbing","business_address": "5115 N Lamar Blvd Ste 100, Austin, TX 78751","business_phone": "(512) 900-4663","business_category": "Plumber","business_categories": ["Plumber", "Drainage service", "Water softening equipment supplier"],"business_rating": 4.8,"latitude": 30.3189435,"longitude": -97.7301705,"place_id": "ChIJq0fCfwkpW4YR4EqPvo68RGQ","google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJq0fCfwkpW4YR4EqPvo68RGQ","website": "https://austinplumbing.com/","final_url": "https://www.austinplumbing.com/","emails": ["service@austinplumbing.com"],"primary_email": "service@austinplumbing.com","primary_email_source": "text","email_domain": "austinplumbing.com","email_is_freemail": false,"email_domain_mx_ok": true,"email_mx_provider": "microsoft365","phones": ["+15129004663", "5129004663", "(512) 900-4663"],"primary_phone": "+15129004663","facebook_url": "https://www.facebook.com/AustinPlumbing512","instagram_url": "https://www.instagram.com/austinplumbingtx/","linkedin_url": "https://www.linkedin.com/company/austin-plumbing/","youtube_url": "https://www.youtube.com/@AustinPlumbingtx","x_url": "https://x.com/austinplumber","tiktok_url": "https://www.tiktok.com/@austinplumbingtx","pinterest_url": "https://www.pinterest.com/austinplumbingtx/_profile/","social_profiles_count": 7,"contact_pages": ["https://www.austinplumbing.com/contact-us/","https://www.austinplumbing.com/about-us/","https://www.austinplumbing.com/book-appointment/"],"fetch_status": "ok","http_status": 200,"pages_fetched": 4,"bytes_fetched": 415783,"elapsed_ms": 5423,"has_contact": true,"scraped_at": "2026-07-27T22:51:47+00:00"}
Limitations
Read these before you size a campaign.
- Roughly one business in four yields no email. That is a real outcome, not a bug. 18 of 105 successfully-read sites in our measurement had no email address anywhere across four pages — many small businesses genuinely only publish a phone number and a JavaScript contact form. Those rows still carry phone and social data.
- Hit rate depends heavily on the vertical. US home services are the weakest (~55–60% email); wellness, design and professional services abroad are the strongest (~85–90%). Budget for the low end.
- Crawl depth is capped at 4 pages per site and this is deliberate. We tested going to 10 pages on the sites that produced no email: it recovered 2 of 18, one of which was a regulator's address rather than the business's, while tripling bandwidth per site. There is no meaningful yield beyond 4.
- Email validation is domain-level, not mailbox-level.
email_domain_mx_okproves the domain can receive mail. It does not proveinfo@exists. Mailbox-level checks require SMTP conversations that are not possible from this environment. - A single Maps query saturates at about 120 businesses. For larger territories,
split into several narrower queries (by suburb, by adjacent city, by sub-category)
rather than raising
maxResultson one broad query. - Free-mail addresses are kept, not filtered. About one in six small businesses uses
a Gmail or Yahoo address as its real business contact. The
email_is_freemailflag lets you decide; the Actor does not decide for you. - Some businesses list a Facebook page as their website. Those are recorded in
facebook_urlwithfetch_status: social_websiterather than crawled. - Roughly 5–11% of sites are unreachable because of dead domains, broken hosting, or
access restrictions.
fetch_statusrecords the user-visible outcome. - A search that matches nothing returns zero rows and finishes successfully. It is not treated as an error.
Use cases
- Feed the output straight into a CRM or cold-email tool — the rows are flat, typed and deduplicated.
- Filter on
email_domain_mx_ok = trueandhas_contact = truefor the cleanest outreach list. - Segment by
email_mx_providerwhen you want to target businesses on Google Workspace versus Microsoft 365. - Use
business_ratingandbusiness_categoriesto prioritise before you ever send.
Compliance
This Actor reads only publicly published business contact information from public websites and public business listings. It does not access private accounts, does not log in anywhere, and does not attempt to bypass authentication. Business contact data is still personal data in many jurisdictions — you are responsible for having a lawful basis for contacting the businesses you collect, and for honouring opt-outs under GDPR, CAN-SPAM, CASL, DPDP and any other regime that applies to you.
Compared to alternatives
- vs. lukaskrivka Google Maps enrichment actors: This actor combines Maps discovery and website-contact enrichment in one run while keeping the source place fields.
- vs. a standard Google Maps scraper: It adds public emails, phones, social profiles, contact pages, and domain-level email signals to each place record.
FAQ
Does every business return an email address? No. Expect roughly 71–75% email coverage overall, with meaningful variation by industry and country.
Can I enrich an existing website list?
Yes. Use websites, or use businesses to preserve your original business fields.
Does domain validation prove a mailbox exists? No. It confirms that the email domain accepts mail, not that an individual mailbox is active.
Last verified: 2026-07
More lead-generation actors at thirdwatch.dev.