Google Maps Leads Scraper - US Phones, Emails & Reviews avatar

Google Maps Leads Scraper - US Phones, Emails & Reviews

Pricing

from $0.85 / 1,000 result scrapeds

Go to Apify Store
Google Maps Leads Scraper - US Phones, Emails & Reviews

Google Maps Leads Scraper - US Phones, Emails & Reviews

Build US and worldwide business prospect lists from Google Maps. Use Fast mode for discovery or Detailed for phones, websites, public email evidence, social links and review samples. Export ranked, deduplicated leads with transparent contact-readiness scores.

Pricing

from $0.85 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Md Jakaria Mirza

Md Jakaria Mirza

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

0

Monthly active users

3 days ago

Last modified

Categories

Share

Build US local-business prospect lists for agencies, sales operations, and market research from public Google Maps data. Start with contractors in Chicago, dentists in Austin, or commercial cleaning companies in Phoenix. Search by keyword and location, preserve filters from an existing Maps search URL, or scrape direct place URLs. Every result is ranked, deduplicated, and ready to export. Worldwide locations remain supported; this is not a US-only scraper.

Use Fast mode at $1 per 1,000 results for affordable business discovery. Choose Detailed mode at $5 per 1,000 leads to add phone numbers, websites, structured opening hours, price and closure status, photos, optional review samples, and optional public emails and social links from the listed business website.

Looking for phones or emails? The prefilled input uses Fast mode and deliberately does not collect those fields. Select Detailed mode, enable enrichContacts for public website emails, and inspect emailEvidence and contactStatus before using the output. Emails are source-published contacts, not verified mailboxes. Setup fees below also apply.

Start here: US contractor contacts

Open the US Contractor Business Contacts starter. It requests up to 5 general contractors in Chicago using Detailed mode, US country bias, and public website contact enrichment. It inspects at most 5 feed places, checks only the listed website page per business, and skips review samples and images. The existing London example and Actor input defaults remain unchanged.

At current undiscounted pricing and 1024 MB, a run delivering 5 Detailed leads has $0.03205 in listed event fees, including setup and Actor start. The starter is a saved configuration, not a pre-collected dataset or an automatic schedule. This US configuration has not received a new live verification run; contact availability and result count vary.

Choose Fast for business discovery and Detailed + contact enrichment for contact evaluation. A saved business is billable even when its website publishes no email. Neither mode guarantees a contact for every listing or complete city coverage.

Practical US workflows

  • Agency prospecting: choose one service category and one city, review business-published contact evidence, then export a small qualified list.
  • Local market research: use Fast mode for categories, ratings, locations and source URLs; it does not fetch phone numbers or website emails.
  • Sales operations: use Detailed mode for phone, website and optional public contact fields. Keep source URLs and contact status alongside each CRM import.
  • Repeat research: save an Apify task to reuse the same input, then compare your exported datasets externally. This Actor does not provide persistent watchlist history, change alerts or automatic outreach.

Why use this Actor?

  • Three input methods: keyword + location, Google Maps search URLs, and direct place URLs.
  • Ranked results: every row includes its feed position and source search URL.
  • Transparent lead score: every row includes a 0-100 contact-readiness score and the exact reasons behind it, calculated without extra requests.
  • Two extraction modes: keep broad discovery fast or collect richer business records.
  • Optional reviews: collect up to 20 visible public review samples per business.
  • Optional contact enrichment: fetch the listed website and optionally one discovered contact page, with a streaming 1.5 MB HTML cap per page, without sending website traffic through the Google Maps proxy. Repeated identical website URLs reuse a per-run result instead of fetching again.
  • Contact provenance: each email includes its page URL and whether it came from a public mail link or visible text. Same-business-domain and role-address flags explain the chosen primary email; status distinguishes an unchecked website, a checked page with no email, and an enrichment failure.
  • Run-wide deduplication: the same Maps place is saved and charged only once, even when multiple searches overlap.
  • Worldwide targeting: free-form cities, postal codes, addresses, coordinates, country bias, and two global city presets.
  • Export ready: use Apify datasets in JSON, CSV, Excel, XML, or RSS.

What it extracts

Every saved business can include:

  • Name, search rank, primary category, and categories
  • Lead score (0-100) and human-readable scoring reasons
  • Address, phone, unformatted phone, website, and Plus Code
  • Rating, total review count, and optional review samples
  • Legacy text hours plus structured day/hour objects
  • Price indicator and temporary/permanent closure flags
  • Hero image, visible image URLs, and image count when shown
  • Latitude, longitude, Google Maps ID, and direct Maps URL
  • Optional public emails, preferred primary email, source evidence, same-domain/role-address flags, social profiles and contact-page URL
  • Contact status (not_requested, no_website, success, partial, failed) and fetched-page coverage
  • Original keyword, location, query, source search URL, mode, and timestamp

Fields that Google Maps or the business website does not expose are returned as null or empty arrays. Optional enrichment never removes an otherwise valid core result.

Fast vs. Detailed

CapabilityFastDetailed
Name, rank, category, rating, review countYesYes
Transparent lead score and reasonsYesYes
Feed address, coordinates, Maps ID and URLYesYes
Phone, website, fuller address, Plus CodeNoYes
Structured opening hours, price and statusLimitedYes
Image URLsNoYes
Review samples (maxReviews)NoOptional
Website emails/social links (enrichContacts)NoOptional

Direct place URLs always use Detailed extraction because there is no search feed to parse.

Contact quality and CRM handoff

The 0-100 leadScore is a transparent contact-readiness heuristic, not predicted conversion, verified identity, or inbox deliverability. Inspect leadScoreReasons instead of treating the number as a qualification guarantee.

  1. In the dataset's Google Maps Business Leads overview, check phone, website, primaryEmail and contactStatus. success means website enrichment completed, not that a mailbox was verified; a completed page check can return zero emails.
  2. Export JSON to retain nested emailEvidence (page URL, source type and selection flags) and social links. Review the source page before outreach. Missing data stays null or an empty array; it is not guessed.
  3. For a CRM CSV, map title to company name, phone to business phone, website to company website, primaryEmail to the public email, and url to the Google Maps source. Retain contactStatus, query and scrapedAt; skip empty contacts instead of inventing them. No CRM connection or email sending is included.

not_requested means enrichment was off; no_website means Maps exposed no usable website. partial or failed indicates incomplete or unsuccessful enrichment. contactPagesFetched reports fetched-page coverage, not a whole-site crawl. A role-address or same-domain flag is evidence for review, not permission to send marketing messages.

Input

Use either keywords with locations/locationPreset, startUrls, or both.

FieldDefaultDescription
keywordsnoneBusiness types or search phrases. Each is combined with each location.
locationsnoneCities, regions, postal codes, addresses, or lat,lon pairs.
startUrls[]Google Maps search URLs, direct place URLs, or short maps.app.goo.gl place links.
locationPresetnonehigh_demand_markets (169 cities), world_major_cities (171 cities), or none.
maxResults5Maximum saved rows per search request, 1-1,000.
maxCrawledPlacesPerQuery5Hard cap on inspected feed places per search.
extractionModefastfast or detailed.
maxReviews0Up to 20 visible review samples per business in Detailed mode.
maxImages1Up to 20 visible image URLs per business in Detailed mode.
enrichContactsfalseIn Detailed mode, fetch the listed public website directly for visible emails, social profiles and a discovered contact-page URL.
contactPageLimit1HTML pages per business website: 1 for the listed page only; 2 optionally follows one discovered same-business contact page. No path guessing.
skipClosedBusinessestrueSkip permanently closed listings. Temporary closures remain flagged.
scrapeDetailsfalseDetailed-mode retry when phone or address is missing.
languageenGoogle Maps result language.
countryCodenoneOptional two-letter search and proxy-country bias.
proxyConfigApify ProxyDatacenter first, then one Residential fallback after a blocked zero-result attempt.

Keyword/location requests, pasted search URLs, and direct place URLs share a run limit of 1,000 planned core place inspections. Split larger jobs into multiple runs.

Example inputs

Fast US discovery (no phones or emails)

{
"keywords": ["dentist"],
"locations": ["Austin, TX, USA"],
"maxResults": 5,
"maxCrawledPlacesPerQuery": 5,
"extractionMode": "fast",
"countryCode": "us",
"locationPreset": "none"
}

Small US contractor-contact starter

{
"keywords": ["general contractor"],
"locations": ["Chicago, IL, USA"],
"locationPreset": "none",
"maxResults": 5,
"maxCrawledPlacesPerQuery": 5,
"extractionMode": "detailed",
"maxReviews": 0,
"maxImages": 0,
"enrichContacts": true,
"contactPageLimit": 1,
"skipClosedBusinesses": true,
"scrapeDetails": false,
"language": "en",
"countryCode": "us",
"proxyConfig": { "useApifyProxy": true }
}

Detailed US leads with review samples and a contact-page lookup

{
"keywords": ["commercial cleaning company"],
"locations": ["Phoenix, AZ, USA"],
"maxResults": 10,
"maxCrawledPlacesPerQuery": 15,
"extractionMode": "detailed",
"maxReviews": 3,
"maxImages": 3,
"enrichContacts": true,
"contactPageLimit": 2,
"countryCode": "us",
"locationPreset": "none"
}
{
"startUrls": [
{ "url": "https://www.google.com/maps/search/coworking+space+in+Berlin/" }
],
"maxResults": 20,
"extractionMode": "detailed",
"maxReviews": 0
}

Direct place URL

{
"startUrls": [
{ "url": "https://www.google.com/maps/place/Example+Business/" }
],
"maxReviews": 5,
"maxImages": 5,
"enrichContacts": true
}

Pricing and cost control

The Actor uses Apify Pay Per Event pricing:

EventPrice
Saved Fast result (result-scraped)$0.001, with Store-tier discounts down to $0.00085
Saved Detailed lead (detailed-result-scraped)$0.005, with Store-tier discounts down to $0.00425
Google Maps run setup (maps-run-started, one-time)$0.004
Detailed-mode setup (detailed-run-started, one-time)$0.003
Actor start (apify-actor-start, one-time)$0.00005 per allocated GB event

Platform compute, storage, transfer, and proxy usage are included in these active event prices. Every valid Maps run has the $0.004 Maps setup event; Detailed work also has the $0.003 Detailed setup event. The synthetic Actor-start event is charged at least once, including runs below 1 GB. These fees are spread across larger batches. Optional website enrichment and its source evidence have no extra Actor event fee; repeated runs still charge for delivered places. Website HTML requests do not reuse the Maps proxy.

At undiscounted prices and 1 GB or less, 25 saved Fast results cost $0.02905 in listed events; 5 saved Detailed leads cost $0.03205. A request may return fewer rows. Setup charges can still apply when valid work later fails or produces no results; result charges apply only to delivered unique places.

Small single-search batchListed event total at 1024 MB, no discount
5 saved Fast results (discovery only)$0.00905
25 saved Fast results$0.02905
5 saved Detailed leads (public contacts optional)$0.03205
25 saved Detailed leads$0.13205

These examples are event-price calculations, not measured margins or guarantees of contact coverage. Subscription-tier discounts reduce result-event prices, not the fixed setup events. maxResults applies per query, not to the entire run: 2 keywords x 3 locations x 5 results can save up to 30 businesses before run-wide deduplication. Keep maxCrawledPlacesPerQuery close to the requested result count and leave global city presets off for a small trial.

For a first test, use one search and a small matching result/inspection limit. Use Fast for discovery or Detailed plus enrichContacts: true to evaluate contacts. Failed requests, retries, and duplicate places do not create result events. The Actor validates input and proxy configuration before custom setup charges.

API example

curl -X POST "https://api.apify.com/v2/acts/fascinating_lentil~google-maps-scraper/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"keywords": ["coffee shop"],
"locations": ["Chicago, IL, USA"],
"maxResults": 5,
"maxCrawledPlacesPerQuery": 5,
"extractionMode": "fast",
"countryCode": "us",
"locationPreset": "none"
}'

Reliability and limits

  • Google Maps changes its interface regularly, and some fields vary by country, language, category, and listing.
  • Fast mode deliberately avoids place-page navigation, so phone, website, full hours, images, and reviews are not available there.
  • Review extraction saves visible samples, not an unlimited review archive. Order follows the Maps interface.
  • Contact enrichment defaults to the listed page only. contactPageLimit: 2 can follow one discovered contact page on the same business host; it is not a whole-domain crawl. Each page is streamed with a 1.5 MB cap and a 15-second timeout. Redirects are validated and private network destinations rejected. Oversized, unreachable or blocked pages can leave core Maps data intact with a failed/partial enrichment status.
  • Same-domain and role-address flags are heuristics, not identity, ownership or deliverability checks. No SMTP probing, inbox verification or personal-contact guessing is performed. Review/photo limits remain 20 per place; these are visible samples.
  • Results come from bounded Maps search feeds, not an adaptive geographical grid or exhaustive city census. Worldwide presets select searches; they do not prove all-area coverage.
  • The Actor blocks heavy media and tracking requests, detects common challenge pages, retires blocked sessions, and retries transient failures.
  • The browser processes one Maps page at a time. Fast mode disables visual WebGL rendering and blocks recognized visual-map tile requests, but keeps search/place requests, scripts and functional stylesheets. Detailed mode keeps its normal rendering path. Actual cloud memory/cost savings must be measured; these controls do not guarantee savings on every source response.
  • Fast feed capture stops after enough valid, unique, not-yet-delivered candidates satisfy the row target, or at the explicit inspection cap. Closed/invalid/duplicate candidates do not falsely fill that quota. The copied feed data can then be processed after releasing the live document to a blank page; the browser context stays open for session cookies. OUTPUT.searchFeedCoverage[].fastPageRelease distinguishes a successful release, an unsuccessful cleanup and Detailed's not_requested path. A cleanup failure does not discard core rows or trigger a proxy retry.
  • Fast initial navigation uses DOM readiness, then explicitly waits for the feed and classifies consent, blocking and empty-result states. It does not wait for unrelated frames to finish the full-page load event. Detailed keeps its previous initial-navigation readiness. This removes a demonstrated avoidable wait in offline fixtures; it is not proof of lower live Google Maps memory or cost.
  • Detailed mode finishes copying the place's fields, selected photos, hours and reviews before releasing that document for Node-only website lookup and saving. The next place or optional missing-field retry opens the captured Maps URL; the retry document is also released before saving. OUTPUT.detailedPageReleaseChecks and detailedPageReleaseFailures report cleanup attempts/failures. A website timeout or oversized response still keeps core place fields and reports the real enrichment status. These lifetime controls require cloud verification; they do not prove savings on every target.
  • Search cards are retained across scrolling, including virtualized feeds that replace the visible cards. OUTPUT.searchFeedCoverage reports captured places, saved rows and why scrolling stopped (target_reached, source_end, stalled, attempt_limit or time_limit). partialFeedCoverage warns when a bounded/stalled feed saves fewer than the requested rows. A source-end marker is not a claim of exhaustive city coverage.

Responsible use

Use this Actor only for lawful collection of public business information. You are responsible for complying with Google Maps terms, website terms, privacy and data-protection laws, and outreach regulations such as GDPR, the India DPDP Act, CAN-SPAM, and local equivalents.

This Actor is independent and is not affiliated with or endorsed by Google.