Every host asks the same question sooner or later: what are the other places around me charging?
If you can write a bit of code, the next thought arrives fast. Why not build a little bot? It could open Airbnb every morning, look at every listing in your area, save the prices to a sheet, and tell you whether you’re too cheap or too expensive. It feels like a weekend project.
I’ve had that thought too. My answer is no, and this post is about what to do instead.
Market data matters. Pricing is one of the few levers a small host fully controls. But there are legitimate ways to get that data, some free, and they’re usually better than a homemade scraper anyway.
So: why not to scrape, where to get the data properly, a worked example with real numbers, and how to turn them into a price.
Before we start: this is not legal advice. I’m describing what Airbnb’s terms say and what a couple of court cases decided. If you’re building a business on data, talk to a lawyer in your country.
Why not just scrape it?
Three reasons, from most to least certain.
1. Airbnb’s terms say no, in plain words
Airbnb’s Terms of Service have a section called “Airbnb Platform Rules”. Under the rule “Do not scrape, hack, reverse engineer, compromise or impair the Airbnb Platform”, the very first line is:
“Do not use bots, crawlers, scrapers, or other automated means to access or collect data or other content” from the Airbnb Platform.
That’s from the version for users outside the EEA, UK and Australia, last updated 5 February 2026. There’s no grey wording to argue about. A price bot is exactly what it describes.
If you’re a host, this matters more than for most people. You have an account, listings, reviews and a payout history on that platform. Breaking the rules you agreed to puts all of that at risk. Airbnb’s terms let it suspend or remove accounts that break them, and your business lives inside that account.
2. robots.txt says no too
Airbnb’s robots.txt file (the file sites use to tell crawlers what they may visit) blocks general crawlers from the calendar, booking and many search-result paths, and blocks several AI crawlers from the whole site. robots.txt is a signal, not a contract. But when the signal and the contract say the same thing, the answer is clear.
3. The law is unsettled, and that’s not good news for you
People sometimes point to court cases and say “scraping public data is legal now”. It’s not that simple. Two well-known US cases:
- hiQ Labs v. LinkedIn. The Ninth Circuit said scraping public pages was likely not “without authorization” under the US anti-hacking law (the CFAA). That’s the part people quote. The part they skip: in November 2022 the district court found hiQ had broken LinkedIn’s User Agreement, and in December 2022 the case ended with a consent judgment against hiQ, including $500,000, a permanent injunction, and an order to delete the scraped data and code.
- Meta v. Bright Data. In January 2024 a US federal judge ruled that Bright Data’s logged-off scraping of public data did not breach Meta’s terms, because those terms only covered logged-in use. Meta dropped the case the following month. The judge did not decide what happens when you scrape while logged in.
The outcome turned on the terms, whether you were logged in, and what exactly you did. A host scraping Airbnb has an Airbnb account and agreed to those terms. And these are US cases; other countries have their own contract, database and privacy laws.
“It might be legal somewhere” is a bad foundation for something your income depends on.
The legitimate sources
Here’s the good news. There are four honest routes to market data, and between them they cover almost everything a small host needs.
| Source | What you get | Cost | Best for |
|---|---|---|---|
| Inside Airbnb | Quarterly snapshots per city: listings, calendars, reviews | Free to download, CC BY 4.0 | Learning a market, research, prototypes |
| Market-data tools (PriceLabs, AirDNA, Beyond, Key Data) | Occupancy, prices, comp sets, future demand | Monthly fee or % of bookings | Ongoing pricing decisions |
| Your own data | Your real prices, bookings, occupancy, conversion | Already yours | The truth about your listing |
| Partner programmes (Airbnb API, Booking.com Connectivity) | Official API access | Approval required | Developers building host tools |
1. Inside Airbnb
Inside Airbnb was founded in 2015 by Murray Cox, an artist, activist and technologist, as a mission-driven project about Airbnb’s impact on residential communities. A New York not-for-profit, the Housing Justice Data Lab, now runs it.
To be clear about where the data comes from: Inside Airbnb collects it from Airbnb’s public pages itself, as an independent research and advocacy project. When you use it, you’re downloading a published dataset under a clear licence, not running a bot yourself.
Per city you get a summary listings.csv (one row per listing, used below), a detailed listings.csv.gz with columns like bedrooms, a calendar.csv.gz with the next 365 days of availability and prices, and reviews.csv.gz. Datasets are generally refreshed quarterly, and the page covers roughly the last 12 months.
The licence is Creative Commons Attribution 4.0 (CC BY 4.0). You must credit Inside Airbnb, with a line like “Source: Inside Airbnb, [City], [Month Year]” and a link. They also ask you to download once rather than every time you run an analysis.
Which cities? At the time of writing, about 120, including Bangkok, Singapore, Taipei, Tokyo and Hong Kong. There is no Vietnamese city: no Đà Nẵng, Hà Nội or Hồ Chí Minh City. So for the example below I picked Bangkok, the closest large regional market.
The limits matter more than the data:
- It’s a snapshot of what was listed on one day.
- Prices are asking prices, not booked prices. Nobody had to pay them.
- Availability is not occupancy. Inside Airbnb’s own notes say the calendar “does not differentiate between a booked night vs an unavailable night”. A blocked night could be a booking or the owner’s cousin.
- Occupancy is only estimated, from reviews, with simple assumptions (50% of guests review, 3-night default stay, capped at 70%). Fine for a city picture, not for pricing one apartment.
2. Market-data tools
These companies sell the market view as a product. Below is only what their official pages say at the time of writing (November 2026). No rankings, no affiliate links, and prices change.
- PriceLabs Market Dashboards. Future prices (as percentile bands), future occupancy and comp sets for one area. Its FAQ says the data comes from Airbnb and Vrbo, updates daily, and infers bookings from calendar blocks. From $9.99 per dashboard per month (up to 1,000 listings), plus tax, month to month.
- AirDNA. A free account for exploring markets and its revenue calculator. Market Research is $34 a month billed annually ($125 month to month), adding history, comp sets and future demand.
- Beyond. Charges a percentage of bookings: Free, Growth at 1%, Pro at 1.25%. Its Insights market data is on every plan, including Free; custom comp sets are on Pro.
- Key Data. Aimed at property managers and tourism bodies. Reservation data comes from operators through 80+ PMS integrations, “never scraped or modeled”. No public prices.
Most of these tools still infer bookings from calendars. Much better than guessing, but still estimates.
3. Your own data
The most accurate market data you have is your own, and most hosts barely look at it.
- Airbnb Insights. In the host app, Insights shows Conversion, Occupancy and rates, Quality and Hosting progress for the past 12 months. Airbnb’s nightly rate is nightly revenue divided by booked nights: an achieved number, not an asking price. With professional hosting tools turned on, you can also compare against similar listings nearby.
- Your channel manager or PMS export. Export every booking with nightly rate, nights, channel and booking date. Booking date tells you how far ahead people book you. (More on whether you need a channel manager.)
- A manual comp set. Pick 8 to 12 listings a guest would genuinely compare with yours. Look them up by hand once a week for a few dates, like a guest would, and note the prices. Ten minutes, no bot.
4. Booking.com and other platforms
Same rule: data through partner programmes, not scraping. Booking.com’s Connectivity APIs are for certified connectivity providers (channel managers and PMSs); properties connect through them, not directly. At the time of writing its portal says it is “pausing integrations with new connectivity providers until further notice”. Airbnb’s API is likewise limited to approved software partners. For a host, that means: get your data through your channel manager.
A worked example: Bangkok, real data
Let’s use Inside Airbnb the way it’s meant to be used: download one file once, then analyse it.
The data: Inside Airbnb, Bangkok, snapshot dated 22 September 2026, summary listings.csv (about 5.6 MB). Prices are in Thai baht (THB): Inside Airbnb’s data dictionary describes price as the daily price in local currency.
The summary file has one row per listing with neighbourhood, room type, price, minimum nights, review counts and availability over the next 365 days. It does not have bedrooms.
The code
This is the whole script, exactly as I ran it, with pandas 3.1. It takes the CSV path and a neighbourhood name as arguments.
import sys
import pandas as pd
df = pd.read_csv(sys.argv[1])
print("Listings in file:", len(df))
priced = df[df["price"].notna() & (df["price"] > 0)]
print("Listings with a price:", len(priced))
# 1. Price by room type
print(priced.groupby("room_type")["price"]
.agg(listings="count", median="median").round(0))
# 2. Price spread (p25 / p50 / p75)
print(priced["price"].quantile([0.25, 0.5, 0.75]))
# 3. Share of entire homes (all listings)
print("Entire homes:", round((df["room_type"] == "Entire home/apt").mean() * 100, 1), "%")
# 4. Top 10 neighbourhoods by count, median price
top = (priced.groupby("neighbourhood")["price"]
.agg(listings="count", median="median")
.sort_values("listings", ascending=False).head(10))
print(top.round(0))
# 5. Minimum nights and availability, bucketed
print(pd.cut(df["minimum_nights"], [0, 1, 2, 6, 29, 10_000],
labels=["1", "2", "3-6", "7-29", "30+"]).value_counts(sort=False))
print(pd.cut(df["availability_365"], [-1, 0, 90, 180, 270, 365],
labels=["0", "1-90", "91-180", "181-270", "271-365"]).value_counts(sort=False))
# 6. A comp set: entire homes in one area, short-stay, recently reviewed
comp = priced[(priced["room_type"] == "Entire home/apt")
& (priced["neighbourhood"] == sys.argv[2])
& (priced["minimum_nights"] <= 3)
& (priced["number_of_reviews_ltm"] >= 3)]
print(sys.argv[2], "comp set:", len(comp), "listings")
print(comp["price"].quantile([0.25, 0.5, 0.75]))
Run it like this: python market.py listings.csv "Khlong Toei".
A note on medians. I use medians everywhere, never averages, because a few listings are priced absurdly. The highest price in this file is 1,140,000 baht a night. The average price is 2,911 baht, while the median is 1,601. One silly listing can drag an average. It can’t move a median.
The results
30,922 listings in the file. 28,663 (92.7%) have a price. 67.3% are entire homes.
Median asking price by room type (THB per night):
| Room type | Listings | Median price |
|---|---|---|
| Entire home/apt | 19,182 | 1,756 |
| Private room | 8,667 | 1,348 |
| Hotel room | 273 | 1,920 |
| Shared room | 541 | 414 |
Price spread, all priced listings (THB):
| p25 | Median | p75 |
|---|---|---|
| 1,043 | 1,601 | 2,554 |
Half of Bangkok’s priced listings ask between about 1,000 and 2,550 baht a night. That middle band is the useful part. The extremes on either side mostly aren’t your competition.
Top 10 neighbourhoods by listing count:
| Neighbourhood | Listings | Median price (THB) |
|---|---|---|
| Vadhana | 4,135 | 2,250 |
| Huai Khwang | 3,866 | 1,690 |
| Khlong Toei | 3,536 | 1,950 |
| Ratchathewi | 1,658 | 1,740 |
| Sathon | 1,234 | 1,401 |
| Phra Nakhon | 1,115 | 1,265 |
| Phra Khanong | 1,057 | 1,497 |
| Bang Rak | 1,052 | 1,969 |
| Chatu Chak | 818 | 1,276 |
| Bang Na | 804 | 1,008 |
The gap between areas is bigger than the gap between room types. Vadhana’s median is more than double Bang Na’s. That’s why a city-wide average is close to useless for pricing one apartment.
Minimum nights:
| Minimum nights | Listings | Share |
|---|---|---|
| 1 | 14,343 | 46.4% |
| 2 | 2,918 | 9.4% |
| 3-6 | 3,333 | 10.8% |
| 7-29 | 6,002 | 19.4% |
| 30+ | 4,324 | 14.0% |
A third of listings require a week or more. Those listings are playing a different game (monthly stays) from a host chasing weekend guests. If you compare your nightly price against them, you’ll get the wrong answer.
Availability over the next 365 days:
| Days available | Listings | Share |
|---|---|---|
| 0 | 1,151 | 3.7% |
| 1-90 | 2,731 | 8.8% |
| 91-180 | 3,149 | 10.2% |
| 181-270 | 5,452 | 17.6% |
| 271-365 | 18,439 | 59.6% |
Don’t read this as “60% of listings are nearly empty”. Open dates far ahead are normal, since most guests don’t book months out. And 0 days available might mean fully booked, or just switched off. Availability is not occupancy.
A comp set
City and neighbourhood numbers are context. A comp set is the decision tool: the listings a guest would actually compare yours with.
The summary file has no bedroom count, so I built the comp set from what it does have. For a hypothetical entire apartment in Khlong Toei aimed at short stays:
- room type: Entire home/apt
- neighbourhood: Khlong Toei
- minimum nights: 3 or fewer (same game as you)
- reviews in the last 12 months: at least 3 (actually taking guests)
| Comp set | Listings | p25 | Median | p75 |
|---|---|---|---|---|
| Khlong Toei, entire, ≤3 nights, ≥3 recent reviews | 993 | 1,950 | 2,275 | 3,320 |
Notice what the filters did. Khlong Toei’s overall median was 1,950 baht. Once you keep only active, short-stay entire homes, the median is 2,275. Only 993 of the area’s 3,536 listings passed. The rest are rooms, monthly rentals, or listings nobody seems to be booking.
If you need bedrooms, use the detailed listings.csv.gz and add one more filter. Same idea.
Data attribution: Source: Inside Airbnb, Bangkok, September 2026 (CC BY 4.0).
From numbers to a price
Here’s how I’d use a comp set like that. This is a way of thinking, not a promise of results.
1. Place yourself in the band, honestly. The p25 to p75 range (1,950 to 3,320 baht here) is where most of your real competition sits. If your reviews, photos and location are average for the set, start near the median. Clearly better than most? Aim towards p75. Newer, fewer reviews, or further from the station? Start nearer p25 and earn your way up.
2. Check against your own achieved rate. Asking prices are what others hope for. Your Insights page shows what guests actually paid you. If your achieved nightly rate is well below the comp median and your occupancy is high, you’re probably too cheap. If both are low, the problem might not be price at all: it could be photos, reviews or minimum stay.
3. Remember the snapshot date. This data is from late September. It says nothing about Songkran, New Year or a big concert weekend. Seasonality can move prices far more than the gap between neighbourhoods. One snapshot is a starting point. For seasons you need either several snapshots over time, the calendar file, or a market-data tool that tracks future prices daily.
4. Do the profit math before you cut. A lower price can fill more nights and still leave you with less, because every stay costs a clean, supplies and the platform’s cut. I walked through that in The Real Math of One Airbnb Unit. Run your new price through it before you commit. And if your instinct is always to go lower, read why small service businesses charge too little.
A simple weekly routine for hosts
Twenty minutes, once a week, same day each week:
- Open your own numbers first. Airbnb Insights or your PMS: occupancy and nightly rate for the next 30 and 60 days, compared with last month.
- Check your comp set. Either your market tool’s comp set, or your 8 to 12 hand-picked listings for three dates: next weekend, a weekday two weeks out, and a weekend a month out. Write the prices in your sheet.
- Look for gaps. Empty nights in the next 14 days while your comps look full? Consider a small cut on those nights only. Nearly booked out a month ahead? You may be underpriced for that period.
- Change one thing. A base rate, a minimum stay or one date range. Write down what you changed and why.
- Every quarter, when Inside Airbnb publishes a new snapshot for your city (if it covers your city), rerun the script and see whether your neighbourhood’s band moved.
The point isn’t the data. It’s looking at the same few numbers often enough to notice change.
If you’re a developer building host tools
If you’re building a product for hosts, the shortcut of scraping is even more tempting, and even more dangerous. Your customers’ accounts and your company’s future sit on top of it.
What I’d do instead:
- Use official APIs and partner programmes. For a host’s own listings, bookings and prices, connect through Airbnb’s and Booking.com’s partner programmes, or integrate with channel managers and PMSs that already have that access. Both platforms limit new partner access right now, so plan for working through existing partners.
- License market data. If your product needs market comparisons, license it from a data provider and read their terms on how you may show it. That’s their business; let it be their problem to collect it properly.
- Use your users’ own data, with permission. The most valuable insight is usually inside your customer’s own bookings, not in the market. A host who learns their weekday occupancy dropped 20% gets more from that than from a city median.
- Use Inside Airbnb for research and prototypes. It’s perfect for testing a pricing idea or building a demo. Respect the licence: credit it, download once, and don’t scrape their site either.
Key ideas
- Don’t build an Airbnb scraper. The terms ban it in plain words, and your hosting account is what’s at risk.
- Inside Airbnb offers quarterly city snapshots under CC BY 4.0. Credit it.
- Asking prices aren’t booked prices, and availability isn’t occupancy.
- Use medians and comp sets. Bangkok’s average was 2,911 baht, its median 1,601, and a filtered Khlong Toei comp set 2,275.
- Your own achieved rate beats any market estimate.
- Developers: official APIs, partner programmes, licensed data.
And once more: this is not legal advice.
Sources: Airbnb, “Terms of Service” (airbnb.com/help/article/2908), Section 11.1, version for users outside the EEA, UK and Australia, last updated 5 February 2026; Airbnb, robots.txt; Airbnb Help Centre articles on Insights and performance data (airbnb.com/help/article/2715 and related); Airbnb developer site (developer.withairbnb.com) and third-party reports on API access; Inside Airbnb, About, Get the Data, Data Policies, Data Assumptions and its listings data dictionary; Inside Airbnb, Bangkok, 22 September 2026, summary listings.csv (CC BY 4.0); Proskauer, “hiQ and LinkedIn Reach Proposed Settlement in Landmark Scraping Case” (December 2022), and Morgan Lewis on the hiQ consent judgment; Farella Braun + Martel, “Major Decision Affects Law of Scraping and Online Data Collection, Meta Platforms v. Bright Data” (January 2024), and MediaPost on Meta dropping the case; PriceLabs Help Centre, “Market Dashboard: Billing, Subscription”, “Market Intel Dashboards FAQs” and “How much does PriceLabs cost”; AirDNA, Pricing; Beyond, Pricing; Key Data, keydata.co; Booking.com, Connectivity Portal and Connectivity API docs. All checked November 2026; prices, terms and features change.
Related: The Real Math of One Airbnb Unit, Do You Need a Channel Manager at 1–10 Listings?, and Why Most Small Service Businesses Charge Too Little.



