Skip to content
Guest reviews

Expedia reviews

Expedia guest reviews for one property.

POST/v1/ota/expedia/reviews
2 credits

One POST, no cookies, no browser. Ratings are 0-10 parsed from the upstream score label; the "Verified review" disclaimer and "Liked: …" themes ride in labels, exactly as Expedia publishes them. Page by start_index += size.

Request

POSThttps://api.scrapercompany.com/v1/ota/expedia/reviews

Authenticate 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/expedia/search.

  • sizeintegerdefault 10min 1, max 25

    Reviews per page.

  • start_indexintegerdefault 0min 0

    Row to start from; page by start_index += size.

  • marketstringdefault US

    Point-of-sale; also selects the currency.

    One ofCAUS

Example request

curl -X POST "https://api.scrapercompany.com/v1/ota/expedia/reviews" \
  -H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "property_id": "12570"
  }'

Response

200 — One page of Expedia guest reviews with the property's replies. Metered responses carry x-credits-charged and x-credits-remaining headers (see credit headers).

200 response
{
  "source": "expedia",
  "property_id": "12570",
  "total": 3324,
  "offset": 0,
  "limit": 10,
  "rating_scale": 10,
  "count": 2,
  "reviews": [
    {
      "source": "expedia",
      "review_id": "6aa5f679b71e666498336ee6",
      "rating": 10,
      "text": "Great hotel and location!",
      "date": "2029-02-04",
      "author": "Rebecca",
      "management_reply": "Dear Valued Guest, it's wonderful to receive your outstanding rating of Hilton Chicago!",
      "language": "en_CA",
      "helpful_votes": 0,
      "labels": [
        "Liked: Cleanliness, staff & service, amenities, property conditions & facilities",
        "Verified review"
      ],
      "stay_info": "Stayed 4 nights in Sep 2026"
    },
    {
      "source": "expedia",
      "review_id": "f2b3a1d0c5e266498336ee7",
      "rating": 10,
      "text": "Beautiful historic property, comfortable beds.",
      "date": "2029-01-11",
      "author": "Jazmin",
      "language": "en_US",
      "labels": [
        "Liked: Cleanliness",
        "Verified review"
      ],
      "stay_info": "Stayed 3 nights in Aug 2026"
    }
  ],
  "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": 19859,
  "elapsed_s": 0.471,
  "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.

StatusMeaningRetry?
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 is a list of problems for schema errors, or a string for semantic checks performed by the endpoint.

{"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

  1. Export your key: export SCRAPERCOMPANY_API_KEY=sk_... (no key yet? request access).
  2. Copy the cURL example above and run it in a terminal.
  3. Or open the interactive playground on api.scrapercompany.com, paste your key and pick this endpoint.

Credits

2 credits per successful call. Failed, blocked and empty results are free. Credit metering is in beta and does not block requests yet.