Google Maps Lead Scraper avatar

Google Maps Lead Scraper

Pricing

from $4.00 / 1,000 place scrapeds

Go to Apify Store
Google Maps Lead Scraper

Google Maps Lead Scraper

Scrapes businesses from Google Maps search results and enriches each lead with public emails from the business website.

Pricing

from $4.00 / 1,000 place scrapeds

Rating

0.0

(0)

Developer

Elena Vance

Elena Vance

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Turns Google Maps searches into a clean lead list: business name, category, address, phone, website, rating, coordinates — plus public email addresses discovered on each business's own website.

Built for lead generation, local market research and territory analysis.

What you get

One dataset row per business, including:

FieldExample
nameATX Family Dental
category / categoriesDentist / Dentist, Cosmetic dentist, …
phone / phoneUnformatted+1 512-717-3147 / +15127173147
website / websiteDomainhttps://www.atxfamilydental.com/
primaryEmail / emailsinfo@atxfamilydental.com
address, street, city, state, postalCode, countryCode1700 S 1st St, Austin, TX 78704
rating4.9
coordinates{ "lat": 30.2482, "lng": -97.7560 }
googlePlaceIdChIJb5gBC-u0RIYRHkntaUcdJGs
openingHours, hoursText, businessStatus, permanentlyClosedOpen · Closes 5 PM
attributesWheelchair-accessible entrance

Quick start

{
"searchQueries": ["dentists in Austin"],
"maxResultsPerQuery": 120,
"includeEmails": true
}

Reuse one set of queries across cities with locationQuery:

{
"searchQueries": ["dentists", "orthodontists"],
"locationQuery": "Austin, Texas",
"requireWebsite": true,
"minRating": 4.5
}

Target an exact map area instead of relying on the query text:

{
"searchQueries": ["coffee shop"],
"customGeolocation": { "latitude": 51.5072, "longitude": -0.1276, "zoom": 13 },
"countryCode": "gb"
}

Input reference

FieldDefaultNotes
searchQueriesrequiredOne search per line.
locationQueryAppended to every query unless already present.
maxResultsPerQuery120See the result-limit note below.
maxTotalResults10000Hard cap across all queries.
includeEmailstrueCrawls each business website for public emails.
maxWebsitePagesPerPlace5Homepage plus contact/about style pages.
minRatingPlaces with no rating are excluded when set.
requireWebsite / requirePhonefalseKeep only contactable businesses.
skipClosedfalseDrop permanently/temporarily closed places.
categoryIncludesCase-insensitive substring match on categories.
language / countryCodeenLocalizes categories and hours wording.
customGeolocation{ latitude, longitude, zoom }.
proxyConfigurationApify ProxyStrongly recommended.
maxConcurrency10Lower it if you hit rate limits.

How many results can I get?

Google itself stops serving results at typically 100–400 places per query, no matter how the search is run. Setting maxResultsPerQuery to 500 will not exceed what Google returns.

To collect more places in an area, split the search rather than raising the limit:

  • by neighbourhood or suburb — "dentists in North Austin", "dentists in South Austin"
  • by related terms — "dentist", "dental clinic", "orthodontist"
  • by map area — run the same query with several customGeolocation centres

Duplicates are removed automatically across all queries in a run, using the Google place ID.

Email enrichment

For each business with a website, the Actor fetches the homepage and up to maxWebsitePagesPerPlace - 1 further same-domain pages whose link text or path suggests contact, about, team, impressum or similar. It reads mailto: links, visible text, lightly obfuscated forms (name [at] domain [dot] com) and Cloudflare-protected addresses.

Addresses are lowercased, deduplicated, and filtered to drop placeholders (you@example.com), platform noise (@sentry.io, @wixpress.com) and no-reply mailboxes. primaryEmail prefers an address on the business's own domain, then a role mailbox such as info@ or contact@.

Roughly half of small businesses publish an email; the rest use contact forms only. Set requireWebsite: true to concentrate the run on businesses that can be enriched.

Pricing

$4.00 per 1,000 businesses — email enrichment included.

You are charged one place-scraped event for each business saved to the dataset, whether or not it turned out to have an email. There is no separate add-on fee for finding emails, and no charge for places skipped by your filters.

Set a maximum cost per run in the Actor's run options to cap spending; the run stops cleanly once it is reached.

Speed and cost

The Actor reads Google's Maps data over plain HTTP with no browser, so it is cheap to run. A measured run of 80 businesses across two queries, with email enrichment on:

MemoryRuntimeCompute units
1024 MB219 s0.061
2048 MB (default)125 s0.069
4096 MB88 s0.097

Peak memory use is around 500 MB. Apify allocates CPU in proportion to memory, so lower settings are slightly cheaper but noticeably slower. 2048 MB is the default because it is close to the cheapest option at roughly half the runtime.

Notes and limitations

  • reviewCount is usually empty. Google removed review counts from the data behind Maps search results; the field remains in the schema and will populate again if Google restores it.
  • openingHours covers the current day only, which is all Google includes in search results.
  • Rows where extraction was incomplete are still saved, with extractionStatus set to partial and a diagnostic errorMessage, so a run never silently drops a lead.

Compliance

This Actor collects publicly listed business information and publicly published business contact details. It does not scrape personal profiles or reviews, and it does not bypass logins or access controls. You are responsible for using the results lawfully, including under GDPR, CAN-SPAM and local marketing rules, and for honouring the terms of any site you contact.

Local development

npm install
npm test # unit tests, no network required
apify run # live run using .actor/input_schema.json defaults