Google Maps Scraper - Places, Reviews, Emails & Socials avatar

Google Maps Scraper - Places, Reviews, Emails & Socials

Pricing

from $2.49 / 1,000 places

Go to Apify Store
Google Maps Scraper - Places, Reviews, Emails & Socials

Google Maps Scraper - Places, Reviews, Emails & Socials

Pricing

from $2.49 / 1,000 places

Rating

0.0

(0)

Developer

Lantern Lab

Lantern Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Categories

Share

Google Maps Scraper — Places, Reviews, E-mails & Social Profiles

A Lantern Lab Actor. Search Google Maps by keyword and location, or paste place links, and get each business back: name, categories, address, coordinates, rating, review count, the business's published phone and website, opening hours, Google place ID and a Maps URL. Optionally add the public reviews Google shows for each place, and the e-mail addresses and social profiles published on the business's own website. Works in any country — tested in the US, Europe, Latin America and Asia. No Google login, no cookies, no account of your own.

Price: pay per result, one price for everyone:

EventPriceWhen it is charged
placeUSD 2.49 per 1,000 placesOne per place row.
contactUSD 1.49 per 1,000 places with contactsOnly when the website actually yielded at least one e-mail or social profile.
reviewUSD 0.49 per 1,000 reviewsOne per review row.
Run startUSD 0.005 per runOnce per run.

Empty results, blocked or failed inputs, duplicates, per-input status rows and the run summary are free.

What you get

{
"recordType": "place",
"placeId": "ChIJP8p2kJC1RIYR2qrGoXZtZCk",
"featureId": "0x8644b5909076ca3f:0x29646d76a1c6aada",
"cid": "2982629209513831130",
"name": "Terrible Love Coffee",
"categories": ["Coffee shop", "Coffee stand"],
"address": "3908 Avenue B, Austin, TX 78751",
"city": "Austin",
"postalCode": "78751",
"state": "Texas",
"countryCode": "US",
"latitude": 30.3045132,
"longitude": -97.735632,
"rating": 4.9,
"reviewCount": 433,
"phone": null,
"website": "http://terriblelovecoffee.com/",
"openingHours": [{ "day": "Monday", "hours": "7:30 AM–2 PM" }],
"openStatusText": "Open · Closes 2 PM",
"url": "https://www.google.com/maps/search/?api=1&query=Terrible+Love+Coffee&query_place_id=ChIJP8p2kJC1RIYR2qrGoXZtZCk",
"emails": ["info@terriblelovecoffee.com"],
"socialProfiles": {},
"contactsStatus": "found",
"reviewsStatus": "ok",
"reviewsCollected": 5,
"reviewsLimited": true,
"searchTerm": "coffee",
"searchQuery": "coffee in Austin, TX",
"rank": 1,
"partial": false,
"collectedAt": "2026-10-30T12:44:50.402Z"
}
{
"recordType": "review",
"reviewId": "Ci9DQUlRQUNvZENodHljRjlvT2s5eVpGUjNhbGcxTUdzMVlWOXZPSFZLUkRGeGFHYxAB",
"placeId": "ChIJP8p2kJC1RIYR2qrGoXZtZCk",
"placeName": "Terrible Love Coffee",
"rating": 5,
"text": "In my search for unique coffee shops, I visited Terrible Love…",
"textLanguage": "en",
"publishedAt": "2026-09-02T03:35:54.561Z",
"publishedAtText": "a month ago",
"authorName": "Turan A.",
"collectedAt": "2026-10-30T12:44:50.409Z"
}

A field Google does not publish for a place is null — never guessed.

Input

Give it search terms with a location, place links, or both.

FieldDefaultMeaning
searchTerms—What to search for, one per line ("dentist", "coffee shop").
location—Where: "Austin, TX", "Berlin, Germany", "Mexico City". Appended as "<term> in <location>".
placeUrls—Google Maps place URLs, maps.app.goo.gl short links, ?cid= links or place IDs (ChIJ…).
maxPlaces20Hard limit per search term. Never exceeded and never over-charged.
includeReviewsfalseAdd the public reviews Google shows for each place.
maxReviewsPerPlace5Hard limit on review rows per place.
includeContactsfalseRead each place's website for e-mails and social profiles.
language / countryCodeen / usGoogle interface language and country.
maxUpstreamRequestsderivedHard ceiling on requests to Google.
{
"searchTerms": ["dentist"],
"location": "Mexico City",
"maxPlaces": 20,
"includeContacts": true
}

Output

Three row types share the dataset; the Places, Reviews and Input status views split them.

  • place — one per place, deduplicated across the whole run by Google place ID.
  • review — one per review, with its parent placeId, featureId and placeName, and Google's own publishedAt.
  • input_status — one per search term and per place link, never charged: how many places it returned, how many pages were read, whether Google ran out of results (endOfResults), and when it is incomplete, partial: true with a partialReason.
  • RUN_SUMMARY — the last row, also saved in the key-value store.

What is charged

  • place: every place row. A place that matches several of your search terms is written and charged once.
  • contact: only places whose website gave at least one e-mail or social profile. contactsStatus says what happened for every other place: no_website, none_found or website_unreachable — all free.
  • review: every review row. A review is written once even if its place shows up twice.
  • Nothing for an input that returned no place, for a blocked or failed input, or for the status and summary rows.
  • With a maximum charge set on the run, collection stops at what it pays for and the inputs not reached are marked charge_limit_reached / not_collected.

Empty is not the same as incomplete

An input that Google answered with no place is partial: false, placesReturned: 0 — a real empty result. An input that was refused, failed, hit the request ceiling or the maximum charge is partial: true with the reason (blocked, upstream_error, upstream_request_cap, charge_limit_reached, not_collected). A run where every input was refused fails instead of finishing with zero rows.

Limits

  • Reviews: Google shows signed-out visitors a "limited view" of Maps with only a handful of reviews per place (usually 5); the full review list needs a Google sign-in, which this Actor does not use. Every place row says reviewsLimited: true when Google lists more reviews than it showed.
  • Contacts (e-mails; Facebook, Instagram, X, LinkedIn company pages, YouTube, TikTok and Pinterest links) come from the business's own home page and, when that has none, from its contact page. Addresses are not verified, and websites that block automated visitors give website_unreachable.
  • Not collected: popular times, photos, owner replies, anything behind a Google sign-in.
  • Only public business information is collected. For reviews, only the reviewer's public display name is kept — no profile link, no photo.

Development

npm install
npm test

Tests run offline against recorded Google responses in test/fixtures/.