Google Maps Scraper avatar

Google Maps Scraper

Pricing

$1.00 / 1,000 results

Go to Apify Store
Google Maps Scraper

Google Maps Scraper

Collect public Google Maps place reviews, ratings, reviewer details, and place metadata from place URLs or place IDs.

Pricing

$1.00 / 1,000 results

Rating

0.0

(0)

Developer

MLG Data

MLG Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Scrape public Google Maps place reviews, ratings, reviewer profile details, and place information from place URLs or place IDs. Export Google Maps review data to JSON, CSV, or Excel from the run dataset, or use the actor as a structured Google Maps API alternative for small review snapshots.

Each input place is resolved to its public place record, and each available preview review becomes one dataset row. A row includes the review and its place context so results from several locations can be combined without a separate join. The current public place response supplies up to five preview reviews per place; see Limits before planning a larger collection.

What data can you extract from Google Maps?

The dataset has one row per review. Fields stay present even when the public response does not provide a value. Empty arrays indicate no exposed entries; null indicates a value was not supplied. The table describes every output field.

FieldDescriptionExample
searchStringInput place URL or URL constructed from the input place ID.varies
reviewIdIdentifier of the public review.Ci9DQU...
reviewUrlDirect public review URL when present.null
reviewOriginOrigin shown for the review, such as Google or a hotel partner.Google
starsReview rating from 1 to 5 stars.4
textDisplayed review text.Early morning, nice to have a trail walk
textTranslatedTranslated review text when included in the preview.null
publishAtRelative publication time shown by Maps.null
publishedAtDatePublication time in UTC when supplied.2026-06-29T01:44:48.216Z
likesCountLike count when supplied; unavailable in the current preview.null
reviewerIdPublic reviewer profile ID when supplied.null
reviewerUrlPublic reviewer profile URL.null
nameDisplayed reviewer name.null
reviewerNumberOfReviewsNumber of reviews shown on the reviewer profile.null
isLocalGuideWhether the reviewer is labeled a Local Guide.varies
reviewerPhotoUrlPublic reviewer avatar URL.null
responseFromOwnerDateOwner response date when exposed; unavailable in the current preview.null
responseFromOwnerTextOwner response text when exposed; unavailable in the current preview.null
reviewImageUrlsImage URLs attached to the review.[]
reviewContextStructured visit context when exposed; empty in the current preview.{}
reviewDetailedRatingStructured aspect ratings when exposed; empty in the current preview.{}
visitedInVisit period when exposed; unavailable in the current preview.null
originalLanguageLanguage code shown for the original text.null
translatedLanguageTranslated language code when present.null
placeIdGoogle Maps place ID.ChIJbzg82hLUT1MRxpsdaatcUu8
locationPlace latitude and longitude.{"lat": 44.97, "lng": -110.7}
addressDisplayed place address when provided.null
countryCodeTwo-letter country code.US
categoryNamePrimary place category.Tourist attraction
categoriesAll place categories in the preview.["Tourist attraction"]
titlePlace name.Liberty Cap
totalScoreAverage place rating.4.7
reviewsCountTotal review count displayed for the place.834
urlPublic Maps place URL.null
cidDecimal place CID.null
fidMaps feature identifier.null
imageUrlPlace image URL when supplied.null
scrapedAtUTC extraction timestamp.2026-09-26T18:04:26.000Z
languageRequested language code.en

The place identifier and review identifier can be used to remove duplicates across repeated runs. The decimal CID and feature identifier are included because links sometimes use those identifiers instead of the place ID. The place score and review count describe the place as a whole at collection time; the stars value belongs to the individual review. The dataset does not infer a missing owner reply or like count from nearby interface elements.

The current place response can mix reviews from the map's own review system with reviews attributed to another public origin, especially for lodging. Use the reviewOrigin field or the Google-only input option when that distinction matters. A missing reviewer profile on an attributed review is normal.

How to scrape Google Maps reviews

  1. Open the actor and add one or more public Maps place URLs in startUrls, or enter place IDs in placeIds.
  2. Set the total review cap and optional filters for origin, stars, and a keyword. The preview limit is five per place.
  3. Start the run. The actor resolves each place and writes available reviews to the default dataset.
  4. Open the dataset to inspect the table or download JSON, CSV, or Excel.

A full place URL is more reliable than a name-only search URL. Name-only searches may resolve to a different location or to no single place at all. When collecting a group of locations, provide one explicit place URL or place ID for each location. This also makes subsequent runs easier to compare.

Input

ParameterTypeDefaultDescription
startUrlsURL listEmptyPublic Maps place URLs. Supply a distinct URL for each location.
placeIdsString listEmptyOptional place IDs for locations without a saved URL.
maxReviewsInteger5Maximum reviews emitted per place, from 1 to 5.
maxItemsInteger0Maximum reviews across the entire run; zero leaves this total uncapped.
languageStringenLanguage code used for place pages and displayed review text.
reviewsOriginSelectionallKeep all origins or only reviews labeled Google.
reviewsFilterStringStringEmptyKeep preview reviews containing the keyword, ignoring case.
starsInteger listEmptyKeep only the selected star ratings from 1 through 5.
proxyConfigurationObjectEnabledNetwork configuration for the place requests.

Example input for two related places:

{
"startUrls": [
{"url": "https://www.google.com/maps/place/Yellowstone+National+Park/@44.5857951,-110.5140571,9z/data=!3m1!4b1!4m5!3m4!1s0x5351e55555555555:0xaca8f930348fe1bb!8m2!3d44.427963!4d-110.588455"},
{"url": "https://www.google.com/maps/place/Old+Faithful/data=!4m2!3m1!1s0x5351ed1b81592e5f:0x83b7c275a6822a1"}
],
"maxReviews": 5,
"maxItems": 10,
"language": "en",
"reviewsOrigin": "all",
"stars": []
}

You may combine startUrls and placeIds. Duplicate review IDs are emitted once within a run. The total cap is checked while reviews are written, so a run can stop before it reaches the end of the input list. Filters operate on the five reviews available in each public preview; a filter can reduce the output to zero even when the place has many reviews in total.

Output example

This shortened item comes from a live run. Long media URLs and optional null fields are omitted here; the dataset retains the full output shape.

{
"reviewId": "Ci9DQUlRQUNvZENodHljRjlvT2taamFraGFhM0ZIYjFOU2FrMWtZamcwUkdWbVVrRRAB",
"stars": 4,
"text": "Early morning, nice to have a trail walk🚶",
"publishedAtDate": "2026-06-29T01:44:48.216Z",
"reviewOrigin": "Google",
"placeId": "ChIJbzg82hLUT1MRxpsdaatcUu8",
"title": "Liberty Cap",
"totalScore": 4.7,
"reviewsCount": 834,
"categoryName": "Tourist attraction",
"countryCode": "US",
"fid": "0x534fd412da3c386f:0xef525cab691d9bc6",
"cid": "17244947814427761606"
}

The timestamp is derived from the publication time in the public response. The relative publishAt value can change between runs while publishedAtDate stays suitable for sorting. The scrapedAt timestamp marks when this actor collected the row, not when the reviewer wrote it. Some reviews include many images, so the reviewImageUrls array can be substantially longer than the compact example.

Use cases

  • A local business team can inspect a small current sample of public comments and ratings across several branches. Keeping placeId on each row makes branch-level grouping straightforward.
  • A travel researcher can compare recent public experiences at nearby attractions and identify recurring visitor themes before a trip.
  • A destination operator can monitor whether a public place score or review count changes between scheduled snapshots.
  • A retail team can collect public feedback about opening hours, stock, accessibility, or service at a handful of locations, then follow up in the original review.
  • A data analyst can test a review processing workflow with stable review and place IDs before obtaining a larger licensed source.
  • A quality team can check whether photo-bearing reviews, reviewer counts, and attributed review origins are present for a set of locations.

These uses fit the preview scope. For an exhaustive history of a popular place, this actor's five-review source is insufficient. The displayed place review count is context, not a promise that every counted review was collected.

How much does it cost to scrape Google Maps?

The configured result charge is $1.00 per 1,000 emitted dataset rows, or $0.001 per review. A run with five emitted reviews is $0.005 in result charges. A 30-review run is $0.03. At 1,000 emitted reviews across enough places, result charges are $1.00. Only rows written to the dataset count toward that result charge; a place returning zero preview reviews does not create a result row.

For a worked small batch, six places returning five reviews each produce 30 rows and $0.03 in result charges. For a larger batch, 200 places returning five each produce 1,000 rows and $1.00. If filters remove half of a 200-place batch, 500 emitted rows would be $0.50. Actual row counts depend on what each place response exposes at run time, and the public preview often returns fewer than five. Platform usage and network use are subject to the account's run settings; check the run cost display for the complete bill.

To control spend, set maxItems to the number of rows needed and start with a small place list. A low maxItems value stops writing as soon as the cap is reached. The actor also honors an account event charge limit when the platform reports that the limit has been reached.

Tips for best results

Use explicit place pages containing a place feature identifier, or use a place ID. A Maps search for a business name does not always identify one place, particularly when several locations have the same name. Verify the title and placeId in the first output before launching a wider batch. If the output title is unexpected, replace the search URL with the correct place page.

Try reviewsOrigin set to google if you want only reviews from the map's own review system. Lodging pages may also show attributed partner reviews, which can have a different profile format and rating representation. The actor maps the available rating to a 1–5 stars field and preserves the origin label. Review image arrays and profile fields may differ by origin.

Leave stars and reviewsFilterString empty when completeness within the small preview matters. These filters act after the public response is received. They cannot ask the site for more matching reviews. A keyword such as "parking" can return nothing even if the full place page contains older parking reviews outside the preview.

Use maxItems for a predictable output ceiling when many places are supplied. Put the most important locations first: once the total cap is reached, later places are not fetched. Repeated input URLs that resolve to the same reviews will not inflate the dataset because review IDs are deduplicated within the run. Keep reviewId and placeId when exporting to spreadsheets so later snapshots can be compared without matching on text.

The language setting affects the public page request and displayed text. A reviewer may have written in another language; originalLanguage and textTranslated are populated only when the response exposes them. Do not assume all text is translated or all dates appear in a particular local time zone. publishedAtDate and scrapedAt use UTC formatting.

Limits

The currently reachable structured place response supplies up to five preview reviews per place. It may return zero for a place that visibly has many reviews, and the set can change across runs. maxReviews therefore has a maximum of five. The actor does not paginate through all reviews. The displayed reviewsCount can be much larger than the number of dataset rows.

A public review-list route returned no usable response during development, while the alternate public reviews link redirected to a search surface with an access interstitial. The actor relies on the structured place response because it remained reachable without login. Changes to that response can alter fields or reduce availability. A status message in the run log records how many reviews were present for each resolved place.

Owner replies, likes, detailed aspect ratings, visit periods, and translated language codes were not present in the confirmed preview records. Their columns are retained as null or empty values so datasets have a stable shape, but users should not treat them as collected facts. Addresses, images, reviewer profile data, and categories may also be absent for some places or review origins.

The actor does not accept login-gated pages, private reviews, arbitrary domains, or general web search URLs. It only follows public Maps place pages. It does not create reviews, modify a place, or contact reviewers. Regional presentation, locale, and public visibility can affect the output. Review counts and ratings are point-in-time values.

Automation examples

  • "Collect the visible public reviews for these ten place URLs, keep only four- and five-star rows, and return the dataset grouped by place ID."
  • "Run this place list each week, compare review IDs and place scores with the previous dataset, and report new public reviews."

For reliable recurring comparisons, retain the prior dataset. Use reviewId to find new or removed preview entries, and use placeId to group locations. A review leaving the five-item preview does not prove that it was deleted; it may simply have moved outside the visible preview.

FAQ

The actor reads publicly accessible place and review data. Applicable site terms and privacy rules still matter. Use reviewer identifiers and profile links only for a legitimate purpose, respect applicable data protection requirements, and avoid misuse of personal data. For a regulated use case, get advice specific to your jurisdiction.

Do I need to provide a proxy?

The default network configuration handles requests during a normal run. The actor starts with the lower-cost network path and can escalate when access is blocked. You can supply your own configuration in the input when the default does not suit your account.

How fast is a run?

Each place normally needs a page request and a structured place request. In the confirmed 30-row run, the actor visited multiple places within a short run, but speed changes with the number of places, network conditions, and blocked or empty responses. Start with a few places to estimate your own batch time.

Can I schedule and monitor it?

Yes. Schedule the actor with saved input and review the run log and dataset after each execution. Record the run timestamp and compare placeId plus reviewId against prior datasets. A drop in output should be investigated alongside the per-place log counts.

Can I export to a spreadsheet?

Yes. Download the default dataset as CSV or Excel, or use its JSON endpoint in a connected workflow. Keep nested arrays, such as reviewImageUrls and categories, in JSON when you need every element. A CSV export may represent those arrays as serialized values.

Why is a field empty?

The public preview does not include every field for every place or review. Owner responses and like counts were absent from the verified source. A reviewer profile can also be unavailable for a review attributed to another public origin. Null means the actor had no confirmed value.

Why did I receive fewer than five reviews for a place?

Some place responses contain fewer than five preview records or none at all. Filters can remove rows after collection, and the global maxItems cap can stop before later places are processed. Check the place-specific line in the run log to distinguish source availability from filtering.

Integrations

Use the default dataset endpoint to feed reports and internal workflows. Scheduled runs, webhooks, and spreadsheet imports can move newly collected rows into another system. Store reviewId, placeId, publishedAtDate, and scrapedAt together so later updates can be compared. A webhook should use the completed run's dataset ID rather than assuming every run has the same number of reviews.

Support

Open an issue on the Issues tab with a public place URL, expected field, and run ID. We reply within 24 hours and add fields on request when the public response contains them.