{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Availability Calendar Scraper - Prices, Listings",
    "description": "Airbnb scraper past the 270-row search ceiling: 1916 unique listings where flat pagination returns 257, measured in 117 seconds. The paginated reviews route returns all 105 reviews of a listing where the older route returns 7. 12-month availability calendar. Airbnb occupancy rate data.",
    "version": "0.1",
    "x-build-id": "e9FLhYr0lV2mhf4dm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/snow_leo_data~airbnb-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-snow_leo_data-airbnb-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/snow_leo_data~airbnb-scraper/runs": {
      "post": {
        "operationId": "runs-sync-snow_leo_data-airbnb-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/snow_leo_data~airbnb-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-snow_leo_data-airbnb-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "locationQueries": {
            "title": "Locations",
            "type": "array",
            "description": "Places to search, written the way you would type them into Airbnb: \"Paris, France\", \"Austin, Texas\". Airbnb's own search stops at 270 rows per query; anything larger is split into a map grid automatically.",
            "default": [
              "Paris, France"
            ],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Airbnb URLs",
            "type": "array",
            "description": "Paste Airbnb search URLs (filters in the URL are read and reused) or room URLs (https://www.airbnb.com/rooms/123...).",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "listingIds": {
            "title": "Listing IDs",
            "type": "array",
            "description": "Numeric Airbnb listing ids, if you already have them.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Maximum listings",
            "minimum": 0,
            "type": "integer",
            "description": "How many listings to write to the dataset. Filters below are applied BEFORE this count, so you get what you asked for, not what was scanned. 0 runs as a 20-listing trial.",
            "default": 20
          },
          "gridSplit": {
            "title": "Map grid",
            "enum": [
              "auto",
              "off",
              "2",
              "3",
              "4",
              "5",
              "6"
            ],
            "type": "string",
            "description": "How to get past Airbnb's 270-row search ceiling. Auto splits only when the flat pages run out; a fixed number forces that grid side.",
            "default": "auto"
          },
          "includeDetails": {
            "title": "Listing page details",
            "type": "boolean",
            "description": "Amenities, house rules, host profile, ratings by category, description, photos, accessibility. One extra request per listing.",
            "default": true
          },
          "includeCalendar": {
            "title": "Availability calendar",
            "type": "boolean",
            "description": "Day-by-day availability with minimum and maximum nights, plus occupancy rates for 30/60/90/365 days computed from it.",
            "default": false
          },
          "calendarMonths": {
            "title": "Calendar months",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "1 to 12. Airbnb's own calendar query caps at 12 months per request.",
            "default": 3
          },
          "includeReviews": {
            "title": "Reviews",
            "type": "boolean",
            "description": "Full review text, ratings, reviewer and host response. The old public endpoint stops at 7 reviews per listing; this uses the paged query instead.",
            "default": false
          },
          "maxReviews": {
            "title": "Reviews per listing",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Reviews arrive 50 at a time. Reviews do not cost extra — they ride in the listing row.",
            "default": 20
          },
          "checkIn": {
            "title": "Check-in",
            "type": "string",
            "description": "YYYY-MM-DD. Prices become the real total for these dates. Must be given together with check-out."
          },
          "checkOut": {
            "title": "Check-out",
            "type": "string",
            "description": "YYYY-MM-DD."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Number of adults the price should be quoted for.",
            "default": 1
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 15,
            "type": "integer",
            "description": "Number of children (2-12) the price should be quoted for.",
            "default": 0
          },
          "infants": {
            "title": "Infants",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Number of infants (under 2) the price should be quoted for.",
            "default": 0
          },
          "pets": {
            "title": "Pets",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Number of pets. Listings that do not accept pets drop out on Airbnb's side.",
            "default": 0
          },
          "priceMin": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Per night, in the currency below. Sent to Airbnb."
          },
          "priceMax": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Per night, in the currency below. Sent to Airbnb."
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Sent to Airbnb, so smaller listings are never collected."
          },
          "minBeds": {
            "title": "Minimum beds",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Sent to Airbnb, so smaller listings are never collected."
          },
          "minBathrooms": {
            "title": "Minimum bathrooms",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Sent to Airbnb, so smaller listings are never collected."
          },
          "roomTypes": {
            "title": "Room types",
            "type": "array",
            "description": "Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "Entire home/apt",
                "Private room",
                "Shared room",
                "Hotel room"
              ],
              "enumTitles": [
                "Entire home or apartment",
                "Private room",
                "Shared room",
                "Hotel room"
              ]
            }
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Ids read out of Airbnb's own filter panel. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3"
              ],
              "enumTitles": [
                "House",
                "Guesthouse",
                "Apartment"
              ]
            }
          },
          "amenities": {
            "title": "Required amenities (Airbnb ids)",
            "type": "array",
            "description": "36 amenity filters read out of Airbnb's own filter panel. Sent to Airbnb, so non-matching listings are never charged.",
            "items": {
              "type": "string",
              "enum": [
                "4",
                "5",
                "7",
                "8",
                "9",
                "11",
                "15",
                "16",
                "25",
                "27",
                "30",
                "33",
                "34",
                "35",
                "36",
                "45",
                "46",
                "47",
                "51",
                "58",
                "97",
                "99",
                "110",
                "111",
                "114",
                "115",
                "116",
                "120",
                "121",
                "286",
                "291",
                "294",
                "295",
                "296",
                "297",
                "1000"
              ],
              "enumTitles": [
                "Wifi (4)",
                "Air conditioning (5)",
                "Pool (7)",
                "Kitchen (8)",
                "Free parking (9)",
                "Smoking allowed (11)",
                "Gym (15)",
                "Breakfast (16)",
                "Hot tub (25)",
                "Indoor fireplace (27)",
                "Heating (30)",
                "Washer (33)",
                "Dryer (34)",
                "Smoke alarm (35)",
                "Carbon monoxide alarm (36)",
                "Hair dryer (45)",
                "Iron (46)",
                "Dedicated workspace (47)",
                "Self check-in (51)",
                "TV (58)",
                "EV charger (97)",
                "BBQ grill (99)",
                "Step-free access (110)",
                "Guest entrance wider than 32 inches (111)",
                "Disabled parking spot (114)",
                "Step-free bedroom access (115)",
                "Bedroom entrance wider than 32 inches (116)",
                "Step-free bathroom access (120)",
                "Bathroom entrance wider than 32 inches (121)",
                "Crib (286)",
                "Ceiling or mobile hoist (291)",
                "Shower grab bar (294)",
                "Toilet grab bar (295)",
                "Step-free shower (296)",
                "Shower or bath chair (297)",
                "King bed (1000)"
              ]
            }
          },
          "hostLanguages": {
            "title": "Host languages",
            "type": "array",
            "description": "70 languages, taken from Airbnb's filter panel.",
            "items": {
              "type": "string",
              "enum": [
                "af",
                "ar",
                "az",
                "be",
                "bg",
                "bn",
                "bs",
                "ca",
                "cs",
                "da",
                "de",
                "el",
                "en",
                "es",
                "et",
                "eu",
                "fa",
                "fi",
                "fil",
                "fr",
                "ga",
                "gl",
                "gu",
                "he",
                "hi",
                "hr",
                "ht",
                "hu",
                "hy",
                "id",
                "is",
                "it",
                "ja",
                "ka",
                "km",
                "kn",
                "ko",
                "ky",
                "lo",
                "lt",
                "lv",
                "mk",
                "ms",
                "mt",
                "my",
                "nl",
                "no",
                "pa",
                "pl",
                "pt",
                "ro",
                "ru",
                "sgn",
                "sk",
                "sl",
                "sq",
                "sr",
                "sv",
                "sw",
                "ta",
                "te",
                "th",
                "tl",
                "tr",
                "uk",
                "ur",
                "vi",
                "xh",
                "zh",
                "zu"
              ],
              "enumTitles": [
                "Afrikaans (af)",
                "Arabic (ar)",
                "Azerbaijani (az)",
                "Belarusian (be)",
                "Bulgarian (bg)",
                "Bengali (bn)",
                "Bosnian (bs)",
                "Catalan (ca)",
                "Czech (cs)",
                "Danish (da)",
                "German (de)",
                "Greek (el)",
                "English (en)",
                "Spanish (es)",
                "Estonian (et)",
                "Basque (eu)",
                "Persian (fa)",
                "Finnish (fi)",
                "Filipino (fil)",
                "French (fr)",
                "Irish (ga)",
                "Galician (gl)",
                "Gujarati (gu)",
                "Hebrew (he)",
                "Hindi (hi)",
                "Croatian (hr)",
                "Haitian Creole (ht)",
                "Hungarian (hu)",
                "Armenian (hy)",
                "Indonesian (id)",
                "Icelandic (is)",
                "Italian (it)",
                "Japanese (ja)",
                "Georgian (ka)",
                "Khmer (km)",
                "Kannada (kn)",
                "Korean (ko)",
                "Kyrgyz (ky)",
                "Lao (lo)",
                "Lithuanian (lt)",
                "Latvian (lv)",
                "Macedonian (mk)",
                "Malay (ms)",
                "Maltese (mt)",
                "Burmese (my)",
                "Dutch (nl)",
                "Norwegian (no)",
                "Punjabi (pa)",
                "Polish (pl)",
                "Portuguese (pt)",
                "Romanian (ro)",
                "Russian (ru)",
                "Sign Language (sgn)",
                "Slovakian (sk)",
                "Slovenian (sl)",
                "Albanian (sq)",
                "Serbian (sr)",
                "Swedish (sv)",
                "Swahili (sw)",
                "Tamil (ta)",
                "Telugu (te)",
                "Thai (th)",
                "Tagalog (tl)",
                "Turkish (tr)",
                "Ukrainian (uk)",
                "Urdu (ur)",
                "Vietnamese (vi)",
                "Xhosa (xh)",
                "Chinese (Simplified) (zh)",
                "Zulu (zu)"
              ]
            }
          },
          "guestFavoriteOnly": {
            "title": "Guest favourites only",
            "type": "boolean",
            "description": "Only listings Airbnb marks as a guest favourite. Sent to Airbnb.",
            "default": false
          },
          "instantBookOnly": {
            "title": "Instant Book only",
            "type": "boolean",
            "description": "Only listings that can be booked without host approval. Sent to Airbnb.",
            "default": false
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Airbnb has no rating filter, so this one runs on our side after collection. Listings with no rating yet are kept, not dropped."
          },
          "minReviewsCount": {
            "title": "Minimum reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Runs on our side. Listings with no reviews yet are kept, not dropped."
          },
          "minPricePerNight": {
            "title": "Minimum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Runs on our side. Listings that publish no nightly price are kept."
          },
          "maxPricePerNight": {
            "title": "Maximum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Runs on our side. Listings that publish no nightly price are kept."
          },
          "nameContains": {
            "title": "Text must contain",
            "type": "array",
            "description": "Matched against title, subtitle and description.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Text must not contain",
            "type": "array",
            "description": "Matched against title, subtitle and description. Any hit drops the row.",
            "items": {
              "type": "string"
            }
          },
          "requiredAmenities": {
            "title": "Amenities by name",
            "type": "array",
            "description": "Free text, matched against the listing page amenities. Needs listing page details on.",
            "items": {
              "type": "string"
            }
          },
          "superhostOnly": {
            "title": "Superhosts only",
            "type": "boolean",
            "description": "Needs listing page details on — the flag lives on the listing page.",
            "default": false
          },
          "maxOccupancy30": {
            "title": "Maximum 30-day occupancy %",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Needs the availability calendar on."
          },
          "minAvailableDays30": {
            "title": "Minimum free nights in 30 days",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Needs the availability calendar on."
          },
          "onlyNew": {
            "title": "Only new and changed listings",
            "type": "boolean",
            "description": "Remembers what earlier runs delivered in a named store and writes only listings that are new or whose price, rating, review count or occupancy changed. Made for daily monitoring: you do not pay twice for the same row.",
            "default": false
          },
          "emitUnchanged": {
            "title": "Include unchanged listings",
            "type": "boolean",
            "description": "Only meaningful together with the option above.",
            "default": false
          },
          "currency": {
            "title": "Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "AUD",
              "CAD",
              "CHF",
              "JPY",
              "CNY",
              "INR",
              "BRL",
              "MXN",
              "SEK",
              "NOK",
              "DKK",
              "PLN",
              "CZK",
              "TRY",
              "AED",
              "SGD",
              "HKD",
              "NZD",
              "ZAR",
              "KRW",
              "THB",
              "IDR",
              "MYR",
              "PHP",
              "VND",
              "ILS",
              "RUB"
            ],
            "type": "string",
            "description": "Prices are returned in this currency. Without it Airbnb picks one from the run's IP address, which makes runs incomparable.",
            "default": "USD"
          },
          "locale": {
            "title": "Language",
            "enum": [
              "en",
              "es",
              "fr",
              "de",
              "it",
              "pt",
              "nl",
              "ru",
              "ja",
              "ko",
              "zh",
              "tr",
              "pl",
              "sv",
              "da",
              "no",
              "fi",
              "el",
              "he",
              "ar",
              "id",
              "th",
              "vi",
              "cs",
              "hu",
              "ro",
              "uk"
            ],
            "type": "string",
            "description": "Language for titles, descriptions and amenity names.",
            "default": "en"
          },
          "compactOutput": {
            "title": "Compact output",
            "type": "boolean",
            "description": "17 core columns instead of the full record — for AI agents and quick market scans.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "Drop empty fields",
            "type": "boolean",
            "description": "Drop keys whose value is null or empty from every row.",
            "default": false
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}