Google Maps Email Scraper: Find Business Emails with A-Parser
At a glance
A useful local B2B lead list is more than a pile of email addresses. Each contact should remain tied to the business, location, phone number, website, and other details a sales team needs before reaching out. Building that list by hand means repeating the same routine: searching Google Maps, opening listings one by one, copying business details, visiting each website, and looking for a public email address.
A-Parser turns that routine into a controlled two-stage workflow. Maps::Google collects business listings, websites, phone numbers, ratings, and coordinates. HTML::EmailExtractor then checks each listed website for publicly available email addresses.
In the New York City event-venue run described below, six fixed search anchors at zoom 11 produced 765 deduplicated NYC business listings. The website stage returned 334 unique email candidates from 278 NYC websites after obvious technical addresses were filtered out.
This article shows you:
- how to cover a large city with several Maps search anchors instead of relying on a single center point;
- how to collect business data with Maps::Google;
- how to check the initial page of each website with HTML::EmailExtractor;
- how to remove tracking and infrastructure addresses from the output;
- what the NYC test returned, including its limitations and failure cases;
- how to turn the results into a usable B2B prospecting table.
The useful output is more than a list of email addresses. Each address remains tied to the business record collected from Google Maps:
| Company | Website | Phone | Address | Rating | Reviews | Public email |
|---|---|---|---|---|---|---|
| Rumi Event Space | rumieventspace.com | +1 646 850 0406 | 229 W 28th St, New York, NY 10001 | 4.8 | 24 | [email protected] |
| RSVP Event Venue | rsvpbrooklyn.com | +1 718 708 4800 | 1940 Rockaway Pkwy, Brooklyn, NY 11236 | 4.4 | 157 | [email protected] |
| Pier Sixty | piersixty.com | +1 212 336 6060 | Pier 60 Chelsea Piers, New York, NY 10011 | 4.5 | 685 | [email protected] |
| Tribeca Rooftop + 360° | tribecarooftopnyc.com | +1 212 625 2600 | 10 Desbrosses St, New York, NY 10013 | 4.6 | 772 | [email protected] |
| Metropolitan Pavilion | metropolitanevents.com | +1 212 463 0071 | 125 W 18th St, New York, NY 10011 | 4.4 | 1,068 | [email protected] |
The company name and address give you enough context to personalize your outreach. The phone number gives you another way to reach the business. Ratings and review counts help you segment the list before outreach.
Important: HTML::EmailExtractor finds strings published as email addresses on accessible pages. It does not confirm that a mailbox exists or accepts mail, that the address belongs to a decision-maker, or that you can lawfully use it for your intended campaign. Validate deliverability and follow the laws, platform rules, and opt-out requirements that apply to your campaign.
2. WHY GOOGLE MAPS AND EMAIL EXTRACTION SHOULD USE TWO TASKS
A common first attempt is to add Maps::Google and HTML::EmailExtractor to one multiparser task and put $p1.site in the second parser’s query field. That does not pass the Maps results to the next parser. In a multiparser task, every parser receives the original task query; a value inside p1.serp does not automatically become a separate website query.
Why the separation matters
- Save time and resources. Only companies with a website enter the second stage, so you do not waste website-parser resources on listings without a site.
- Inspect each stage separately. You can see whether coverage was lost in Maps, while loading websites, or during email extraction.
- Retry only failed URLs. Process failed websites again without scraping Google Maps from scratch.
- Leave deep crawling for later. Test the initial page first, then check internal pages on a smaller subset.
For a fully automated chain, set the Maps task to Run task on complete and enable Use results file as queries file. Keep the intermediate Maps file without a header row; otherwise, the header row will be passed to the website parser as a query.
3. EXAMPLE: SCRAPING EVENT VENUES IN GOOGLE MAPS
The test used the base search phrase event venue. A single Maps center does not define a city boundary, and Google may return businesses outside the area around that point. To improve coverage while keeping the required zoom level, the task used six Maps search anchors.
Each Maps parser instance used:
- Zoom: 11;
- Language: English;
- Max pages: 10;
- Use proxy: disabled for this run;
- Proxy retries: 3.
| Anchor | Query | Coordinates |
|---|---|---|
| Center | event venue | 40.7128,-74.0060 |
| Manhattan | event venue Manhattan | 40.7831,-73.9712 |
| Brooklyn | event venue Brooklyn | 40.6782,-73.9442 |
| Queens | event venue Queens | 40.7282,-73.7949 |
| Bronx | event venue Bronx | 40.8448,-73.8648 |
| Staten Island | event venue Staten Island | 40.5795,-74.1502 |
4. WHAT THE GOOGLE MAPS TEST RETURNED
The six-anchor Maps task completed in 38 seconds in this environment. This is not a general speed benchmark: runtime depends on the host, Google responses, task settings, proxies, and network conditions.
| Stage | Result |
|---|---|
| Rows with a website before deduplicating overlapping anchor results | 4,465 |
| Unique business listings across the six anchors | 854 |
| Final NYC business listings | 765 |
| Unique NYC website URLs | 722 |
| Distinct NYC website domains | 664 |
Multiple search anchors improve discovery because their result sets overlap only partially. The final count is the combined, deduplicated result—not the sum of all anchor results.
Here, “final NYC business listings” means the deduplicated listings retained in this test’s NYC dataset. It does not imply exact coverage of the city limits.
5. HOW TO COLLECT BUSINESS DATA WITH MAPS::GOOGLE
Create a task and add Maps::Google. For a small city, start with one center point. For a large metro area, either create one task per search anchor or add several Maps::Google instances to the same task, as in this test.
For each parser instance, set the coordinates, zoom level, and query shown in the table above. Keep the anchor label in the output so you can inspect overlapping results later.
Here is a compact output block for the first parser:
Code:
[% FOREACH item IN p1.serp;
IF item.site;
"center\t" _ query _ "\t40.7128\t-74.0060\t" _ item.name _ "\t" _ item.address _ "\t" _ item.phones _ "\t" _ item.rating _ "\t" _ item.reviews _ "\t" _ item.categories _ "\t" _ item.site _ "\t" _ item.place_id _ "\t" _ item.coordinates _ "\n";
END;
END %]
Use the same block for the other parser instances, changing p1 to p2 through p6 and updating the anchor label and coordinates. The resulting TSV fields are:
Code:
Anchor | Search query | Grid latitude | Grid longitude | Company | Address | Phone | Rating | Reviews | Categories | Website | Place ID | Listing coordinates
The IF item.site condition filters out listings without a website before the email stage.
In this code sample, \t means a tab and \n means a line break. Make sure the export contains real tabs and line breaks, not the literal sequences \t and \n, before using it as input for another task.
Choose the right deduplication key
Do not deduplicate by company name alone. Chains and unrelated businesses can have similar names. For listing-level analysis, use a key such as company + address + listing coordinates. For the website stage, normalize URL fragments and tracking parameters before deduplicating website queries.
Keep both counts:
- Business listings represent locations or individual Maps records;
- Website domains represent the number of sites that may require an HTTP request.
6. HOW TO FIND BUSINESS EMAILS WITH HTML::EMAILEXTRACTOR
Find public emails on company websites
Now configure HTML::EmailExtractor. First, add a Regex rule in its Query Builder. The rule splits each TSV row into fields and passes only the website URL to the parser.
Code:
{
"source": "query",
"type": "regex",
"regex": "^(.*?)\\t(.*?)\\t(.*?)\\t(.*?)\\t(.*?)\\t(.*?)\\t(.*?)\\t(.*?)\\t(.*?)\\t(.*?)\\t(.*?)\\t(.*?)\\t(.*?)\\s*$",
"regexType": "",
"to": ["grid", "search_query", "grid_lat", "grid_lng", "company", "address", "phone", "rating", "reviews", "categories", "site", "place_id", "coordinates"]
}
These 13 capture groups carry the Maps fields into the second task. The site field is the URL sent to HTML::EmailExtractor. The Maps output already filters out listings without a website through IF item.site.
Configure HTML::EmailExtractor with:
- Query format: $query.site — the parser uses the URL from the Website field;
- Engine: HTTP when contact details are available in HTML; use Chrome for JavaScript-heavy sites;
- Use proxy: disabled in the supplied preset;
- Proxy retries: 3;
- Search Cloudflare protected e-mails: enabled;
- Search URL encoded e-mails: enabled;
- Follow links: disabled;
- Recurse: disabled;
- Parse to level: leave this option unset for the first test;
- Unique queries: enabled.
For JavaScript-heavy websites, try Chrome on a small sample. If you need contact pages, run a separate pass over that sample with Parse to level = 1, Follow links = Internal only, and Follow links limit set to a positive value such as 5–10. This increases the number of requests and the runtime, so test it before enabling it for the full list.
Use this result format to carry the Maps fields forward and append the extracted email addresses:
Code:
$query.grid\t$query.search_query\t$query.grid_lat\t$query.grid_lng\t$query.company\t$query.address\t$query.phone\t$query.rating\t$query.reviews\t$query.categories\t$query.site\t$query.place_id\t$query.coordinates\t$p1.mails.format('$mail,')\n
Set this header in Prepend:
Code:
Grid\tSearchQuery\tGridLat\tGridLng\tCompany\tAddress\tPhone\tRating\tReviews\tCategories\tWebsite\tPlaceId\tCoordinates\tEmailCandidates\n
This keeps each extracted address tied to its original Maps listing. A blank email field is normal: the site may use a contact form instead of publishing a mailbox.
Email cleanup note
HTML::EmailExtractor extracts strings that look like email addresses from the page source. Some may be technical or unrelated, such as Sentry DSN values or [email protected]. Remove obvious infrastructure addresses and review free email accounts or addresses on another domain manually. An email candidate is not proof that the mailbox is deliverable; validate it separately before outreach.
Ready-to-import preset
The embedded preset below is the corrected, runtime-tested package. It creates the six-anchor Maps task and the email-enrichment task described above, passes the headerless Maps TSV to the second task automatically, and leaves deep crawling disabled.
Code:
eNrtWW1PGzkQ/iurVau0FYkSCCSEDydIQ0sFhLfe6US4yOxOkj127cX2huQQ
//3GL/uSTUK5k+5Lc19gPZ4Zzzwe5rHNsyuJeBAXHARI4XZun138TEIprskU
bpjbcUdBCO6WS3w/kAGjJDxmPCJa+W4r1f5Og8cEUFtIHtAx6idacpkADwB1
JU9gyxXo9JigQ780EUjgRDLej9UaKH52GT0Mw1OYQojDEQkFqqFHPj9KgtAH
Lg5HaHRiDVer9Jd8vGQhF5eaAn/iGEMajh4c9c/MGG18dsrGmJ5/j6mFQRRI
HIsuS6hEaR2FDwBxhoISRIxDtoZxa1c+jGOgPqqhlsfoKBj3MQAe+JCCmtAb
3JY+7bIoDkFCV2up9WFE0AUaSsZC8e3aeIl5gFu1q1aIMJncMIPFI2H4/eq0
OKMMhWRxn/Y4VwiaIH32Ge6TccFSwpjxuQkt1pWCxue/d53eFKh0fgWagHCq
jghmzhmJhUOoN2FciYCq6AgXuBno4NZV853OF8bGuqqyfJ7dKQk1ds16rdXY
bm9VW81avb6noJTzWM0wixJKAgUfke5LbthorFX8a0GvvlYvIrNhTMa4DQX9
9eqJgJiz2byovbNWW6tykLrsX+623opFe6eBWOzU9hGVDcdir9XeNlg0m5uO
RWvbYtHab+5vOBbtZrOtsWjvNdsbjsVua39X987Gbv1n/RvJzx3mLIIat++d
4/5V77D71UHqjpyTcydu1JB24gPn5FjLagJ/HjgVD0kL+ECCZq+pYq+BtKwz
kCntDGTFGRo7SiLA70pBhKchjECUpPGEUSgL8XiCJ6KyEKYBPJVVLdUGSz5U
5OW1QuLBMPDLLhjjfkDRkfFBKwdO7/yz/uG8v1sF0/ZqmCJCJ0RKQheQQoLP
xJadFGaGnjYHs53VmN1zxh7CeQmyo0xqOcwihiS2OYg1VyOG52WgYhGvSyuz
LGfQUjS3OWjtrq0vOlsqLiWyLGiwUjS4OVjtrcZKSHRCh4EICfUXMbvWU86J
nbKsaXq/os2fEzs3Z028gZ9jYsibdO5VNTRVDY2oRnjIqAKtSTHNDS445FfW
R3N1P+YsQoGEmbTCecrGt24BbZxcyR8ledokS2LTC5Z16awkW9hT9y4LE0Nc
DGbhgWDhEaMkLF/CV196JywCde5xICJBiBdeHniTSKnY2y+edK5y2A+FfflQ
g/R54f9Hl819dLGq//7V5YcFWHx++Xpzdtrp9JRmbyY58dQurrpK1Mvn9OWz
+eLJffmc/qpFw1oIINybdI918P/IBoEF6jEf/N4bbNN8RiwM2dPbdDl4CUL3
urL7The/btPrr1taZ2Ta48r7i/UyRqOBTF3qPId6kAmVxjAksiSg40zgYbER
mltYvsrGmqmykaGofGjIKXeW0VIeFmaaO7NUVFg9IyGU4R1Mb07N5P6h8k4N
tyofB/RtdJRWd9UUyCvM9EVDd60xuzSQKdGpgkp/qCy7KTaHKSgXBo0rC8NV
mn+3kPhvcG+SvlDZnvjKTyFLXX9dpJ3A1wK6RJK2nT8WW//t3RJrFktpgcFW
0NZzWmocxqDIULCEe5DWmm5WyqcqDzVbqCUcplWUfWr6sJVjiEfBo7qHwkfh
rQHSwGuE3KxHmb91W/9pPWhvGUaurngVZ8f940Pt0y8fBwP5H/8Wn965dtUb
g5Qe6gBtH9aYpN/YJg2nueq15c1nApqE4Q9I3nDgXdaJs/+2PCPJ/SkujFTp
Whk2D4EUhh3v5W84sYxG
Copy the block into A-Parser’s task preset importer. Start with a small test, then replace the NYC queries and coordinates for your market.
7. HOW TO PRIORITIZE THE GOOGLE MAPS LEAD LIST
A-Parser collects evidence, but it cannot tell whether a business is a qualified prospect for your offer. Add a priority column in your spreadsheet or CRM after extraction.
| Priority | Available evidence | Next action |
|---|---|---|
| High | Website, phone, and an email address on the company’s domain | Validate the mailbox, check the business details, and prepare personalized outreach. |
| Medium | Website and phone, but no email found on the initial page | Run a targeted pass over the company’s contact pages or use the phone or contact form. |
| Review | Free email account or address on another domain | Confirm that the address belongs to the venue before using it. |
| Low | Website failed repeatedly or listing data appears stale | Retry separately, inspect it manually, or remove it from the active list. |
Ratings and review counts can support offer-specific segments:
- Reputation management: prioritize businesses with lower ratings and enough reviews for the signal to matter.
- Local SEO: compare well-rated businesses with few reviews against competitors with stronger Maps visibility.
- Event services and suppliers: use categories, venue type, location, and review volume to separate large operators from smaller spaces.
Do not infer buying intent from a rating alone. Use it to prioritize research, not as proof that a company needs your service.
8. TROUBLESHOOTING GOOGLE MAPS AND EMAIL EXTRACTION
| Problem | Likely cause | Action |
|---|---|---|
| One Maps center returns too few businesses | The city cannot be covered effectively from a single search area, or Google returns only the strongest listings. | Add explicit borough or district anchors at the same zoom and measure the additional coverage. |
| EmailExtractor finds no email address | The initial page has no public email, the address is injected by JavaScript, or the site uses only a form. | Try Chrome or run a targeted pass over internal pages on a limited subset. |
| The output contains Sentry or Wix addresses | Technical DSN strings are present in the page code. | Filter known infrastructure domains and keep the source URL for review. |
| Many website requests fail | Timeouts, TLS errors, redirects, blocking, or unstable proxies. | Save the failed queries and retry them separately with bounded retries or a better proxy pool. |
| One business appears more than once | Search anchors overlap, or several listings use the same website. | Deduplicate listings and website domains separately; they may represent different locations or businesses. |
9. HOW TO USE THE GOOGLE MAPS BUSINESS DATABASE
- Event suppliers: segment venues by borough, category, and review volume before offering catering, rentals, staging, security, or production services.
- Local SEO agencies: compare venue listings, websites, ratings, and review counts to build a targeted audit.
- Web studios: identify operating venues with strong Maps profiles but outdated or inaccessible websites.
- Partnership outreach: build a researched list of venues for photographers, planners, entertainment providers, and corporate-event platforms.
- Data cleanup projects: compare repeated phone numbers, shared websites, and overlapping listings to identify groups and duplicate locations.
The strongest outreach starts with a relevant segment and a verified business reason—not with the largest possible email file.
Product stack
- A-Parser Pro / Enterprise
Runs Maps::Google and HTML::EmailExtractor, manages task queues and retries, and writes structured results for the next processing stage. - A-Parser Residential Premium Proxies
Useful when regional consistency and stable access matter at larger scale. Proxies do not guarantee that a website publishes an email address.
Choose A-Parser to build the two-stage workflow. Add Premium Proxies when your target geography or volume requires more stable network access.
Useful links:
Last edited: