๐Ÿ ๐Ÿ“… Airbnb Full-Year Price Tracker PLUS avatar

๐Ÿ ๐Ÿ“… Airbnb Full-Year Price Tracker PLUS

Pricing

$15.99/month + usage

Go to Apify Store
๐Ÿ ๐Ÿ“… Airbnb Full-Year Price Tracker PLUS

๐Ÿ ๐Ÿ“… Airbnb Full-Year Price Tracker PLUS

Track Airbnb prices for an entire year from any listing. This actor collects daily rates, seasonal changes, availability, and minimum stay rules. Ideal for revenue optimization, competitive analysis, and long term pricing research.

Pricing

$15.99/month + usage

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

1

Monthly active users

a day ago

Last modified

Share

Airbnb Price Tracker โ€” Per-Date Pricing, Availability & ADR

Airbnb Full-Year Price Tracker PLUS extracts real, per-date nightly prices, availability, and booking status for any Airbnb listing, then computes ADR, occupancy, and monthly price aggregates from those genuine quotes โ€” not one price cloned across every day in the range. Every run returns structured JSON with Nightly Price, Available, Bookable, and Occupancy % (approx) for each tracked date, ready to load into a spreadsheet, BI tool, or repricing model. Enter a listing URL below and start a run.

What is Airbnb Full-Year Price Tracker PLUS?

Airbnb Full-Year Price Tracker PLUS is an Apify Actor that turns an Airbnb room URL, numeric listing ID, or search keyword into a full calendar of real per-date prices, availability flags, and derived pricing analytics. It makes one listing-metadata call, one 12-month availability-calendar call, and one live price request per genuinely bookable date, then returns everything as structured JSON โ€” no Airbnb account, login, or API key is required to run it. It's built for revenue managers, short-term-rental analysts, and developers who need verified per-date rate data instead of a single price copied across a date range.

What Airbnb pricing and availability data is publicly available to scrape?

A visitor browsing any Airbnb listing page can see its nightly price for selected dates, its 12-month calendar, and its full property description without logging in or booking anything.

Data categoryPublicly available (no login)Restricted (login / booking required)
Nightly price for a selected dateโœ… Shown on the listing page once dates are pickedโ€”
12-month availability calendarโœ… Calendar widget on the public listing pageโ€”
Price breakdown (cleaning fee, service fee, taxes)โœ… Shown before checkout, no login neededโ€”
Listing title, photos, amenities, descriptionโœ…โ€”
Room type, home tier, rating sub-scoresโœ…โ€”
Host display name and public host profile IDโœ…โ€”
Exact street addressโŒRevealed only after a booking is confirmed
Guest identity, message threads, booking historyโŒRequires guest login and an active reservation

Airbnb Full-Year Price Tracker PLUS only returns publicly visible data โ€” what any visitor sees when they open a listing and browse its calendar. Nothing behind a login wall.

What data can I extract with Airbnb Full-Year Price Tracker PLUS?

Each run returns two row types per listing โ€” one listing-summary row and one priced-date row per genuinely bookable date โ€” covering listing identity, host details, and real per-date pricing and availability.

๐Ÿก Listing & host identity fields

Field nameDescription
Listing IDAirbnb's numeric listing ID
Listing URLCanonical airbnb.com/rooms/<id> URL
TitleListing title as shown in search/SEO metadata
Canonical URLSEO canonical URL from the listing page
HostHost display name
Host IDHost's numeric Airbnb user ID
Host Profile URLPublic airbnb.com/users/show/<id> link
Property Typee.g. Entire apartment, private room
Room TypeListing's room-type classification
Home TierAirbnb's internal home-tier logging value
Is SuperhostBoolean superhost flag
LocationCity/region string from the share metadata
Listing Lat / Listing LngListing coordinates
Bedrooms / Beds / BathroomsParsed from the listing overview section
Guest CapacityMaximum guests the listing accepts
Amenities / Amenity CountFull amenities list with group + availability, and a count
Photos / Photo CountFull photo gallery (URL + caption) and a count
DescriptionFull listing description (HTML text)
Cancellation Policy NameHost's configured cancellation policy

๐Ÿ’ฐ Per-date pricing, availability & analytics fields

Field nameDescription
Check-In Date / Check-Out DateThe priced stay's dates
NightsNights in the simulated stay for that date
Day Of Week / Is WeekendDerived from the check-in date
Nightly PriceReal per-date nightly rate (numeric)
CurrencyISO currency code used for the request
Cleaning Fee / Service Fee / TaxesReal fee-breakdown line items, when Airbnb returns them
Total PriceTotal price for that simulated stay
Strike Through PriceOriginal (pre-discount) price, when shown
Available / BookableCalendar-reported availability and bookability
Min Nights / Max NightsThat date's stay-length constraints
ADR (avg nightly)Mean nightly price across all priced dates for the listing
Occupancy % (approx)unavailableDays รท trackedDays ร— 100 โ€” see the caveat below
Min / Max / Median Nightly PriceSpread of real nightly prices in the run
Weekend Avg Price / Weekday Avg PriceSplit by Friday/Saturday check-in vs. the rest
Cheapest Date / Most Expensive DateDates carrying the lowest/highest real price
Monthly AggregatesPer-month avg/min/max/median price + priced-day count

Honesty caveat on occupancy: Airbnb's public calendar cannot distinguish a host-blocked date from a guest-booked one โ€” both come back as available: false. Occupancy % (approx) is therefore a forward-calendar approximation of unavailable share, not a verified booking rate, and it is labeled (approx) for that reason.

Deliberately out of scope: individual review text and full host-verification detail (response rate, ID-verification status) require separate GraphQL operations this Actor does not call โ€” no dead toggles are shipped for them.

๐Ÿค– Add-on: Need additional Airbnb host data?

Need to go from an Airbnb host name to a verified outreach contact? Pair this tracker's Host and Host ID fields with Scraper-Engine's ../Instagram-B2B-Lead-%26-Contact-Scraper or ../LinkedIn-Lead-%26-Contact-Finder-pay-per-events to build a contact list from the hosts this run surfaces.

Why not build this yourself?

Airbnb does not publish a self-serve API that lets outside developers query a live per-date price and availability calendar for an arbitrary listing โ€” the only programmatic route Airbnb documents is its Partner API, which is restricted to vetted channel-management and OTA integrators and does not cover pricing lookups on listings you don't manage.

Building this yourself means reverse-engineering Airbnb's internal GraphQL operations (StaysPdpSections for metadata and price, PdpAvailabilityCalendar for the calendar), keeping the persisted-query hashes current as Airbnb rotates them, and matching a real browser's TLS fingerprint to get past Akamai's bot defenses โ€” this Actor does exactly that with curl_cffi's chrome131 impersonation. You would also need to build and pay for your own proxy escalation ladder (direct โ†’ datacenter โ†’ residential) to stay unblocked, and re-verify every parsing path whenever Airbnb changes its front-end sections.

Airbnb Full-Year Price Tracker PLUS ships that infrastructure already built and maintained, so you send a listing URL and get back real per-date JSON instead of taking on a scraping project of your own.

How to use Airbnb Full-Year Price Tracker PLUS

Airbnb Full-Year Price Tracker PLUS runs entirely on Apify โ€” no separate signup or credentials beyond an Apify account are needed.

  1. Open Airbnb Full-Year Price Tracker PLUS on its Apify Store listing and click Try for free (or Start, if you already have it saved).
  2. Provide startUrls โ€” at least one Airbnb room URL, numeric listing ID, or search keyword. This is the only required input.
  3. Set optional filters worth tuning: startDate/endDate (or numberOfDays), dayFilter to restrict to weekends or weekdays, maxNightlyPrice to drop dates above a ceiling, and the guest counts (adults, children, infants, pets).
  4. Start the run.
  5. Download results as JSON, CSV, Excel, or XML from the run's dataset, or stream them via the Apify API once the run finishes.

๐Ÿ“ˆ How to scale to bulk Airbnb price tracking

startUrls accepts an array, so a single run can track multiple listings โ€” mix room URLs, bare numeric IDs, and search keywords in the same list. A keyword entry (e.g. "luxury apartment in Paris") is expanded into up to maxListings individual listings before pricing begins. There is no separate "bulk mode" toggle โ€” adding more entries to startUrls is the scaling path, and each additional listing adds its own metadata call, calendar call, and per-date price loop to the run.

What can you do with Airbnb pricing and availability data?

  • ๐Ÿ“Š A revenue manager benchmarking a portfolio uses ADR (avg nightly) and Occupancy % (approx) across listings to spot underpriced dates before a competitor drops rates.
  • ๐Ÿ˜๏ธ A short-term-rental investor evaluating a target property uses Weekend Avg Price vs. Weekday Avg Price and Monthly Aggregates to model seasonal cash flow before buying.
  • โš™๏ธ A dynamic-pricing developer feeding a repricing engine uses the per-date Nightly Price and Min Nights rows to set automated rate rules that respect each date's minimum-stay requirement.
  • ๐Ÿ” A market analyst tracking a neighborhood uses Cheapest Date/Most Expensive Date and Price Std Dev to quantify how much a listing's rate swings across the tracked window.
  • ๐Ÿค– An AI agent building a rental-comps assistant indexes the priced-date rows into a RAG pipeline so it can answer "what would this listing cost the weekend of the 12th" directly from the structured JSON, with no HTML parsing involved.

โš ๏ธ How does Airbnb Full-Year Price Tracker PLUS handle rate limits and blocking?

Requests go out through curl_cffi with a chrome131 TLS/JA3 fingerprint, since Airbnb's Akamai edge returns an HTML "Access Denied" page โ€” not JSON โ€” to plain HTTP clients whose fingerprint doesn't match a real browser. Proxying escalates in three tiers per listing: no proxy first (lowest cost), then Apify datacenter proxy, then residential proxy reserved for the block-sensitive price loop, triggered when a response comes back 403/429/503, with a CAPTCHA or HTML content type, or with x-ratelimit-remaining: 0. Each request retries up to 5 times, honoring a Retry-After header (capped at 30 seconds) when present, or waiting 2 seconds otherwise. requestThrottleSeconds adds a fixed delay between price requests to stay under rate limits proactively. If a listing's requests keep failing after escalating to residential proxy three times in a row, that listing is logged as failed and the run moves on to the next one rather than stalling.

โฌ‡๏ธ Input

startUrls is the only required field; every other input has a working default.

ParameterRequiredTypeDescriptionExample value
startUrlsYesarrayAirbnb room URLs, numeric listing IDs, or search keywords["https://www.airbnb.com/rooms/7431972"]
startDateNostringFirst check-in date to track (absolute YYYY-MM-DD or relative like "7 days"). Past dates shift to tomorrow. Default: tomorrow."2026-08-01"
endDateNostringLast check-in date to track. If empty, numberOfDays is used instead. Range is capped to ~12 months of calendar coverage."2026-09-30"
numberOfDaysNointegerUsed only when endDate is empty. Default 30, min 1, max 365.30
nightsPerStayNointegerNights per simulated booking. 0 = auto, using each date's own minimum-nights requirement (recommended). Default 0, min 0, max 365.0
onlyBookableNobooleanON emits only bookable dates with a real price. OFF also emits blocked dates as rows with a null price (never charged). Default true.true
dayFilterNostringall, weekends (Fri/Sat check-in), or weekdays. Default "all"."all"
maxNightlyPriceNointegerDrop priced dates above this nightly ceiling in the selected currency. 0 = no ceiling. Default 0.0
adultsNointegerAdult guests in the price request. Default 2, min 1, max 16.2
childrenNointegerChildren in the guest count. Default 0, min 0, max 16.0
infantsNointegerInfants in the guest count. Default 0, min 0, max 5.0
petsNointegerPets traveling with the guests. Default 0, min 0, max 5.0
currencyNostringAny Airbnb-supported ISO currency code (free text). Default "USD"."USD"
includeAmenitiesNobooleanFetch the full amenities list on the per-listing metadata call. Default true.true
includePhotosNobooleanFetch the full photo gallery on the per-listing metadata call. Default true.true
maxListingsNointegerFor keyword inputs, how many listings to expand each search into. Default 5, min 1, max 50.5
maxPriceRequestsPerListingNointegerSafety cap on per-date price requests per listing (cost control). 0 = no cap. Default 0.0
requestThrottleSecondsNonumberDelay between requests in the price loop. Default 0.7, min 0, max 10.0.7
proxyConfigurationNoobjectApify Proxy settings. The Actor starts without proxy and escalates to datacenter, then residential, when blocked.{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }

Example input

{
"startUrls": ["https://www.airbnb.com/rooms/7431972", "luxury apartment in Paris"],
"startDate": "2026-08-01",
"endDate": "",
"numberOfDays": 30,
"nightsPerStay": 0,
"onlyBookable": true,
"dayFilter": "all",
"maxNightlyPrice": 0,
"adults": 2,
"children": 0,
"infants": 0,
"pets": 0,
"currency": "USD",
"includeAmenities": true,
"includePhotos": true,
"maxListings": 5,
"maxPriceRequestsPerListing": 0,
"requestThrottleSeconds": 0.7,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

โฌ†๏ธ Output

Results are typed, normalized JSON with a consistent schema across runs, downloadable as JSON, CSV, Excel, or XML from the Actor's dataset. Each listing produces one listing-summary row (isChild: false) plus one priced-date row per genuinely bookable date, and โ€” when onlyBookable is OFF โ€” one unavailable-date row per blocked date. Every priced-date row and its parent listing-summary are also mirrored to a per-run child dataset named calendar-<runId>.

Pay-per-event billing: the row_result event is charged once per real priced-date row only. listing-summary rows and unavailable-date rows are pushed uncharged โ€” filter a dataset export on type == "priced-date" to see exactly what was billed. Dates that the calendar reports as not bookable are never requested and never charged.

Example output

{
"type": "priced-date",
"isChild": true,
"parentListingId": "7431972",
"Listing URL": "https://www.airbnb.com/rooms/7431972",
"Listing ID": "7431972",
"Title": "Steps to the stadium! - Entire apartment in Cardiff",
"Check-In Date": "2026-09-08",
"Check-Out Date": "2026-09-09",
"Nights": 1,
"Day Of Week": "Tuesday",
"Is Weekend": false,
"Nightly Price": 212.46,
"Nightly Price Formatted": "$212.46",
"Currency": "USD",
"Currency Symbol": "$",
"Base Total": 212.46,
"Cleaning Fee": 45.0,
"Service Fee": 31.54,
"Taxes": 0.0,
"Total Price": 289.0,
"Total Price Formatted": "$289.00",
"Strike Through Price": null,
"Price Qualifier": "night",
"Available": true,
"Available For Checkin": true,
"Available For Checkout": true,
"Bookable": true,
"Min Nights": 1,
"Max Nights": 365,
"Price Details": [
{ "description": "1 night x $212.46", "priceString": "$212.46" },
{ "description": "Cleaning fee", "priceString": "$45.00" },
{ "description": "Service fee", "priceString": "$31.54" }
],
"scrapedAt": "2026-07-26T10:15:00Z"
}

The paired listing-summary row for the same run carries the identity fields listed above plus the full derived analytics block (ADR (avg nightly), Occupancy % (approx), Min/Max/Median Nightly Price, Weekend Avg Price, Weekday Avg Price, Cheapest Date, Most Expensive Date, Monthly Aggregates, and the tracked/bookable/unavailable/priced day counts).

How does it work?

Airbnb Full-Year Price Tracker PLUS talks to Airbnb's own internal web API โ€” the same GraphQL operations (PdpAvailabilityCalendar, StaysPdpSections) that the airbnb.com front end calls when a visitor browses a listing โ€” routed through curl_cffi with a Chrome TLS fingerprint so requests aren't flagged as bot traffic. When a response looks blocked, the Actor escalates through no proxy, then Apify datacenter proxy, then residential proxy, and retries with backoff rather than failing the whole run. It fetches one metadata call and one calendar call per listing, then one live price request per genuinely bookable date in the tracked range โ€” nothing is cloned or interpolated between real quotes. Only data any visitor can see on the public listing page is returned, and the output schema (field names and row shape) stays stable even when Airbnb changes its own page layout, since parsing targets the underlying API response, not rendered HTML.

Integrations

Calling Airbnb Full-Year Price Tracker PLUS programmatically

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("airbnb-full-year-price-tracker-plus").call(run_input={
"startUrls": ["https://www.airbnb.com/rooms/7431972"],
"startDate": "2026-08-01",
"numberOfDays": 30,
"onlyBookable": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Works in Go, Ruby, Node.js, cURL โ€” any language that can make an HTTP request to the Apify API.

No-code tools (n8n, Make)

In n8n, use the HTTP Request node pointed at Apify's run-sync-get-dataset-items endpoint for this Actor, passing your startUrls and any optional fields as the JSON body. In Make, the Apify app's "Run an Actor" module accepts the same input schema and can pipe the dataset straight into a Google Sheets or database module for downstream pricing automation.

Scraping publicly available Airbnb listing and pricing data is generally permissible; this is business/product data (nightly rates, availability, property details), not the kind of personal data GDPR or CCPA govern, though host display names are handled the same way any public business-listing byline is. Airbnb Full-Year Price Tracker PLUS returns only what any visitor sees on a listing's public page and calendar โ€” nothing gated behind login or a completed booking. What applies instead is Airbnb's own Terms of Service, which govern automated access to the site, and general database-rights considerations around republishing collected data at scale. Consult legal counsel if your use case involves bulk storage or redistribution of this data.

โ“ Frequently asked questions

What Airbnb pricing and availability fields does Airbnb Full-Year Price Tracker PLUS return?

The top fields are Nightly Price, Available, Bookable, ADR (avg nightly), and Occupancy % (approx) โ€” see the full data fields tables above for the complete list across both row types.

Does Airbnb Full-Year Price Tracker PLUS require an Airbnb account or login?

No. Every request uses Airbnb's public web API with a public API key; no Airbnb account, login, or session cookie is needed to run it.

How many Airbnb listings can I track in one run?

startUrls is an array, so one run can track any number of room URLs, listing IDs, or search keywords together. A keyword entry expands into up to maxListings listings before pricing runs.

What happens if a listing has no bookable dates in the tracked range?

The calendar call still returns a listing-summary row with the listing's identity and analytics fields, but Priced Days and Bookable Days come back as 0 and no priced-date rows are pushed for that listing โ€” so nothing is charged for it. If the metadata call itself fails for a listing (for example, a delisted or invalid room ID), the error is logged and the run continues to the next listing without a row for that one.

Can I scrape multiple Airbnb listings at once?

Yes โ€” add multiple entries to startUrls in a single run; each is processed independently with its own metadata call, calendar call, and price loop.

Does Airbnb Full-Year Price Tracker PLUS work with Claude, ChatGPT, and other AI agent tools?

It's callable as a standard HTTP endpoint through the Apify API from any agent framework that can issue an HTTP request โ€” pass startUrls and the run returns structured JSON an agent can consume directly.

How does Airbnb Full-Year Price Tracker PLUS compare to other Airbnb price scrapers?

As observed on the Apify Store on 2026-07-26, moving_beacon-owner1/my-actor-9 ("Airbnb Full Year Price Tracker") and simpleapi/airbnb-full-year-price-tracker-scraper ("Airbnb Full Year Price Tracker Scraper") both describe returning full-year pricing but neither publishes source-level detail on whether each date's price is independently requested versus interpolated. Airbnb Full-Year Price Tracker PLUS documents its process explicitly: one calendar call plus one independent price request per genuinely bookable date, with row_result billed only on those real per-date rows.

Does Airbnb Full-Year Price Tracker PLUS return data in a format LLMs can use directly?

Yes. Output is typed, normalized JSON with consistent field names across runs โ€” no HTML parsing or CSS selectors required. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool.

What happens when Airbnb changes its layout or anti-bot system?

The Actor targets Airbnb's underlying GraphQL API rather than rendered HTML, so front-end layout changes don't affect the output schema. Persisted-query hashes are kept current, with a last-resort discovery path that re-derives the operation ID from Airbnb's own JS bundles if the vetted hashes stop working. No specific turnaround time is promised for anti-bot changes.

Can I use Airbnb Full-Year Price Tracker PLUS without managing proxies or browser infrastructure?

Yes. Proxy tier selection, escalation on blocking, retries with backoff, and the TLS fingerprint needed to reach Airbnb's API are all handled internally โ€” you only need to supply proxyConfiguration if you want to opt into Apify Proxy for the residential tier.

Which fields work best for AI training data and RAG indexing?

For RAG, index Description, Title, and Meta Description as the high-information text fields, paired with Amenities and Location for property context. For structured training data, Nightly Price, ADR (avg nightly), Occupancy % (approx), and the Monthly Aggregates array return as consistent typed primitives across every listing and run.

๐Ÿ’ฌ Your feedback

Found a bug or a field that doesn't match what Airbnb actually returns? Let us know through the Actor's Issues tab on its Apify Store listing โ€” reports like these are what keep the persisted-query hashes and parsing paths current as Airbnb changes its API.