# Expedia API for hotel rates, rooms and reviews

> Look a hotel up by name, then read what Expedia shows a guest for one stay: every room type and rate plan with its total, nightly price and cancellation terms, and the guest reviews with the property’s replies.

Canonical page: https://scrapercompany.com/expedia-api. Endpoints and prices checked against the API on 2026-10-11.

Revenue teams check Expedia to see how a hotel sells through Expedia Group: which room types are open, how each rate plan is priced, whether it is refundable, and whether the guest pays now or at the property. Expedia Group’s own APIs are for approved partners that sell or link to its inventory. This API reads the same answer an Expedia.com visitor gets: send a property id and a stay, and get back every room type and rate plan, or only the headline price.

Expedia shows two prices for each offer, and which one leads depends on the market: the US site leads with the stay total including taxes and fees, the Canadian site with the nightly price. The API returns both figures for every offer, plus the taxes and fees between them, marked as derived. Prices come from expedia.com in USD or expedia.ca in CAD. There is no price calendar, so each call prices one stay of up to 28 nights, and a stay Expedia will not sell comes back with Expedia’s reason, such as a minimum stay.

## What you get

- `recommended_match.property_id`: Expedia’s numeric hotel id from a name and city search, with a confidence level
- `property.total, price_per_night`: the headline stay total and nightly price for the stay you asked for
- `rooms[].offers[]`: one row per rate plan and payment model, with total, nightly and taxes_and_fees
- `refundable, cancellation_text`: whether the plan can be cancelled for free, and Expedia’s wording
- `payment_model, hotel_collect`: pay now or pay later, and whether the property collects the payment
- `strikeout_price`: the crossed-out price when Expedia shows a discount
- `availability`: available, sold out or a minimum stay, so an empty answer is never a silent gap
- `reviews[]`: rating out of 10, text, date, length of stay, labels such as Verified review, and the property’s reply

## Endpoints and price per call

| Endpoint | Method and path | What it returns | Credits per successful call | Price per call |
| --- | --- | --- | --- | --- |
| [Hotel search](https://scrapercompany.com/docs/reference/expedia-search) | `POST /v1/ota/expedia/search` | Expedia property id for a hotel name and city, with match confidence | 2 credits | $0.0020 on Starter, $0.0012 on Growth, $0.0008 on Scale |
| [Rooms and rates](https://scrapercompany.com/docs/reference/expedia-rates) | `POST /v1/ota/expedia` | Every room type and rate plan for one stay, or the headline price only | 8 credits | $0.0078 on Starter, $0.0048 on Growth, $0.0032 on Scale |
| [Reviews](https://scrapercompany.com/docs/reference/expedia-reviews) | `POST /v1/ota/expedia/reviews` | Guest reviews, newest first, up to 25 per page | 2 credits | $0.0020 on Starter, $0.0012 on Growth, $0.0008 on Scale |

Pricing: Free $0/month for 1,000 credits; Starter $49/month for 50,000 credits; Growth $149/month for 250,000 credits; Scale $399/month for 1,000,000 credits. Failed requests (4xx or 5xx) and empty results cost 0 credits. Free during the beta. https://scrapercompany.com/pricing

## Example

`POST /v1/ota/expedia`, 8 credits per successful call.

```bash
curl -X POST "https://api.scrapercompany.com/v1/ota/expedia" \
  -H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "property_id": "12570",
    "check_in": "2026-12-10",
    "nights": 1,
    "adults": 2,
    "market": "US"
  }'
```

Response (trimmed):

```json
{
  "search_parameters": {
    "engine": "expedia_property",
    "property_id": "12570",
    "check_in_date": "2029-04-23",
    "check_out_date": "2029-04-24",
    "adults": 2,
    "market": "US",
    "currency": "USD",
    "rooms": true
  },
  "property": {
    "property_id": "12570",
    "total": 475,
    "price_per_night": 374,
    "basis": "sticky_bar",
    "total_text": "$475",
    "nightly_text": "$374 nightly",
    "currency": "USD",
    "currency_verified": true,
    "available": true,
    "availability": "available",
    "is_soldout": false,
    "cheapest_total": 475,
    "provenance": {
      "schema_version": 1,
      "observation_id": "rateobs_0123456789abcdef0123456789abcdef",
      "collection_id": "ratecol_0123456789abcdef0123456789abcdef",
      "observed_at": "2026-08-07T01:23:45.678Z",
      "source": "expedia_com",
      "source_kind": "ota_offer",
      "collector": "scrapingme.ota.expedia",
      "source_property_id": "12570",
      "requested_market": "US",
      "requested_currency": "USD",
      "returned_currency": "USD",
      "egress_mode": "direct",
      "price_basis": "stay_headline",
      "derivation": "upstream"
    }
  },
  "rooms": [
    {
      "unit_id": "403873",
      "name": "Room, 1 King Bed",
      "cheapest_total": 635,
      "offers": [
        {
          "plan_id": "266071241",
          "room_type_id": "403873",
          "total": 635,
          "nightly": 509,
          "taxes_and_fees": 126,
          "currency": "USD",
          "total_text": "$635 total",
          "nightly_text": "$509 nightly",
          "taxes_and_fees_included": true,
          "payment_model": "PAY_NOW",
          "hotel_collect": false,
          "member_only": false,
          "refundable": false,
          "cancellation_text": "Non-Refundable",
          "extras_text": "No extras",
          "strikeout_text": "$745 total",
          "strikeout_price": 745,
          "strikeout_basis": "stay_total",
          "inventory_type": "MERCHANT",
          "business_model": "EXPEDIA_COLLECT",
          "messages": [],
          "provenance": {
            "schema_version": 1,
            "observation_id": "rateobs_0123456789abcdef0123456789abcdef",
            "collection_id": "ratecol_0123456789abcdef0123456789abcdef",
            "observed_at": "2026-08-07T01:23:45.678Z",
            "source": "expedia_com",
            "source_kind": "ota_rate_plan",
            "collector": "scrapingme.ota.expedia",
            "source_property_id": "12570",
            "requested_market": "US",
            "requested_currency": "USD",
            "returned_currency": "USD",
            "egress_mode": "direct",
            "price_basis": "stay_total_including_taxes_and_fees",
            "derivation": "upstream",
            "upstream_rate_id": "266071241"
          },
          "taxes_and_fees_provenance": {
            "schema_version": 1,
            "observation_id": "rateobs_0123456789abcdef0123456789abcdef",
            "collection_id": "ratecol_0123456789abcdef0123456789abcdef",
            "observed_at": "2026-08-07T01:23:45.678Z",
            "source": "expedia_com",
            "source_kind": "ota_rate_plan",
            "collector": "scrapingme.ota.expedia",
            "source_property_id": "12570",
            "requested_market": "US",
            "requested_currency": "USD",
            "returned_currency": "USD",
            "egress_mode": "direct",
            "price_basis": "taxes_and_fees_combined",
            "derivation": "total_minus_nightly_times_nights",
            "upstream_rate_id": "266071241"
          }
        },
        {
          "plan_id": "266071239",
          "room_type_id": "403873",
          "total": 742,
          "nightly": 599,
          "taxes_and_fees": 143,
          "currency": "USD",
          "total_text": "$742 total",
          "nightly_text": "$599 nightly",
          "taxes_and_fees_included": true,
          "payment_model": "PAY_LATER",
          "hotel_collect": true,
          "member_only": false,
          "refundable": true,
          "cancellation_text": "Fully refundable before Nov 14",
          "extras_text": "No extras",
          "strikeout_text": "",
          "inventory_type": "DIRECT_AGENCY",
          "business_model": "HOTEL_COLLECT",
          "messages": [],
          "provenance": {
            "schema_version": 1,
            "observation_id": "rateobs_0123456789abcdef0123456789abcdef",
            "collection_id": "ratecol_0123456789abcdef0123456789abcdef",
            "observed_at": "2026-08-07T01:23:45.678Z",
            "source": "expedia_com",
            "source_kind": "ota_rate_plan",
            "collector": "scrapingme.ota.expedia",
            "source_property_id": "12570",
            "requested_market": "US",
            "requested_currency": "USD",
            "returned_currency": "USD",
            "egress_mode": "direct",
            "price_basis": "stay_total_including_taxes_and_fees",
            "derivation": "upstream",
            "upstream_rate_id": "266071239"
          }
        }
      ]
    }
  ],
  "meta": {
    "source": "expedia",
    "nights": 1,
    "wire_bytes": 181597,
    "elapsed_s": 0.62,
    "room_types": 37,
    "offers": 149,
    "egress_mode": "direct",
    "comparable_across_markets": false,
    "collection_id": "ratecol_0123456789abcdef0123456789abcdef",
    "observed_at": "2026-08-07T01:23:45.678Z"
  }
}
```

## FAQ

### Does Expedia have a public API?

Expedia Group has partner APIs, but access is by application. Rapid and the Travel Redirect API are for businesses that sell or advertise its travel inventory, and its connectivity APIs are for properties and their technology providers. ScraperCompany is independent of Expedia Group: this API reads the prices, rooms and reviews the public Expedia site shows.

### How do I find a hotel’s Expedia property id?

Send the hotel name and city to the hotel search endpoint and store recommended_match.property_id. You can also read it from the hotel’s Expedia URL: for expedia.com/Chicago-Hotels-Hilton-Chicago.h12570.Hotel-Information it is 12570. Older properties have a different id on Hotels.com, so do not reuse one brand’s id for the other.

### Which Expedia markets and currencies can I price?

The US site (expedia.com, USD) and the Canadian site (expedia.ca, CAD), chosen with market. The market sets the currency; there is no separate currency field. The two sites lead with different figures, so compare prices within one market.

### Are taxes and fees included in Expedia prices?

Each offer returns Expedia’s stay total with taxes and fees and its nightly price before taxes. The API also returns taxes_and_fees, worked out as the total minus the nightly price times the nights, and its provenance says it is derived. Expedia does not split taxes from fees on these pages, so they come back as one figure.

### What happens when a stay cannot be booked on Expedia?

The response says available: false, and availability says why: sold out, or a minimum stay with the number of nights required. Set retry_min_stay to price that minimum stay as well; it comes back as min_stay_quote and never replaces the stay you asked for.

### Do failed requests cost credits?

No. A failed or blocked call (any 4xx or 5xx response) costs 0 credits, and so does a search page that comes back empty. You pay only for successful results.

### How do I get an API key?

Create an account on the sign-up page. Public sign-up is invite-only during the beta, so join the waitlist there and we will email you when your account is ready. The Free plan includes 1,000 credits a month, and the API is free while it is in beta. You create and rotate keys yourself in the dashboard.

## Read next

- [Expedia and Vrbo guide](https://scrapercompany.com/docs/guides/expedia-vrbo)
- [Compare OTA rates guide](https://scrapercompany.com/docs/guides/compare-ota-rates)
- [Hotels.com API](https://scrapercompany.com/hotels-com-api)
- [All APIs](https://scrapercompany.com/apis.md)
