Google Maps Scraper — Places, Leads & Contact Data avatar

Google Maps Scraper — Places, Leads & Contact Data

Pricing

from $4.00 / 1,000 results

Go to Apify Store
Google Maps Scraper — Places, Leads & Contact Data

Google Maps Scraper — Places, Leads & Contact Data

Scrape Google Maps places by search query. Returns name, full address, latitude/longitude, phone, website, rating, review count, category, price level, neighborhood, timezone, place ID and CID. HTTP-only — no browser, fast and cheap.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

yossef Nagy

yossef Nagy

Maintained by Community

Actor stats

0

Bookmarked

84

Total users

46

Monthly active users

14 hours ago

Last modified

Share

Google Maps Scraper — Places, Leads, Reviews & Contact Data

Extract business data from Google Maps at scale — names, addresses, phone numbers, websites, ratings, reviews, photos, opening hours, amenities, coordinates and more — for any type of business in any location. No browser required: the Actor talks to Google Maps' internal endpoints directly over HTTP, so it's fast and cheap.

It also ships powerful, optional layers: precise targeting (batch queries, map URLs, or a drawn area), deep reviews, complete place data, plus experimental lead enrichment (emails, socials, people/contacts) and ad intelligence (is the business advertising on Meta / Google right now?).


What does it do?

  1. Searches Google Maps for your query and covers the whole area with a grid search, finding businesses that a single search page misses.
  2. Extracts a clean record for every business — the full place profile.
  3. Optionally enriches each business with deeper place data, full reviews, website contact data, the people who work there, and live ad-spend signals.

Features

  • 🗺️ Comprehensive place data — name, address, phone, website, rating, review count, category list, coordinates, opening hours, price level, photos, amenities, Plus Code, permanently-closed status.
  • 🎯 Precise targeting — search by a plain query, a batch of queries, Google Maps URLs, or a custom area (lat/lng + radius, or a GeoJSON polygon).
  • Deep reviews — review text, rating, date, author, owner responses, reviewer stats, language, review photos, plus rating / keyword filters.
  • 📩 Lead enrichment (experimental) — emails (MX-validated) and social profiles harvested from each business's own website.
  • 👤 People / contacts (experimental) — the actual people at a business with their own name, title, email, phone and LinkedIn.
  • 📣 Ad intelligence (experimental) — detect which businesses are actively running ads on Meta (Facebook/Instagram) and Google (Search/YouTube/Display), with sample creatives.
  • No browser — pure HTTP, residential proxy by default, automatic IP rotation and retry; built to keep running against Google's defenses.

Quick start

Just enter what you'd type in the Google Maps search box — include the location:

restaurants in New York
dentists in Miami, FL
coffee shops 90210

That's it. Everything else has a sensible default. Turn on the optional layers below only when you need them.


Targeting (how to choose what to scrape)

You can target in four ways — use whichever fits:

InputUse it for
queryA single search, e.g. plumbers in Chicago. The location is auto-detected.
searchQueriesA batch of searches in one run, e.g. ["dentists in Miami", "dentists in Orlando"]. Results are de-duplicated across queries.
startUrlsDirect Google Maps URLs (place or search URLs).
customGeolocationA custom area — either a point + radius { "lat": 25.77, "lng": -80.19, "radiusMeters": 1500 } or a GeoJSON Polygon / MultiPolygon (coordinates in [lng, lat] order).

If you provide an advanced targeting input you can leave query empty.


Output

Each business is one dataset item. Base fields (always present when Include Place Details is on):

{
"name": "Joe's Pizza",
"address": "7 Carmine St, New York, NY 10014",
"phone": "+1 212-366-1182",
"website": "https://www.joespizzanyc.com",
"rating": 4.5,
"reviews_count": 12847,
"category": "Pizza restaurant",
"categories": ["Pizza restaurant", "Italian restaurant"],
"latitude": 40.7304,
"longitude": -74.0022,
"place_id": "ChIJr3k0v6VZwokRPCxBJnIcdTA",
"google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJr3k0v6VZwokRPCxBJnIcdTA",
"hours": { "monday": "10 AM-2 AM", "tuesday": "10 AM-2 AM" },
"price_level": "$10-20",
"photos": ["https://lh3.googleusercontent.com/..."],
"amenities": ["Outdoor seating", "Takeout", "Wheelchair accessible entrance"],
"plus_code": "76QXQR66+RC"
}

Additional fields appear when the matching option is enabled: reviews, permanently_closed, popular_times, found_via (which target produced the row), the lead-enrichment columns (email, emails, facebookwhatsapp, website_reachable), the people columns (business_lead, contacts), and the ad-intelligence columns (meta_ads_*, google_ads_*). Anything not found is null — the base scrape is never affected.


Input reference

Results & detail

FieldTypeDefaultDescription
maxResultsinteger100Max businesses to extract (0 = unlimited).
languagestringenTwo-letter result language (Google hl).
zoominteger13Search granularity (1–21). Lower = wider area, higher = more detail.
includeDetailsbooleantrueFetch full place details (hours, phone, website, price level, photos…).

Complete place data

FieldTypeDefaultDescription
includePhotosbooleantrueInclude up to 10 photo URLs per place.
includePlaceExtrasbooleantrueInclude amenities, Plus Code and permanently-closed status.
includePopularTimesbooleanfalseInclude the weekly popular-times histogram when available (experimental).

Reviews

FieldTypeDefaultDescription
includeReviewsbooleanfalseExtract reviews for each business.
reviewsLimitinteger5Max reviews per business (up to 1000).
minReviewRatinginteger0Keep only reviews rated ≥ this (1–5; 0 = off).
reviewKeywordstringKeep only reviews whose text contains this keyword.
reviewsSortselectnewestnewest or relevant.

Each review includes author, rating, date, text, review_id, author_photo, plus (when present) owner_response_text, owner_response_date, reviewer_review_count, reviewer_is_local_guide, review_language and review_images.

Lead enrichment (experimental add-on)

Visits each business's own website (plus contact/about/imprint pages) to extract contact data. Off by default; never changes the base scrape.

FieldTypeDefaultDescription
includeEmailsbooleanfalseFind email addresses (deduplicated and MX-validated).
includeSocialsbooleanfalseFind social profiles (Facebook, Instagram, LinkedIn, X/Twitter, YouTube, TikTok, WhatsApp).
emailOnlybooleanfalseKeep only businesses with an email (implies includeEmails).
socialOnlybooleanfalseKeep only businesses with a social profile (implies includeSocials).
onlyWithWebsitebooleanfalseKeep only businesses that have a real website.
onlyWithoutWebsitebooleanfalseKeep only businesses without a website (prospects for web/design agencies).
maxPagesPerSiteinteger4Advanced: max pages crawled per website (1–10).

People / contacts (experimental add-on)

FieldTypeDefaultDescription
includePersonnelbooleanfalseExtract the people at each business (name, title, their own email/phone/LinkedIn).
maxContactsPerBusinessinteger10Max contacts per business (highest-confidence first).
personnelMinConfidenceselectlowDrop contacts below this tier (low/medium/high).
onlyWithPersonnelbooleanfalseKeep only businesses with at least one contact.

Each business gains business_lead (org-level email/phone/socials) and contacts[] (people with name, title, email, phone, linkedin, confidence, tier, source_urls).

Ad intelligence (experimental add-on)

FieldTypeDefaultDescription
includeMetaAdsbooleanfalseCheck the Meta Ad Library — is the business running Facebook/Instagram ads? With sample creatives.
includeGoogleAdsbooleanfalseCheck the Google Ads Transparency Center — is it running Search/YouTube/Display ads?
onlyRunningAdsbooleanfalseKeep only businesses currently running ads.
adCountrystringUSTwo-letter country code for where the ads are shown (applies to both sources).

Proxy

FieldTypeDefaultDescription
proxyConfigurationobjectApify ResidentialRecommended — Google blocks datacenter IPs on Maps. Leave as-is.
proxyUrlstringAdvanced: a single custom HTTP proxy used instead of Apify Proxy.

Recipes

Web-design leads (businesses with no website):

{ "query": "restaurants in Austin, TX", "onlyWithoutWebsite": true, "includePersonnel": true }

Warm leads — businesses advertising right now, with their contacts:

{ "query": "dentists in Miami, FL", "includeMetaAds": true, "includeGoogleAds": true,
"onlyRunningAds": true, "includeEmails": true, "includePersonnel": true }

Reputation / review mining (5★ reviews mentioning a topic):

{ "query": "hotels in Paris", "includeReviews": true, "reviewsLimit": 50,
"minReviewRating": 5, "reviewKeyword": "breakfast" }

Whole-area sweep with a custom radius:

{ "query": "gyms", "customGeolocation": { "lat": 34.0522, "lng": -118.2437, "radiusMeters": 5000 } }

Tips

  • Include a location in your query (plumbers in Chicago); plain phrases like plumbers Chicago or coffee 90210 also work.
  • Keep the residential proxy — Google blocks datacenter IPs on Maps search.
  • Start with a small maxResults to test, then scale up.
  • The optional enrichment / ad-intelligence layers add run time and are off by default — they never change the base scrape.

Limitations

  • Results depend on what Google Maps returns for your query and location; some businesses have incomplete data.
  • popular_times is experimental and not available for every place.
  • The Google Ads Transparency Center does not expose the text of search ads (only creative previews/metadata).
  • For ad lookups outside the US, set adCountry to the business's country (e.g. GB, DE) for accurate results.