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
Corentin Robert
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day 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 with prices : 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 175 EUR/night (721 listings sampled)2026-07: avg 147 EUR/night (1211 listings sampled)2026-08: avg 166 EUR/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: $1.50 per city run with Apify Residential proxies ($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
npm install# 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.