Airbnb Price Monitor · Nightly Rate Tracker avatar

Airbnb Price Monitor · Nightly Rate Tracker

Pricing

from $2.00 / 1,000 market listings

Go to Apify Store
Airbnb Price Monitor · Nightly Rate Tracker

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

Corentin Robert

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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 goalSuggested setup
STR revenue managerBenchmark your listings vs the market for coming monthsCity search URL · 3 months ahead
Property management agencyWeekly pricing report for client portfoliosListing URLs · schedule every Monday
Real estate investorValidate projected revenue before purchaseCity search URL · 6 months ahead
Short-term rental operatorDetect price undercutters in your segmentSearch URL with your filters (guests, type…) · 1 month
Data analyst / BI teamFeed price time-series into a dashboardAPI integration · flat-prices view · recurring schedule
Concierge / property managerKnow the going rate by season before quotingCity 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

FieldDescription
listingIdAirbnb internal listing ID
listingUrlDirect link to the listing
listingNameListing title
propertyTypee.g. "Apartment in Paris"
cityCity extracted from search results
rooms / beds / bathroomsCapacity (numeric)
rating / reviewCountRating score and review count
currencyISO currency code (e.g. EUR, USD)
dateFrom / dateToDate range covered by samples
minNightsMinimum stay requirement detected
priceSamplesNumber of distinct date windows priced
avgPricePerNightAverage nightly rate across all samples
minPricePerNightCheapest sample in the period
maxPricePerNightMost expensive sample
medianPricePerNightMedian nightly rate
weeklyDiscountPct% discount for 7-night stays vs short stays
monthlyDiscountPct% discount for 28-night stays vs short stays
pricingStrategyfixed, dynamic, fixed-with-length-discounts, dynamic-with-length-discounts — only when ≥ 5 samples
priceByMonthArray: 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
scrapedAtISO 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 points
Sample 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

  1. Open the Actor in Apify Console and click Try for free
  2. Paste an Airbnb search URL (e.g. https://www.airbnb.com/s/Barcelona--Spain/homes) in the URLs field
  3. Click Start — results appear in the Dataset tab within a few minutes
  4. Use the Overview view to compare listings side by side, or Flat prices for a day-by-day spreadsheet

Input

ParameterTypeDefaultDescription
urlsarrayAirbnb listing URLs (/rooms/…) or search URLs (/s/…). Mix freely.
monthsAheadnumber3How many months of price data to collect
currencystringautoOverride ISO currency code (e.g. "EUR")
verboseLogsbooleanfalseLog 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)

  1. URL normalisation — strips user locale, injects locale=en&currency=<selected> for consistent price strings
  2. 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 = 5 is invisible in 2-night searches.
  3. 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
  4. Price extraction — nightly rate parsed from Airbnb's embedded JSON (pricePerNight from structured display); fallback computes price from total ÷ nights when the qualifier is "total"
  5. Price deduplication — for listings found in multiple windows, the 2-night (baseline) price is preferred per check-in week to avoid inflating priceByMonth averages
  6. Rate-limit retry — blocked windows are retried once after a 3-second pause
  7. Stats computation — avg, min, max, median, monthly breakdown, discount detection, pricing strategy (when ≥ 5 samples)
  8. Dataset push — one row per listing; market summary printed to run log

Direct listing URL (calendar mode)

  1. Listing page fetch — extracts GPS coordinates and city from the listing HTML
  2. Calendar API — calls PdpAvailabilityCalendar for each month in the period (10 listings in parallel), returns per-day price, availability, and minNights
  3. Stats computation — same as above plus occupancyRate (% days already booked) and coverageRate (% 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.

priceSamplesInterpretation
0Listing found but price display was non-standard (extremely rare, ~0.5%)
1One confirmed price on one date — useful for comparison, not trend analysis
2–4Enough 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

ScenarioListingsTime (Apify cloud)Proxy data
Single listing, 3 months1~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

ViewBest for
OverviewComparing listings side by side — avg/min/max/median at a glance
Flat pricesDay-level analysis, pivot tables, Excel / Sheets import
Full exportAPI 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.

WhatEventPrice
City scan — listing with a priceairbnb-price-market-listing$0.002 / listing
Direct listing URL — listing with calendar pricesairbnb-price-calendar-listing$0.03 / listing
Listing found but no price returnedapify-default-dataset-item$0
Run start$0

Typical cost:

ScenarioListingsCost
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 URLs
apify 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.



Support

Custom scraper or tailored automation? Contact corentin@outreacher.fr.