What it is
On the books (OTB) is what is already reserved for a future period. Pace compares OTB today to OTB at the same point last year, often called same time last year (STLY).
Pace needs history: either saved snapshots or reservation created and cancelled dates so past OTB can be rebuilt.
Why operators track it
- Forward signal. Shows a soft month while there is still time to change price or minimum stay.
- Pricing. Revenue managers and pricing tools react to pace.
- Owner conversations. Explains expected revenue before the month happens.
- Hotel owners commonly read pace alongside RevPAR.
How it is calculated
Pace = OTB for target period as of date X ÷ OTB for the same period last year as of the same point − 1
- OTB = confirmed reservations for stay nights in the target period, as of the snapshot date. Bookings cancelled before the snapshot are excluded.
- Same time last year aligns by days before arrival, or by the same calendar date. Pick one.
- Measure in revenue and in nights. They can tell different stories.
Worked example
Example data The same made-up portfolio is used on every hospitality page: a manager with 120 homes, four of them shown in detail.
As of October 20, 2026, the four example homes had $21,400 and 52 nights on the books for December 2026. On October 20, 2025, they had $17,600 and 44 nights for December 2025. Revenue pace is +21.6% and nights pace is +18.2%.
How to read it
- Ahead is not always good. If pace is ahead because rates are too low, revenue may finish behind.
- Watch the gap to last year's final. It shows how much booking is still expected.
- Cancellations can make pace drop. Read with cancellation rate.
- Holidays move. Align on events when a holiday shifts dates.
- We do not publish a benchmark. Levels vary by market, season, and property type.
Definitional choices and common pitfalls
- Alignment. Same calendar date or same days before arrival.
- Revenue or nights. Show both.
- Portfolio changes. New homes inflate pace. Use same-store homes, or show both.
- Cancellations. OTB as it stood then, or as it stands now after later cancellations.
How different roles use it
| Role | How they use it |
|---|---|
| Revenue manager | Reviews pace weekly by market and month and adjusts pricing. |
| Owner relations | Gives owners a forward view of their home. |
| Finance / trust accounting | Uses OTB for cash forecasts. |
| Product / engineering lead | Stores snapshots or event dates so pace can be rebuilt. |
Questions it answers
- Which future months are behind last year?
- Is pace ahead because of more nights or higher rates?
- Which markets need price changes now?
How to present it in a report
- A pace line per target month: this year vs last year by snapshot date.
- A table of the next few months: OTB, STLY, pace %, last year's final.
- A same-store toggle.
| Target month | Nights OTB | Revenue OTB | STLY revenue | Pace |
|---|---|---|---|---|
| Nov 2026 | 61 | $22,900 | $21,300 | +7.5% |
| Dec 2026 | 52 | $21,400 | $17,600 | +21.6% |
| Jan 2027 | 24 | $8,100 | $9,000 | −10.0% |
Data you need
Fields
| Field | What it means | Example value |
|---|---|---|
| Reservation created date | When booked | 2026-09-02 |
| Cancelled date | When cancelled, if ever | null |
| Stay nights | With rent by night as booked | Dec 18 to Dec 22 |
| Snapshot date | If OTB is saved | 2026-10-20 |
What the raw data looks like
Example data A few rows as they might come out of the source system.
| Snapshot | Target month | Nights OTB | Revenue OTB |
|---|---|---|---|
| 2025-10-20 | 2025-12 | 44 | $17,600 |
| 2026-10-13 | 2026-12 | 47 | $19,000 |
| 2026-10-20 | 2026-12 | 52 | $21,400 |
Where this data usually lives
- Property management system (PMS) holds units, the calendar with block types, reservations, rates, fees, and often owner statements and trust accounting. For example: Guesty, Hostaway, OwnerRez, Track, Streamline, and Escapia. Some larger managers run their own in-house PMS.
- Dynamic pricing tools hold recommended rates, final rates, minimum stay rules, and comparable sets. For example: PriceLabs and Wheelhouse. Some managers build their own.
- Market data providers estimate market occupancy, ADR, and pace. For example: AirDNA, which uses listing data plus partner data (AirDNA), and Key Data, which works with property manager data (Key Data). Their definitions may differ from yours.
The same field can live in more than one system. Agree with the customer which one is the source of truth.
Common data gaps and traps
- Cancelled reservations deleted rather than marked. OTB history cannot be rebuilt.
- Rate changes overwrite. Revenue OTB at an old date needs the price at that time.
- Homes added since last year. Needs management dates.
Related metrics
FAQ
- What does STLY mean?
- Same time last year: the comparison point for pace.
- Can pace be calculated without snapshots?
- Yes, if reservations keep created and cancelled dates and the rent as booked. Snapshots are simpler.
- Do pricing tools show pace?
- Many pricing and market data tools show pace views. Confirm how they align dates before comparing to your own.
For your data teamFormula variants, tables, SQL sketch, and dashboard spec
Formula details
otb(target, asof) = SUM(rent) for nights in target
WHERE created_at <= asof AND (cancelled_at IS NULL OR cancelled_at > asof)
pace = otb(target, asof) / otb(target - 1y, asof - 1y) - 1
Worked example detail
| Snapshot | 2026 OTB | Same date 2025 | Pace |
|---|---|---|---|
| Sep 22 | $12.1k | $11.0k | +10.0% |
| Sep 29 | $14.0k | $12.6k | +11.1% |
| Oct 6 | $16.8k | $14.2k | +18.3% |
| Oct 13 | $19.0k | $15.9k | +19.5% |
| Oct 20 | $21.4k | $17.6k | +21.6% |
Tables and fields
| Table | Fields | Notes |
|---|---|---|
reservations |
reservation_id, unit_id, created_at, cancelled_at, status | |
reservation_nights |
reservation_id, night_date, rent_amount | Rent as booked. |
otb_snapshots |
snapshot_date, unit_id, target_month, nights, revenue | Optional, simplest. |
SQL sketch
WITH otb AS (
SELECT SUM(n.rent_amount) rev, COUNT(*) nights
FROM reservations r JOIN reservation_nights n USING (reservation_id)
WHERE n.night_date >= '2026-12-01' AND n.night_date < '2027-01-01'
AND r.created_at <= '2026-10-20' AND (r.cancelled_at IS NULL OR r.cancelled_at > '2026-10-20')
), stly AS (
SELECT SUM(n.rent_amount) rev, COUNT(*) nights
FROM reservations r JOIN reservation_nights n USING (reservation_id)
WHERE n.night_date >= '2025-12-01' AND n.night_date < '2026-01-01'
AND r.created_at <= '2025-10-20' AND (r.cancelled_at IS NULL OR r.cancelled_at > '2025-10-20')
)
SELECT otb.rev / stly.rev - 1 AS revenue_pace, otb.nights::numeric / stly.nights - 1 AS nights_pace FROM otb, stly;
Build spec
Copy this into a ticket. It lists the grain, inputs, logic, and edge cases.
metric: hospitality.booking_pace
grain: one row per snapshot date per target month (per unit optional)
inputs:
- reservation created and cancelled dates
- rent by night as booked
- management dates
logic:
- otb as of date
- stly = otb for target minus 1 year as of date minus 1 year
- pace = otb / stly - 1, revenue and nights
edge_cases:
- stly = 0: null
- same-store filter
- holiday alignment setting
As a dashboard card
- Pace line chart this year vs last year, with an OTB table for the coming months.
Common mistakes
- Comparing OTB now to last year's final.
- Including homes not managed last year without saying so.
- Using current rates for past OTB.