Google Maps Email Scraper — Business Emails & Contacts avatar

Google Maps Email Scraper — Business Emails & Contacts

Pricing

from $1.60 / 1,000 business founds

Go to Apify Store
Google Maps Email Scraper — Business Emails & Contacts

Google Maps Email Scraper — Business Emails & Contacts

Search Google Maps for a kind of business in an area and get each one's contact details: the phone and address from the listing, plus the emails and social profiles found by crawling its website. Covers areas larger than one map view by tiling them.

Pricing

from $1.60 / 1,000 business founds

Rating

0.0

(0)

Developer

The Netaji

The Netaji

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

4 days ago

Last modified

Share

The Actor searches Google Maps for a kind of business in an area and returns each one's contact details: the phone and address published on the listing, plus the email addresses and social profiles found by crawling that business's own website. One business produces one record, whether or not it has a website.

Every page read is a public one. No account, no login and no session cookie is used on any source the Actor touches, which is also why a run cannot reach anything a signed-out visitor could not. Addresses can optionally be checked against the mail server that would receive them, and the senior people at each business looked up from public profiles.

{
"query": "dentist",
"location": "Austin, Texas",
"spanMetres": 20000,
"maxPlaces": 20
}

Accepted input

query is what would be typed into Google Maps — dentist, hardware store, plumber, or a business name. Google's own interpretation of the phrase applies.

location is where to search — a town, city, district or address such as Austin, Texas or Shoreditch, London. It is resolved to a point once at the start of the run. latitude and longitude are optional and override it, for a search centred on an exact point rather than a named place; they must be given together.

spanMetres is how wide a map view to search around that point, and defaults to 20,000 m — roughly a metro area. areaMetres defaults to 0, which searches one view at the centre. Anything larger walks a grid of views across that area.

The grid is the reason areaMetres exists. One search term at one map view returns about 182 distinct businesses, and that ceiling belongs to the question rather than to the site: covering an area holding more than that is a matter of asking several narrower views instead of one wide one. A city walked at a 2,000 m span enumerates it. maxPlaces stops the walk after a given number of businesses; 0 means no limit.

contactTypes, includeContactText, smartDiscovery, maxPagesPerWebsite, useStealth and solveCloudflare control the website crawl and behave as they do in the Website Email Scraper. maxPagesPerWebsite defaults to 3 here, because a business website only has to be read as far as its contact page.

enrichSocialProfiles is off by default. Turned on, each social account linked from a business website is read for follower counts, category, verification and biography — and for the contact email or phone that business accounts publish and their website often does not.

verifyEmails is off by default. Turned on, each address found for a business is checked against the mail server that would receive it and labelled verified, accept_all or unverified. maxEmailsVerifiedPerBusiness caps how many of a business's addresses are checked and defaults to 5; the list is ordered by confidence, so the first few are the ones most likely to be the business's own.

findDecisionMakers is off by default. Turned on, the senior people at each business — C-level, VP, Head and Director — are looked up from public profiles and returned with ranked email addresses. The lookup starts from the LinkedIn company page found on the business website, and falls back to the website's own domain when there is none.

Response fields

One record per business, in one shape. The shape does not change with any input.

FieldContents
schemaVersionVersion of this output contract
urlThe business website, or empty when it has none
domainDomain of that website
statusok when contacts were found, empty when none were, failed when the business could not be read at all
scrapedAtWhen the business finished being processed
placeThe Google Maps listing: name, address, phone, categories, rating, hours, coordinates and map link
companyName, description and website read from the business's own pages
emails, phones, socials, addressesEvery contact found, from the listing and the website together
decisionMakersThe senior people found at the business, each with name, headline, seniority, function, profile URL and ranked email addresses. Present only when findDecisionMakers is on and someone was confirmed
statspagesScanned, pagesFailed, browserPages, durationMs
errorcode and message when the business could not be read, otherwise null

Every entry in every collection carries the same five keys: value (always a string), sourceUrl, foundBy, confidence and attributes. foundBy says where the detail came from — google-maps for the listing's own phone and address, mailto or dom for the website, and the platform name for anything a social profile published.

With verifyEmails on, each checked address carries its verdict in attributes: verification, verificationReason, mailboxKind and mailProvider. Addresses that were not checked, because the cap was reached or the check could not be made, carry none of those keys rather than a guess.

A business with no website still returns a record, with its listing phone and address as ordinary entries. Those are frequently the only contact details a small business publishes anywhere, so they are the result rather than a consolation for one.

What a verified address means

verified means a mailbox was confirmed to exist at that address. unverified means it was checked and could not be confirmed — the reason says whether the mailbox was rejected, the domain could receive no mail at all, or nothing could be established.

accept_all is the third answer and it is not a weaker verified. Some domains answer yes to every address put to them, including addresses that cannot exist, so on those no mailbox can be confirmed by anyone. Measured across a sample of fifteen domains, six behaved that way, and software companies almost uniformly do. Those addresses are returned and labelled rather than counted as verified, and the add-on is not charged for them.

Reshaping the results

The dataset export handles the common reshapes without changing what the Actor writes.

WantedExport setting
One row per emailunwind=emails — the record's url and place merge onto each row
Businesses and their emails onlyfields=place,emails with unwind=emails
Flat CSV for a CRMunwind=emails, flatten=place,attributes, format CSV
One row per businessThe default; change nothing

Charging

EventWhen
Business foundOnce per distinct business the search returned, including businesses with no website
Add-on: contacts from the business websiteOnce per business whose website was crawled, however many pages that took
Add-on: social profileOnce per social account read, and only when the account returned data
Add-on: verified emailOnce per business where an address was confirmed to be a real mailbox, however many of that business's addresses were checked
Add-on: decision-makerOnce per business where at least one senior person was confirmed to hold that role there right now

Website crawling is charged once per business rather than per page, so the cost of a run is the number of businesses it found and not how large their websites happen to be. maxPagesPerWebsite is what keeps that offer safe, and smartDiscovery spends those pages on contact and about pages first.

The pages of one search overlap, and a business that appears on several of them is charged once.

Both new add-ons are charged per business rather than per address or per person, and only on a result. A business whose addresses all came back dead, one whose domain accepts every address, and one where nobody senior could be confirmed are each charged nothing for the add-on that found nothing.

Frequently asked questions

How precise does the location need to be?

A city or district is enough for most searches — it is resolved to a point, and spanMetres decides how far around that point the search reaches. A name that matches several places resolves to the best match, so add the region or country when that matters: Cambridge, England rather than Cambridge. When an exact centre is needed, set latitude and longitude instead and the name is ignored.

Why did a wide search return fewer businesses than expected?

One query at one map view stops at about 182 distinct businesses however wide the view is — a wider view reaches further out rather than returning more. Set areaMetres to the area to cover and lower spanMetres, and the run walks a grid of narrower views instead.

What happens to a business with no website?

It is returned as a record with its listing phone, address and categories, and url is empty. status is ok when the listing itself carried a contact.

Why did a business return no email when its website clearly has one?

Only the first few pages of each website are read, ranked so contact and about pages come first. Raising maxPagesPerWebsite reads further. Some sites also publish contact details only behind a form, which is not something a crawl can read.

Is an account or session cookie used anywhere?

No. Every source the Actor reads — the map listings, the business websites, the social profiles, the public profiles behind the decision-maker lookup — is read the way a signed-out visitor reads it. Nothing that requires a login is reachable, and an authentication wall is reported as a page that could not be read rather than worked around.

Why is an address returned as accept_all rather than verified?

Its domain accepts mail addressed to anything, including addresses that cannot exist, so a positive answer from it carries no information. The address may well be real; it cannot be confirmed, and the record says so instead of implying otherwise.

For crawling websites you already have a list of, see Website Email Scraper. For Google Maps business listings without the contact crawl, see Google Maps Scraper.