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

1

Monthly active users

5 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.

{
"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.

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
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.

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.

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

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.

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.

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.