Google Maps Scraper - Business Data, Reviews & Leads avatar

Google Maps Scraper - Business Data, Reviews & Leads

Pricing

from $4.00 / 1,000 results

Go to Apify Store
Google Maps Scraper - Business Data, Reviews & Leads

Google Maps Scraper - Business Data, Reviews & Leads

Scrape Google Maps business listings without an API key — name, address, phone, website, rating, reviews, photos, hours, amenities & GPS. Precision targeting (batch, map URLs, custom area) + optional add-ons: emails, socials, contacts & ad intelligence. Export to CSV, Excel & JSON.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

yossef Nagy

yossef Nagy

Maintained by Community

Actor stats

1

Bookmarked

131

Total users

44

Monthly active users

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

Frequently asked questions

Do I need a Google Maps API key?

No. This is a scraper, not the Google Places API — there is no API key, no OAuth and no Google Cloud project. It talks to Google Maps' public endpoints over HTTP, so you just enter a search query and run it.

Can it scrape emails and contact details from Google Maps?

Yes, with the optional experimental add-ons. Turn on includeEmails, includeSocials or includePersonnel and the Actor visits each business's own website to find emails (MX-validated), social profiles and the people who work there. Off by default and billed separately.

Does it extract Google Maps reviews?

Yes. Enable includeReviews to pull review text, author, rating, date and owner responses, with reviewsLimit, minReviewRating and reviewKeyword filters. Reviews are an optional layer — the base place scrape runs without them.

The Actor reads only Google's public, unauthenticated listings — the same data any visitor sees. Scraping public data is broadly treated as lawful (e.g. hiQ v. LinkedIn), and Google's Terms are civil, not criminal. Use the output within applicable privacy laws.

The Actor runs a grid search over the whole area, so it finds far more places than a single Google Maps page (which caps out quickly). Set maxResults to your target (0 = unlimited), and split very dense areas with a custom area or batch queries.

How is this different from the Google Places API?

No API key, no OAuth and no per-call quota. Pricing is simple pay-per-result, and the grid search returns more places than the API's per-search cap. You also get optional reviews, emails, contacts and ad intelligence the API does not provide.

Can I scrape a custom area, radius or Google Maps URL?

Yes. Target with a single query, a batch of searchQueries, direct Google Maps startUrls, or a customGeolocation (point + radius, or a GeoJSON polygon). Use whichever fits — leave query empty when using advanced targeting.

Can I find businesses without a website, or ones running ads?

Yes — both are built for agencies. Use onlyWithoutWebsite to find web-design prospects, and the ad-intelligence add-ons (includeMetaAds, includeGoogleAds, onlyRunningAds) to keep only businesses currently advertising on Meta or Google.

What formats can I export to?

Every run saves to an Apify dataset you can download as CSV, Excel (XLSX), JSON, JSONL or HTML, or pull via the Apify API and the official Python / JavaScript clients — ready for spreadsheets, CRMs and data pipelines.

Other Actors by buff_pineapple

Privacy & anonymous usage information

This Actor records a small amount of anonymous, aggregate usage information so the maintainer can understand which features are used and keep the Actor reliable. At the end of a run it may record, in the run's own storage on the Apify platform: the run ID, build number, run status/outcome, how the run was started, the number of results collected / pushed / filtered / skipped, and which optional features (reviews, emails, socials, personnel, ad-intelligence, etc.) were enabled, plus non-personal numeric settings (such as the result limit, reviews limit, language, and ad country).

What is never recorded: your search query, your geolocation or targeting inputs, any scraped business data or contact details, your account identity, or your IP address / user-agent. The account ID, if present, is reduced to a one-way, salted, non-reversible hash so distinct runs can be counted without identifying anyone. This information consists solely of run metadata and counters and is stored on the Apify platform — it is not transmitted to any external service. The same per-feature usage is also reflected in the Actor's standard pay-per-event billing line items. The recording is best-effort and fail-open: if it cannot be written, your run proceeds normally and is never slowed or affected.