Airbnb Price Monitor Β· Nightly Rate Tracker
Pricing
from $2.00 / 1,000 market listings
Airbnb Price Monitor Β· Nightly Rate Tracker
Track nightly rates across any Airbnb market. Paste a city search URL β get avg, min, max, and median price per listing with full day-by-day breakdown. No login. No API key.
Pricing
from $2.00 / 1,000 market listings
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Share
Track nightly prices across any Airbnb market. Paste a city search URL β get avg, min, max, and median rates per listing plus a market-level summary by month.
No login. No API key. No account required.
Who is this for?
| You are⦠| Typical goal | Suggested setup |
|---|---|---|
| STR revenue manager | Benchmark your listings vs the market for coming months | City search URL Β· 3 months ahead |
| Property management agency | Weekly pricing report for client portfolios | Listing URLs Β· schedule every Monday |
| Real estate investor | Validate projected revenue before purchase | City search URL Β· 6 months ahead |
| Short-term rental operator | Detect price undercutters in your segment | Search URL with your filters (guests, typeβ¦) Β· 1 month |
| Data analyst / BI team | Feed price time-series into a dashboard | API integration Β· flat-prices view Β· recurring schedule |
| Concierge / property manager | Know the going rate by season before quoting | City search URL Β· 2β3 months ahead |
What you get by default β listing name, property type, ratings, avg/min/max/median nightly rate, price breakdown by calendar month (priceByMonth), discount detection for weekly and monthly stays, and a market-level summary (average price per month across all listings) in the run log.
For per-listing occupancy and full calendar data β use a listing URL directly. Calendar mode returns day-by-day prices, occupancy rate, and coverage rate over the full period.
What it extracts
Per listing
| Field | Description |
|---|---|
listingId | Airbnb internal listing ID |
listingUrl | Direct link to the listing |
listingName | Listing title |
propertyType | e.g. "Apartment in Paris" |
city | City extracted from search results |
rooms / beds / bathrooms | Capacity (numeric) |
rating / reviewCount | Rating score and review count |
currency | ISO currency code (e.g. EUR, USD) |
dateFrom / dateTo | Date range covered by samples |
minNights | Minimum stay requirement detected |
priceSamples | Number of distinct date windows priced |
avgPricePerNight | Average nightly rate across all samples |
minPricePerNight | Cheapest sample in the period |
maxPricePerNight | Most expensive sample |
medianPricePerNight | Median nightly rate |
weeklyDiscountPct | % discount for 7-night stays vs short stays |
monthlyDiscountPct | % discount for 28-night stays vs short stays |
pricingStrategy | fixed, dynamic, fixed-with-length-discounts, dynamic-with-length-discounts β only when β₯ 5 samples |
priceByMonth | Array: avg/min/max per calendar month (deduplicated by check-in week) |
coverageRate | % of bookable days with a price β calendar mode only |
occupancyRate | % of days already booked β calendar mode only |
prices[] | Array of all raw price points with checkin, checkout, pricePerNight, nights |
scrapedAt | ISO timestamp of the run |
Market summary (in run log)
At the end of every city scan, the run log prints:
βββ Market Summary ββββββββββββββββββββββββββββββββββββββββββListings withprices:2845/2859(100%)Multi-date samples :913 listings have 2+ price pointsSample distribution :0Γβ14,1Γβ1932,2Γβ528,3Γβ182 β¦Avg market price/month:2026-06: avg 175EUR/night(721 listings sampled)2026-07: avg 147EUR/night(1211 listings sampled)2026-08: avg 166EUR/night(1060 listings sampled)βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Quick start
- Open the Actor in Apify Console and click Try for free
- Paste an Airbnb search URL (e.g.
https://www.airbnb.com/s/Barcelona--Spain/homes) in the URLs field - Click Start β results appear in the Dataset tab within a few minutes
- Use the Overview view to compare listings side by side, or Flat prices for a day-by-day spreadsheet
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
urls | array | β | Airbnb listing URLs (/rooms/β¦) or search URLs (/s/β¦). Mix freely. |
monthsAhead | number | 3 | How many months of price data to collect |
currency | string | auto | Override ISO currency code (e.g. "EUR") |
verboseLogs | boolean | false | Log additional debug info (URLs, page counts) |
Input examples
Scan an entire city market:
{"urls":["https://www.airbnb.com/s/Lisbon--Portugal/homes"],"monthsAhead":3}
Monitor specific competitor listings:
{"urls":["https://www.airbnb.com/rooms/12345678","https://www.airbnb.com/rooms/87654321"],"monthsAhead":6}
Mix search + direct listing in one run:
{"urls":["https://www.airbnb.com/s/Nice--France/homes","https://www.airbnb.com/rooms/99999999"],"monthsAhead":2,"currency":"EUR"}
How it works
City search URL (market scan)
- URL normalisation β strips user locale, injects
locale=en¤cy=<selected>for consistent price strings - Multi-window discovery β runs 78 parallel search windows (2-night, 5-night, and 7-night stays Γ Monday + Friday check-ins Γ one window per week over the period). The three stay lengths matter: Airbnb only shows listings that are available and meet the minimum-nights requirement β a listing with
minNights = 5is invisible in 2-night searches. - Parallel page fetching β within each window, all result pages (up to 5) are fetched in parallel; windows run in bounded batches of 15 to control memory
- Price extraction β nightly rate parsed from Airbnb's embedded JSON (
pricePerNightfrom structured display); fallback computes price from total Γ· nights when the qualifier is "total" - Price deduplication β for listings found in multiple windows, the 2-night (baseline) price is preferred per check-in week to avoid inflating
priceByMonthaverages - Rate-limit retry β blocked windows are retried once after a 3-second pause
- Stats computation β avg, min, max, median, monthly breakdown, discount detection, pricing strategy (when β₯ 5 samples)
- Dataset push β one row per listing; market summary printed to run log
Direct listing URL (calendar mode)
- Listing page fetch β extracts GPS coordinates and city from the listing HTML
- Calendar API β calls
PdpAvailabilityCalendarfor each month in the period (10 listings in parallel), returns per-day price, availability, and minNights - Stats computation β same as above plus
occupancyRate(% days already booked) andcoverageRate(% bookable days with a price)
Data quality β what "1 sample" means
In city scan mode, most listings have 1β3 price samples. This is not a limitation of the Actor β it reflects how Airbnb works: a listing only appears in a search window when it is available and meets the minimum stay for those specific dates. A listing that is fully booked for the summer appears in only one or two of the 78 windows.
priceSamples | Interpretation |
|---|---|
| 0 | Listing found but price display was non-standard (extremely rare, ~0.5%) |
| 1 | One confirmed price on one date β useful for comparison, not trend analysis |
| 2β4 | Enough for a seasonal comparison (e.g. June vs August) |
| 5+ | Reliable average and pricing strategy detection available |
For deep per-listing analysis across all dates, use a direct listing URL β the calendar mode returns prices for every available day over the full period.
Performance and cost
| Scenario | Listings | Time (Apify cloud) | Proxy data |
|---|---|---|---|
| Single listing, 3 months | 1 | ~5 s | < 1 MB |
| City scan, 2 months (Paris) | ~2,900 | ~3 min | ~150 MB |
| City scan, 6 months | ~3,500 | ~5 min | ~400 MB |
Runs are purely HTTP (no browser) β low memory (256 MB default), high concurrency.
Proxy cost: $10/GB). Without a proxy, large scans (200+ listings) may hit Airbnb rate-limiting. Add Apify Residential proxies in the Proxy section for reliable results.
Output sample
City scan listing:
{"listingId":"25497233","listingUrl":"https://www.airbnb.com/rooms/25497233","listingName":"Charming studio near Montmartre","propertyType":"Apartment in Paris","city":"Paris","rooms":1,"beds":1,"bathrooms":1,"rating":4.85,"reviewCount":142,"currency":"EUR","dateFrom":"2026-06-15","dateTo":"2026-08-31","priceSamples":4,"avgPricePerNight":118,"minPricePerNight":95,"maxPricePerNight":145,"medianPricePerNight":112,"weeklyDiscountPct":12,"pricingStrategy":"dynamic","priceByMonth":[{"month":"2026-06","avgPricePerNight":95,"minPricePerNight":95,"maxPricePerNight":95,"pricedDays":1},{"month":"2026-07","avgPricePerNight":118,"minPricePerNight":110,"maxPricePerNight":125,"pricedDays":2},{"month":"2026-08","avgPricePerNight":145,"minPricePerNight":145,"maxPricePerNight":145,"pricedDays":1}],"scrapedAt":"2026-06-01T16:00:00.000Z","prices":[{"checkin":"2026-06-15","checkout":"2026-06-17","pricePerNight":95,"nights":2,"isBaseline":true},{"checkin":"2026-07-07","checkout":"2026-07-09","pricePerNight":110,"nights":2,"isBaseline":true}]}
Direct listing (calendar mode) β additional fields:
{"bookableDays":72,"occupancyRate":41,"coverageRate":86,"priceSamples":62}
Dataset views
| View | Best for |
|---|---|
| Overview | Comparing listings side by side β avg/min/max/median at a glance |
| Flat prices | Day-level analysis, pivot tables, Excel / Sheets import |
| Full export | API integrations needing the complete prices[] and priceByMonth arrays |
Pricing
You pay only for listings where a price was successfully returned β not for the run itself.
| What | Event | Price |
|---|---|---|
| City scan β listing with a price | airbnb-price-market-listing | $0.002 / listing |
| Direct listing URL β listing with calendar prices | airbnb-price-calendar-listing | $0.03 / listing |
| Listing found but no price returned | apify-default-dataset-item | $0 |
| Run start | β | $0 |
Typical cost:
| Scenario | Listings | Cost |
|---|---|---|
| Paris city scan, 3 months | ~2,900 | ~$5.80 |
| 5 competitor listings (calendar mode) | 5 | $0.15 |
| Rome city scan, 3 months | ~2,200 | ~$4.40 |
Local development
npminstall# Edit storage/key_value_stores/default/INPUT.json with your test URLsapify run
Set HTTPS_PROXY in your shell (or use Apify's proxy URL) to avoid rate-limiting locally:
$HTTPS_PROXY="http://groups-RESIDENTIAL:TOKEN@proxy.apify.com:8000" apify run
Output is written to storage/datasets/default/ and a local storage/output.csv.
Related Actors
- Airbnb Calendar Availability Scraper β occupancy rates, blocked/available days, and min/max nights for any market
- Airbnb Property Details Scraper β full listing pages: description, amenities, host info, GPS, photos
- Airbnb Pro Host Business Email Scraper β business emails and company data for professional Airbnb hosts
Support
Custom scraper or tailored automation? Contact corentin@outreacher.fr.
