Evidence layer

Dataset Definition: 2026 Airbnb Pricing Benchmark

What one row is

One row is one lead time bucket. It is not one listing, not one night, and not one reservation. A row answers the question: across everything we observed at this distance from arrival, what did prices do and when did guests book?

The eight rows partition the whole measurement window with no gaps and no overlaps. Every observation and every reservation falls into exactly one row. The shares therefore sum to 100 percent, which is asserted by an automated test rather than assumed.

The two underlying record types

A row aggregates two different kinds of source record, and the row carries columns from both.

A price observation is one capture of one listing's asking price for one future stay date at one moment in time. The same listing and stay date is observed many times as the date approaches, which is what makes a lead time curve possible at all. Uniqueness is (listing, stay date, capture time). There is no channel dimension on this record, which is why channel price differences cannot be derived from it.

A reservation is one confirmed booking with a creation timestamp, an arrival date, and a night count. Its lead time is the whole number of days between creation and arrival.

Population and boundaries

  • The price series is drawn from professionally managed listings priced through a revenue management system, denominated in a single currency, captured over a rolling forward window.
  • The booking series is drawn from confirmed reservations created inside the measurement window on the same managed portfolio.
  • The priced cohort is a strict subset of the booked cohort: every listing in the price series also appears in the booking series. The two cohorts are different sizes, so a column drawn from one series must never be read as if it came from the other.
  • The dataset describes one professionally managed portfolio. It is not a census of Airbnb and must not be read as a market average.

Bucket boundaries

Buckets are closed on both ends and expressed in whole days before arrival.

BucketDays before arrival
0-30, 1, 2, 3
4-74 through 7
8-148 through 14
15-2115 through 21
22-3522 through 35
36-6036 through 60
61-9061 through 90
90+91 and above

The 90+ bucket is the baseline for every price comparison.

What is deliberately absent

  • No listing identifier, account identifier, internal code, or property name.
  • No absolute price in any currency. Every price figure is a dimensionless ratio.
  • No absolute counts of listings, reservations, nights, or observations. Those describe the size of a managed portfolio rather than the behaviour being measured, and the finding does not rest on them.
  • No channel breakdown. The source record carries no channel dimension.
  • No geographic or per market breakdown.

Provenance

Emitted from stored counts and sums by the pipeline that produced the measurement. Percentages are computed at build time and never stored, so adding a group later cannot silently restate a published share. See the methodology for the currency normalization rule, the cohort matching, the publication gate, and the stated limitations.

Querying it directly

The same aggregate is served as JSON, read only and without a key, at:

https://pooekwiihfhdctdoevpn.supabase.co/functions/v1/market-benchmark

It answers GET with application/json, permissive read only CORS, and a one hour cache hint. The payload carries the eight rows, the headline totals, links back to this page and the methodology, the licence, and the stated limits, so a consumer that never loads a page still receives the scope conditions along with the numbers.

That address is the endpoint. A shorter /api/ path on this domain is not available: the site is served as a static single page app with no server side route layer, so any such path returns the application shell with a 200 status rather than JSON. Publishing it would hand a machine a false success, which is worse than having no short path at all.