Browse documentation
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 Maps, 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 (about 8 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 when the name is ambiguous (e.g. "36.1069,-115.1728")
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": 143717,
  "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",
      "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": "CjEIARIpCgoAP7_LADXn____EhA4jslEyt_rOYahKTQAAAAAGgn92QACYJiwtg4YACIA",
  "has_more": true,
  "search_metadata": {
    "search_url": null,
    "datetime": "2026-09-16T17:56:21.765446",
    "total_time_taken": null,
    "provider": 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. Each has rating, text (null for star-only reviews), date and iso_date, reviewer, likes, owner_response and reviewer-attached photos.
  • next_page_token / has_more: Cursor for the next page. Send it with data_id to the Google Reviews endpoint; pagination is not available on this endpoint.

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 Maps 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 and next_page_token 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
502 EXTRACTION_FAILED A place matched but no usable data_id could be read from it
502 UPSTREAM_ERROR Error fetching data from Google
504 UPSTREAM_TIMEOUT Google did not answer in time. Retry the request

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 Hotels Info or 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": 143717,
  "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",
      "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": "CjEIARIpCgoAP7_LADXn____EhA4jslEyt_rOYahKTQAAAAAGgn92QACYJiwtg4YACIA",
  "has_more": true,
  "search_metadata": {
    "search_url": null,
    "datetime": "2026-09-16T17:56:21.765446",
    "total_time_taken": null,
    "provider": null
  }
}