How to Analyse Inside Airbnb Listings in Python

On this page

Problem statement

Inside Airbnb's snapshot of Washington, D.C. for 24 June 2026 lists 6,945 Airbnb listings from 3,218 hosts, scraped from the public website. Its prices are strings with dollar signs, the highest $85,638 a night; 28% of its listings will not take a booking shorter than 30 nights; and every figure in it describes that one date, not the year. Below, the prices are parsed and cleaned, the listings counted by room type and minimum stay, the licence field read, and Inside Airbnb's own occupancy estimates summarised.

Quick answer

Read the listings file, parse the price string, and summarise by room type:

L = pd.read_csv(cached("data/listings.csv.gz", f"{BASE}/data/listings.csv.gz"))
L["price_usd"] = pd.to_numeric(L.price.str.replace(r"[$,]", "", regex=True), errors="coerce")
print(f"{len(L):,} listings scraped on {L.last_scraped.mode()[0]}; {L.host_id.nunique():,} hosts")
print(L.groupby("room_type").agg(listings=("id", "size"), median_price=("price_usd", "median")).round(0).to_string())
6,945 listings scraped on 2026-06-24; 3,218 hosts
                 listings  median_price
room_type                              
Entire home/apt      5224         233.0
Hotel room            255         365.0
Private room         1422         125.0
Shared room            44          52.0

The snapshot has 6,945 listings from 3,218 hosts. Three quarters are entire homes, at a median of $233 a night, while 1,422 private rooms go for a median of $125. There are 255 hotel rooms and 44 shared rooms.

Map of Washington, D.C. neighbourhoods with 6,945 Airbnb listings as dots coloured by room type, concentrated in the central and northwest neighbourhoods Map of Washington, D.C. neighbourhoods with 6,945 Airbnb listings as dots coloured by room type, concentrated in the central and northwest neighbourhoods
The 24 June 2026 snapshot: 5,224 entire homes, 1,422 private rooms, 255 hotel rooms and 44 shared rooms.

Missing and extreme prices, long and short stays, registrations

1. Missing and extreme prices

print(f"listings with no price: {L.price_usd.isna().sum():,} ({L.price_usd.isna().mean():.0%})")
p = L.price_usd.dropna()
print(f"price per night: median ${p.median():.0f}, mean ${p.mean():.0f}; 1st-99th percentile ${p.quantile(0.01):.0f} to ${p.quantile(0.99):.0f}; maximum ${p.max():,.0f}")
listings with no price: 716 (10%)
price per night: median $220, mean $319; 1st-99th percentile $34 to $1484; maximum $85,638

716 listings, 10%, show no price. Among the rest the median is $220 but the mean $319. 98% of prices lie between $34 and $1,484, while the maximum, $85,638 a night, is almost certainly not a real market price.

Listings and median nightly price by room type in the Inside Airbnb Washington, D.C. snapshot. listings by room typeroom typelistingsmedian priceentire home/apt5,224$233private room1,422$125hotel room255$365shared room44$52716 listings (10%) have no price6,945 listings from 3,218 hosts, scraped 24 June 2026 spatialworkflow.io
Entire homes are three quarters of listings, at a median of $233 a night.

2. Long stays and short stays

Many listings require 30 nights or more, which makes them monthly rentals rather than short-term lets:

long = L.minimum_nights >= 30
print(f"minimum stay of 30 nights or more: {long.sum():,} listings ({long.mean():.0%}); median price ${L.loc[long, 'price_usd'].median():.0f} vs ${L.loc[~long, 'price_usd'].median():.0f} for shorter minimums")
minimum stay of 30 nights or more: 1,938 listings (28%); median price $115 vs $257 for shorter minimums

1,938 listings, 28%, require stays of 30 nights or more. They are furnished monthly rentals, with a median nightly price of $115 against $257 for the rest.

3. Registration numbers

D.C. requires short-term rentals to be licensed. Count the listings that show a licence:

lic = L.license.fillna("").str.strip()
print("licence field:", lic.replace("", "(empty)").str.slice(0, 12).value_counts().head(5).to_dict())
print(f"listings with any licence text: {(lic != '').mean():.0%}")
licence field: {'Hosted Licen': 3388, 'Exempt': 1902, '(empty)': 1481, 'Unhosted Lic': 171, 'HOU-0286-202': 2}
listings with any licence text: 79%

3,388 listings show a value beginning "Hosted Licen…" and 171 "Unhosted Lic…", D.C.'s two licence categories. 1,902 claim an exemption, and 1,481 leave the field empty. Together, 79% have some licence text, but Inside Airbnb does not check it against the city's register.

Estimated occupancy and revenue in D.C.

The data used on this page

The Inside Airbnb snapshot for Washington, D.C. dated 24 June 2026: listings.csv.gz, the detailed listings file, released under a Creative Commons Attribution 4.0 licence. Inside Airbnb scrapes the public Airbnb website; it is not affiliated with Airbnb.

from pathlib import Path

import geopandas as gpd
import numpy as np
import pandas as pd
import requests

Path("data").mkdir(exist_ok=True)
BASE = "https://data.insideairbnb.com/united-states/dc/washington-dc/2026-06-24"
def cached(path, url):
    p = Path(path)
    if not p.exists():
        r = requests.get(url, timeout=600); r.raise_for_status(); p.write_bytes(r.content)
    return p
print("snapshot:", BASE.rsplit("/", 1)[-1])
snapshot: 2026-06-24

The snapshot is dated 24 June 2026.

Example 1: estimated occupancy and revenue

Recent snapshots include Inside Airbnb's own estimates of nights booked and revenue over the past year, modelled from reviews:

e = L[["estimated_occupancy_l365d", "estimated_revenue_l365d"]].dropna()
print(f"listings with estimates: {len(e):,}; median occupancy {e.estimated_occupancy_l365d.median():.0f} nights; median revenue ${e.estimated_revenue_l365d.median():,.0f}")
print(f"listings estimated at zero nights: {(e.estimated_occupancy_l365d == 0).mean():.0%}; top 10% of listings earn {e.estimated_revenue_l365d.nlargest(len(e) // 10).sum() / e.estimated_revenue_l365d.sum():.0%} of estimated revenue")
listings with estimates: 6,229; median occupancy 60 nights; median revenue $9,570
listings estimated at zero nights: 31%; top 10% of listings earn 41% of estimated revenue

Inside Airbnb's model puts the median listing at 60 booked nights and $9,570 of revenue over the past year. 31% are estimated at zero nights, and the top 10% of listings take 41% of the estimated revenue.

Histogram of nightly prices on a log scale for entire homes and private rooms Histogram of nightly prices on a log scale for entire homes and private rooms
Entire homes cluster around $233, private rooms around $125, with long tails both ways.

What Inside Airbnb is

From an Inside Airbnb download to listing statistics. listings.csv.gz to numbersdownloadcity + snapshotdateread_csv6,945 rowsparse price"$1,234.00" to1234.0split stays28% need 30+ nightssummariseby room type, areaState the snapshot date with every figure spatialworkflow.io
The steps every Inside Airbnb analysis repeats.

Inside Airbnb is an independent project that scrapes Airbnb's public pages for each city, usually quarterly, and publishes the results with summary maps. The detailed listings file has one row per active listing on the scrape date, with about 90 columns: the listing's location, blurred by Airbnb to within about 150 m, its type, capacity and amenities, the nightly price shown for a sample stay, minimum and maximum nights, availability over the next 30 to 365 days, reviews, and the host. Fields such as price are stored exactly as shown on the site, so they need parsing. Estimated occupancy and revenue are not Airbnb data but Inside Airbnb's model, based on reviews and an assumed review rate.

Changing snapshots, calendar prices and licences

Checks before quoting figures from Inside Airbnb listings. before quoting a numbersnapshot dateone scrape, not a yearmissing prices716 of 6,945long minimum staysmedian $115 vs $257estimates are models31% estimated at zero nightslicence text varies79% have someWashington, D.C., 24 June 2026 spatialworkflow.io
What to state or filter before a number leaves the notebook.
  • Snapshots differ: columns are added and dropped between releases; check columns before reusing code on another date.
  • Calendar prices: recent calendar.csv.gz files no longer include prices; use the listing price.
  • Duplicates across snapshots: listing IDs are stable, so joining two snapshots shows which listings appeared and disappeared.
  • Licence: Inside Airbnb shows what the host entered; it does not check registrations against the city's register.

FAQ

Where can I download Airbnb data?

From Inside Airbnb's get the data page, which publishes listings, calendars, reviews and neighbourhood boundaries for 123 cities (October 2026), free under CC BY 4.0.

How do I read Inside Airbnb data in Python?

Read listings.csv.gz with pd.read_csv, which handles the gzip compression, then parse price from a string such as "$120.00".

Are Inside Airbnb locations exact?

No; Airbnb blurs listing locations by up to about 150 m, so use them at neighbourhood scale.

How do I get another city, or an older snapshot?

Change the path. Every file sits under country/region/city/date/, so this page's BASE with another city and scrape date reads that snapshot with the same code. The get the data page shows each city's latest scrape; its "show archived data" link lists the earlier ones. A city that is not on that page — in France only Paris, Lyon, Bordeaux and the Pays Basque were in October 2026 — has no Inside Airbnb data at any date.

How current is Inside Airbnb data?

Each file is a snapshot of one scrape date, usually refreshed quarterly; the date is in the file path and in last_scraped.