Build a B2B Lead List from Google Maps with A-Parser

Support Anastasia

Administrator
Staff member
A-Parser Enterprise
herogmail.webp


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.
1. WHAT YOU GET: A GOOGLE MAPS BUSINESS LEAD LIST WITH EMAILS

The useful output is more than a list of email addresses. Each address remains tied to the business record collected from Google Maps:

CompanyWebsitePhoneAddressRatingReviewsPublic email
Rumi Event Spacerumieventspace.com+1 646 850 0406229 W 28th St, New York, NY 100014.824[email protected]
RSVP Event Venuersvpbrooklyn.com+1 718 708 48001940 Rockaway Pkwy, Brooklyn, NY 112364.4157[email protected]
Pier Sixtypiersixty.com+1 212 336 6060Pier 60 Chelsea Piers, New York, NY 100114.5685[email protected]
Tribeca Rooftop + 360°tribecarooftopnyc.com+1 212 625 260010 Desbrosses St, New York, NY 100134.6772[email protected]
Metropolitan Pavilionmetropolitanevents.com+1 212 463 0071125 W 18th St, New York, NY 100114.41,068[email protected]
Full example of the English results: view the full HTML table.

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.

infographicgmail_en.webp


Why the separation matters
  1. 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.
  2. Inspect each stage separately. You can see whether coverage was lost in Maps, while loading websites, or during email extraction.
  3. Retry only failed URLs. Process failed websites again without scraping Google Maps from scratch.
  4. 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.

AnchorQueryCoordinates
Centerevent venue40.7128,-74.0060
Manhattanevent venue Manhattan40.7831,-73.9712
Brooklynevent venue Brooklyn40.6782,-73.9442
Queensevent venue Queens40.7282,-73.7949
Bronxevent venue Bronx40.8448,-73.8648
Staten Islandevent venue Staten Island40.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.

StageResult
Rows with a website before deduplicating overlapping anchor results4,465
Unique business listings across the six anchors854
Final NYC business listings765
Unique NYC website URLs722
Distinct NYC website domains664

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.

PriorityAvailable evidenceNext action
HighWebsite, phone, and an email address on the company’s domainValidate the mailbox, check the business details, and prepare personalized outreach.
MediumWebsite and phone, but no email found on the initial pageRun a targeted pass over the company’s contact pages or use the phone or contact form.
ReviewFree email account or address on another domainConfirm that the address belongs to the venue before using it.
LowWebsite failed repeatedly or listing data appears staleRetry 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

ProblemLikely causeAction
One Maps center returns too few businessesThe 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 addressThe 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 addressesTechnical DSN strings are present in the page code.Filter known infrastructure domains and keep the source URL for review.
Many website requests failTimeouts, 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 onceSearch 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
  1. Event suppliers: segment venues by borough, category, and review volume before offering catering, rentals, staging, security, or production services.
  2. Local SEO agencies: compare venue listings, websites, ratings, and review counts to build a targeted audit.
  3. Web studios: identify operating venues with strong Maps profiles but outdated or inaccessible websites.
  4. Partnership outreach: build a researched list of venues for photographers, planners, entertainment providers, and corporate-event platforms.
  5. 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:
Back
Top