Leaders Insights
Leaders Insights

Stay at the top of your field, a little every day.

DomainsMarketingDataFinanceAI
ResourcesLearnTestToolsBlogGlossary
© 2026 Leaders Insights — All rights reserved.
Tracks/Data in travel and hospitality/Data in travel and hospitality/Reading the booking curve: how travel demand data actually behaves
1/4+150 XP

Data in travel and hospitality

1Reading the booking curve: how travel demand data actually behaves+1502Dynamic pricing and demand forecasting for perishable inventory+1503Turning loyalty data into personalized guest experiences+1504Channel and distribution analytics: winning the OTA-versus-direct war+150

Reading the booking curve: how travel demand data actually behaves

# Reading the booking curve: how travel demand data actually behaves

A 180-room hotel in Barcelona is 60 days out from a Saturday in June. It has sold 22 rooms. Panic? No. Its historical curve says that by 60 days out, this specific Saturday is usually only 12 percent booked, and it fills to 95 percent in the final three weeks. The revenue manager holds rates.

That single decision, calm in the face of an empty-looking calendar, is only possible because travel demand data behaves in a very particular way. Learn how the curve behaves and most of hospitality analytics starts to make sense.

The booking curve, defined

The booking curve (also called booking pace) is the cumulative count of reservations for a single future date, plotted against how many days remain until that date.

The x-axis is "days to arrival" (often written DTA), counting down. The y-axis is rooms sold, or occupancy percent, or revenue.

Read one date at a time. Each future Saturday, each Tuesday, each holiday has its own curve. That is the first mental shift: you are not tracking "sales this week." You are tracking the fill trajectory of hundreds of individual future dates, each aging independently.

What a real curve looks like

A typical curve is not a straight line. It usually looks like a slow ramp that steepens near the end:

  • 90 to 45 days out: a trickle. Early leisure bookers, some group blocks, advance-purchase deals.
  • 45 to 14 days out: acceleration. Leisure demand builds.
  • 14 to 0 days out: the steep part. Business travelers, last-minute leisure, and flexible-rate bookings pile in.
  • The shape shifts by segment. A resort in the Maldives books far earlier (long-haul leisure plans months ahead). An airport hotel near a convention center may stay flat until a corporate rush 10 days out. Same axis, completely different curves.

    Why travel data is not retail data

    If you come from retail, ecommerce, or CPG, your instincts will mislead you here. Four properties make travel demand data different.

    1. It is perishable

    An unsold room on Tuesday night is gone at midnight. You cannot inventory it, discount it next week, or ship it to another store. Economists call this a perishable asset: airline seats, hotel nights, cruise cabins, and rental cars all expire on a fixed date with zero salvage value.

    This is why pricing gets aggressive as DTA approaches zero. A room worth 200 euros three weeks out may be worth 89 euros at 6pm on the night itself, because 89 beats zero.

    2. It is time-decaying

    The value of a data point depends on when it arrived. A booking made 60 days out tells you something different from a booking made 2 days out.

    Early bookings are signal about baseline demand. Late bookings are signal about pricing power and market tightness. Blending them without respecting DTA throws away most of the information.

    3. It is forward-looking, not backward-looking

    Retail transaction data is mostly a record of what already happened. Travel booking data is a claim on the future. Every reservation on the books today is a promise about a night that has not occurred, and it can still cancel.

    That makes travel data probabilistic. "On the books" is not "in the bank."

    4. It is reference-dependent

    A number means nothing without its historical curve. "22 rooms sold" is meaningless. "22 rooms sold when we are normally at 12 sold by this point" is a decision. Every observation must be compared to pace: the same date last year, the same day-of-week pattern, the same lead-time position.

    The industry standard reference framework comes from STR (part of CoStar), whose metrics like occupancy, ADR, and RevPAR anchor most benchmarking. STR publishes an accessible glossary of hospitality performance terms worth bookmarking.

    The three numbers everyone tracks

    Three metrics dominate revenue conversations. Define them once and they recur everywhere.

    • ADR (Average Daily Rate): total room revenue divided by rooms sold. The average price of the rooms you actually filled.
    • Occupancy: rooms sold divided by rooms available.
    • RevPAR (Revenue Per Available Room): room revenue divided by rooms available. Equivalently, ADR multiplied by occupancy.

    RevPAR is the one that matters most, because it captures the tradeoff. You can raise ADR by pricing high and selling few rooms, or lift occupancy by discounting. RevPAR asks: given every room you had to sell, how much did you earn? It refuses to let you cheat on one lever while ignoring the other.

    Pace, not level

    Because the data is forward-looking, the useful question is rarely "how full are we?" It is "how are we tracking versus where we should be?"

    This is pickup: the number of net new reservations gained over a defined window (say, the last 7 days) for a given arrival date. Positive pickup ahead of pace means you can push rate. Weak pickup means demand is soft and holding rate risks selling nothing.

    A simple way to see this in data terms:

    python
    # rooms on the books for a single arrival date, snapshotted daily
    # dta = days to arrival, otb = on the books (cumulative rooms sold)
    
    pace = pace_df.sort_values("dta", ascending=False)
    pace["pickup_7d"] = pace["otb"] - pace["otb"].shift(7)  # net new in last 7 snapshots
    
    # compare to the same-weekday historical average curve
    pace["vs_ly"] = pace["otb"] - pace["otb_last_year"]

    Two columns, pickup_7d and vs_ly, drive most day-to-day pricing calls. Notice there is no single "sales" number. Everything is relative to a curve.

    🎬 [VIDEO: "Hotel Revenue Management Explained" — youtube.com/results?search_query=hotel+revenue+management+booking+pace — a short primer on how pace and pickup feed pricing decisions]

    The cancellation problem

    Here is where travel data gets genuinely tricky. A reservation is not final revenue. Cancellations, no-shows, and modifications erode the book.

    So hotels forecast net demand, not gross. Two properties with identical rooms on the books can have very different real positions if one holds mostly non-refundable rates and the other holds flexible ones.

    This drives overbooking: deliberately confirming more reservations than rooms available, sized to expected cancellations. A property expecting 8 percent attrition on a date might sell to 105 or 106 percent, betting the walk-in count stays near zero. Get the estimate wrong and you either leave rooms empty or "walk" guests to another hotel at your cost. The math is pure applied probability, and it lives or dies on clean cancellation data by segment and lead time.

    Knowledge check

    1. Why can a revenue manager stay calm about a Barcelona hotel being only 22 rooms sold at 60 days out from a June Saturday?

    2. What does the x-axis of a booking curve represent?

    3. What is the core mental shift required to correctly read booking curves?

    MULTIPLE CHOICE

    4. Select ALL correct answers about how the shape of a booking curve typically behaves.

    Select all the correct answers.

    MULTIPLE CHOICE

    5. Select ALL correct answers that explain why two properties can share the same booking-curve axis yet show completely different curves.

    Select all the correct answers.

    Why the curve breaks (and what that teaches)

    Curves are stable until they are not. The instructive moments are the breaks.

    Compression events. A major conference, a concert, or a marathon pulls the whole market's curve forward and up. Demand "compresses" into a few dates. Booking pace steepens weeks earlier than normal, and the disciplined move is to raise rates early rather than get caught selling cheap inventory 40 days out.

    Shocks. Weather, strikes, and disruptions can flatten a curve overnight. The 2020 pandemic is the extreme case: booking windows collapsed and lead times shortened dramatically as travelers refused to commit far ahead. Even years later, analysts widely note that booking windows stayed shorter and more volatile than pre-2020 norms. Treat any specific figure here as an estimate, because it varies heavily by market and segment.

    The lesson: a booking curve is a forecast scaffold, not a guarantee. It tells you what is normal so you can detect what is not. The value is in the deviation.

    Putting it together: one decision

    Back to Barcelona. The revenue manager sees 22 rooms on the books, ahead of the usual 12 for this lead time. Pickup over the last 7 days is strong. A festival is in town. The historical curve says the steep part is still coming.

    Conclusion: this date is running hot. Raise rate, tighten the cheapest rate categories, and protect inventory for late-booking business demand. None of that is visible from the raw occupancy number alone. It is only visible against the curve.

    Key Takeaways

    • A booking curve tracks one future date at a time, plotting cumulative reservations against days to arrival. Levels are meaningless without the curve as reference.
    • Travel demand data is perishable, time-decaying, forward-looking, and reference-dependent. Retail instincts about inventory and "sales to date" will mislead you.
    • Pace and pickup beat absolute occupancy. The operative question is "ahead of or behind where this date should be," not "how full am I today."
    • Reservations are probabilistic, not banked. Cancellations, no-shows, and overbooking mean hotels forecast net demand and price against expected attrition.
    • The value lives in the deviation. Curves exist to define normal so you can price the abnormal, whether that is a compression event or a demand shock.

    Next

    Dynamic pricing and demand forecasting for perishable inventory