Google Maps Scraper & Cross-Platform Review Monitor avatar

Google Maps Scraper & Cross-Platform Review Monitor

Pricing

Pay per event

Go to Apify Store
Google Maps Scraper & Cross-Platform Review Monitor

Google Maps Scraper & Cross-Platform Review Monitor

Monitor public Google Maps listings and recent reviews, with optional App Store matching, rating gaps, response rates, and heuristic signals. Not a full-history export; result caps apply. Google Play review extraction is currently unavailable.

Pricing

Pay per event

Rating

0.0

(0)

Developer

daehwan kim

daehwan kim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Google Maps Scraper & Review Monitor — Reputation Signals

Enter Google Maps search queries, Maps URLs, or place IDs. The Actor returns a structured place row for each matched business, the Google review rows available from its public page, and optional App Store review rows matched by business name. Google Play review extraction is currently unavailable and returns no review rows. Each place row also includes the implemented reputation signals: cross-platform rating, rating gap, platform coverage, review pattern heuristics, owner-response rate, and optional public contact details.

This is an incremental review monitor for small-business owners, multi-location operators, and reputation teams, not a full-history export. Google Maps public pages currently expose around five recent reviews per business, and source availability can change. Free-account runs deliver at most 25 result rows across place and review rows, then finish normally with a notice. Customer-selected limits and the public source can reduce the result count further.

This Actor is an independent, unofficial tool. It is not affiliated with, endorsed by, or sponsored by Google, Apple, or Google Play. It reads only publicly accessible listing and review pages. Its Google Maps request logic was written with reference to the MIT-licensed open-source projects gosom/google-maps-scraper and omkarcloud/google-maps-scraper — no code from either project is bundled or redistributed by this Actor. You are responsible for complying with the target platforms' own terms of service, and you are the data controller for personal data (reviewer names, profile data) returned by any run you start.

Who this is for

Small-business owners, multi-location franchise operators, and reputation-management agencies who want a recurring view of newly available reviews and consistent reputation fields across their selected businesses. It is not intended to reconstruct a business's complete review history.

What rides free on every business row

Every business (place-scraped) row carries a judgment layer at no extra charge — no separate event, no separate line item:

FieldWhat it tells you
crossPlatformRatingPer-platform ratings plus a plain mean across every platform this run collected
ratingGapGoogle Maps rating minus the mean of the other platforms — a big gap is worth a look
platformCoverageHow many platforms this business was found on in this run
suspicionSignalsSame-day review clustering, duplicate review text, single-review-account ratio — heuristics, not a fraud verdict
ownerResponseRateShare of this business's Google reviews that got an owner reply (rate, respondedCount, sampleSize). Read sampleSize alongside rate: Google Maps' public pages currently return around 5 reviews per business (see Output), so this rate is computed over at most that many reviews, not a full history — a gap in a 2-review sample is a different claim than a gap in a 200-review one
contactPublicly listed email, phone, and social links read from the business's own website (only when includeContactDetails is on)

These field names are the actual dataset field names — see Output below.

Cost, next to a Google-Maps-only scraper

Basic basket: 100 businesses, 5 Google reviews each (the actual ceiling, not a wish):

Google-Maps-only scraper (e.g. Compass-style)This Actor
Run start$0.005
100 business records~$0.50 (≈$0.005/business)$0.30 (100 × $0.003)
500 Google reviews (5/business)included above or not offered$0.25 (500 × $0.0005)
Total (Google Maps only)~$0.50$0.555

We are more expensive for Google Maps data alone — if that is genuinely all you need, use a Google-Maps-only scraper. What the extra cost buys: cross-platform matching, the judgment layer above, and an incremental-monitor design meant for repeat runs rather than one-off exports.

Optional: App Store reviews (up to 50 reviews per business):

Cost
100 businesses × 50 cross-platform reviews = 5,000 rows$1.50 (5,000 × $0.0003)

This row is optional — set crossPlatforms: [] to skip it and pay only the Google Maps total above.

Use this as a review monitor, not a one-time export

Incremental mode — only new reviews, every re-run

{
"queries": ["coffee shop, New York"],
"sinceTimestamp": "2026-09-01T00:00:00Z"
}

Only reviews published after sinceTimestamp are collected and charged. Point it at your last run's start time and a daily re-run costs a fraction of the first one.

Negative-review alert preset

{
"queries": ["coffee shop, New York"],
"sinceTimestamp": "2026-09-01T00:00:00Z",
"negativeReviewAlert": 2
}

Combined with sinceTimestamp, this returns only new 1- and 2-star reviews — a watch-for-trouble feed instead of a full copy of every review.

Webhook — push new reviews out automatically

  1. On the Actor's Integrations tab (or via API), add a webhook on the ACTOR.RUN.SUCCEEDED event.
  2. Point it at Slack, a spreadsheet, or your own endpoint — Apify posts the run's dataset link when the run finishes.
  3. Schedule the Actor to run daily or weekly with sinceTimestamp set to "now minus one schedule interval"; each webhook delivery then carries only the new reviews since last time.

How to use it

  1. Enter one or more queries — a search phrase, a Google Maps URL, a place ID, or a "business name, city" string.
  2. (Optional) Set maxPlacesPerQuery to control how many businesses are collected per query. maxReviewsPerPlace is a requested ceiling; Google's public pages typically hand back around 5 reviews per business regardless of the number requested (see research/p3-result.md).
  3. (Optional) Enable crossPlatforms to also pull App Store reviews for the same businesses. Google Play remains selectable for compatibility but currently returns no review rows because its response shape has not been verified.
  4. (Optional) Set sinceTimestamp for incremental runs, negativeReviewAlert for a bad-review watch, or includeContactDetails for the contact layer.
  5. Click Start and read the results in the Output tab, pull them via the API, or wire up a webhook for a recurring watch.

Input

Free-account runs deliver at most 25 result rows across place and review rows, then finish normally with a free-plan-cap notice. Paid plans receive the full available result set, subject to your selected limits and public-source availability.

FieldTypeDescription
queriesarray (required)Search queries, Google Maps URLs, place IDs, or "business name, city" strings
maxPlacesPerQueryintegerMax businesses collected per query (default 10)
maxReviewsPerPlaceintegerRequested maximum Google reviews per business (default 100); Google's public pages currently return around 5 regardless of this value
reviewsSortenumnewest, relevant, highest, lowest (default newest)
sinceTimestampstringISO-8601 timestamp or Unix epoch — keep only reviews published after it (incremental runs)
negativeReviewAlertintegerKeep only reviews at or below this star rating (for example 2 for 1- and 2-star only)
crossPlatformsarrayWhich other platforms to check: appstore, googleplay, trustpilot, tripadvisor (default appstore, googleplay). App Store extraction is available up to maxReviewsPerPlatform. Google Play currently returns no review rows because its response shape has not been verified. Trustpilot and Tripadvisor sit behind bot-challenge walls and are off by default; enabling them usually returns a notice row instead of reviews.
maxReviewsPerPlatformintegerMax reviews collected per business on each cross-platform source (default 50)
language / countryCodestringLanguage and country bias for results (default en / us)
includeContactDetailsbooleanCollect publicly listed contact info from each business's own website
proxyConfigurationobjectApify Proxy settings. Datacenter proxy is the default; residential costs more and is yours to choose.
browserConcurrencyintegerHow many business pages the browser opens at once (default 3)
startUrlsarrayApify-standard list of Google Maps start URLs
{
"queries": ["coffee shop, New York"],
"maxPlacesPerQuery": 10,
"maxReviewsPerPlace": 100,
"crossPlatforms": ["appstore", "googleplay"]
}

Output

Dataset rows cover both business records and review records across every platform enabled, tagged by platform and rowType (place, review, or notice). The judgment layer rides on the place row.

{
"rowType": "place",
"platform": "google_maps",
"title": "Blue Bottle Coffee",
"placeId": "0x89c259af336b3341:0x8f9ab29d8a8cdd6d",
"address": "1 Rockefeller Plaza, New York, NY",
"categoryName": "Coffee shop",
"totalScore": 4.4,
"reviewsCount": 812,
"platformCoverage": 3,
"crossPlatformRating": { "google_maps": 4.4, "appstore": 3.9, "googleplay": 4.1 },
"ratingGap": 0.5,
"suspicionSignals": [],
"ownerResponseRate": { "rate": 0.4, "respondedCount": 2, "sampleSize": 5 }
}

How many Google reviews per business? Our research/p3-result.md and research/p4-result.md measurements (2026-09-10) put the realistic ceiling at around 5 most-recent reviews per business — P4's three-business sample returned 5, 5, and 8, and every review-pagination RPC attempt returned HTTP 403, including gosom's own open-source engine requesting the identical endpoint. This is why the Actor is built as an incremental monitor rather than a full-history export tool: request sinceTimestamp on a schedule and each run's newest reviews become a rolling feed instead of a one-time snapshot capped at 5. App Store has a separate pagination path subject to maxReviewsPerPlatform. Google Play review extraction is currently unavailable and returns no review rows.

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Data table

Field groupExample fields
Review contenttext, appVersion (App Store rows; Google Play currently returns no review rows)
Ratingstars, rating (review rows), totalScore, reviewsCount (business rows)
TimingpublishAt, publishedAtDate, publishedAtDateIsApproximate, scrapedAt
IdentifiersreviewId, reviewUrl, placeId, searchString, rowType, platform
Reviewername, reviewerUrl, reviewerPhotoUrl, reviewerNumberOfReviews, isLocalGuide
Businesstitle, address, categoryName, url, phone, website, language, countryCode
EngagementlikesCount
Owner responseresponseFromOwnerText, responseFromOwnerDate
Judgment layer (on the business row, no extra charge)platformCoverage, crossPlatformRating, ratingGap, suspicionSignals, ownerResponseRate, contact

Google exposes a review's age as a relative phrase ("a month ago"), so publishedAtDate is derived from it and flagged with publishedAtDateIsApproximate: true. Rows that are a message rather than a result — a blocked platform, an invalid query, the free-plan cap — arrive as rowType: "notice" and are never charged.

Pricing

This Actor uses pay-per-event pricing:

EventPriceWhen it's charged
Actor start$0.005Once per run
Place scraped$0.003Per Google Maps business written to the dataset
Google review scraped$0.0005Per Google Maps review written to the dataset
Cross-platform review scraped$0.0003Per review row from a supported cross-platform source (currently App Store; Google Play returns no review rows)

How crossPlatformRating is computed. Every platform that reported a numeric rating counts equally: average is the plain mean of those ratings, not a review-volume-weighted one, because review counts are not comparable across platforms. ratingGap is the Google Maps rating minus the mean of the other platforms.

Where charging stops. A row that reached your dataset is charged, whatever HTTP status produced it. Two things are never charged: a rowType: "notice" row (a blocked platform, an invalid query, the free-plan cap — a message, not a result), and a source that produced no row at all. A run whose query is valid but matches nothing charges the run start only.

Google Play status. The integration currently rejects the unverified response shape and returns no review rows. The input option remains available for compatibility.

Four events, and that is the whole list. The judgment layer — cross-platform rating, rating gap, platform coverage, suspicion signals, owner response rate, contact details — rides on the business row you have already paid for. Notice rows are free. Apify platform compute is billed separately per your plan.

Free-account runs deliver at most 25 result rows across place and review rows. If that limit is reached, the Actor keeps the delivered rows, adds an uncharged free-plan-cap notice, and finishes normally. Paid plans receive the full available result set, subject to your selected limits and public-source availability.

Tips

  • Start with a small maxPlacesPerQuery to size a run before scaling up.
  • Enable only the crossPlatforms sources you need — each one adds review rows and cost.
  • For a daily watch, set sinceTimestamp to your last run's start time: only reviews newer than that are collected, so a repeat run costs a fraction of the first one.
  • To watch for trouble only, set negativeReviewAlert to 2 and pair it with sinceTimestamp.
  • Schedule recurring runs and attach a webhook on the ACTOR.RUN.SUCCEEDED event to push new reviews straight into Slack, a spreadsheet, or your own endpoint.

FAQ, disclaimers, and support

Is this legal? This Actor reads only publicly accessible listing and review pages, does not bypass logins, CAPTCHAs, or anti-bot protections, and identifies itself as an automated client. You are responsible for using the output in line with the target platforms' own terms of service and applicable law.

Privacy and data responsibility. You are the data controller for every run you start with this Actor; ntriqpro is a data processor acting solely on your instructions. You are responsible for having a lawful basis for each run and for complying with GDPR, PIPA, CCPA, and other applicable privacy laws, including for any reviewer names or profile data returned.

Why might a platform be missing from my results? A source can be unavailable for a given business (rate limiting, no matching listing, structural changes on the target site). That platform's rows are simply absent from the output for that business; the run still completes and returns everything it could collect from the other sources.

Found a bug or want a feature? Use the Issues tab. Custom solutions available.