Airbnb Scraper — Sub-Ratings, Review Topics & Sleeping Plans avatar

Airbnb Scraper — Sub-Ratings, Review Topics & Sleeping Plans

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Airbnb Scraper — Sub-Ratings, Review Topics & Sleeping Plans

Airbnb Scraper — Sub-Ratings, Review Topics & Sleeping Plans

Airbnb listings with the fields nobody else extracts: Airbnb's own review-topic counts, the 5-to-1 star distribution, all six sub-ratings, per-room sleeping plans, co-hosts, host response rate and time, and a 12-month availability calendar. No browser. JSON, CSV, Excel.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

SignalBench

SignalBench

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Airbnb Scraper — Sub-Ratings, Review Topics, Sleeping Plans & Calendar

Most Airbnb scrapers give you the title, the price and a pile of amenities. This one gives you the fields that actually answer questions — what guests complain about, how the ratings break down, and how the property is laid out — in a single request per listing, with no browser.

What you get that other scrapers don't

FieldWhy it matters
reviewTopics — Airbnb's own topic counts{topic: "Location", count: 292}, {topic: "Cleanliness", count: 83}. This is Airbnb's NLP run over the entire review corpus, not a sample. Answering "what do guests complain about in this submarket" normally means scraping and classifying thousands of review bodies yourself. Here it arrives as structured integers.
starDistributionThe full 5→1 star split as fractions. A 4.8 built from 90% fives and 4% ones is a very different property from a 4.8 built from steady fours.
subRatingsAll six category scores — cleanliness, accuracy, check-in, communication, location, value.
sleepingArrangementsPer room: {room: "Bedroom 1", beds: ["1 queen bed", "1 floor mattress"]}. The real sleeping capacity, not just a bed count.
host.responseRate / responseTime"100%", "Responds within an hour".
host.cohostsCo-host names and profile IDs — how you spot property managers running portfolios.
highlightsAirbnb's three generated selling points for the listing.
location.neighborhoodDescription + isLocationVerifiedThe host's own neighbourhood write-up, and whether Airbnb has verified the address.
location.breadcrumbsThe full geographic chain, coarse to fine.
isGuestFavorite, Superhost, years hostingBadge and tenure signals in one place.
availability1–12 months of night-by-night availability, plus minimum-stay rules and a summary.

Plus the usual: description, every amenity with its category, every photo with the host's caption, capacity, house rules, coordinates, individual reviews with host replies, and prices on search runs.

Two ways to use it

Search a location — give it Austin, TX (or paste a full Airbnb search URL to reuse filters you set on the site). Results carry the price Airbnb showed on the card; add check-in/check-out dates and those prices become real quotes for that stay.

Specific listings — paste listing URLs or bare numeric IDs.

Output

One row per listing. Example (abridged):

{
"id": "24169503",
"title": "Carpe Diem Garden - great views, an oasis in Söğüt",
"propertyType": "Entire rental unit in Marmaris, Turkey",
"personCapacity": 6, "bedrooms": 2, "beds": 5, "baths": 2,
"rating": 5, "reviewCount": 30,
"subRatings": { "cleanliness": 5, "accuracy": 5, "checkin": 4.9,
"communication": 5, "location": 4.9, "value": 5 },
"starDistribution": { "5": 1, "4": 0, "3": 0, "2": 0, "1": 0 },
"reviewTopics": [ { "topic": "Hospitality", "count": 22 },
{ "topic": "View", "count": 21 },
{ "topic": "Cleanliness", "count": 12 } ],
"sleepingArrangements": [ { "room": "Bedroom 1", "beds": ["1 double bed"] },
{ "room": "Living room", "beds": ["2 sofa beds"] } ],
"isGuestFavorite": true,
"host": { "name": "Ipek", "isSuperhost": true, "yearsHosting": 9,
"responseRate": "Response rate: 100%",
"responseTime": "Responds within an hour", "cohosts": [] },
"location": { "latitude": 36.6472, "longitude": 28.0965,
"country": "Türkiye", "region": "Muğla", "place": "Söğütköy Köyü",
"isLocationVerified": true },
"availability": { "daysScanned": 91, "availableNights": 74,
"unavailableNights": 17, "unavailableShare": 0.1868 },
"amenityCount": 72, "photoCount": 78
}

Pricing and billing

$1.00 per 1,000 listings, all-in — you don't pay separate platform usage on top.

One complete listing = one charge. A listing that returns no content is never stored, so it's never billed. Feed it a page of dead IDs and the run costs you $0.00 in result charges.

Notes on what the data does and doesn't mean

  • availability is an occupancy proxy, not a booking rate. A blocked night can be a booking or a host simply closing the date, and Airbnb doesn't distinguish the two. It's reported as unavailableShare for exactly that reason. Don't sell it as occupancy.
  • Prices appear on search runs, taken from the card Airbnb rendered. Add dates to get a real quote for a specific stay. Listings with no availability for your dates show no price — that's Airbnb's behaviour, not a scrape failure.
  • reviews are best-effort. The main request always returns the aggregate review data (topics, distribution, sub-ratings). Individual review bodies come from a secondary endpoint; if Airbnb changes it, that array comes back empty and the rest of the listing is unaffected — and still correct.
  • Check your location spelling. Airbnb never returns "no results" for a search — hand it a place it doesn't recognise and it quietly falls back to somewhere else entirely. The listings you get back are real, so they're stored and billed; they just won't be where you meant. If a run comes back with unexpected cities, the location string is the thing to check.
  • Personal data. Host names, profile IDs, profile text and reviewer names are personal data under GDPR/CCPA. Turn on Exclude personal data to drop all of it and keep only aggregate host metrics.
  • Locale. Listing text (titles, descriptions, amenity labels) follows the locale you set. Search-card labels stay in English — Airbnb serves localised search behind a redirect that doesn't carry the data this Actor reads.

How it works

No browser. Airbnb serves this data through its own public GraphQL API, reachable with the key embedded in every listing page, so one HTTP request per listing returns the entire record. That's roughly a tenth the compute of a Puppeteer-based scraper, which is why the price can be what it is.

The Actor reads Airbnb's current query hashes and API key from a live page on every run rather than pinning them, so an Airbnb deploy doesn't silently break it.

Responsible use

Airbnb's Terms of Service prohibit scraping, and you should read them and decide for yourself. This Actor stays off every path Airbnb's robots.txt disallows for listing pages — it uses only the canonical /rooms/{id} page, never the disallowed /rooms/*/reviews, /rooms/*/amenities, /rooms/*/photos or /users/*/listings sub-pages. Note that Airbnb's robots.txt does disallow /s/*/*, which covers the search-results path used by this Actor's search mode; if that matters for your use case, use Specific listings mode instead, which is fully within robots.txt.

Requests are paced and retried politely, and concurrency is deliberately conservative.