Hotels.com reviews
Hotels.com guest reviews via the site's own registered reviews query.
/v1/ota/hotels/reviewsThe same registered query Expedia answers, POSTed to the Hotels.com host with the Hotels.com point-of-sale. One POST, no browser; page by start_index += size.
Request
https://api.scrapercompany.com/v1/ota/hotels/reviewsAuthenticate with your API key in the x-api-key header (see Authentication).
Body
JSON object. Unknown fields are rejected with 422.
- property_idstringrequiredmin length 1, pattern ^\d+$
Numeric id returned by
POST /v1/ota/hotels/search, or fromhotels.com/h38766175.Hotel-Information(not the legacyho…number). - sizeintegerdefault
10min 1, max 25Reviews per page.
- start_indexintegerdefault
0min 0Row to start from; page by
start_index += size. - marketstringdefault
USPoint-of-sale; also selects the currency.
One of
AUCADEEUFRGBIEITNLNZUS
Example request
curl -X POST "https://api.scrapercompany.com/v1/ota/hotels/reviews" \
-H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"property_id": "12570"
}'Response
200 — Google Hotels guest reviews, aggregated by provider with each row's own rating scale. Metered responses carry x-credits-charged and x-credits-remaining headers (see credit headers).
{
"source": "google",
"property_id": "ChUIoben2Mv6-CYaCi9tLzA3czVwbjQQAQ",
"offset": 0,
"limit": 10,
"next_page_token": "CjEIARIpCgoAP7_LACnN____EhAgaDet6skqGaNbIqMAAAAAGgn92PwCYGHGd2UYACIA:10",
"count": 3,
"reviews": [
{
"source": "google",
"review_id": "Ci9DQUlRQUNvZENodHljRjlvT25SZmJHOVBVMHh0VTJkSlNsa3lMVmMxZVMxMWVtYxAB",
"rating": 3,
"text": "We stayed here for one night during a trip to Chicago, and overall, the hotel served its purpose, but I don't think we'd book here again.",
"date": "a month ago",
"author": "Amber S",
"management_reply": "Dear Amber, thank you for choosing us for your stay.",
"provider": "Google"
},
{
"source": "google",
"review_id": "ChdDSUhNMG9nS0VQLXBpdUc4aE5peXZ3RRAB",
"rating": 4,
"text": "It is a magnificent old building with spacious rooms.",
"date": "4 weeks ago",
"author": "adflanagan13",
"url": "https://www.tripadvisor.com/ShowUserReviews-g35805-d87590-r1075812531",
"provider": "Tripadvisor"
}
],
"provenance": {
"schema_version": 1,
"observation_id": "rateobs_0123456789abcdef0123456789abcdef",
"collection_id": "ratecol_0123456789abcdef0123456789abcdef",
"observed_at": "2026-08-07T01:23:45.678Z",
"source": "google_hotels_calendar",
"source_kind": "calendar",
"collector": "scrapingme.google_calendar",
"source_property_id": "ChUIoben2Mv6-CYaCi9tLzA3czVwbjQQAQ",
"requested_market": "US",
"requested_currency": "USD",
"returned_currency": "USD",
"egress_mode": "direct",
"price_basis": "room_base_before_taxes_and_fees",
"derivation": "normalized_upstream"
},
"wire_bytes": 40175,
"elapsed_s": 0.388,
"egress_mode": "direct",
"collection_id": "ratecol_0123456789abcdef0123456789abcdef",
"observed_at": "2026-08-07T01:23:45.678Z",
"warnings": []
}Errors
Errors return a JSON body with a detail field. Failed requests are not charged. See Errors for the full list and retry advice.
| Status | Meaning | Retry? |
|---|---|---|
401Unauthorized | Missing or invalid API key. {"detail":"missing or invalid API key"} | No, fix the request |
402Payment Required | Not enough credits for this request. Only returned once credit enforcement is switched on; during the beta metering runs in shadow mode and never blocks. {"detail":"insufficient credits: this request costs 5, 0 available. Credits renew 2026-11-01."} | No, fix the request |
404Not Found | The property, stay, job or record was not found. {"detail":"job not found"} | No, fix the request |
422Unprocessable Content | Request validation failed. {"detail":[{"loc":["body","name"],"msg":"Field required","type":"missing"}]} | No, fix the request |
429Too Many Requests | Too many requests: the key's requests-per-minute limit was exceeded, or (once credit enforcement is on) the plan's concurrent-request limit. No rate-limit or Retry-After headers are sent; back off and retry. {"detail":"rate limit 60/min exceeded"} | Yes, with backoff |
502Bad Gateway | The upstream source failed, blocked the request or returned an unusable answer. Safe to retry later; failed requests are not charged. {"detail":"RuntimeError"} | Yes, with backoff |
503Service Unavailable | Temporarily unavailable: a dependency of this endpoint is down, or the upstream source changed its contract. Retry later. {"detail":"database unavailable: OperationalError"} | Yes, with backoff |
Try it
- Export your key:
export SCRAPERCOMPANY_API_KEY=sk_...(no key yet? request access). - Copy the cURL example above and run it in a terminal.
- Or open the interactive playground on api.scrapercompany.com, paste your key and pick this endpoint.