GET
# Google Search and Review API

Look up any place on Google Maps by name and get its first page of Google reviews, plus the `data_id` you need to paginate, in one request.

## Overview

#### No data\_id needed

Pass a place name. The endpoint resolves it on Google, returns the first page of reviews, and hands back the data\_id so you can paginate with the Google Reviews endpoint.

The Google Search and Review endpoint is the entry point to Google Maps reviews when all you have is a name. It resolves the best-matching place for your query, fetches its first page of reviews (up to 10), and returns the place identity: name, address, total review count, average rating and `data_id`. It works for any place type on Google Maps, not only hotels. Further pages come from the [Google Reviews endpoint](/docs/endpoints/google-reviews) using that `data_id`.

### Endpoint URL

GET https://api.stayapi.com/v1/google\_reviews/search-and-review 

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| query | string | Required | Place name, ideally with the city (e.g. "Bellagio Las Vegas", "Grand Yavuz Hotel Istanbul", "Joe's Pizza Broadway") |
| location | string | Optional | Latitude,longitude to bias the lookup to that area when the name is ambiguous (e.g. "36.1069,-115.1728"). Any other format returns 400. |
| sort\_by | string | Optional | Sort order for the returned reviews: most\_relevant (default), newest, highest\_rating, lowest\_rating |
| hl | string | Optional | Language code for review text and relative dates. Default: en |

## Response Structure

### Success Response (200 OK)

```
{
  "success": true,
  "search_query": "Bellagio Las Vegas",
  "search_location": null,
  "data_id": "0x80c8c430cb5147bd:0x82f2c7c5d9d10d84",
  "place_id": "ChIJvUdRyzDEyIARhA3R2cXH8oI",
  "place_name": "Bellagio Hotel & Casino",
  "place_address": "3600 S Las Vegas Blvd, Las Vegas, NV 89109, United States",
  "total_reviews": 144222,
  "average_rating": 4.7,
  "reviews": [
    {
      "review_id": "Ci9DQUlRQUNvZENodHljRjlvT25OelJFeEdaMlJ5ZEhWS2NsbExhMGRSYXpSdGNsRRAB",
      "rating": 5.0,
      "text": "I came prepared to explain myself twice. I barely needed to explain myself once.",
      "date": "4 hours ago",
      "iso_date": "2026-09-17T02:46:38Z",
      "iso_date_source": "review",
      "iso_date_of_last_edit": "2026-09-17T02:46:38Z",
      "photos": [],
      "reviewer": {
        "name": "Ellie Montoya",
        "profile_picture": "https://lh3.googleusercontent.com/a-/...",
        "reviews_count": 13,
        "local_guide": true
      },
      "likes": 0,
      "owner_response": null,
      "owner_response_date": null
    }
  ],
  "next_page_token": "gt:CjEIARIpCgoAP7_LADXn ____ EhA4jslEyt_rOYahKTQAAAAAGgn92QACYJiwtg4YACIA:10",
  "has_more": true,
  "search_metadata": {
    "search_url": null,
    "datetime": "2026-10-20T14:35:40.112233",
    "total_time_taken": null
  }
}
```

### Response Fields

- data\_id:Google Maps data\_id of the resolved place. Pass it to the Google Reviews endpoint to fetch further pages.
- place\_id:Google Place ID (ChIJ...) for cross-referencing with other Google products. Not accepted as an input here; use data\_id.
- place\_name / place\_address:Identity of the place that was matched. Check these to confirm the right place was resolved.
- total\_reviews / average\_rating:Review count and star rating for the whole place, not only the returned page.
- reviews:First page of reviews (up to 10). Each has rating, text (null for star-only reviews), date (Google's relative label, always present), iso\_date (UTC; may be null), iso\_date\_source and iso\_date\_of\_last\_edit, reviewer, likes, owner\_response and reviewer-attached photos. iso\_date\_source is "review" for an exact review time (best-effort for every review, including subsequent pages fetched by data\_id), "photo" for the reviewer's photo upload time (hour or day precision), or null. Exact likes and reviewer stats remain available for up to 5 reviews on the first page only. On other reviews likes is 0, reviewer.reviews\_count is null and reviewer.local\_guide is false. The [Google Reviews endpoint](/docs/endpoints/google-reviews) documents these fields in full.
- next\_page\_token / has\_more:Opaque cursor for the next page (it starts with `gt:`). Send it unchanged, with data\_id and the same sort\_by, to the Google Reviews endpoint; pagination is not available on this endpoint. Some places, for example a harbour or a park, return only their first 5 reviews, with `has_more: false` and no token.

## Common Use Cases

### 🔍 Reviews From Just a Name

Start from the names you already have in your CRM or spreadsheet. No Google Maps IDs to collect first.

```
# One call per property name
data = search_and_review(query="Bellagio Las Vegas")
print(data["place_name"], data["average_rating"], data["total_reviews"])
for review in data["reviews"]:
    print(review["rating"], review["text"])
```

### 📈 Reputation Monitoring

Resolve each place once, store its data\_id, then poll the Google Reviews endpoint sorted by newest to catch new feedback.

```
// Day 0: resolve and cache
const first = await searchAndReview({ query: "Bellagio Las Vegas" });
db.save({ name: first.place_name, data_id: first.data_id });

// Every day after: newest reviews by data_id
const latest = await googleReviews({ data_id: first.data_id, sort_by: "newest" });
```

### 🍽️ Any Place Type

Hotels, restaurants, bars, attractions, spas: anything with a Google Maps listing. Combine with Booking.com and TripAdvisor reviews for a cross-channel view.

```
for name in ["Bellagio Las Vegas", "Joe's Pizza Broadway", "Louvre Museum Paris"]:
    data = search_and_review(query=name, sort_by="newest")
    store(name, data["data_id"], data["reviews"])
```

## How It Works

1. 1

#### Resolve the place

Your query (and optional location bias) is matched against Google's places and the best-matching place is selected.

2. 2

#### Fetch the first page of reviews

Reviews for that place are fetched in the requested sort order and language.

3. 3

#### Return identity and reviews

You get place\_name, place\_address, total\_reviews, average\_rating, data\_id and the first page of reviews in one response.

4. 4

#### Paginate by data\_id

Send data\_id, next\_page\_token and the same sort\_by to the Google Reviews endpoint for the following pages, or fetch up to 10 pages at once with reviews-paginated.

## Error Handling

| Code | Type | Description |
| --- | --- | --- |
| 422 | VALIDATION\_ERROR | query is missing, or sort\_by is not one of the allowed values |
| 404 | NO\_RESULTS | No place on Google Maps matched the query |
| 404 | NO\_REVIEWS | The place was found but has no reviews yet |
| 400 | INVALID\_PARAMETERS | location is not a latitude,longitude pair |
| 502 | UPSTREAM\_ERROR | Error fetching data from Google |
| 504 | UPSTREAM\_TIMEOUT | Google did not answer in time. Retry the request |
| 503 | SERVICE\_UNAVAILABLE | Google reviews are temporarily unavailable. Retry after the `Retry-After` header |

## Pro Tips

- 💡
**Include the city:**"Bellagio Las Vegas" resolves reliably; "Bellagio" alone may match a different place. Check place\_name and place\_address in the response. 
- 💡
**Bias with coordinates:** For chains and common names, pass location as latitude,longitude to pick the branch you mean. 
- 💡
**Cache the data\_id:** Resolve once, then paginate and re-poll through the Google Reviews endpoint. Do not call this endpoint on every page. 
- 💡
**Need a photo of the place?** This endpoint returns no property image; the photos array on each review holds reviewer-attached pictures only. For a hotel image use [Google Travel Photos](/docs/endpoints/google-travel/photos). 

## Related Endpoints

[ 
### Google Reviews

Paginate reviews by data\_id with next\_page\_token, or fetch up to 10 pages at once

 ](/docs/endpoints/google-reviews)[ 
### Google Travel Hotel Info

Hotel identity, address, contact details, Maps identifiers and labeled amenities

 ](/docs/endpoints/google-travel/info)[ 
### Google Travel Photos

Hotel photo gallery with dimensions, no dates required

 ](/docs/endpoints/google-travel/photos)

Request

```curl
curl -G "https://api.stayapi.com/v1/google_reviews/search-and-review" \
  -H "X-API-Key: YOUR_API_KEY" \
  --data-urlencode "query=Bellagio Las Vegas" \
  --data-urlencode "sort_by=newest"
```

Response

```json
{
  "success": true,
  "search_query": "Bellagio Las Vegas",
  "search_location": null,
  "data_id": "0x80c8c430cb5147bd:0x82f2c7c5d9d10d84",
  "place_id": "ChIJvUdRyzDEyIARhA3R2cXH8oI",
  "place_name": "Bellagio Hotel & Casino",
  "place_address": "3600 S Las Vegas Blvd, Las Vegas, NV 89109, United States",
  "total_reviews": 144222,
  "average_rating": 4.7,
  "reviews": [
    {
      "review_id": "Ci9DQUlRQUNvZENodHljRjlvT25OelJFeEdaMlJ5ZEhWS2NsbExhMGRSYXpSdGNsRRAB",
      "rating": 5.0,
      "text": "I came prepared to explain myself twice. I barely needed to explain myself once.",
      "date": "4 hours ago",
      "iso_date": "2026-09-17T02:46:38Z",
      "iso_date_source": "review",
      "iso_date_of_last_edit": "2026-09-17T02:46:38Z",
      "photos": [],
      "reviewer": {
        "name": "Ellie Montoya",
        "profile_picture": "https://lh3.googleusercontent.com/a-/...",
        "reviews_count": 13,
        "local_guide": true
      },
      "likes": 0,
      "owner_response": null,
      "owner_response_date": null
    }
  ],
  "next_page_token": "gt:CjEIARIpCgoAP7_LADXn ____ EhA4jslEyt_rOYahKTQAAAAAGgn92QACYJiwtg4YACIA:10",
  "has_more": true,
  "search_metadata": {
    "search_url": null,
    "datetime": "2026-10-20T14:35:40.112233",
    "total_time_taken": null
  }
}
```

```json
{
  "type": "https://api.stayapi.com/errors/no-results",
  "title": "No Results",
  "status": 404,
  "detail": "No places found for query: Xyzzy Hotel Nowhere",
  "instance": "/v1/google_reviews/search-and-review",
  "provider": "google_reviews",
  "error_code": "NO_RESULTS",
  "correlation_id": "47826aa0-b877-489a-8ff2-0282169bb76b",
  "query": "Xyzzy Hotel Nowhere",
  "location": null
}
```
