๐ ๐ Airbnb Full-Year Price Tracker PLUS
Pricing
$15.99/month + usage
๐ ๐ 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
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
1
Monthly active users
a day ago
Last modified
Categories
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 category | Publicly 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 name | Description |
|---|---|
Listing ID | Airbnb's numeric listing ID |
Listing URL | Canonical airbnb.com/rooms/<id> URL |
Title | Listing title as shown in search/SEO metadata |
Canonical URL | SEO canonical URL from the listing page |
Host | Host display name |
Host ID | Host's numeric Airbnb user ID |
Host Profile URL | Public airbnb.com/users/show/<id> link |
Property Type | e.g. Entire apartment, private room |
Room Type | Listing's room-type classification |
Home Tier | Airbnb's internal home-tier logging value |
Is Superhost | Boolean superhost flag |
Location | City/region string from the share metadata |
Listing Lat / Listing Lng | Listing coordinates |
Bedrooms / Beds / Bathrooms | Parsed from the listing overview section |
Guest Capacity | Maximum guests the listing accepts |
Amenities / Amenity Count | Full amenities list with group + availability, and a count |
Photos / Photo Count | Full photo gallery (URL + caption) and a count |
Description | Full listing description (HTML text) |
Cancellation Policy Name | Host's configured cancellation policy |
๐ฐ Per-date pricing, availability & analytics fields
| Field name | Description |
|---|---|
Check-In Date / Check-Out Date | The priced stay's dates |
Nights | Nights in the simulated stay for that date |
Day Of Week / Is Weekend | Derived from the check-in date |
Nightly Price | Real per-date nightly rate (numeric) |
Currency | ISO currency code used for the request |
Cleaning Fee / Service Fee / Taxes | Real fee-breakdown line items, when Airbnb returns them |
Total Price | Total price for that simulated stay |
Strike Through Price | Original (pre-discount) price, when shown |
Available / Bookable | Calendar-reported availability and bookability |
Min Nights / Max Nights | That 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 Price | Spread of real nightly prices in the run |
Weekend Avg Price / Weekday Avg Price | Split by Friday/Saturday check-in vs. the rest |
Cheapest Date / Most Expensive Date | Dates carrying the lowest/highest real price |
Monthly Aggregates | Per-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.
- 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).
- Provide
startUrlsโ at least one Airbnb room URL, numeric listing ID, or search keyword. This is the only required input. - Set optional filters worth tuning:
startDate/endDate(ornumberOfDays),dayFilterto restrict to weekends or weekdays,maxNightlyPriceto drop dates above a ceiling, and the guest counts (adults,children,infants,pets). - Start the run.
- 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)andOccupancy % (approx)across listings to spot underpriced dates before a competitor drops rates. - ๐๏ธ A short-term-rental investor evaluating a target property uses
Weekend Avg Pricevs.Weekday Avg PriceandMonthly Aggregatesto model seasonal cash flow before buying. - โ๏ธ A dynamic-pricing developer feeding a repricing engine uses the per-date
Nightly PriceandMin Nightsrows to set automated rate rules that respect each date's minimum-stay requirement. - ๐ A market analyst tracking a neighborhood uses
Cheapest Date/Most Expensive DateandPrice Std Devto quantify how much a listing's rate swings across the tracked window. - ๐ค An AI agent building a rental-comps assistant indexes the
priced-daterows 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.
| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
startUrls | Yes | array | Airbnb room URLs, numeric listing IDs, or search keywords | ["https://www.airbnb.com/rooms/7431972"] |
startDate | No | string | First check-in date to track (absolute YYYY-MM-DD or relative like "7 days"). Past dates shift to tomorrow. Default: tomorrow. | "2026-08-01" |
endDate | No | string | Last check-in date to track. If empty, numberOfDays is used instead. Range is capped to ~12 months of calendar coverage. | "2026-09-30" |
numberOfDays | No | integer | Used only when endDate is empty. Default 30, min 1, max 365. | 30 |
nightsPerStay | No | integer | Nights per simulated booking. 0 = auto, using each date's own minimum-nights requirement (recommended). Default 0, min 0, max 365. | 0 |
onlyBookable | No | boolean | ON emits only bookable dates with a real price. OFF also emits blocked dates as rows with a null price (never charged). Default true. | true |
dayFilter | No | string | all, weekends (Fri/Sat check-in), or weekdays. Default "all". | "all" |
maxNightlyPrice | No | integer | Drop priced dates above this nightly ceiling in the selected currency. 0 = no ceiling. Default 0. | 0 |
adults | No | integer | Adult guests in the price request. Default 2, min 1, max 16. | 2 |
children | No | integer | Children in the guest count. Default 0, min 0, max 16. | 0 |
infants | No | integer | Infants in the guest count. Default 0, min 0, max 5. | 0 |
pets | No | integer | Pets traveling with the guests. Default 0, min 0, max 5. | 0 |
currency | No | string | Any Airbnb-supported ISO currency code (free text). Default "USD". | "USD" |
includeAmenities | No | boolean | Fetch the full amenities list on the per-listing metadata call. Default true. | true |
includePhotos | No | boolean | Fetch the full photo gallery on the per-listing metadata call. Default true. | true |
maxListings | No | integer | For keyword inputs, how many listings to expand each search into. Default 5, min 1, max 50. | 5 |
maxPriceRequestsPerListing | No | integer | Safety cap on per-date price requests per listing (cost control). 0 = no cap. Default 0. | 0 |
requestThrottleSeconds | No | number | Delay between requests in the price loop. Default 0.7, min 0, max 10. | 0.7 |
proxyConfiguration | No | object | Apify 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 ApifyClientclient = 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.
Is it legal to scrape Airbnb listings?
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.
