How to Find Airbnb Hosts With Multiple Listings in Python

On this page

Problem statement

The image of Airbnb is a resident renting a spare room, but in most cities a large share of listings belongs to hosts with many of them, from small investors to property-management companies running hundreds of units. Measuring that concentration is a common policy question and a simple count on the face of it. In practice the count depends on which host-listing field is used, on whether listings outside the city count, and on how "commercial" is defined.

This page measures host concentration in the Inside Airbnb snapshot for Washington, D.C. of 24 June 2026. It counts listings per host, finds the share run by multi-listing hosts, profiles the largest hosts, and compares Inside Airbnb's calculated count with the host's self-reported total.

Quick answer

Count listings per host in the snapshot and group hosts by size:

per_host = L.groupby("host_id").size()
size = pd.cut(per_host, [0, 1, 2, 10, 50, 10_000], labels=["1", "2", "3-10", "11-50", "51+"])
summary = pd.DataFrame({"hosts": size.value_counts(sort=False), "listings": per_host.groupby(size, observed=False).sum()})
summary["share of listings"] = (summary.listings / summary.listings.sum()).map("{:.0%}".format)
print(summary.to_string())
       hosts  listings share of listings
1       2356      2356               34%
2        408       816               12%
3-10     392      1730               25%
11-50     55      1141               16%
51+        7       902               13%

2,356 hosts have a single listing, together 34% of all listings. The 62 hosts with more than 10 listings hold 29% between them, and the 7 with more than 50 hold 13%.

Hosts and listings by host size in Washington, D.C. listings by host sizelistings per hosthostslistingsshare12,3562,35634%240881612%3-103921,73025%11-50551,14116%51+790213%top 10 hosts: 15% of listings3,218 hosts, 6,945 listings spatialworkflow.io
34% of listings come from single-listing hosts; 13% from seven hosts with 51 or more.

Concentration, the largest hosts, which count to use

1. Concentration

top = per_host.sort_values(ascending=False)
print(f"hosts: {len(per_host):,}; listings: {per_host.sum():,}")
print(f"largest 10 hosts hold {top.head(10).sum() / per_host.sum():.0%} of listings; largest 1% of hosts ({max(1, len(top) // 100)}) hold {top.head(max(1, len(top) // 100)).sum() / per_host.sum():.0%}")
print(f"listings belonging to hosts with more than one: {(L.host_id.map(per_host) > 1).mean():.0%}")
hosts: 3,218; listings: 6,945
largest 10 hosts hold 15% of listings; largest 1% of hosts (32) hold 24%
listings belonging to hosts with more than one: 66%

The 3,218 hosts share 6,945 listings. The 10 largest hold 15% of them and the largest 1%, 32 hosts, hold 24%. Two thirds of listings, 66%, belong to hosts with more than one.

Cumulative curve of share of listings against share of hosts, largest first Cumulative curve of share of listings against share of hosts, largest first
862 multi-listing hosts, 27% of hosts, hold 66% of listings.

2. Who the largest hosts are

big = L[L.host_id.isin(top.head(5).index)].groupby(["host_id", "host_name"]).agg(
    listings=("id", "size"), entire=("room_type", lambda s: (s == "Entire home/apt").mean()),
    median_price=("price_usd", "median"), long_stay=("minimum_nights", lambda s: (s >= 30).mean())).sort_values("listings", ascending=False)
print(big.round(2).to_string())
                               listings  entire  median_price  long_stay
host_id   host_name                                                     
39930655  Sojourn                   282    0.99        198.30       0.65
107434423 Blueground                193    1.00        187.19       1.00
446820235 Luxury Bookings Fze       130    0.99        659.20       0.07
46630199  Home Sweet City            89    1.00        268.00       0.03
501999278 RoomPicks                  81    0.00        330.35       0.00

The largest hosts are companies, and they run different businesses. Sojourn (282 listings) and Blueground (193) offer entire homes mostly for stays of 30 nights or more. Luxury Bookings lists 130 entire homes at a median of $659 a night. RoomPicks lists 81 rooms, none of them entire homes.

3. Which count to use

calculated_host_listings_count counts a host's listings in this city's snapshot; host_listings_count is the count Airbnb's host profile reports, which can include other cities; host_total_listings_count is a second profile count:

print("non-empty values:", L[["calculated_host_listings_count", "host_listings_count", "host_total_listings_count"]].notna().sum().to_dict())
c = L.drop_duplicates("host_id").dropna(subset=["host_listings_count"])
print(f"hosts whose profile count equals the local count: {(c.host_listings_count == c.calculated_host_listings_count).mean():.0%}; profile count larger: {(c.host_listings_count > c.calculated_host_listings_count).mean():.0%}")
print(f"calculated count equals our own groupby for every host: {(L.drop_duplicates('host_id').set_index('host_id').calculated_host_listings_count == per_host.reindex(L.drop_duplicates('host_id').host_id).values).all()}")
non-empty values: {'calculated_host_listings_count': 6945, 'host_listings_count': 6896, 'host_total_listings_count': 0}
hosts whose profile count equals the local count: 80%; profile count larger: 19%
calculated count equals our own groupby for every host: True

In this snapshot host_total_listings_count is entirely empty, a reminder that columns vary between releases. For 80% of hosts the profile count equals the local count, and for 19% it is larger. The calculated count matches a groupby on host_id exactly.

Single-listing hosts and entire homes

The data used on this page

The Inside Airbnb listings for Washington, D.C. from the snapshot of 24 June 2026 (CC BY 4.0). Host names are shown as Airbnb displays them publicly; most large hosts are companies.

from pathlib import Path

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"
p = Path("data/listings.csv.gz")
if not p.exists():
    r = requests.get(f"{BASE}/data/listings.csv.gz", timeout=600); r.raise_for_status(); p.write_bytes(r.content)
L = pd.read_csv(p)
L["price_usd"] = pd.to_numeric(L.price.str.replace(r"[$,]", "", regex=True), errors="coerce")
print(f"{len(L):,} listings")
6,945 listings

The snapshot has 6,945 listings.

Example 1: single-listing hosts and entire homes

A common definition of "commercial" is a host with several entire-home listings. Compare entire-home listings by host size:

L["host_size"] = L.host_id.map(per_host)
eh = L[L.room_type == "Entire home/apt"]
print(f"entire homes run by hosts with 1 listing: {(eh.host_size == 1).mean():.0%}; with 2-10: {eh.host_size.between(2, 10).mean():.0%}; with more than 10: {(eh.host_size > 10).mean():.0%}")
entire homes run by hosts with 1 listing: 41%; with 2-10: 32%; with more than 10: 27%

Of entire homes, 41% belong to single-listing hosts, 32% to hosts with 2 to 10 listings, and 27% to hosts with more than 10.

Map of D.C. listings with the three largest hosts highlighted in colour Map of D.C. listings with the three largest hosts highlighted in colour
Sojourn, Blueground and Luxury Bookings cluster in the central neighbourhoods.

Counting listings per host

Measuring how concentrated short-term rental hosting is. listings to concentrationgroup byhost_idnot host_namesize bins1, 2, 3-10, 11-50,51+share oflistings66% multi-listingtop hostsSojourn 282profile themroom type, staylengthBlueground: 193 listings, all 30+ nights spatialworkflow.io
Group by host_id, never by name.

Each Inside Airbnb listing carries its host's ID, and counting listings per ID gives each host's footprint in the snapshot. That is what calculated_host_listings_count already records, split by room type. Host size distributions in large cities are strongly skewed: most hosts have a single listing, yet a minority of large hosts control a large share of all listings, especially entire homes. That gap between the typical host and the typical listing is central to debates about short-term rentals and housing supply, and the right summary is the share of listings by host size, not the share of hosts.

The count has limits. A single company can operate under several host accounts, which splits it in the data, and one account can be a manager listing units for many owners. Listings on other platforms, or rented off-platform, are invisible. The count on a host's profile can include listings in other cities, so it differs from the local count for hosts active elsewhere. Definitions of "commercial" vary between cities, from two entire homes to a number of nights, so state the rule used.

Snapshots, hotels and privacy

The two host listing counts in Inside Airbnb data. which count to usehost_listings_countβœ“from the host profileβœ“can include other citiesβœ“larger for 19% of hostscalculated_host_listings_countβœ“counted in this snapshotβœ“equals a groupbyβœ“local concentrationhost_total_listings_count is empty in this release spatialworkflow.io
The calculated count matches a groupby of the snapshot for every host.
  • Snapshots: host portfolios change; compare several snapshots before calling a host stable.
  • Hotels: some large "hosts" are serviced apartments or hotels listing rooms; room_type == "Hotel room" and the host name help separate them.
  • Privacy: host names and IDs are public on Airbnb, but analyses should report companies, not private individuals.
  • Long stays: large hosts often list furnished monthly rentals; check minimum nights before calling them short-term.

FAQ

How do I find Airbnb hosts with multiple listings?

Group the Inside Airbnb listings by host_id and count, or use calculated_host_listings_count.

What share of Airbnb listings belong to multi-listing hosts?

It depends on the city; in D.C. a majority of listings belong to hosts with more than one listing.

What is the difference between host_listings_count and calculated_host_listings_count?

The first comes from the host's profile and can include other cities; the second counts the host's listings in this snapshot.

How do I identify commercial Airbnb hosts?

Define a rule, such as more than one entire-home listing, and apply it to the listings per host; definitions vary by city.