Google Reviews API
Get Google Maps reviews for any business using their data_id with token-based pagination.
Overview
Token-Based Pagination
Each response includes a next_page_token for fetching additional reviews. Continue requesting until has_more is false.
The Google Reviews endpoint provides access to customer reviews from Google Maps. Each request returns ~8-10 reviews along with a pagination token for fetching more. Use the data_id parameter (Google's internal identifier) to specify which business to get reviews for.
Endpoint URL
Finding data_id
Use the /search-and-review endpoint to find the data_id for any business. It searches by name and returns the data_id you can use for subsequent requests.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| data_id | string | Required | Google Maps data_id for the place (e.g., 0x89c259af98ec7cbd:0x654b31dc1f9816db) |
| next_page_token | string | Optional | Token for fetching the next page of reviews. Obtained from the previous response's next_page_token field. |
| sort_by | string | Optional | Sort order for reviews. Options: most_relevant (default), newest, highest_rating, lowest_rating |
| hl | string | Optional | Language code for reviews (e.g., en, es, fr). Default: en |
Response Structure
Success Response (200 OK)
{
"success": true,
"data_id": "0x89c259af98ec7cbd:0x654b31dc1f9816db",
"place_name": "Bellagio Hotel & Casino",
"place_address": "3600 Las Vegas Blvd S, Las Vegas, NV 89109",
"total_reviews": 139601,
"average_rating": 4.7,
"reviews": [
{
"review_id": "ChdDSUhNMG9nS0VJQ0FnSURiOTlySm1RRRAB",
"rating": 5,
"text": "Amazing hotel with fantastic fountains and excellent service...",
"date": "a week ago",
"iso_date": "2025-12-03T14:30:00Z",
"photos": [],
"reviewer": {
"name": "John Smith",
"profile_picture": "https://lh3.googleusercontent.com/...",
"reviews_count": 25,
"local_guide": false
},
"likes": 3,
"owner_response": "Thank you for your wonderful review...",
"owner_response_date": "3 days ago"
}
// ... ~8-10 reviews per page
],
"next_page_token": "CAESBkVnSUlDZw==",
"has_more": true,
"search_metadata": {
"datetime": "2025-12-10T10:30:00Z"
}
}
Response Fields
- data_id: Google Maps data_id for the place
- place_name: Name of the business
- place_address: Address of the business
- total_reviews: Total number of reviews for the place on Google
- average_rating: Overall rating of the business (1-5)
- reviews: Array of review objects (~8-10 per page)
- next_page_token: Pagination token - Use this to fetch the next page of reviews
- has_more: Whether more reviews are available (continue pagination if true)
Pagination
Each request returns ~8-10 reviews along with a next_page_token. To get more reviews, include this token in your next request. Continue until has_more is false or next_page_token is null.
# Fetch all reviews using pagination
import requests
data_id = '0x89c259af98ec7cbd:0x654b31dc1f9816db'
all_reviews = []
next_token = None
while True:
params = {'data_id': data_id, 'sort_by': 'newest'}
if next_token:
params['next_page_token'] = next_token
response = requests.get(
'https://api.stayapi.com/v1/google_reviews/reviews',
params=params,
headers={'X-API-Key': 'YOUR_API_KEY'}
)
data = response.json()
all_reviews.extend(data['reviews'])
if not data.get('has_more') or not data.get('next_page_token'):
break
next_token = data['next_page_token']
print(f"Fetched {len(all_reviews)} total reviews")
Pagination Tips:
- • Each page returns ~8-10 reviews
- • Sort order is applied once at the start, not per-page
- • Tokens are valid for a limited time - don't store them long-term
Common Use Cases
📊 Reputation Management
Monitor and analyze customer feedback across your hotel portfolio. Track sentiment trends, identify common complaints, and respond to reviews promptly.
# Get recent reviews to monitor feedback
reviews = get_google_reviews(data_id, sort='newest')
negative_reviews = [r for r in reviews if r['rating'] <= 2]
# Alert management about negative reviews requiring response
🔍 Competitive Analysis
Compare review ratings and feedback between competing hotels. Identify strengths and weaknesses to improve your service offering.
💬 Content Enhancement
Display authentic Google Reviews on your website to build trust with potential customers and improve conversion rates.
Error Handling
| Code | Type | Description |
|---|---|---|
| 400 | INVALID_PARAMETERS | Missing or invalid data_id parameter |
| 404 | NO_RESULTS | No reviews found for the provided data_id |
| 429 | RATE_LIMITED | Too many requests. Please retry after the specified time |
| 500 | INTERNAL_ERROR | Server error. Please try again later |
| 502 | UPSTREAM_ERROR | Error fetching data from Google Reviews |
Rate Limits
This endpoint is subject to the standard API rate limits based on your subscription tier.
- ✓ Free tier: 10 requests/day
- ✓ Basic: 1,000 requests/day
- ✓ Pro: 10,000 requests/day
- ✓ Enterprise: Custom limits
Related Endpoints
curl -X GET "https://api.stayapi.com/v1/google_reviews/reviews?data_id=0x89c259af98ec7cbd:0x654b31dc1f9816db&sort_by=newest" \ -H "X-API-Key: YOUR_API_KEY" # To get the next page, use the next_page_token: curl -X GET "https://api.stayapi.com/v1/google_reviews/reviews?data_id=0x89c259af98ec7cbd:0x654b31dc1f9816db&next_page_token=CAESBkVnSUlDZw==" \ -H "X-API-Key: YOUR_API_KEY"
const dataId = "0x89c259af98ec7cbd:0x654b31dc1f9816db"; // First request const response = await fetch( `https://api.stayapi.com/v1/google_reviews/reviews?` + new URLSearchParams({ data_id: dataId, sort_by: "newest" }), { headers: { "X-API-Key": "YOUR_API_KEY" } } ); const data = await response.json(); console.log(`Place: ${data.place_name}`); console.log(`Total reviews: ${data.total_reviews}`); console.log(`Reviews on this page: ${data.reviews.length}`); // If there are more reviews, use next_page_token if (data.has_more && data.next_page_token) { const nextResponse = await fetch( `https://api.stayapi.com/v1/google_reviews/reviews?` + new URLSearchParams({ data_id: dataId, next_page_token: data.next_page_token }), { headers: { "X-API-Key": "YOUR_API_KEY" } } ); // ... continue pagination }
import requests data_id = "0x89c259af98ec7cbd:0x654b31dc1f9816db" # First request response = requests.get( "https://api.stayapi.com/v1/google_reviews/reviews", params={ "data_id": data_id, "sort_by": "newest" }, headers={"X-API-Key": "YOUR_API_KEY"} ) data = response.json() print(f"Place: {data['place_name']}") print(f"Total reviews: {data['total_reviews']}") print(f"Reviews on this page: {len(data['reviews'])}") # Fetch all reviews with pagination all_reviews = data['reviews'] next_token = data.get('next_page_token') while data.get('has_more') and next_token: response = requests.get( "https://api.stayapi.com/v1/google_reviews/reviews", params={ "data_id": data_id, "next_page_token": next_token }, headers={"X-API-Key": "YOUR_API_KEY"} ) data = response.json() all_reviews.extend(data['reviews']) next_token = data.get('next_page_token') print(f"Total fetched: {len(all_reviews)} reviews")
$dataId = "0x89c259af98ec7cbd:0x654b31dc1f9816db"; // First request $params = [ "data_id" => $dataId, "sort_by" => "newest" ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.stayapi.com/v1/google_reviews/reviews?" . http_build_query($params)); curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: YOUR_API_KEY"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $data = json_decode($response, true); echo "Place: " . $data["place_name"] . "\n"; echo "Total reviews: " . $data["total_reviews"] . "\n"; echo "Reviews on this page: " . count($data["reviews"]) . "\n"; // Continue with pagination using next_page_token if ($data["has_more"] && !empty($data["next_page_token"])) { $params["next_page_token"] = $data["next_page_token"]; unset($params["sort_by"]); // Only needed for first request // ... make next request }
{ "success": true, "data_id": "0x89c259af98ec7cbd:0x654b31dc1f9816db", "place_name": "Bellagio Hotel & Casino", "place_address": "3600 Las Vegas Blvd S, Las Vegas, NV 89109", "total_reviews": 139601, "average_rating": 4.7, "reviews": [ { "review_id": "ChdDSUhNMG9nS0VJQ0FnSURiOTlySm1RRRAB", "rating": 5, "text": "Amazing hotel with fantastic fountains. The rooms are beautiful and the staff is incredibly friendly...", "date": "a week ago", "iso_date": "2025-12-03T14:30:00Z", "photos": [], "reviewer": { "name": "John Smith", "profile_picture": "https://lh3.googleusercontent.com/...", "reviews_count": 25, "local_guide": false }, "likes": 3, "owner_response": "Thank you for your wonderful review!", "owner_response_date": "3 days ago" } ], "next_page_token": "CAESBkVnSUlDZw==", "has_more": true, "search_metadata": { "datetime": "2025-12-10T10:30:00Z" } }
{ "type": "https://api.stayapi.com/errors/invalid-parameters", "title": "Invalid Parameters", "status": 400, "detail": "data_id is required", "instance": "/v1/google_reviews/reviews", "provider": "google_reviews", "error_code": "INVALID_PARAMETERS", "correlation_id": "req_abc123" }