Google Maps reviews

Every accessible review. One stable schema. Newest first.

POST /v1/scrape/google-maps/reviews from 40 Site-specific

Full accessible review feed from any Maps place: by full Google Maps URL or the fid hidden in it. Returns up to ~10,000 unique reviews as a clean JSON list, deduplicated and sorted newest-first. No HTML, no infinite scroll, no anti-bot walls.

The hard part

Pulling Maps reviews used to be a public-API call. That door closed in early 2026, and what replaced it surfaces only a limited slice of any busy place's full review count. On places with over 20K total reviews the practical ceiling lands around 10,000 unique, which is where we cap, because no scraper publicly delivers more through any documented endpoint.

What it does

  • Returns reviews sorted newest-first regardless of how Google ranked them.
  • Auto-downgrade: places with 50 or fewer reviews returned bill at 40 credits.
  • Reviews include rating, text, photos, `posted_at` (epoch + ISO), language, helpful_count, and owner_reply when present.
  • Hard cap 10,000 per request. Google's accessible review pool maxes out here regardless of the place's published total.

Send a call

curl -X POST https://scrapenest.dev/v1/scrape/google-maps/reviews \
  -H "Authorization: Bearer sn_••••" \
  -H "Content-Type: application/json" \
  -d '{
        "place_id": "0x47e66e2964e34e2d:0x8ddca9ee380ef7e0",
        "max_reviews": 600
      }'

Request body

{
  "place_id": "0x47e66e2964e34e2d:0x8ddca9ee380ef7e0",
  "max_reviews": 5000
}

Response shape

{
  "place_id": "0x47e66e2964e34e2d:0x8ddca9ee380ef7e0",
  "name": "Eiffel Tower",
  "address": "Av. Gustave Eiffel, 75007 Paris, France",
  "rating": 4.7,
  "review_count": 92481,
  "google_maps_url": "https://www.google.com/maps/place/...",
  "reviews": [
    {
      "review_id": "ChdDSUhNMG9nS0VJQ0FnSURBNS0z…",
      "review_url": "https://www.google.com/maps/reviews/...",
      "author_name": "Jane D.",
      "author_id": "1234567890",
      "author_profile_url": "https://www.google.com/maps/contrib/1234567890/reviews",
      "author_avatar_url": "https://lh3.googleusercontent.com/...",
      "rating": 5,
      "text": "Amazing view, worth the wait.",
      "language": "en",
      "relative_time": "2 weeks ago",
      "posted_at": 1778630400,
      "posted_at_iso": "2026-05-13T00:00:00Z",
      "helpful_count": 12,
      "photos": ["https://lh3.googleusercontent.com/places/AReview-photo1"],
      "owner_reply": null
    }
  ],
  "star_histogram": [1240, 980, 3110, 14820, 72331],
  "took_ms": 197000,
  "cache_hit": false,
  "credits_charged": 10000
}

What it costs

100 credits per 50 reviews returned, or 40 credits when 50 or fewer come back. Hard cap 10,000. You only pay for what's available; results come back newest-first. Pulls above ~700 reviews should use the /async endpoint.

  • For pulls above ~700 reviews, prefer the async endpoint pattern: submit, poll /v1/scrape/runs/{run_id}, collect the final result. Same pricing.