{
  "data": {
    "id": "zfEcct44bLImtWJsa",
    "actId": "02gBCbgBRDoLpMoY5",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-10-25T15:38:17.903Z",
    "finishedAt": "2026-10-25T15:38:52.188Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 34217,
      "runTimeSecs": 34.217,
      "computeUnits": 0.03801888888888889,
      "imageSizeBytes": 3142795776
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Airbnb Stay Finder: Nightly Rates, Fees & Availability\",\n  \"description\": \"Search Airbnb stays by city, neighborhood, place ID or map area, or load specific listing URLs. Get nightly and stay-total prices, fees, host details, amenities, reviews and a 12-month availability calendar.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"Search discovers listings by location or map area. Details loads the listing URLs or IDs you provide.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"details\"\n      ],\n      \"enumTitles\": [\n        \"Search by location or map area\",\n        \"Load specific listing URLs or IDs\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\",\n      \"sectionCaption\": \"Search\"\n    },\n    \"location\": {\n      \"title\": \"Location\",\n      \"type\": \"string\",\n      \"description\": \"City, region, country or neighborhood, e.g. New York, Paris, SoHo. Airbnb's own location lookup validates the name before searching (mode=search).\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"New York\"\n    },\n    \"placeId\": {\n      \"title\": \"Airbnb place ID\",\n      \"type\": \"string\",\n      \"description\": \"Optional Google/Airbnb place ID (e.g. ChIJOwg_06VPwokRYv534QaPC8g). Takes precedence over the resolved location and skips text matching (mode=search).\",\n      \"editor\": \"textfield\"\n    },\n    \"neighborhood\": {\n      \"title\": \"Neighborhood\",\n      \"type\": \"string\",\n      \"description\": \"Optional neighborhood to combine with Location, e.g. SoHo + New York (mode=search).\",\n      \"editor\": \"textfield\"\n    },\n    \"bbox\": {\n      \"title\": \"Map bounding box\",\n      \"type\": \"object\",\n      \"description\": \"Search inside a map rectangle instead of a named location. Use decimal degrees: swLat, swLng (south-west corner) and neLat, neLng (north-east corner), plus an optional zoom (1-22). Example: {\\\"swLat\\\": 40.7075, \\\"swLng\\\": -74.0135, \\\"neLat\\\": 40.7904, \\\"neLng\\\": -73.9591, \\\"zoom\\\": 13} (mode=search).\",\n      \"editor\": \"json\"\n    },\n    \"listingUrls\": {\n      \"title\": \"Listing URLs\",\n      \"type\": \"array\",\n      \"description\": \"Airbnb room URLs, e.g. https://www.airbnb.com/rooms/23222680 (mode=details).\",\n      \"editor\": \"stringList\",\n      \"sectionCaption\": \"Specific listings\"\n    },\n    \"listingIds\": {\n      \"title\": \"Listing IDs\",\n      \"type\": \"array\",\n      \"description\": \"Numeric Airbnb listing IDs, e.g. 23222680. You can mix these with listing URLs (mode=details).\",\n      \"editor\": \"stringList\"\n    },\n    \"checkIn\": {\n      \"title\": \"Check-in date\",\n      \"type\": \"string\",\n      \"description\": \"Stay start date in YYYY-MM-DD format. Leave both dates empty to use Airbnb's displayed quote (search) or to skip the price quote (details).\",\n      \"editor\": \"textfield\",\n      \"pattern\": \"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\",\n      \"nullable\": true,\n      \"sectionCaption\": \"Stay dates and guests\"\n    },\n    \"checkOut\": {\n      \"title\": \"Check-out date\",\n      \"type\": \"string\",\n      \"description\": \"Stay end date in YYYY-MM-DD format. Must be after the check-in date.\",\n      \"editor\": \"textfield\",\n      \"pattern\": \"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\",\n      \"nullable\": true\n    },\n    \"adults\": {\n      \"title\": \"Adults\",\n      \"type\": \"integer\",\n      \"description\": \"Number of adult guests (1-16).\",\n      \"default\": 1,\n      \"minimum\": 1,\n      \"maximum\": 16\n    },\n    \"children\": {\n      \"title\": \"Children\",\n      \"type\": \"integer\",\n      \"description\": \"Number of children aged 2-12 (0-15).\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 15\n    },\n    \"infants\": {\n      \"title\": \"Infants\",\n      \"type\": \"integer\",\n      \"description\": \"Number of infants under 2 (0-5).\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 5\n    },\n    \"pets\": {\n      \"title\": \"Pets\",\n      \"type\": \"integer\",\n      \"description\": \"Number of pets (0-5).\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 5\n    },\n    \"minPrice\": {\n      \"title\": \"Minimum nightly price\",\n      \"type\": \"integer\",\n      \"description\": \"Lowest nightly price to include, in the selected currency. 0 means no minimum.\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 100000,\n      \"sectionCaption\": \"Filters\"\n    },\n    \"maxPrice\": {\n      \"title\": \"Maximum nightly price\",\n      \"type\": \"integer\",\n      \"description\": \"Highest nightly price to include, in the selected currency. 0 means no maximum.\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 100000\n    },\n    \"roomType\": {\n      \"title\": \"Room type\",\n      \"type\": \"string\",\n      \"description\": \"Restrict results to one Airbnb room type.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"Any\",\n        \"Entire home/apt\",\n        \"Private room\",\n        \"Shared room\",\n        \"Hotel room\"\n      ],\n      \"enumTitles\": [\n        \"Any room type\",\n        \"Entire home or apartment\",\n        \"Private room\",\n        \"Shared room\",\n        \"Hotel room\"\n      ],\n      \"default\": \"Any\"\n    },\n    \"propertyType\": {\n      \"title\": \"Property type\",\n      \"type\": \"string\",\n      \"description\": \"Restrict results to one Airbnb property type.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"Any\",\n        \"Apartment\",\n        \"House\",\n        \"Villa\",\n        \"Condominium\",\n        \"Loft\",\n        \"Guest suite\",\n        \"Guesthouse\",\n        \"Hotel\",\n        \"Resort\",\n        \"Cottage\",\n        \"Cabin\",\n        \"Bungalow\",\n        \"Townhouse\",\n        \"Tiny home\",\n        \"Boat\",\n        \"Barn\",\n        \"Camper/RV\",\n        \"Farm stay\",\n        \"Castle\",\n        \"Cave\",\n        \"Dome\",\n        \"Container\",\n        \"Treehouse\",\n        \"Yurt\",\n        \"Serviced apartment\"\n      ],\n      \"enumTitles\": [\n        \"Any property type\",\n        \"Apartment\",\n        \"House\",\n        \"Villa\",\n        \"Condominium\",\n        \"Loft\",\n        \"Guest suite\",\n        \"Guesthouse\",\n        \"Hotel\",\n        \"Resort\",\n        \"Cottage\",\n        \"Cabin\",\n        \"Bungalow\",\n        \"Townhouse\",\n        \"Tiny home\",\n        \"Boat\",\n        \"Barn\",\n        \"Camper/RV\",\n        \"Farm stay\",\n        \"Castle\",\n        \"Cave\",\n        \"Dome\",\n        \"Container\",\n        \"Treehouse\",\n        \"Yurt\",\n        \"Serviced apartment\"\n      ],\n      \"default\": \"Any\"\n    },\n    \"minBedrooms\": {\n      \"title\": \"Minimum bedrooms\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum number of bedrooms. 0 means no minimum.\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 20\n    },\n    \"minBeds\": {\n      \"title\": \"Minimum beds\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum number of beds. 0 means no minimum.\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 30\n    },\n    \"minBathrooms\": {\n      \"title\": \"Minimum bathrooms\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum number of bathrooms. 0 means no minimum.\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 20\n    },\n    \"maxListings\": {\n      \"title\": \"Maximum listings\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on records (1-300). Airbnb pages hold 40 results each; duplicate cards are removed automatically.\",\n      \"default\": 20,\n      \"prefill\": 3,\n      \"minimum\": 1,\n      \"maximum\": 300,\n      \"sectionCaption\": \"Output\"\n    },\n    \"includeDetails\": {\n      \"title\": \"Include full listing details\",\n      \"type\": \"boolean\",\n      \"description\": \"Adds the listing page and an exact stay quote: host, amenities, photos, description, fees and availability. Costs extra requests per listing.\",\n      \"default\": false,\n      \"prefill\": false,\n      \"sectionCaption\": \"Detail enrichment\"\n    },\n    \"includeReviews\": {\n      \"title\": \"Include reviews\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch recent guest reviews for each listing (up to maxReviews).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxReviews\": {\n      \"title\": \"Maximum reviews per listing\",\n      \"type\": \"integer\",\n      \"description\": \"Reviews returned per listing (1-24).\",\n      \"default\": 12,\n      \"minimum\": 1,\n      \"maximum\": 24\n    },\n    \"includeCalendar\": {\n      \"title\": \"Include availability calendar\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch the day-by-day availability calendar for each listing.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"calendarMonths\": {\n      \"title\": \"Calendar months\",\n      \"type\": \"integer\",\n      \"description\": \"Number of months to return, starting with the current month (1-12).\",\n      \"default\": 12,\n      \"minimum\": 1,\n      \"maximum\": 12\n    },\n    \"currency\": {\n      \"title\": \"Currency\",\n      \"type\": \"string\",\n      \"description\": \"Currency for prices. Airbnb returns quotes in this currency.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"USD\",\n        \"EUR\",\n        \"GBP\",\n        \"JPY\",\n        \"CAD\",\n        \"AUD\",\n        \"NZD\",\n        \"CHF\",\n        \"SEK\",\n        \"NOK\",\n        \"DKK\",\n        \"PLN\",\n        \"CZK\",\n        \"HUF\",\n        \"RON\",\n        \"BGN\",\n        \"TRY\",\n        \"RUB\",\n        \"UAH\",\n        \"ILS\",\n        \"AED\",\n        \"SAR\",\n        \"QAR\",\n        \"KWD\",\n        \"BHD\",\n        \"OMR\",\n        \"EGP\",\n        \"ZAR\",\n        \"NGN\",\n        \"KES\",\n        \"GHS\",\n        \"MAD\",\n        \"INR\",\n        \"PKR\",\n        \"BDT\",\n        \"LKR\",\n        \"NPR\",\n        \"CNY\",\n        \"HKD\",\n        \"TWD\",\n        \"SGD\",\n        \"MYR\",\n        \"THB\",\n        \"IDR\",\n        \"PHP\",\n        \"VND\",\n        \"KRW\",\n        \"MXN\",\n        \"BRL\",\n        \"ARS\",\n        \"CLP\",\n        \"COP\",\n        \"PEN\",\n        \"UYU\",\n        \"CRC\",\n        \"DOP\"\n      ],\n      \"enumTitles\": [\n        \"US dollar\",\n        \"Euro\",\n        \"British pound\",\n        \"Japanese yen\",\n        \"Canadian dollar\",\n        \"Australian dollar\",\n        \"New Zealand dollar\",\n        \"Swiss franc\",\n        \"Swedish krona\",\n        \"Norwegian krone\",\n        \"Danish krone\",\n        \"Polish zloty\",\n        \"Czech koruna\",\n        \"Hungarian forint\",\n        \"Romanian leu\",\n        \"Bulgarian lev\",\n        \"Turkish lira\",\n        \"Russian ruble\",\n        \"Ukrainian hryvnia\",\n        \"Israeli shekel\",\n        \"UAE dirham\",\n        \"Saudi riyal\",\n        \"Qatari riyal\",\n        \"Kuwaiti dinar\",\n        \"Bahraini dinar\",\n        \"Omani rial\",\n        \"Egyptian pound\",\n        \"South African rand\",\n        \"Nigerian naira\",\n        \"Kenyan shilling\",\n        \"Ghanaian cedi\",\n        \"Moroccan dirham\",\n        \"Indian rupee\",\n        \"Pakistani rupee\",\n        \"Bangladeshi taka\",\n        \"Sri Lankan rupee\",\n        \"Nepalese rupee\",\n        \"Chinese yuan\",\n        \"Hong Kong dollar\",\n        \"Taiwan dollar\",\n        \"Singapore dollar\",\n        \"Malaysian ringgit\",\n        \"Thai baht\",\n        \"Indonesian rupiah\",\n        \"Philippine peso\",\n        \"Vietnamese dong\",\n        \"South Korean won\",\n        \"Mexican peso\",\n        \"Brazilian real\",\n        \"Argentine peso\",\n        \"Chilean peso\",\n        \"Colombian peso\",\n        \"Peruvian sol\",\n        \"Uruguayan peso\",\n        \"Costa Rican colon\",\n        \"Dominican peso\"\n      ],\n      \"default\": \"USD\",\n      \"sectionCaption\": \"Language and network\"\n    },\n    \"locale\": {\n      \"title\": \"Locale\",\n      \"type\": \"string\",\n      \"description\": \"Language/region used for Airbnb labels, dates and localized text.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"en\",\n        \"en-US\",\n        \"en-GB\",\n        \"en-CA\",\n        \"en-AU\",\n        \"de-DE\",\n        \"fr-FR\",\n        \"es-ES\",\n        \"es-MX\",\n        \"it-IT\",\n        \"pt-BR\",\n        \"pt-PT\",\n        \"nl-NL\",\n        \"sv-SE\",\n        \"da-DK\",\n        \"nb-NO\",\n        \"fi-FI\",\n        \"pl-PL\",\n        \"cs-CZ\",\n        \"hu-HU\",\n        \"ro-RO\",\n        \"el-GR\",\n        \"tr-TR\",\n        \"ru-RU\",\n        \"uk-UA\",\n        \"he-IL\",\n        \"ar\",\n        \"hi-IN\",\n        \"id-ID\",\n        \"th-TH\",\n        \"vi-VN\",\n        \"ja-JP\",\n        \"ko-KR\",\n        \"zh-CN\",\n        \"zh-TW\"\n      ],\n      \"enumTitles\": [\n        \"English\",\n        \"English (United States)\",\n        \"English (United Kingdom)\",\n        \"English (Canada)\",\n        \"English (Australia)\",\n        \"German\",\n        \"French\",\n        \"Spanish (Spain)\",\n        \"Spanish (Mexico)\",\n        \"Italian\",\n        \"Portuguese (Brazil)\",\n        \"Portuguese (Portugal)\",\n        \"Dutch\",\n        \"Swedish\",\n        \"Danish\",\n        \"Norwegian\",\n        \"Finnish\",\n        \"Polish\",\n        \"Czech\",\n        \"Hungarian\",\n        \"Romanian\",\n        \"Greek\",\n        \"Turkish\",\n        \"Russian\",\n        \"Ukrainian\",\n        \"Hebrew\",\n        \"Arabic\",\n        \"Hindi\",\n        \"Indonesian\",\n        \"Thai\",\n        \"Vietnamese\",\n        \"Japanese\",\n        \"Korean\",\n        \"Chinese (Simplified)\",\n        \"Chinese (Traditional)\"\n      ],\n      \"default\": \"en\"\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional. Leave empty and the actor connects directly, then switches to an automatic Apify proxy only if Airbnb blocks a request.\",\n      \"editor\": \"proxy\"\n    }\n  }\n}",
    "readme": "# Airbnb Stay Finder: Nightly Rates, Fees & Availability\r\n\r\nCollect Airbnb stays with the numbers that matter: the **nightly rate**, the **stay total for your dates**, the fee lines Airbnb shows, the host, amenities, coordinates, availability and optional guest reviews — for a whole city or for one listing you already have the link to.\r\n\r\nUnlike search-card-only scrapers, this actor can follow every listing into its detail page, request the exact stay quote for your dates and guests, and return a 12-month day-by-day availability calendar. No Airbnb account, login or cookie is needed.\r\n\r\n## What this actor does\r\n\r\n- **Two modes:** `search` for a location, place ID or map rectangle; `details` for listing URLs and IDs you supply\r\n- **Real price model:** separate `nightlyPrice`, `totalPrice`, `nights`, `currency`, `priceQualifier`, fee lines and whether Airbnb says fees are included\r\n- **Cursor pagination:** 40 Airbnb cards per page, de-duplicated by listing ID, up to 300 records\r\n- **Filters:** dates, guests, nightly price range, room type, property type, bedrooms, beds and bathrooms\r\n- **Optional enrichment:** full detail page (host, amenities, photos, description), stay quote, reviews and a 12-month calendar\r\n- **Global pricing:** 56 currencies and 35 locales, so prices are not forced into USD or GBP\r\n- **Empty fields are omitted** — records never contain `null`, empty strings or empty arrays\r\n\r\n## Output per listing\r\n\r\n- `id` — numeric Airbnb listing ID\r\n- `url` — direct listing page URL\r\n- `name` — listing or room name\r\n- `type` — the category line Airbnb shows, e.g. `Apartment in North Bergen`\r\n- `roomType` — `Entire home/apt`, `Private room`, `Shared room` or `Hotel room`\r\n- `propertyType` — apartment, house, hotel, villa, etc. (detail mode)\r\n- `location` — city or neighborhood\r\n- `lat`, `lng` — public, approximate coordinates (never the exact address)\r\n- `nightlyPrice`, `totalPrice`, `currency`, `nights` — nightly rate and stay total for the selected dates\r\n- `priceQualifier` — what the displayed quote covers, e.g. `for 5 nights`\r\n- `priceBreakdown` — the price lines Airbnb exposes (nightly line, cleaning/resort fees, discounts)\r\n- `priceIncludesFees` — `true` when Airbnb marks the quote as including all fees\r\n- `totalBeforeTaxes` — when Airbnb exposes a “total before taxes” line\r\n- `originalPrice`, `discount` — pre-discount quote and saving, when Airbnb shows one\r\n- `rating`, `reviewCount` — overall guest rating and number of reviews\r\n- `images`, `thumbnail` — listing photo URLs\r\n- `host`, `hostId`, `hostPhoto`, `hostRating`, `hostReviewCount` — host details (detail mode)\r\n- `isSuperhost`, `isVerified` — host status\r\n- `badges`, `isGuestFavorite` — Airbnb badges shown on the search card\r\n- `amenities`, `amenitiesUnavailable` — included and explicitly unavailable amenities (detail mode)\r\n- `description` — listing description with HTML removed (detail mode)\r\n- `personCapacity` — maximum guests\r\n- `availability` — `isAvailable`, `canInstantBook` and any unavailability reason for the requested dates\r\n- `minNights`, `maxNights` — available inside each calendar day\r\n- `reviews` — optional recent reviews with rating, text, date, reviewer and host response\r\n- `calendar` — optional day-by-day availability for up to 12 months\r\n- `checkIn`, `checkOut` — the stay dates used for the quote\r\n- `sourceUrl` — the search page or listing page that produced the record\r\n- `scrapedAt`, `recordType: \"listing\"`\r\n\r\nCompatibility aliases are also kept for older integrations: `price`, `photos`, `latitude`, `longitude` and `searchUrl`.\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `mode` | string | `search` | `search` or `details` |\r\n| `location` | string | `New York` | City, region, country or neighborhood (mode=search) |\r\n| `placeId` | string | – | Airbnb/Google place ID; skips text matching (mode=search) |\r\n| `neighborhood` | string | – | Optional neighborhood combined with `location` (mode=search) |\r\n| `bbox` | object | – | Map rectangle: `swLat`, `swLng`, `neLat`, `neLng`, optional `zoom` (mode=search) |\r\n| `listingUrls` | array | – | Airbnb room URLs (mode=details) |\r\n| `listingIds` | array | – | Numeric listing IDs (mode=details) |\r\n| `checkIn`, `checkOut` | string | – | Stay dates in `YYYY-MM-DD`; both or neither |\r\n| `adults` | integer | `1` | Adults, 1–16 |\r\n| `children` | integer | `0` | Children, 0–15 |\r\n| `infants` | integer | `0` | Infants, 0–5 |\r\n| `pets` | integer | `0` | Pets, 0–5 |\r\n| `minPrice`, `maxPrice` | integer | `0` | Nightly price range; `0` means no limit |\r\n| `roomType` | string | `Any` | `Any`, `Entire home/apt`, `Private room`, `Shared room`, `Hotel room` |\r\n| `propertyType` | string | `Any` | Airbnb property type, e.g. `Apartment`, `House`, `Hotel` |\r\n| `minBedrooms`, `minBeds`, `minBathrooms` | integer | `0` | Minimum counts; `0` means no minimum |\r\n| `maxListings` | integer | `20` | Hard cap, 1–300 (prefill: `5`) |\r\n| `includeDetails` | boolean | `false` | Fetch each listing page and exact stay quote |\r\n| `includeReviews` | boolean | `false` | Add recent guest reviews |\r\n| `maxReviews` | integer | `12` | Reviews per listing, 1–24 |\r\n| `includeCalendar` | boolean | `false` | Add the availability calendar |\r\n| `calendarMonths` | integer | `12` | Calendar length, 1–12 months |\r\n| `currency` | string | `USD` | One of 56 supported currencies |\r\n| `locale` | string | `en` | Language/region for labels and dates |\r\n| `proxyConfiguration` | object | – | Optional; normally leave empty |\r\n\r\n## Example: cheapest useful run\r\n\r\n```json\r\n{\r\n  \"location\": \"New York\",\r\n  \"maxListings\": 5\r\n}\r\n```\r\n\r\n## Example: a full city scan with filters\r\n\r\n```json\r\n{\r\n  \"location\": \"Lisbon, Portugal\",\r\n  \"checkIn\": \"2027-05-10\",\r\n  \"checkOut\": \"2027-05-17\",\r\n  \"adults\": 2,\r\n  \"minPrice\": 80,\r\n  \"maxPrice\": 250,\r\n  \"roomType\": \"Entire home/apt\",\r\n  \"minBedrooms\": 1,\r\n  \"maxListings\": 120,\r\n  \"currency\": \"EUR\",\r\n  \"locale\": \"pt-PT\"\r\n}\r\n```\r\n\r\n## Example: exact detail, quote, reviews and calendar\r\n\r\n```json\r\n{\r\n  \"mode\": \"details\",\r\n  \"listingUrls\": [\"https://www.airbnb.com/rooms/23222680\"],\r\n  \"checkIn\": \"2027-03-04\",\r\n  \"checkOut\": \"2027-03-09\",\r\n  \"adults\": 2,\r\n  \"includeReviews\": true,\r\n  \"maxReviews\": 24,\r\n  \"includeCalendar\": true,\r\n  \"calendarMonths\": 6,\r\n  \"currency\": \"USD\"\r\n}\r\n```\r\n\r\n## Example: map rectangle instead of a city name\r\n\r\n```json\r\n{\r\n  \"bbox\": {\r\n    \"swLat\": 40.7075,\r\n    \"swLng\": -74.0135,\r\n    \"neLat\": 40.7904,\r\n    \"neLng\": -73.9591,\r\n    \"zoom\": 13\r\n  },\r\n  \"checkIn\": \"2027-04-01\",\r\n  \"checkOut\": \"2027-04-04\",\r\n  \"adults\": 2,\r\n  \"maxListings\": 80,\r\n  \"includeDetails\": true\r\n}\r\n```\r\n\r\n## Use cases\r\n\r\n- **Short-term rental pricing** — compare nightly rates and stay totals across a neighborhood before setting your own calendar\r\n- **Travel research** — export a city's stays with ratings, room type and amenities into a spreadsheet or BI tool\r\n- **Market monitoring** — re-run the same dates monthly to track rate and availability changes\r\n- **Host competitive analysis** — benchmark your listing against nearby Superhosts with similar capacity\r\n- **Investment screening** — map approximate coordinates to study short-term rental density by area\r\n- **Review mining** — pull recent guest feedback for a shortlist of properties\r\n\r\n## FAQ\r\n\r\n### Is `nightlyPrice` the same as the number on the search card?\r\n\r\nUsually not. Airbnb's search card shows the **stay total** for the selected dates. `totalPrice` is that quote; `nightlyPrice` is parsed from Airbnb's own nightly line (for example, `5 nights x $335.80`). When you provide dates, both refer to those exact dates. Without dates, Airbnb still returns a five-night display quote, which the actor labels with `nights: 5`.\r\n\r\n### Are all fees included in `totalPrice`?\r\n\r\nAirbnb's quote can include cleaning, service and resort fees, and sometimes a “Prices include all fees” notice. The actor exposes `priceBreakdown` and `priceIncludesFees` so you can see what Airbnb included. Taxes and local charges can still vary by destination and are not always part of the displayed quote; treat `totalPrice` as Airbnb's quoted stay price, not a guaranteed checkout total.\r\n\r\n### Why is the price missing on some records?\r\n\r\nIn `details` mode without dates, Airbnb does not show a stay price. Those records still include the listing data. Add `checkIn` and `checkOut` to get a quote. In `search` mode, a small number of cards legitimately omit the primary price line; the actor falls back to Airbnb's nightly explanation when available.\r\n\r\n### How many listings can I get?\r\n\r\n`maxListings` is capped at 300. Airbnb returns 40 cards per page and de-duplicates/reorders between pages, so a deep search typically yields around 230–240 unique listings per query. Use different neighborhoods, map rectangles or price ranges to cover more of a market. The actor never claims “all listings”.\r\n\r\n### Why did my location fail?\r\n\r\nAirbnb returns a generic feed for gibberish queries instead of zero results. The actor validates the location through Airbnb's own autocomplete and fails with a clear message when nothing matches, so you never receive unrelated rows. Neighborhoods, cities, regions and countries all work; you can also supply a `placeId` or a `bbox`.\r\n\r\n### Do I need a proxy or an Airbnb account?\r\n\r\nNo. The actor reads Airbnb's public pages and GraphQL responses without cookies or login. It connects directly first; if Airbnb blocks a request, it automatically retries through an Apify proxy and then a browser. Nothing needs to be configured.\r\n\r\n### Why are coordinates approximate?\r\n\r\nAirbnb publishes approximate map coordinates before booking to protect host privacy. Use them for area analysis, not for deriving a street address.\r\n\r\n### Can I get per-day prices in the calendar?\r\n\r\nThe availability calendar reports whether each date is available, check-in/check-out eligibility and min/max nights. Airbnb does not expose a per-day price in that endpoint. For a price on specific dates, set `checkIn`/`checkOut` and use the stay quote.\r\n\r\n### Is this affiliated with Airbnb?\r\n\r\nNo. This is an independent, third-party actor that reads publicly accessible Airbnb pages and responses. It is not affiliated with or endorsed by Airbnb.\r\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "airbnb-listing-price-and-location-finder",
      "title": "Airbnb Stay Finder: Nightly Rates, Fees & Availability",
      "description": "Search Airbnb stays by city, neighborhood, place ID or map area, or load specific listing URLs. Returns nightly and stay-total prices, fees, host details, amenities, photos, reviews and a 12-month availability calendar.",
      "version": "2.0",
      "meta": {
        "templateId": "python-start"
      },
      "input": {
        "title": "Airbnb Stay Finder: Nightly Rates, Fees & Availability",
        "description": "Search Airbnb stays by city, neighborhood, place ID or map area, or load specific listing URLs. Get nightly and stay-total prices, fees, host details, amenities, reviews and a 12-month availability calendar.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "Search discovers listings by location or map area. Details loads the listing URLs or IDs you provide.",
            "editor": "select",
            "enum": [
              "search",
              "details"
            ],
            "enumTitles": [
              "Search by location or map area",
              "Load specific listing URLs or IDs"
            ],
            "default": "search",
            "prefill": "search",
            "sectionCaption": "Search"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, region, country or neighborhood, e.g. New York, Paris, SoHo. Airbnb's own location lookup validates the name before searching (mode=search).",
            "editor": "textfield",
            "prefill": "New York"
          },
          "placeId": {
            "title": "Airbnb place ID",
            "type": "string",
            "description": "Optional Google/Airbnb place ID (e.g. ChIJOwg_06VPwokRYv534QaPC8g). Takes precedence over the resolved location and skips text matching (mode=search).",
            "editor": "textfield"
          },
          "neighborhood": {
            "title": "Neighborhood",
            "type": "string",
            "description": "Optional neighborhood to combine with Location, e.g. SoHo + New York (mode=search).",
            "editor": "textfield"
          },
          "bbox": {
            "title": "Map bounding box",
            "type": "object",
            "description": "Search inside a map rectangle instead of a named location. Use decimal degrees: swLat, swLng (south-west corner) and neLat, neLng (north-east corner), plus an optional zoom (1-22). Example: {\"swLat\": 40.7075, \"swLng\": -74.0135, \"neLat\": 40.7904, \"neLng\": -73.9591, \"zoom\": 13} (mode=search).",
            "editor": "json"
          },
          "listingUrls": {
            "title": "Listing URLs",
            "type": "array",
            "description": "Airbnb room URLs, e.g. https://www.airbnb.com/rooms/23222680 (mode=details).",
            "editor": "stringList",
            "sectionCaption": "Specific listings"
          },
          "listingIds": {
            "title": "Listing IDs",
            "type": "array",
            "description": "Numeric Airbnb listing IDs, e.g. 23222680. You can mix these with listing URLs (mode=details).",
            "editor": "stringList"
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "Stay start date in YYYY-MM-DD format. Leave both dates empty to use Airbnb's displayed quote (search) or to skip the price quote (details).",
            "editor": "textfield",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "nullable": true,
            "sectionCaption": "Stay dates and guests"
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "Stay end date in YYYY-MM-DD format. Must be after the check-in date.",
            "editor": "textfield",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "nullable": true
          },
          "adults": {
            "title": "Adults",
            "type": "integer",
            "description": "Number of adult guests (1-16).",
            "default": 1,
            "minimum": 1,
            "maximum": 16
          },
          "children": {
            "title": "Children",
            "type": "integer",
            "description": "Number of children aged 2-12 (0-15).",
            "default": 0,
            "minimum": 0,
            "maximum": 15
          },
          "infants": {
            "title": "Infants",
            "type": "integer",
            "description": "Number of infants under 2 (0-5).",
            "default": 0,
            "minimum": 0,
            "maximum": 5
          },
          "pets": {
            "title": "Pets",
            "type": "integer",
            "description": "Number of pets (0-5).",
            "default": 0,
            "minimum": 0,
            "maximum": 5
          },
          "minPrice": {
            "title": "Minimum nightly price",
            "type": "integer",
            "description": "Lowest nightly price to include, in the selected currency. 0 means no minimum.",
            "default": 0,
            "minimum": 0,
            "maximum": 100000,
            "sectionCaption": "Filters"
          },
          "maxPrice": {
            "title": "Maximum nightly price",
            "type": "integer",
            "description": "Highest nightly price to include, in the selected currency. 0 means no maximum.",
            "default": 0,
            "minimum": 0,
            "maximum": 100000
          },
          "roomType": {
            "title": "Room type",
            "type": "string",
            "description": "Restrict results to one Airbnb room type.",
            "editor": "select",
            "enum": [
              "Any",
              "Entire home/apt",
              "Private room",
              "Shared room",
              "Hotel room"
            ],
            "enumTitles": [
              "Any room type",
              "Entire home or apartment",
              "Private room",
              "Shared room",
              "Hotel room"
            ],
            "default": "Any"
          },
          "propertyType": {
            "title": "Property type",
            "type": "string",
            "description": "Restrict results to one Airbnb property type.",
            "editor": "select",
            "enum": [
              "Any",
              "Apartment",
              "House",
              "Villa",
              "Condominium",
              "Loft",
              "Guest suite",
              "Guesthouse",
              "Hotel",
              "Resort",
              "Cottage",
              "Cabin",
              "Bungalow",
              "Townhouse",
              "Tiny home",
              "Boat",
              "Barn",
              "Camper/RV",
              "Farm stay",
              "Castle",
              "Cave",
              "Dome",
              "Container",
              "Treehouse",
              "Yurt",
              "Serviced apartment"
            ],
            "enumTitles": [
              "Any property type",
              "Apartment",
              "House",
              "Villa",
              "Condominium",
              "Loft",
              "Guest suite",
              "Guesthouse",
              "Hotel",
              "Resort",
              "Cottage",
              "Cabin",
              "Bungalow",
              "Townhouse",
              "Tiny home",
              "Boat",
              "Barn",
              "Camper/RV",
              "Farm stay",
              "Castle",
              "Cave",
              "Dome",
              "Container",
              "Treehouse",
              "Yurt",
              "Serviced apartment"
            ],
            "default": "Any"
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "type": "integer",
            "description": "Minimum number of bedrooms. 0 means no minimum.",
            "default": 0,
            "minimum": 0,
            "maximum": 20
          },
          "minBeds": {
            "title": "Minimum beds",
            "type": "integer",
            "description": "Minimum number of beds. 0 means no minimum.",
            "default": 0,
            "minimum": 0,
            "maximum": 30
          },
          "minBathrooms": {
            "title": "Minimum bathrooms",
            "type": "integer",
            "description": "Minimum number of bathrooms. 0 means no minimum.",
            "default": 0,
            "minimum": 0,
            "maximum": 20
          },
          "maxListings": {
            "title": "Maximum listings",
            "type": "integer",
            "description": "Hard cap on records (1-300). Airbnb pages hold 40 results each; duplicate cards are removed automatically.",
            "default": 20,
            "prefill": 3,
            "minimum": 1,
            "maximum": 300,
            "sectionCaption": "Output"
          },
          "includeDetails": {
            "title": "Include full listing details",
            "type": "boolean",
            "description": "Adds the listing page and an exact stay quote: host, amenities, photos, description, fees and availability. Costs extra requests per listing.",
            "default": false,
            "prefill": false,
            "sectionCaption": "Detail enrichment"
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "Fetch recent guest reviews for each listing (up to maxReviews).",
            "default": false,
            "prefill": false
          },
          "maxReviews": {
            "title": "Maximum reviews per listing",
            "type": "integer",
            "description": "Reviews returned per listing (1-24).",
            "default": 12,
            "minimum": 1,
            "maximum": 24
          },
          "includeCalendar": {
            "title": "Include availability calendar",
            "type": "boolean",
            "description": "Fetch the day-by-day availability calendar for each listing.",
            "default": false,
            "prefill": false
          },
          "calendarMonths": {
            "title": "Calendar months",
            "type": "integer",
            "description": "Number of months to return, starting with the current month (1-12).",
            "default": 12,
            "minimum": 1,
            "maximum": 12
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Currency for prices. Airbnb returns quotes in this currency.",
            "editor": "select",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "JPY",
              "CAD",
              "AUD",
              "NZD",
              "CHF",
              "SEK",
              "NOK",
              "DKK",
              "PLN",
              "CZK",
              "HUF",
              "RON",
              "BGN",
              "TRY",
              "RUB",
              "UAH",
              "ILS",
              "AED",
              "SAR",
              "QAR",
              "KWD",
              "BHD",
              "OMR",
              "EGP",
              "ZAR",
              "NGN",
              "KES",
              "GHS",
              "MAD",
              "INR",
              "PKR",
              "BDT",
              "LKR",
              "NPR",
              "CNY",
              "HKD",
              "TWD",
              "SGD",
              "MYR",
              "THB",
              "IDR",
              "PHP",
              "VND",
              "KRW",
              "MXN",
              "BRL",
              "ARS",
              "CLP",
              "COP",
              "PEN",
              "UYU",
              "CRC",
              "DOP"
            ],
            "enumTitles": [
              "US dollar",
              "Euro",
              "British pound",
              "Japanese yen",
              "Canadian dollar",
              "Australian dollar",
              "New Zealand dollar",
              "Swiss franc",
              "Swedish krona",
              "Norwegian krone",
              "Danish krone",
              "Polish zloty",
              "Czech koruna",
              "Hungarian forint",
              "Romanian leu",
              "Bulgarian lev",
              "Turkish lira",
              "Russian ruble",
              "Ukrainian hryvnia",
              "Israeli shekel",
              "UAE dirham",
              "Saudi riyal",
              "Qatari riyal",
              "Kuwaiti dinar",
              "Bahraini dinar",
              "Omani rial",
              "Egyptian pound",
              "South African rand",
              "Nigerian naira",
              "Kenyan shilling",
              "Ghanaian cedi",
              "Moroccan dirham",
              "Indian rupee",
              "Pakistani rupee",
              "Bangladeshi taka",
              "Sri Lankan rupee",
              "Nepalese rupee",
              "Chinese yuan",
              "Hong Kong dollar",
              "Taiwan dollar",
              "Singapore dollar",
              "Malaysian ringgit",
              "Thai baht",
              "Indonesian rupiah",
              "Philippine peso",
              "Vietnamese dong",
              "South Korean won",
              "Mexican peso",
              "Brazilian real",
              "Argentine peso",
              "Chilean peso",
              "Colombian peso",
              "Peruvian sol",
              "Uruguayan peso",
              "Costa Rican colon",
              "Dominican peso"
            ],
            "default": "USD",
            "sectionCaption": "Language and network"
          },
          "locale": {
            "title": "Locale",
            "type": "string",
            "description": "Language/region used for Airbnb labels, dates and localized text.",
            "editor": "select",
            "enum": [
              "en",
              "en-US",
              "en-GB",
              "en-CA",
              "en-AU",
              "de-DE",
              "fr-FR",
              "es-ES",
              "es-MX",
              "it-IT",
              "pt-BR",
              "pt-PT",
              "nl-NL",
              "sv-SE",
              "da-DK",
              "nb-NO",
              "fi-FI",
              "pl-PL",
              "cs-CZ",
              "hu-HU",
              "ro-RO",
              "el-GR",
              "tr-TR",
              "ru-RU",
              "uk-UA",
              "he-IL",
              "ar",
              "hi-IN",
              "id-ID",
              "th-TH",
              "vi-VN",
              "ja-JP",
              "ko-KR",
              "zh-CN",
              "zh-TW"
            ],
            "enumTitles": [
              "English",
              "English (United States)",
              "English (United Kingdom)",
              "English (Canada)",
              "English (Australia)",
              "German",
              "French",
              "Spanish (Spain)",
              "Spanish (Mexico)",
              "Italian",
              "Portuguese (Brazil)",
              "Portuguese (Portugal)",
              "Dutch",
              "Swedish",
              "Danish",
              "Norwegian",
              "Finnish",
              "Polish",
              "Czech",
              "Hungarian",
              "Romanian",
              "Greek",
              "Turkish",
              "Russian",
              "Ukrainian",
              "Hebrew",
              "Arabic",
              "Hindi",
              "Indonesian",
              "Thai",
              "Vietnamese",
              "Japanese",
              "Korean",
              "Chinese (Simplified)",
              "Chinese (Traditional)"
            ],
            "default": "en"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Leave empty and the actor connects directly, then switches to an automatic Apify proxy only if Airbnb blocks a request.",
            "editor": "proxy"
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Airbnb Stay Finder: Nightly Rates, Fees & Availability Output",
        "description": "Airbnb listings with nightly and stay-total prices, currency, fees, coordinates, room and property type, host details, amenities, photos, description, availability, optional reviews and an optional 12-month calendar.",
        "properties": {
          "listings": {
            "type": "string",
            "title": "Airbnb listings",
            "description": "Dataset containing every scraped Airbnb listing. Search-only rows carry prices from the search card; detail-enriched rows add host, amenities, description, exact quote, availability, reviews and calendar.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Listings",
              "transformation": {
                "fields": [
                  "name",
                  "nightlyPrice",
                  "totalPrice",
                  "currency",
                  "rating",
                  "reviewCount",
                  "location",
                  "roomType",
                  "url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "nightlyPrice": {
                    "label": "Nightly price",
                    "format": "number"
                  },
                  "totalPrice": {
                    "label": "Stay total",
                    "format": "number"
                  },
                  "currency": {
                    "label": "Currency",
                    "format": "text"
                  },
                  "rating": {
                    "label": "Rating",
                    "format": "number"
                  },
                  "reviewCount": {
                    "label": "Reviews",
                    "format": "number"
                  },
                  "location": {
                    "label": "Location",
                    "format": "text"
                  },
                  "roomType": {
                    "label": "Room type",
                    "format": "text"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  }
                }
              }
            },
            "detailed": {
              "title": "Detailed",
              "transformation": {
                "fields": [
                  "id",
                  "url",
                  "name",
                  "type",
                  "roomType",
                  "propertyType",
                  "location",
                  "lat",
                  "lng",
                  "nightlyPrice",
                  "totalPrice",
                  "currency",
                  "nights",
                  "priceQualifier",
                  "priceIncludesFees",
                  "rating",
                  "reviewCount",
                  "host",
                  "hostId",
                  "isSuperhost",
                  "isVerified",
                  "badges",
                  "amenities",
                  "description",
                  "images",
                  "availability",
                  "reviews",
                  "calendar",
                  "sourceUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "id": {
                    "label": "Listing ID",
                    "format": "text"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  },
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "type": {
                    "label": "Type",
                    "format": "text"
                  },
                  "roomType": {
                    "label": "Room type",
                    "format": "text"
                  },
                  "propertyType": {
                    "label": "Property type",
                    "format": "text"
                  },
                  "location": {
                    "label": "Location",
                    "format": "text"
                  },
                  "lat": {
                    "label": "Latitude",
                    "format": "number"
                  },
                  "lng": {
                    "label": "Longitude",
                    "format": "number"
                  },
                  "nightlyPrice": {
                    "label": "Nightly price",
                    "format": "number"
                  },
                  "totalPrice": {
                    "label": "Stay total",
                    "format": "number"
                  },
                  "currency": {
                    "label": "Currency",
                    "format": "text"
                  },
                  "nights": {
                    "label": "Nights",
                    "format": "number"
                  },
                  "priceQualifier": {
                    "label": "Price qualifier",
                    "format": "text"
                  },
                  "priceIncludesFees": {
                    "label": "Fees included",
                    "format": "boolean"
                  },
                  "rating": {
                    "label": "Rating",
                    "format": "number"
                  },
                  "reviewCount": {
                    "label": "Reviews",
                    "format": "number"
                  },
                  "host": {
                    "label": "Host",
                    "format": "text"
                  },
                  "hostId": {
                    "label": "Host ID",
                    "format": "text"
                  },
                  "isSuperhost": {
                    "label": "Superhost",
                    "format": "boolean"
                  },
                  "isVerified": {
                    "label": "Verified",
                    "format": "boolean"
                  },
                  "badges": {
                    "label": "Badges",
                    "format": "array"
                  },
                  "amenities": {
                    "label": "Amenities",
                    "format": "array"
                  },
                  "description": {
                    "label": "Description",
                    "format": "text"
                  },
                  "images": {
                    "label": "Images",
                    "format": "array"
                  },
                  "availability": {
                    "label": "Availability",
                    "format": "text"
                  },
                  "reviews": {
                    "label": "Reviews",
                    "format": "array"
                  },
                  "calendar": {
                    "label": "Calendar",
                    "format": "array"
                  },
                  "sourceUrl": {
                    "label": "Source URL",
                    "format": "link"
                  },
                  "scrapedAt": {
                    "label": "Scraped at",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      },
      "readme": "# Airbnb Stay Finder: Nightly Rates, Fees & Availability\r\n\r\nCollect Airbnb stays with the numbers that matter: the **nightly rate**, the **stay total for your dates**, the fee lines Airbnb shows, the host, amenities, coordinates, availability and optional guest reviews — for a whole city or for one listing you already have the link to.\r\n\r\nUnlike search-card-only scrapers, this actor can follow every listing into its detail page, request the exact stay quote for your dates and guests, and return a 12-month day-by-day availability calendar. No Airbnb account, login or cookie is needed.\r\n\r\n## What this actor does\r\n\r\n- **Two modes:** `search` for a location, place ID or map rectangle; `details` for listing URLs and IDs you supply\r\n- **Real price model:** separate `nightlyPrice`, `totalPrice`, `nights`, `currency`, `priceQualifier`, fee lines and whether Airbnb says fees are included\r\n- **Cursor pagination:** 40 Airbnb cards per page, de-duplicated by listing ID, up to 300 records\r\n- **Filters:** dates, guests, nightly price range, room type, property type, bedrooms, beds and bathrooms\r\n- **Optional enrichment:** full detail page (host, amenities, photos, description), stay quote, reviews and a 12-month calendar\r\n- **Global pricing:** 56 currencies and 35 locales, so prices are not forced into USD or GBP\r\n- **Empty fields are omitted** — records never contain `null`, empty strings or empty arrays\r\n\r\n## Output per listing\r\n\r\n- `id` — numeric Airbnb listing ID\r\n- `url` — direct listing page URL\r\n- `name` — listing or room name\r\n- `type` — the category line Airbnb shows, e.g. `Apartment in North Bergen`\r\n- `roomType` — `Entire home/apt`, `Private room`, `Shared room` or `Hotel room`\r\n- `propertyType` — apartment, house, hotel, villa, etc. (detail mode)\r\n- `location` — city or neighborhood\r\n- `lat`, `lng` — public, approximate coordinates (never the exact address)\r\n- `nightlyPrice`, `totalPrice`, `currency`, `nights` — nightly rate and stay total for the selected dates\r\n- `priceQualifier` — what the displayed quote covers, e.g. `for 5 nights`\r\n- `priceBreakdown` — the price lines Airbnb exposes (nightly line, cleaning/resort fees, discounts)\r\n- `priceIncludesFees` — `true` when Airbnb marks the quote as including all fees\r\n- `totalBeforeTaxes` — when Airbnb exposes a “total before taxes” line\r\n- `originalPrice`, `discount` — pre-discount quote and saving, when Airbnb shows one\r\n- `rating`, `reviewCount` — overall guest rating and number of reviews\r\n- `images`, `thumbnail` — listing photo URLs\r\n- `host`, `hostId`, `hostPhoto`, `hostRating`, `hostReviewCount` — host details (detail mode)\r\n- `isSuperhost`, `isVerified` — host status\r\n- `badges`, `isGuestFavorite` — Airbnb badges shown on the search card\r\n- `amenities`, `amenitiesUnavailable` — included and explicitly unavailable amenities (detail mode)\r\n- `description` — listing description with HTML removed (detail mode)\r\n- `personCapacity` — maximum guests\r\n- `availability` — `isAvailable`, `canInstantBook` and any unavailability reason for the requested dates\r\n- `minNights`, `maxNights` — available inside each calendar day\r\n- `reviews` — optional recent reviews with rating, text, date, reviewer and host response\r\n- `calendar` — optional day-by-day availability for up to 12 months\r\n- `checkIn`, `checkOut` — the stay dates used for the quote\r\n- `sourceUrl` — the search page or listing page that produced the record\r\n- `scrapedAt`, `recordType: \"listing\"`\r\n\r\nCompatibility aliases are also kept for older integrations: `price`, `photos`, `latitude`, `longitude` and `searchUrl`.\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `mode` | string | `search` | `search` or `details` |\r\n| `location` | string | `New York` | City, region, country or neighborhood (mode=search) |\r\n| `placeId` | string | – | Airbnb/Google place ID; skips text matching (mode=search) |\r\n| `neighborhood` | string | – | Optional neighborhood combined with `location` (mode=search) |\r\n| `bbox` | object | – | Map rectangle: `swLat`, `swLng`, `neLat`, `neLng`, optional `zoom` (mode=search) |\r\n| `listingUrls` | array | – | Airbnb room URLs (mode=details) |\r\n| `listingIds` | array | – | Numeric listing IDs (mode=details) |\r\n| `checkIn`, `checkOut` | string | – | Stay dates in `YYYY-MM-DD`; both or neither |\r\n| `adults` | integer | `1` | Adults, 1–16 |\r\n| `children` | integer | `0` | Children, 0–15 |\r\n| `infants` | integer | `0` | Infants, 0–5 |\r\n| `pets` | integer | `0` | Pets, 0–5 |\r\n| `minPrice`, `maxPrice` | integer | `0` | Nightly price range; `0` means no limit |\r\n| `roomType` | string | `Any` | `Any`, `Entire home/apt`, `Private room`, `Shared room`, `Hotel room` |\r\n| `propertyType` | string | `Any` | Airbnb property type, e.g. `Apartment`, `House`, `Hotel` |\r\n| `minBedrooms`, `minBeds`, `minBathrooms` | integer | `0` | Minimum counts; `0` means no minimum |\r\n| `maxListings` | integer | `20` | Hard cap, 1–300 (prefill: `5`) |\r\n| `includeDetails` | boolean | `false` | Fetch each listing page and exact stay quote |\r\n| `includeReviews` | boolean | `false` | Add recent guest reviews |\r\n| `maxReviews` | integer | `12` | Reviews per listing, 1–24 |\r\n| `includeCalendar` | boolean | `false` | Add the availability calendar |\r\n| `calendarMonths` | integer | `12` | Calendar length, 1–12 months |\r\n| `currency` | string | `USD` | One of 56 supported currencies |\r\n| `locale` | string | `en` | Language/region for labels and dates |\r\n| `proxyConfiguration` | object | – | Optional; normally leave empty |\r\n\r\n## Example: cheapest useful run\r\n\r\n```json\r\n{\r\n  \"location\": \"New York\",\r\n  \"maxListings\": 5\r\n}\r\n```\r\n\r\n## Example: a full city scan with filters\r\n\r\n```json\r\n{\r\n  \"location\": \"Lisbon, Portugal\",\r\n  \"checkIn\": \"2027-05-10\",\r\n  \"checkOut\": \"2027-05-17\",\r\n  \"adults\": 2,\r\n  \"minPrice\": 80,\r\n  \"maxPrice\": 250,\r\n  \"roomType\": \"Entire home/apt\",\r\n  \"minBedrooms\": 1,\r\n  \"maxListings\": 120,\r\n  \"currency\": \"EUR\",\r\n  \"locale\": \"pt-PT\"\r\n}\r\n```\r\n\r\n## Example: exact detail, quote, reviews and calendar\r\n\r\n```json\r\n{\r\n  \"mode\": \"details\",\r\n  \"listingUrls\": [\"https://www.airbnb.com/rooms/23222680\"],\r\n  \"checkIn\": \"2027-03-04\",\r\n  \"checkOut\": \"2027-03-09\",\r\n  \"adults\": 2,\r\n  \"includeReviews\": true,\r\n  \"maxReviews\": 24,\r\n  \"includeCalendar\": true,\r\n  \"calendarMonths\": 6,\r\n  \"currency\": \"USD\"\r\n}\r\n```\r\n\r\n## Example: map rectangle instead of a city name\r\n\r\n```json\r\n{\r\n  \"bbox\": {\r\n    \"swLat\": 40.7075,\r\n    \"swLng\": -74.0135,\r\n    \"neLat\": 40.7904,\r\n    \"neLng\": -73.9591,\r\n    \"zoom\": 13\r\n  },\r\n  \"checkIn\": \"2027-04-01\",\r\n  \"checkOut\": \"2027-04-04\",\r\n  \"adults\": 2,\r\n  \"maxListings\": 80,\r\n  \"includeDetails\": true\r\n}\r\n```\r\n\r\n## Use cases\r\n\r\n- **Short-term rental pricing** — compare nightly rates and stay totals across a neighborhood before setting your own calendar\r\n- **Travel research** — export a city's stays with ratings, room type and amenities into a spreadsheet or BI tool\r\n- **Market monitoring** — re-run the same dates monthly to track rate and availability changes\r\n- **Host competitive analysis** — benchmark your listing against nearby Superhosts with similar capacity\r\n- **Investment screening** — map approximate coordinates to study short-term rental density by area\r\n- **Review mining** — pull recent guest feedback for a shortlist of properties\r\n\r\n## FAQ\r\n\r\n### Is `nightlyPrice` the same as the number on the search card?\r\n\r\nUsually not. Airbnb's search card shows the **stay total** for the selected dates. `totalPrice` is that quote; `nightlyPrice` is parsed from Airbnb's own nightly line (for example, `5 nights x $335.80`). When you provide dates, both refer to those exact dates. Without dates, Airbnb still returns a five-night display quote, which the actor labels with `nights: 5`.\r\n\r\n### Are all fees included in `totalPrice`?\r\n\r\nAirbnb's quote can include cleaning, service and resort fees, and sometimes a “Prices include all fees” notice. The actor exposes `priceBreakdown` and `priceIncludesFees` so you can see what Airbnb included. Taxes and local charges can still vary by destination and are not always part of the displayed quote; treat `totalPrice` as Airbnb's quoted stay price, not a guaranteed checkout total.\r\n\r\n### Why is the price missing on some records?\r\n\r\nIn `details` mode without dates, Airbnb does not show a stay price. Those records still include the listing data. Add `checkIn` and `checkOut` to get a quote. In `search` mode, a small number of cards legitimately omit the primary price line; the actor falls back to Airbnb's nightly explanation when available.\r\n\r\n### How many listings can I get?\r\n\r\n`maxListings` is capped at 300. Airbnb returns 40 cards per page and de-duplicates/reorders between pages, so a deep search typically yields around 230–240 unique listings per query. Use different neighborhoods, map rectangles or price ranges to cover more of a market. The actor never claims “all listings”.\r\n\r\n### Why did my location fail?\r\n\r\nAirbnb returns a generic feed for gibberish queries instead of zero results. The actor validates the location through Airbnb's own autocomplete and fails with a clear message when nothing matches, so you never receive unrelated rows. Neighborhoods, cities, regions and countries all work; you can also supply a `placeId` or a `bbox`.\r\n\r\n### Do I need a proxy or an Airbnb account?\r\n\r\nNo. The actor reads Airbnb's public pages and GraphQL responses without cookies or login. It connects directly first; if Airbnb blocks a request, it automatically retries through an Apify proxy and then a browser. Nothing needs to be configured.\r\n\r\n### Why are coordinates approximate?\r\n\r\nAirbnb publishes approximate map coordinates before booking to protect host privacy. Use them for area analysis, not for deriving a street address.\r\n\r\n### Can I get per-day prices in the calendar?\r\n\r\nThe availability calendar reports whether each date is available, check-in/check-out eligibility and min/max nights. Airbnb does not expose a per-day price in that endpoint. For a price on specific dates, set `checkIn`/`checkOut` and use the stay quote.\r\n\r\n### Is this affiliated with Airbnb?\r\n\r\nNo. This is an independent, third-party actor that reads publicly accessible Airbnb pages and responses. It is not affiliated with or endorsed by Airbnb.\r\n"
    },
    "buildNumber": "2.0.1",
    "imageDigest": "1965410baa97bc22b527dfb841cbb3ea2fa2db6e4a5c692f4aa1620589d60d78",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "2.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.03801888888888889
    }
  }
}