data·vault_
← Catalog

Airbnb data methodology: how snapshot datasets are built

Published 2026-09-10. Source: Inside Airbnb, CC BY 4.0. Data Vault is not affiliated with Airbnb or Inside Airbnb.

Every figure in a scraped Airbnb dataset traces back to one decision: someone ran a scraper on a given day and saved what the site showed. This page walks through that pipeline. It covers how Inside Airbnb collects its snapshots, what the availability and review columns actually record, where a one-day capture breaks down, and how researchers squeeze bookings estimates out of two snapshots of the same city. All numbers below come from the files shipped with the Airbnb Listings, 6 US Cities pack and its free sample.

How a snapshot gets made

Inside Airbnb runs scrapes on a periodic schedule, one collection per city per cycle. A run walks the public listing pages, captures one row per visible listing, and writes the result to per-city files published under CC BY 4.0. Three properties of that process shape everything downstream:

The 6-city pack takes those per-city snapshot files and normalizes them into one shared 12-column schema. The six cities were captured between 2026-06-22 (Austin) and 2026-08-10 (New York City), a 49-day spread. Airbnb data by city lists the exact date and row count per city.

The columns that carry time

Four of the twelve columns record anything about activity over time: availability_365, number_of_reviews, reviews_per_month, and last_review. availability_365 counts the nights a listing shows as bookable in the 365 days after the snapshot date. The three review fields are cumulative: total reviews, reviews per month averaged over the listing's lifetime, and the most recent review date.

Here is what those values look like in practice, computed from the free 20-row Austin sample (snapshot 2026-06-22):

StatisticValue
Listings in sample20
Median availability_365285 nights
Mean availability_365237.3 nights
Range10 to 365 nights
Listings at 300+ nights10 of 20 (50%)
Listings at 30 nights or fewer2 of 20 (10%)
Listings fully open (365)1 of 20 (5%)
Listings fully closed (0)0 of 20

Half the sample shows 300 or more open nights, which is what an open calendar with light bookings looks like. The tail below 30 nights is where bookings, host blocks, and regulation pile up, and the snapshot cannot tell them apart. Run the same computation on any city file and you get that market's supply-tightness profile for its scrape date.

Where a snapshot breaks down

A one-day capture carries four limits worth planning around:

The two-snapshot diff: a bookings proxy

Scrape the same city twice, d days apart, and diff availability_365 per listing ID. The two windows overlap for 365−d days, so most of the difference comes from what changed inside d days of the first scrape. Booked nights in that window come out as:

booked_nights ≈ (A1 − A2) + d

where A1 is availability_365 at the first snapshot and A2 at the second. The logic: shifting the window forward by d days would add roughly d open nights if nothing was booked, so whatever ate into that shift is consumption. Clamp the result to between 0 and d, then read the edges: A2 below A1 means more nights disappeared than the window shift explains, which signals heavy bookings or host blocks. A2 above A1 plus d means the host pulled nights from the far end of the calendar.

A worked example from the sample: the listing "Close to UT Austin + Rooftop Pool" shows availability_365 of 157 on 2026-06-22. Say a re-scrape 30 days later shows 167. That is (157 − 167) + 30 = 20 booked nights in the window, about two-thirds of the 30 days. If the re-scrape instead showed 150, the diff would be 37, which exceeds the window and gets clamped or flagged, because availability fell by more than the shift can absorb.

Three things to know before running this:

The free sample CSV carries the full 12-column schema if you want to prototype the diff logic on real rows before pulling larger files.

Get the snapshot data

90,169 rows across 6 city files, one snapshot date each, plus cities-index.csv, a data dictionary, and source checksums. Data from Inside Airbnb, CC BY 4.0.

More from the catalog

FAQ

How does Inside Airbnb collect its data?

Inside Airbnb runs periodic scrapes of Airbnb's public listing pages, one run per city per collection cycle. Each run captures one row per visible listing at that moment, cleans the fields, and publishes the result as per-city files under CC BY 4.0. A snapshot is one run's output: the market as seen on the scrape date, not a continuous feed.

What does availability_365 record in a snapshot?

The number of nights the listing shows as bookable in the 365 days after the snapshot date. In the 20-row Austin sample from the 2026-06-22 snapshot, values run from 10 to 365 with a median of 285, and half the listings show 300 or more open nights. It is one counter per listing: no per-night detail and no label for why a night is closed.

How do you estimate bookings from two snapshots?

Scrape the same city twice, d days apart, and diff availability_365 per listing ID. Booked nights in that window are roughly (availability at the first snapshot minus availability at the second) plus d, clamped to between 0 and d. It is a proxy with real error bars: host blocks, cancellations, and nights pulled from the far end of the calendar all shift the diff, so treat results as ranges.