The Problem
Airbnb does not publish a public API. Search for one and the results say so: a thread on Airbnb's own community forum, a Reddit post asking whether anyone has consumed their API, and then a row of vendors selling scraped access. There is no developer portal to sign up for, so short-term-rental analytics teams either run headless browsers against a heavily defended site or buy a per-market data feed.
The Scavio Solution
Scavio returns Airbnb search results as structured JSON. Measured 2026-08-12: a search for Austin returned 18 listings in 3.6 seconds for 1 credit, each with nightly price, rating, review_count, beds, baths, superhost and guest-favourite flags, and coordinates. Two limits are worth designing around rather than discovering later. Price is search-only: the listing page answers Add your travel dates for exact pricing even when dates are sent, so pricing analysis is built on search. And the reviews endpoint returns ratings, the six category scores and the star distribution, but no review text, because Airbnb serves review bodies through a persisted GraphQL query whose hash rotates on every deploy.
Before
Before Scavio, tracking Airbnb pricing meant a browser fleet against a site with no API and active anti-automation, rebuilt every time the front end shifted.
After
After Scavio, a location string returns 18 priced listings with ratings and superhost flags, and the pipeline is a POST rather than a browser.
Who It Is For
Short-term-rental analysts, revenue-management tools and market researchers who need Airbnb supply and pricing and found that no official API exists to ask for.
Key Benefits
- Nightly price on every search result, 1 credit per call
- Rating, review_count, superhost and guest-favourite flags
- Coordinates and map bounds for geographic analysis
- Resolved location echoed back, so you can confirm what was searched
- Honest about the two limits: price is search-only, reviews carry no text
Python Example
import os, requests
HEADERS = {"Authorization": f"Bearer {os.environ['SCAVIO_API_KEY']}"}
# Send check_in / check_out explicitly. Omit them and Airbnb picks a window
# about 30 days out and prices against it -- the response flags this with
# dates_are_defaulted, and a dateless search A/Bs both the window and the price.
res = requests.post(
"https://api.scavio.dev/api/v1/airbnb/search",
headers=HEADERS,
json={
"location": "Austin, TX",
"check_in": "2026-09-15",
"check_out": "2026-09-20",
},
timeout=60,
).json()["data"]
print(res["resolved_location"], len(res["listings"]), "listings")
# Price lives on search results only; the listing endpoint has no price field.
for l in sorted(res["listings"], key=lambda x: x.get("rating") or 0, reverse=True)[:5]:
print(l["name"], l.get("price"), l.get("rating"), l.get("is_superhost"))
JavaScript Example
const res = await fetch("https://api.scavio.dev/api/v1/airbnb/search", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SCAVIO_API_KEY}`,
"content-type": "application/json",
},
// Always pass dates: without them Airbnb defaults to a window ~30 days out
// and prices against it (dates_are_defaulted tells you when that happened).
body: JSON.stringify({
location: "Austin, TX",
check_in: "2026-09-15",
check_out: "2026-09-20",
}),
});
const { data } = await res.json();
console.log(data.resolved_location, data.listings.length);
// price is present here; the listing endpoint does not return one.
for (const l of data.listings.slice(0, 5)) {
console.log(l.name, l.price, l.rating, l.is_superhost);
}
Platforms Used
Airbnb
Airbnb search listings with prices, where no public API exists