Google Maps Reviews Scraper — Photos, Ratings & Translations avatar

Google Maps Reviews Scraper — Photos, Ratings & Translations

Pricing

from $0.30 / 1,000 per reviews

Go to Apify Store
Google Maps Reviews Scraper — Photos, Ratings & Translations

Google Maps Reviews Scraper — Photos, Ratings & Translations

Scrape Google Maps reviews by place URL or place ID. Get review text with English translation, star ratings, attached photos, likes, owner responses, dates, and reviewer profiles — 20 fields. $0.50 per 1,000 reviews; pay only for what you get.

Pricing

from $0.30 / 1,000 per reviews

Rating

0.0

(0)

Developer

bootforge

bootforge

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Google Maps Reviews Scraper — Extract Reviews, Ratings, Photos & Owner Responses

Last updated: June 2026

Google Maps Reviews Scraper is an Apify actor that extracts every review from any Google Maps place — by place URL or place ID. It returns one row per review with 20 fields: rating, full review text (plus an English translation for non-English reviews), attached review photos, direct review link, relative and absolute date, owner response, reviewer name, profile URL, review count, photo, likes, and language. Purpose-built for reputation monitoring, sentiment analysis, and anyone who needs review data at scale. Priced at $0.0005 per review delivered ($0.50 per 1,000).

How to Scrape Google Maps Reviews

  • Pay only for what you get — $0.0005/review ($0.50 per 1,000), $0.01 per run start, nothing else
  • Two ways to target a place — paste its Google Maps URL, or supply its hex place ID
  • Deep pagination — fetches every review up to maxReviews, across all pages
  • Sort control — newest, most relevant, highest rating, or lowest rating (e.g. set highestRating + maxReviews: 5 to grab a place's top 5 reviews)
  • Owner responses captured — the business reply is a first-class field, not buried in text
  • Rich reviewer data — profile URL, total review count, photo, and likes per review
  • CSV-friendly output — flat row per review, no nested objects

Note on review counts. Google's total (e.g. "25 reviews") counts star-only ratings that have no written text. This actor returns reviews with text — so the number of rows is usually lower than the headline count. That is expected, not missing data.

Use Cases

  • Reputation monitoring — track new reviews for your business or a competitor; alert on low ratings
  • Sentiment analysis — feed text + rating into an NLP pipeline for voice-of-customer insights
  • Lead generation — identify businesses with clusters of negative reviews (service opportunities)
  • Market research — compare review velocity and rating distributions across competitors
  • Review datasets — build training corpora for LLMs or fine-tuning sentiment classifiers
  • Agency reporting — pull monthly review snapshots for client SEO/reputation dashboards

How to Get a Google Maps Place URL

This is the easiest input — just copy it from Google Maps:

  1. Open Google Maps and search for the business.
  2. Click the place so its panel opens on the left.
  3. Copy the full URL from your browser's address bar. It looks like: https://www.google.com/maps/place/Business+Name/@9.29,105.73,17z/data=!4m8!3m7!1s0x31a1090bfc613b0d:0x236a0a4f8f3febce!...
  4. Paste it into Place URLs (one per line for multiple places).

The important part is the …!1s0x…:0x… segment — that's the place's ID. Copying from the address bar always includes it. Short links (maps.app.goo.gl/…) and bare name URLs without the data= segment may not resolve — use the full address-bar URL.

Quick Start

By place URL

{
"startUrls": [
"https://www.google.com/maps/place/Tr%C3%A0+s%E1%BB%AFa+Feeling+Tea/@9.2958277,105.7306288,17z/data=!4m8!3m7!1s0x31a1090bfc613b0d:0x236a0a4f8f3febce!8m2!3d9.2958224!4d105.7332037!9m1!1b1"
],
"maxReviews": 100,
"reviewsSort": "newest"
}

Top 5 reviews (highest rated)

{
"startUrls": ["https://www.google.com/maps/place/.../data=...!1s0x...:0x..."],
"maxReviews": 5,
"reviewsSort": "highestRating"
}

By hex place ID

Important: only the hex 0x…:0x… feature-ID format is accepted. The ChIJ… place ID shown in some Maps URLs is not supported — paste the full place URL instead.

{
"placeIds": ["0x8644b5003b80596b:0x6b271d491de49e1e"],
"maxReviews": 200,
"reviewsSort": "lowestRating"
}

Input Parameters

ParameterDefaultDescription
startUrls[]Google Maps place URLs to scrape reviews from (see "How to get a place URL")
placeIds[]Hex feature IDs (0x…:0x… form only — see note above)
maxReviews100Max reviews per place. 0 = unlimited. Counts reviews with text only
reviewsSortnewestSort order: newest, mostRelevant, highestRating, lowestRating
languageenLanguage for reviews (BCP-47 code, e.g., en, de, fr, vi)
proxynullProxy config — residential recommended

At least one of startUrls or placeIds is required.

Sample Output — Google Maps Review Row

{
"place_id": "0x8644b5003b80596b:0x6b271d491de49e1e",
"business_name": "ATX Family Dental",
"business_url": "https://www.google.com/maps?cid=7720627710330453534",
"review_id": "ChdDSUhNMG9nS0VJQ0FnSURydXBfcXdBEAE",
"review_url": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChdDSUhNMG9nS0VJQ0FnSURydXBfcXdBEAE!...",
"rating": 5,
"text": "Absolutely love this place. The staff is kind, professional, and always on time. Dr. Chen explained everything clearly and I left with zero anxiety. 10/10 recommend.",
"text_translated": null,
"review_images": ["https://lh3.googleusercontent.com/grass-cs/AN..."],
"relative_time": "2 months ago",
"absolute_date": "March 2026",
"language": "en",
"review_likes": 3,
"owner_response": "Thank you so much! We love having you as a patient and look forward to seeing you at your next visit.",
"has_owner_response": true,
"reviewer_name": "Sarah M.",
"reviewer_profile_url": "https://www.google.com/maps/contrib/113456789012345678901",
"reviewer_review_count": 47,
"reviewer_photo_url": "https://lh3.googleusercontent.com/a-/ALV-UjV...",
"scraped_at": "2026-06-19T08:30:00+00:00"
}

Every review row has these 20 fields: place_id, business_name, business_url (an openable maps?cid= link), review_id, review_url (direct link to the review), rating (1–5), text, text_translated (Google's English translation; null if the review is already in the requested language), review_images (list of attached review photo URLs), relative_time, absolute_date, language, review_likes, owner_response, has_owner_response, reviewer_name, reviewer_profile_url, reviewer_review_count, reviewer_photo_url, scraped_at.

How Much Does It Cost to Scrape Google Maps Reviews?

$0.0005 per review ($0.50 per 1,000) + $0.01 per run start.

Use caseReviewsEst. cost
Monitor one business (latest 100)100~$0.06
Competitive snapshot (10 businesses × 100 reviews)1,000~$0.51
Sentiment dataset — one category in one city10,000~$5.01
Full competitor audit — 100 businesses × 200 reviews20,000~$10.01

One run start = $0.01 regardless of how many places or reviews you pull. You only pay for reviews actually delivered — if a place has 30 reviews and you set maxReviews: 100, you are charged for 30.

Google Maps Reviews Scraper Comparison

How this actor compares to other Google Maps review scrapers on Apify (prices as of June 2026, free tier):

ScraperPrice / 1,000 reviewsReview textEnglish translationReview photosLikesOwner response
This actor$0.50
Compass$0.60
beatanalytics$0.50
memo23$0.50

This actor delivers the most complete review row — English translations and review likes that the others omit, plus attached photos — at the lowest mainstream price. You pay only for reviews actually delivered, with no per-place or subscription fees.

Proxy Configuration

Works without proxy for small runs (under ~100 reviews). For larger scrapes or if you hit rate limits, a residential proxy is strongly recommended.

// Apify managed proxy (easiest)
{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}
// Bright Data
{"provider": "brightdata", "username": "YOUR_USER", "password": "YOUR_PASS", "zone": "residential", "country": "US"}
// Oxylabs
{"provider": "oxylabs", "username": "YOUR_USER", "password": "YOUR_PASS", "proxy_type": "residential", "country": "US"}
// SmartProxy
{"provider": "smartproxy", "username": "YOUR_USER", "password": "YOUR_PASS", "proxy_type": "residential", "country": "US"}
// Any proxy URL
{"provider": "raw_urls", "urls": ["http://user:pass@proxy.example.com:8080"]}

Error Handling

SituationWhat happens
Google cookie-consent page on a fresh proxy IPDismissed automatically during session setup
Place URL has no place ID (short link / bare name)Logs a warning, skips that URL, continues
A place returns no reviewsLogs, moves to next place — partial results always returned
maxReviews reachedStops pagination cleanly, dataset is complete
Run hits spending limitStops gracefully — no partial-page leakage

Frequently Asked Questions

Do I need a proxy? Not for small runs (under ~100 reviews total). For large scrapes or scraping reviews for many places at once, a residential proxy reduces the chance of rate limiting. Set proxy.useApifyProxy = true with group RESIDENTIAL for the easiest option.

What is the difference between startUrls and placeIds? Both fetch reviews from the same Google endpoint — they only differ in how you point at the place. startUrls takes the Google Maps URL (recommended — just copy it from the address bar). placeIds takes the raw hex feature ID (0x…:0x…) if you already have it.

How do I target a place? See How to Get a Google Maps Place URL — copy the full URL from your browser's address bar and paste it into Place URLs. That's all most users need.

Why doesn't ChIJ… work as a place ID? The ChIJ… string is a base64-encoded identifier; the reviews endpoint requires the raw hex feature ID (0x…:0x…). Just pass the full place URL instead — it contains the hex ID in its …!1s0x…:0x… segment and resolves automatically.

Why do I get fewer reviews than the count shown on Google? Google's headline count (e.g. "25 reviews") includes star-only ratings with no written text. This actor returns reviews with text, so the row count is usually lower. The star-only ratings are not individually retrievable.

How many reviews can I scrape per place? As many as the business has. Google Maps shows up to several thousand reviews per place depending on the sort order. Set maxReviews as high as needed — the actor paginates automatically.

Why are some review texts empty? Occasionally a returned review has text: null (the rating, date, and reviewer metadata are still present). Star-only ratings that Google never lists as individual reviews are not returned at all.

Why are some absolute_date values approximate (e.g., "March 2026" vs a full date)? Google Maps exposes an approximate date string for most reviews (month + year). The exact day is not available through the reviews endpoint.

How do I sort reviews to find the most critical ones? Set reviewsSort: "lowestRating" — the actor fetches 1-star reviews first.

Can I scrape reviews in other languages? Yes. Set language to any BCP-47 code (e.g., de, fr, ja, es). This controls the language of relative time strings and UI text in the response; it does not filter reviews — Google returns reviews in all languages regardless.

Is this cheaper than other review scrapers on Apify? At $0.0005/review ($0.50 per 1,000), this matches the lowest mainstream per-review rates on the platform — and includes English translations, review photos, likes, and owner responses with no add-on fees. You only pay for reviews actually delivered.

Building a broader data pipeline? These actors use the same proxy config format and Pydantic-validated output.

Local business intelligence

  • Google Maps Scraper — Extract business leads — emails, phone numbers, social links, 24 fields per business. Flat $7 per 1,000 results with emails included.

Lead generation

  • LinkedIn Profile Scraper — Scrape LinkedIn profiles via your li_at cookie. Structured fields, full experience history, optional contact enrichment.

Lead generation / Hiring

  • LinkedIn Jobs Scraper — Scrape LinkedIn job listings with 30 fields per job — company enrichment, salary, recruiter info, full description.

E-commerce intelligence

  • TikTok Shop Product Scraper — Scrape TikTok Shop products across 10 regions — variants, prices, seller info, ratings, sold counts.