---
title: "Inventory vs Availability in Travel Distribution"
description: "Understand the difference between hotel inventory and bookable availability, how restrictions affect search results, and why metasearch systems must model both separately."
slug: "inventory-vs-availability"
translationKey: "learn-inventory-vs-availability"
locale: "en"
type: "guide"
category: "distribution"
tags: ["inventory","availability","hotel","ari","distribution","metasearch"]
publishedAt: "2026-09-20"
updatedAt: "2026-09-20"
reviewedAt: "2026-09-20"
sources:
  - title: "Booking.com Rates & Availability API Overview"
    url: "https://developers.booking.com/connectivity/docs/ari"
  - title: "Booking.com Retrieve inventory and rate details"
    url: "https://developers.booking.com/connectivity/docs/b_xml-roomrateavailability"
  - title: "Google Hotels Pricing Delivery Modes"
    url: "https://developers.google.com/hotels/hotel-prices/dev-guide/delivery-mode"
---
Inventory describes what a supplier can potentially sell; availability describes what can actually be booked for a specific search context. Treating them as the same field creates false availability, sold-out clicks and inconsistent pricing behavior.

## Inventory and availability answer different questions

Inventory answers **what products exist and how much stock is configured**. Availability answers **whether a specific product is sellable for this traveler, date range and rule set**. Booking.com documents the distinction explicitly: a room can exist in inventory but be unavailable because occupancy, date, closure or restriction conditions exclude the search.

A metasearch engine therefore should never reduce both concepts to one boolean such as `isAvailable`.

## Availability is contextual

Availability is calculated against search inputs such as check-in, check-out, occupancy, room count and sometimes market or membership conditions. A room that is bookable for two adults may not be bookable for four. A rate may be open for a one-night stay but blocked by a minimum-stay restriction for another itinerary.

The important architectural consequence is that availability belongs close to the **offer** or **room-rate-date** context, not only to the hotel entity.

## Restrictions are part of availability

Operational hotel distribution commonly includes restrictions such as:

- closed/open state,
- minimum or maximum length of stay,
- closed to arrival,
- closed to departure,
- occupancy limits,
- advance-purchase rules,
- sell limits,
- rate-plan eligibility.

Ignoring these fields may produce a technically valid price that cannot actually be booked.

## Why metasearch sees stale availability

A common failure pattern is a timing gap between supplier state and the cached state used for comparison. A room sells out upstream, but a cached offer remains visible for several minutes. The user clicks, reaches the provider and sees “no availability.”

This is not just a cache problem. It is a synchronization problem across inventory, restrictions, pricing and search context.

## Model inventory separately from offers

A robust internal model normally separates:

1. **Property** — the hotel identity.
2. **Room type** — the physical or commercial room definition.
3. **Rate plan** — cancellation, meal and commercial conditions.
4. **Inventory state** — quantity/closure by date.
5. **Offer** — a search-context-specific bookable result.
6. **Availability evidence** — timestamp and source proving when the offer was last validated.

That separation makes debugging much easier when “the room exists but cannot be booked.”

## Availability should have freshness metadata

For every availability decision, store when it was observed or computed. Useful fields include:

- `availability_checked_at`,
- supplier response timestamp,
- source/provider,
- query signature,
- cache age,
- timeout/fallback flag.

Without freshness metadata, an unavailable click looks identical to a business-rule rejection.

## Useful operational KPIs

Track more than “API success rate.” Better metrics include:

- searches with at least one available offer,
- post-click sold-out rate,
- stale availability rate,
- availability response latency,
- cache age at click time,
- room/rate closure mismatch,
- provider-specific unavailable-after-click rate.

These KPIs connect distribution quality to user experience.

## Metasearch takeaway

Inventory is the supply model; availability is the result of applying dates, occupancy, restrictions and current stock to that model. Metasearch systems that keep this distinction explicit are better at reducing false-positive offers, explaining sold-out clicks and choosing the right cache strategy.

## Make the distinction explicit with a state machine

A room/date can move through several states:

```text
CONFIGURED
   |
inventory > 0
   v
SELLABLE_STOCK
   |
rate open + restrictions pass
   v
SEARCH_ELIGIBLE
   |
occupancy / itinerary valid
   v
AVAILABLE_OFFER
   |
booking
   v
INVENTORY_DECREMENT
```

Each transition can fail for a different reason. A single “no availability” reason destroys diagnostic value.

## Why store availability evidence?

Attach evidence to the offer:

- checked_at,
- provider,
- inventory snapshot/reference,
- restriction result,
- occupancy context,
- fallback flag.

This makes a sold-out click explainable after the fact.

## Common failure modes

- stale offer after inventory reaches zero,
- rate open while room is closed,
- minimum-stay restriction not applied,
- child occupancy normalized incorrectly,
- delayed stock update after booking,
- provider/date timezone mismatch.

## KPIs

- searches with an available offer,
- unavailable-after-click,
- sold-out rate by cache-age bucket,
- inventory update latency,
- restriction-rejection distribution,
- booking-to-inventory-update delay.

Availability is not a boolean; it is a **contextual decision backed by evidence and timestamp**.
