YepAPI
Google Maps API

Place Reviews

Fetch up to 150 Google Maps reviews for any place by Place ID — sorted by newest, relevance, or rating, with full text, author profiles, photos, and owner responses.

POST/v1/maps/reviews
from ~$0.01/50 reviews

Fetch user reviews for a place by its Google Place ID — up to 150 reviews per call, far beyond the 5 that Google's own API exposes. Choose a sort order and how many reviews to pull. Use the id returned by Maps Search, or any Place ID you already have.

Info

This endpoint scrapes live and is asynchronous upstream — a request submits a job and polls for the result within the request window. If the upstream queue is busy and the reviews aren't ready in time, you'll get a 503 asking you to retry in a few seconds. Larger depth values take longer, so depth is capped at 150 per call.

Usage

const res = await fetch('https://api.yepapi.com/v1/maps/reviews', {
  method: 'POST',
  headers: {
    'x-api-key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    place_id: 'ChIJBR3G8LJqkFQRWD2Wzn0qG3c',
    sort_by: 'newest',
    depth: 50,
  }),
});
const { data } = await res.json();
console.log(data.reviews);
curl -X POST https://api.yepapi.com/v1/maps/reviews \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"place_id": "ChIJBR3G8LJqkFQRWD2Wzn0qG3c", "sort_by": "newest", "depth": 50}'

Request Body

ParameterTypeRequiredDescriptionDefault
place_idstringYesGoogle Place ID (e.g. ChIJBR3G8LJqkFQRWD2Wzn0qG3c). Get one from Maps Search.
sort_bystringNoReview ordering: relevant, newest, highest_rating, or lowest_rating."relevant"
depthnumberNoHow many reviews to fetch. Clamped to 10150 and rounded to the nearest 10.50
languagestringNoTwo-letter language code (e.g. en, es, fr)."en"
location_codenumberNoDataForSEO location code (e.g. 2840 = United States).2840

Response

{
  "ok": true,
  "data": {
    "placeId": "ChIJBR3G8LJqkFQRWD2Wzn0qG3c",
    "cid": "8582500234709843288",
    "name": "Storyville Coffee Pike Place",
    "rating": 4.6,
    "totalReviews": 3122,
    "sortBy": "newest",
    "depth": 50,
    "reviewCount": 50,
    "reviews": [
      {
        "rating": 5,
        "text": "Service is excellent, coffee is quite good. The vibe of the place is great and the view over the market is unbeatable.",
        "author": "Scott Dawson",
        "authorProfileUrl": "https://www.google.com/maps/contrib/108943976041939788925/reviews",
        "authorImageUrl": "https://lh3.googleusercontent.com/a/ACg8ocKRqA6C5W5DeTU7M5792pD",
        "localGuide": true,
        "authorReviewCount": 14,
        "timestamp": "2026-07-23 15:55:22 +00:00",
        "timeAgo": "a day ago",
        "reviewUrl": "https://www.google.com/maps/reviews/data=...",
        "reviewId": "Ci9DQUlRQUNvZENodHljRjlvT25Ca09HOUZXRU5PYXpac2VYTkRhSGRq",
        "ownerAnswer": "Thanks for the review, Scott!",
        "ownerAnswerTimestamp": "2026-07-23 20:55:57 +00:00"
      }
    ]
  }
}

Response Fields

FieldTypeDescription
data.placeIdstringThe Google Place ID that was looked up.
data.cidstring?Google customer ID for the place (string to preserve precision).
data.namestring?Display name of the place.
data.ratingnumber?Average star rating (0.0–5.0).
data.totalReviewsnumber?Total reviews the place has on Google (usually far larger than reviewCount).
data.sortBystringThe sort order applied.
data.depthnumberThe normalized depth used for this call.
data.reviewCountnumberNumber of reviews actually returned in reviews.
data.reviews[].ratingnumber?Star rating this reviewer gave (1–5).
data.reviews[].textstring?Review body text.
data.reviews[].originalTextstring?Original-language text before translation, when applicable.
data.reviews[].languagestring?Original language of the review.
data.reviews[].authorstring?Display name of the reviewer.
data.reviews[].authorProfileUrlstring?Link to the reviewer's Google profile.
data.reviews[].authorImageUrlstring?Reviewer's avatar URL.
data.reviews[].localGuidebooleanWhether the reviewer is a Google Local Guide.
data.reviews[].authorReviewCountnumber?The reviewer's own total number of reviews.
data.reviews[].timestampstring?Timestamp of the review.
data.reviews[].timeAgostring?Human-friendly relative time (e.g. "a day ago").
data.reviews[].reviewUrlstring?Direct link to the review on Google Maps.
data.reviews[].reviewIdstring?Stable review identifier.
data.reviews[].photosCountnumber?Number of photos attached to the review.
data.reviews[].imagesarray?Review photo data, when present.
data.reviews[].ownerAnswerstring?The business owner's reply, when present.
data.reviews[].ownerAnswerTimestampstring?Timestamp of the owner's reply.

Pricing

Billed by depth: about $0.01 per 50 reviews (up to ~$0.03 for 150). No monthly minimums — you only pay for the reviews you pull.

Under the Hood

Reviews are sourced live from Google Maps. Because the upstream is job-based, deep pulls take longer; if a job isn't ready within the request window you'll receive a retryable 503. For pulling every review across thousands, request the newest slice per call or reach out about a bulk async flow.

On this page