Skip to content
Docs

OTA rate comparison

Rate parity in one call.One call fans out to Booking.com, Hotels.com, Agoda and Expedia for the same stay and returns each source with its status, plus the minimum and spread when the prices are comparable. A blocked source does not sink the others: you get a partial answer you can see.
Look up by
The identifier of each OTA you want compared
Coverage
Booking.com, Hotels.com, Agoda and Expedia
Cost
30 credits a call; failed and empty calls are free
Endpoints
2 endpoints
  • Prices

Endpoints

Example

OTA compare, with POST /v1/ota/compare. Set SCRAPERCOMPANY_API_KEY to your key and run it; the full parameter list is in the API reference.

curl -X POST "https://api.scrapercompany.com/v1/ota/compare" \
  -H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "check_in": "2026-12-25",
    "nights": 1,
    "currency": "USD",
    "booking_pagename": "moxy-boston-downtown",
    "booking_country": "us",
    "hotels_property_id": "38766175",
    "hotels_market": "US",
    "agoda_property_id": "8795952",
    "expedia_property_id": "38766175",
    "expedia_market": "US"
  }'
200 response
{
  "search_parameters": {
    "engine": "ota_compare",
    "check_in_date": "2026-12-20",
    "check_out_date": "2026-12-21",
    "adults": 2,
    "currency": "USD",
    "booking_pagename": "moxy-boston-downtown",
    "agoda_property_id": "8795952"
  },
  "comparison": {
    "status": "comparable",
    "comparable": true,
    "identifiers": {
      "booking": "moxy-boston-downtown",
      "agoda": "8795952"
    },
    "lowest_price": 285,
    "lowest_source": "booking",
    "spread": 47,
    "prices": {
      "booking": 285,
      "agoda": 332
    },
    "currencies": {
      "booking": "USD",
      "agoda": "USD"
    },
    "price_provenance": {},
    "reason": "Sources price on different bases (booking_display_average, total_including_taxes_and_fees); the headline minimum mixes them. Compare within `by_price_basis`.",
    "price_basis_consistent": false,
    "by_price_basis": {
      "booking_display_average": {
        "sources": [
          "booking"
        ],
        "currencies": [
          "USD"
        ],
        "lowest_source": "booking",
        "lowest_price_per_night": 285
      },
      "total_including_taxes_and_fees": {
        "sources": [
          "agoda"
        ],
        "currencies": [
          "USD"
        ],
        "lowest_source": "agoda",
        "lowest_price_per_night": 332
      }
    }
  },
  "sources": {
    "booking": {
      "status": "ok",
      "price_per_night": 285,
      "currency": "USD",
      "availability": "available",
      "is_soldout": false,
      "price_basis": "booking_display_average"
    },
    "agoda": {
      "status": "ok",
      "price_per_night": 332,
      "currency": "USD",
      "availability": "available",
      "is_soldout": false,
      "price_basis": "total_including_taxes_and_fees"
    },
    "expedia": {
      "status": "no_price",
      "currency": "USD",
      "availability": "min_stay",
      "is_soldout": false,
      "availability_reason": "This property requires you to stay at least 7 nights.",
      "min_length_of_stay": 7
    },
    "hotels": {
      "status": "error",
      "error": "ExpediaBlocked: HTTP 429",
      "availability": "blocked",
      "is_soldout": false,
      "availability_reason": "ExpediaBlocked: HTTP 429"
    }
  },
  "availability": {
    "booking": "available",
    "agoda": "available",
    "expedia": "min_stay",
    "hotels": "blocked"
  },
  "meta": {
    "requested": 4,
    "ok": 2,
    "elapsed_s": 15.89
  }
}

Try it on your key

Good to know

  • comparison.comparable is false for a single priced source, mixed currencies or mixed price bases; minima and spreads are then left out rather than guessed.
  • GET /v1/ota/sources lists what each OTA can answer and what it costs, for free.

Guides

Many sellers for one hotel at once, and forward calendars of nightly rates.

Or browse every data source.

Questions about this page?

Send the page link and your question, and the team will answer.

Email support