Free Google Maps Reviews Scraper — Stars + Replies avatar

Free Google Maps Reviews Scraper — Stars + Replies

Pricing

Pay per usage

Go to Apify Store
Free Google Maps Reviews Scraper — Stars + Replies

Free Google Maps Reviews Scraper — Stars + Replies

Pricing

Pay per usage

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 hours ago

Last modified

Share

Free Google Maps Reviews Scraper — Stars, Text, Author & Owner Replies

A Google Maps reviews scraper that pulls every review for any business listing — star rating, full review text, reviewer name and profile URL, posting date, attached photos, and the owner's response — as clean structured JSON. No Google Maps Reviews API key (the official one is gated to listing owners only), no headless browser, no $129/month Outscraper subscription. $0.001 per review, paginate up to 500 per place.

What you get

  • Star rating (1-5) and full review text in the original language the reviewer posted
  • Reviewer name, public Google profile URL, and total reviews-written count (so you can spot serial reviewers vs. one-off voices)
  • Posting time as a relative phrase ("3 weeks ago") plus the timestamp Google emits
  • Owner response text and timestamp when the business has replied — critical for sentiment-trail and reputation auditing
  • Attached photo URLs the reviewer included (food shots, room photos, signage, etc.)
  • Place name and canonical URL echoed back so you can join reviews back to their place rows
  • reviews_count_returned — the actual count delivered for this run, useful for budget reconciliation
  • Reviewer language code — handy when you need to filter to a single locale before piping into sentiment models

Why scrape Google reviews

Google's official Google Maps Reviews API is locked to verified business owners — you can read your own reviews via the My Business API, but you can't read a competitor's, a vendor's, or a market segment's. Google's Places API (New) returns at most 5 reviews per place and explicitly forbids redistribution. For agencies, analysts, and ML teams that need the full review corpus across hundreds of locations — competitive sentiment dashboards, multi-location franchise reputation audits, training data for sentiment models, or local-SEO competitor research — there is no first-party API that ships the data. Either you log into each Google Business Profile manually (impossible at scale), pay $129+/month to Outscraper or DataForSEO for flat-rate reviews access, or scrape it yourself.

This actor solves that by hitting Google Maps' internal /maps/preview/place and /listentitiesreviews AJAX endpoints with curl_cffi (Chrome TLS impersonation) plus fresh anonymous Google session cookies from a managed minter pool. Pass any canonical Google Maps place URL, and the actor returns up to 500 reviews per place — paginated automatically — for $0.001 per review, or $1 per 1000 reviews. That's 5-10× cheaper than the closest Apify alternative (compass/google-maps-reviews-scraper ranks #2 on the google reviews scraper SERP and charges per-result on a sliding scale that lands around $5-10 per 1000 reviews).

Concrete buyer math: a multi-location franchise with 200 stores tracking new reviews weekly (say ~30 new reviews per store per week) pays 200 × 30 × $0.001 = $6 per weekly run — versus Outscraper's $129/month flat-rate or DataForSEO's $0.0045/review which is 4.5× more expensive. A reputation-management agency auditing a competitor's 5,000-review history pays $5 once.

Input

FieldDefaultDescription
place_urlsrequiredArray of canonical Google Maps place URLs (https://www.google.com/maps/place/<Name>/data=...)
max_reviews_per_place50Cap reviews per place (1-500)
use_cookiestrueUse a fresh anonymous Google session — bypasses the EU consent banner and reduces CAPTCHA at scale

The actor extracts the FID (feature ID), lat/lng, and place ID from the URL itself — you don't need to pass any extra metadata. Both short URLs (/maps/place/<Name>/) and long ones with data=!4m... parameters are accepted.

Output

{
"place_name": "The Pantry",
"place_url": "https://www.google.com/maps/place/The+Pantry/data=!4m7!3m6!1s0x47c609e91734d71b:0xb13072d0007a87d1!8m2!3d52.3634845!4d4.8849427!16s%2Fg%2F1tfxfwsp",
"reviews_count_returned": 50,
"reviews": [
{
"author_name": "Sarah Vermeulen",
"author_url": "https://www.google.com/maps/contrib/108347291847238...",
"author_total_reviews": 47,
"rating": 5,
"text": "Absolutely loved the stamppot — best traditional Dutch food I've had in Amsterdam. Service was warm and the place has so much character. Will definitely return.",
"language": "en",
"time_relative": "2 weeks ago",
"timestamp": 1761436800000,
"photos": [
"https://lh5.googleusercontent.com/p/AF1QipNk...=w408-h408",
"https://lh5.googleusercontent.com/p/AF1QipMo...=w408-h408"
],
"owner_response": {
"text": "Bedankt Sarah! We're so glad you enjoyed your visit. See you next time!",
"time_relative": "1 week ago"
}
}
]
}

The actor returns one record per place (not one record per review), with the reviews bundled into a reviews[] array — this matches how downstream tools like Looker Studio and BigQuery prefer to ingest grouped place-review data. To get a flat one-review-per-row dataset, expand reviews[] in your downstream loader.

Use cases

Multi-location franchise auditing reputation across stores. You operate 150 quick-service restaurants and need a weekly digest of every new review across all stores, segmented by rating < 3. Pull all 150 place URLs, run the actor with max_reviews_per_place=20 (just the latest 20), filter for rating <= 2, pipe to Slack. Total: 150 × 20 × $0.001 = $3 per weekly run, automated end-to-end.

Local SEO consultant doing competitor sentiment research. Your client owns a Brooklyn pizzeria. You pull 12 competitor place URLs, fetch 200 reviews each (2,400 total = $2.40), and run the texts through a topic-modeling notebook. Within an hour you know that the dominant complaint about the top-3 competitors is "slow delivery" — a positioning angle your client can win on. The whole research project costs less than a coffee.

Hotelier or restaurant owner doing reputation defense. You want a daily alert for every new 1-2 star review across your 8-property hotel chain. Schedule the actor daily, max_reviews_per_place=10, filter for rating <= 2 AND time_relative containing "hour" or "day". Pipe to PagerDuty. $0.08 a day for proactive crisis-management coverage.

ML team training a sentiment / aspect-based model. You need 100,000 labeled (rating + text) pairs across restaurants, hotels, and retail. Pull 200 places per category × 3 categories × 200 reviews each = 120,000 reviews for $120. For comparison, scraping equivalent volumes from Yelp via official API is rate-limited to 5,000/day and requires partnership approval.

How it compares

ActorPrice per 1000 reviewsOwner repliesPhotosPagination
This actor (s-r/free-google-maps-reviews-scraper)$1.00yesyesup to 500 / place
compass/google-maps-reviews-scraper (#2 on google reviews scraper SERP)~$5-10 sliding scaleyesyesyes
Outscraper Google Maps Reviews (#1 SERP)flat $129+/monthyesyesyes
HasData Google Maps Reviews (#8 SERP)per-request, similar tieryespartialyes
Google Places API (New)$32 + 5 reviews maxnonono (5 cap)

The closest Apify competitor is compass/google-maps-reviews-scraper, which is the established Maps Reviews scraper on the platform — but its sliding-scale pricing and Crawlee-based architecture push the per-review cost above $5/1000 for typical workloads. This actor is pure HTTP (curl_cffi + cookies) which is why it can sustain ~25 reviews/second at $1/1000.

Pricing

This actor uses Apify's pay-per-event monetization at $0.001 per review returned — that's $1.00 per 1000 reviews, or roughly 80-90% cheaper than the closest Apify alternative. All pricing is pay-per-event — you only pay for results you receive. No actor-start fee, no per-compute-unit charges, no charge for empty queries or pagination retries.

Limits and gotchas

  • Maximum 500 reviews per place per run — most businesses have <500 reviews; for the long-tail (Eiffel Tower has 200,000+), run multiple times sorted by date filter
  • Reviews are returned in Google's default sort (most-relevant first); Google does not expose a "newest first" toggle on the AJAX endpoint, so pulling the latest reviews requires sorting by timestamp downstream
  • Owner responses are populated only when the business has actually replied — expect ~30-40% reply rate in mature markets
  • Reviewer names and profile URLs are public-by-design (Google publishes them so other users can see who wrote a review); store and process them in line with GDPR / CCPA if you operate in those jurisdictions
  • Apify residential proxy is not required — the cookie pool plus curl_cffi's Chrome TLS fingerprint is enough for sustained throughput
  • Cold-start time is ~3-5 seconds for the first place; subsequent places in the same run reuse the session pool
  • The place_url must be the canonical Maps URL (the one with /data=!4m7!3m6!1s...); shortlinks like g.co/... need to be resolved upstream

FAQ

How do I scrape Google reviews without an API key? This actor calls Google's internal /maps/preview/place and /listentitiesreviews AJAX endpoints directly with curl_cffi (Chrome TLS impersonation) and a fresh anonymous Google session cookie. No Google Cloud account, no Places API key, no My Business approval. You only pay Apify's per-review rate.

Can I scrape Google Maps reviews for businesses I don't own? Yes. Reviews are public-by-design — anyone browsing Google Maps can read them. Scraping publicly visible reviews is generally treated as fair use under hiQ Labs v. LinkedIn and similar precedents. What's restricted is the official My Business API, which only returns reviews for properties you've verified ownership of.

What's the cost to scrape 1000 Google reviews? 1000 × $0.001 = $1.00. For comparison: DataForSEO charges $4.50 for the same 1000 reviews; Outscraper charges a flat $129/month for unlimited reviews access (worth it if you scrape >129,000 reviews/month, otherwise more expensive).

Will Google rate-limit my scraping? At default settings (fresh session cookies, no proxy) the actor sustains ~25 reviews/second across multiple places without throttling. For sustained >100/sec throughput, supply a residential proxy URL via the PROXY_URL env var.

Does this scraper get the owner's reply to a review? Yes — when a business has replied to a review, the owner_response object is populated with the reply text and a relative timestamp. About 30-40% of reviews in mature markets have owner replies; the field is null when no reply exists.