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.

Copy for your AI agent

Paste into Claude, ChatGPT, Cursor or Copilot — endpoint, parameters, response fields and a curl example in Markdown.

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 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 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.

Related Endpoints

Request
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
{
  "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
  }
}
Browse documentation