Airbnb Market & Nightly Rate Scraper avatar

Airbnb Market & Nightly Rate Scraper

Pricing

from $0.80 / 1,000 stay scrapes

Go to Apify Store
Airbnb Market & Nightly Rate Scraper

Airbnb Market & Nightly Rate Scraper

Scrape Airbnb stays with the real nightly rate, taxes, fees and total as separate figures that add up - plus rating, reviews, capacity and coordinates. Median rate per market. Every breakdown is checked against its own total and withheld rather than guessed. Global. No API key.

Pricing

from $0.80 / 1,000 stay scrapes

Rating

0.0

(0)

Developer

Eimantas V

Eimantas V

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Share

What a stay actually costs per night — with the tax, fee and discount lines that make up the total, plus a median-rate summary for the whole market.

Austin, TX 72 stays median $217.70/night total $1,258 rating 4.93
Paris, France 72 stays median $146.13/night total $ 824 rating 4.88
Lisbon, Portugal 72 stays median $134.24/night total $ 684 rating 4.81
Studio Haus | Short Drive to ACL 5 nights x $284.20 = $1,421.00
+ taxes $241.57 = $1,662.57 total · 4.68 (189 reviews) · 1 bedroom, 1 bath

216 stays across three countries in 15 seconds. No browser, no API key, no login.


The nightly rate is read, not guessed

Most scrapers report the headline price and stop. This one takes Airbnb's own breakdown apart, so you get nightlyRate, accommodationTotal, discount, fees and taxes as separate numbers that add up to totalPrice.

That matters because dividing a total by nights gives a figure nobody is ever quoted — the total already carries cleaning fees, resort fees and tax. Across 216 live stays, every row reconciled: subtotal − discount + fees + taxes = total.


What you get

Per stay

GroupFields
PricingnightlyRate, nights, accommodationTotal, discount, fees, feeLabels, taxes, totalPrice, currency
Qualityrating, reviewsCount, isGuestFavorite, isNewListing, badges
PropertypropertyType, bedText, bedrooms, beds, bathText, bathrooms, isSharedBath
LocationlistingCity, latitude, longitude
IdentitylistingId, listingUrl, name, thumbnailUrl

Per market — median nightly rate, median total, rate range, median rating and review count, Guest Favourite count, unreviewed-supply count, and the whole-property vs private-room split. Medians throughout: one penthouse moves a mean and not a median.


Who this is for

  • Short-term rental investors — median $/night by market is the revenue half of a yield model. Pair it with a purchase price and you have a cap rate.
  • Revenue managers — track your market's median rate weekly and see where you sit in the range.
  • Hosts — find what comparable listings with your bed count charge on your dates.
  • Travel and analytics teams — coordinates on every row, stable listingId for clean diffs across runs.

Input

{
"locations": ["Austin, TX", "Paris, France"],
"checkIn": "2026-10-10",
"checkOut": "2026-10-15",
"adults": 2,
"currency": "USD",
"maxListingsPerLocation": 180
}

A plain place name is enough — "Austin, TX", "Paris", "Lisbon, Portugal". Paste an airbnb.com/s/... URL instead if you have already filtered it on the site.

OptionDefaultNotes
checkIn / checkOutStrongly recommended. See below
adults / children / infants / pets2 / 0 / 0 / 0Changes which stays qualify and what they cost
currencyUSDAlways sent; see below
roomTypesallentire-home, private-room, shared-room, hotel
minPrice / maxPriceAlso the way past the search-depth ceiling — run price bands
minBedrooms / minBeds / minBathroomsApplied by Airbnb before billing
superhostOnlyfalse
maxListingsPerLocation180270 is Airbnb's hard ceiling per search
maxConcurrency3Deliberately low; see below

Five things worth knowing

Each was found by running against live data.

Without dates, Airbnb invents the window. It always quotes something. Left to itself it picks its own stay length and applies its own long-stay discounts, so the same market scraped twice a week apart is not comparable, and two markets scraped in one run may be priced over different numbers of nights. Every record carries nights and datesWereRequested so you can tell. Pin checkIn and checkOut and the problem disappears. Half a range is no better than none — Airbnb ignores a lone check-in, so the Actor drops it rather than label its own guess with your date.

Currency follows the IP unless you pin it. An Austin search run from a European exit came back in euros. The Actor sends currency on every request for that reason, and locale=en with it so that "1.234" cannot mean one thousand on one row and one-point-two on the next.

Airbnb re-ranks between requests, so pages overlap. Consecutive pages repeated 2 of 18 results on one hop, and a three-market run turned up 29 duplicates in 245 fetched rows — 12%. They are removed by listing id, are not charged, and are counted in the log. Left in, they would inflate the count and pull the median toward whatever the ranker currently favours.

Airbnb does not always send the same payload, so the breakdown checks itself. Most responses carry a full price explanation. Some carry a reduced one — no tax line, no Total line, and on one platform run a positive line equal to the whole subtotal, which naively read would have reported a $2,291 discount on a $2,291 stay. Every record is therefore checked against its own total: if subtotal − discount + fees + taxes does not reach totalPrice, the components are set to null and priceBreakdownComplete is false. nightlyRate, accommodationTotal and totalPrice are read directly and always stand. The same reduced payload omits the card title, which is where propertyType and listingCity come from — the summary reports that as typeUnknown rather than letting the type counts quietly fall short. A residential proxy returns the full payload more often than a datacenter one.

Search stops at 15 pages. That is 270 stays per search, and it is Airbnb's limit, not a setting. Markets that hit it are flagged truncated: true. The way past it is to split the market into price bands, or to search neighbourhoods rather than a whole city.


Output

{
"recordType": "listing",
"listingId": "1239199837879387949",
"name": "Studio Haus | Short Drive to ACL + Walk to Brewery",
"propertyType": "Apartment", "listingCity": "Austin",
"latitude": 30.262, "longitude": -97.7229,
"nightlyRate": 284.2, "nights": 5,
"accommodationTotal": 1421, "taxes": 241.57, "totalPrice": 1662.57,
"currency": "USD", "datesWereRequested": true,
"rating": 4.68, "reviewsCount": 189, "isGuestFavorite": true,
"bedText": "1 bedroom", "bathText": "1 bath", "bathrooms": 1
}

Three ready-made views: Stays, Price breakdown and Market summary. Set flattenOutput: true for CSV.


Honest limits

  • bedrooms and beds are never inferred from each other. Airbnb publishes whichever it has — "1 queen bed" for one listing, "2 bedrooms" for the next — and converting one into the other would invent a number the host never stated. The raw bedText is kept alongside.
  • A city search reaches past the city. An Austin search returns Pflugerville and Cedar Park; a Paris one returns Aubervilliers and Saint-Ouen. listingCity says which, so you can filter.
  • Prices are what Airbnb quotes for your dates and party size, not a historical average and not an occupancy figure.
  • No amenities, host details or review text. Those live on the individual room page, which costs several hundred kilobytes each; this Actor stays on search results, which is what makes it cheap.
  • totalPrice comes from Airbnb's exact Total line where one exists, falling back to the rounded headline where it does not.
  • propertyType and listingCity come from Airbnb's card title, which is absent on some responses. Null rather than parsed out of a host's marketing headline, and counted as typeUnknown on the summary.
  • Blocked markets, empty markets and duplicate rows are never charged.

Pricing

EventPriceWhen
Actor start$0.005Once per run
Market scraped$0.006Per market paged and summarised
Stay scraped$0.0008Per stay returned, after filters

$0.80 per 1,000 stays. A 20-market weekly tracker at 180 stays each costs about $3.00 a run. AirDNA and Mashvisor start at $20–100 a month per market.


Tips

  • Scrape the same dates weekly and diff on listingId. Rising median rate with steady supply is a market tightening; rising supply with a flat rate is the opposite.
  • Watch newListings. Unreviewed stays are supply that has just arrived — the leading indicator of a market getting more competitive.
  • Compare nightlyRate against totalPrice / nights. The gap is the fee load, and a market with a high one is a market where guests are quietly paying more than the headline.
  • Run one search per price band to get past the 270 ceiling and see how each tier moves separately.
  • Pair with a for-sale price to turn a median nightly rate into a yield: 180 nights x median rate, against the purchase price.