Place Reviews
Get user reviews for a place by place_id. Each review includes the rating, full review text, author info (with photo URL and total review count), timestamps, attached photos, and any owner response.
Endpoint
GET /v1/places/reviews
Price: $0.003 per request Free tier: 50 requests/month
Parameters
| Parameter | Required | Description |
|---|---|---|
place_id |
Yes | Google place_id, as returned by the Places Search endpoint |
limit |
No | Number of reviews per request, 1-20 (default: 10) |
sort_by |
No | most_relevant (default), newest, highest_ranking, lowest_ranking |
language |
No | 2-letter ISO 639-1 language code (default: en). Returns only reviews originally written in this language |
translate_reviews |
No | Set to true to translate the returned reviews into the requested language |
country |
No | 2-letter ISO 3166-1 alpha-2 region code (default: us) |
get_sentiment |
No | Set to true to add AI emotion analysis to each review (+$0.001/request) |
Response Fields
| Field | Type | Description |
|---|---|---|
reviews |
array | Array of reviews |
reviews[].review_id |
string | Stable review identifier |
reviews[].rating |
integer | Star rating, 1-5 |
reviews[].review_text |
string | Review body text |
reviews[].review_datetime_utc |
string | ISO 8601 review datetime (UTC) |
reviews[].review_timestamp |
integer | Unix timestamp (seconds) |
reviews[].review_time |
string | Human-readable relative time (e.g. 3 months ago) |
reviews[].review_link |
string | Direct link to the review on Google Maps |
reviews[].review_photos |
array | Array of photo URLs attached to the review |
reviews[].review_language |
string | Detected review language code |
reviews[].review_text_translated_language |
string | null | Target language code if the review has been translated |
reviews[].like_count |
integer | Number of “likes” the review has received |
reviews[].review_source |
string | Source platform name (typically Google) |
reviews[].review_source_logo |
string | Source platform logo URL |
reviews[].author_id |
string | Google contributor ID |
reviews[].author_name |
string | Review author display name |
reviews[].author_link |
string | Author Google Maps profile URL |
reviews[].author_photo_url |
string | null | Author profile photo URL |
reviews[].author_review_count |
integer | Total reviews this author has posted |
reviews[].author_photo_count |
integer | Total photos this author has uploaded |
reviews[].author_reviews_link |
string | URL to all of this author’s reviews |
reviews[].author_is_local_guide |
boolean | Whether the author is a Google Local Guide |
reviews[].author_local_guide_level |
integer | null | Local Guide level (1-10) if applicable |
reviews[].owner_response |
object | null | Object with text, datetime_utc, timestamp, time, language when the place owner has responded |
reviews[].sentiment |
object | Emotion analysis: emotions, dominant_emotion, emotional_intensity, polarity (when get_sentiment=true) |
count |
integer | Number of reviews returned |
limit |
integer | Requested limit |
sort_by |
string | Echoed sort order |
Example Request
cURL
curl "https://apidirect.io/v1/places/reviews?place_id=ChIJifIePKtZwokRVZ-UdRGkZzs&limit=20&sort_by=newest" \
-H "X-API-Key: YOUR_API_KEY"
Python
import requests
response = requests.get(
"https://apidirect.io/v1/places/reviews",
headers={"X-API-Key": "YOUR_API_KEY"},
params={
"place_id": "ChIJifIePKtZwokRVZ-UdRGkZzs",
"limit": 20,
"sort_by": "newest"
}
)
print(response.json())
Example Response
{
"reviews": [
{
"review_id": "Ci9DQUlRQUNvZENodHljRjlvT2pWeU1rdFZhREZPY214dmRVSlplRzQ0ZURWVk9XYxAB",
"rating": 5,
"review_text": "Amazing pizza, fast service. Highly recommend.",
"review_datetime_utc": "2026-02-15T12:05:54.947Z",
"review_timestamp": 1771157154,
"review_time": "3 months ago",
"review_link": "https://www.google.com/maps/reviews/...",
"review_photos": ["https://lh3.googleusercontent.com/grass-cs/..."],
"review_language": "en",
"review_text_translated_language": "en",
"like_count": 0,
"review_source": "Google",
"review_source_logo": "https://www.gstatic.com/images/branding/product/1x/googleg_48dp.png",
"author_id": "103696814314978516852",
"author_name": "Salman Idrees",
"author_link": "https://www.google.com/maps/contrib/103696814314978516852",
"author_photo_url": "https://lh3.googleusercontent.com/a-/ALV-...",
"author_review_count": 392,
"author_photo_count": 356,
"author_reviews_link": "https://www.google.com/maps/contrib/103696814314978516852/reviews",
"author_is_local_guide": true,
"author_local_guide_level": 7,
"owner_response": null
}
],
"count": 1,
"limit": 20,
"sort_by": "newest"
}
Getting more reviews
Each request returns up to 20 reviews, scoped to a single (language, sort_by) combination. Two knobs surface different reviews:
1. sort_by — four options, each returns a different top-20:
most_relevant(default) — Google’s relevance rankingnewest— reverse chronological orderhighest_ranking— 5-star and 4-star reviews firstlowest_ranking— 1-star and 2-star reviews first
2. language — filters reviews to those originally written in that language. The same place_id returns a different set of ~20 reviews for each language.
Combining all four sort orders with a handful of languages can surface several hundred reviews per place. Each call is billed at $0.003.
To consolidate the multilingual set in one language, add translate_reviews=true and the returned reviews will be translated into your chosen language.
Notes
- If a place has no reviews in the requested
language, the response is empty (still billed as one request). translate_reviews=truereplaces each review’s text with the translation. Thereview_languagefield shows the original language;review_text_translated_languagematches your target.- The
owner_responsefield isnullwhen the business owner has not replied to the review. - Set
get_sentiment=trueto add per-review emotion analysis to the response.