Identify your sources: direct hotel APIs (Amadeus, Booking.com Demand API, Expedia Partner Solutions, Hotelbeds), channel managers, and direct chain APIs each return overlapping inventory with potentially different prices.
Match properties across sources using a stable identifier — most aggregators provide a property_id or chain_id; map these to a canonical internal id to avoid showing the same hotel twice with different prices.
Rate parity agreements theoretically require hotels to offer the same rate everywhere, but in practice member rates, package rates, and opaque rates create legitimate price differences — label rate types clearly so users understand why prices differ.
Always fetch live availability rather than using cached room counts; availability changes in seconds during peak periods and a successful display does not guarantee the rate is still bookable.
Surface cancellation policy, meal plan (room only vs breakfast included), and non-refundable flags prominently alongside the rate — a lower rate that is non-refundable is not always cheaper in total expected cost.
When two sources return the same room at different prices, present the lower price with the source attribution; do not silently drop the higher-priced result as the booking conditions may differ materially.
Known gotchas
Hotelbeds and similar wholesalers have contractual restrictions on where their rates can be displayed — verify your distribution agreement before surfacing wholesale rates in a consumer-facing channel.
Taxes and fees (resort fees, city taxes, VAT) are handled inconsistently across APIs: some include them in total_price, others show them separately or not at all — always normalize to a total-inclusive price for comparison.
Availability responses may return 'available' even for properties with a soft block; the actual confirmation may fail at booking time — implement graceful error handling and a retry-with-alternative-source flow.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp