{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Scraper API: Airbnb Listings, Prices, Calendar & Hosts",
    "description": "Airbnb API and Airbnb data scraper, no login: Airbnb listings by city, map box or search URL with dates, guests and Airbnb's filters, every listing past the 280-card cap; Airbnb rooms URLs for details, prices with taxes, availability calendar, cancellation policy, host.",
    "version": "0.1",
    "x-build-id": "0yNbE8VkGDGxqRr1q"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hyperbach~airbnb-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hyperbach-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/hyperbach~airbnb-scraper/runs": {
      "post": {
        "operationId": "runs-sync-hyperbach-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/hyperbach~airbnb-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-hyperbach-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": "Places",
            "maxItems": 200,
            "type": "array",
            "description": "Places to search, one search each (at most 200), as you would type them in Airbnb's search box: \"London\", \"New York, NY\", \"Springfield, MO\". Airbnb resolves a place by the visitor's country (\"New York\" seen from the UK is Shiremoor, England), so the run pins the place Airbnb chose on the first page for the whole search and names it on the summary row; qualify an ambiguous name. A word Airbnb cannot place is a free `place_not_found` row, never a worldwide list.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Airbnb URLs or listing ids",
            "maxItems": 10000,
            "type": "array",
            "description": "Airbnb search URLs (https://www.airbnb.com/s/<place>/homes?…, any airbnb domain: their own filters, dates and map box apply), listing URLs (/rooms/<id>, /rooms/plus/<id>, /luxury/listing/<id>) or bare listing ids (the record and the price for the stay), and host profiles (/users/show/<id>: the host and the host's listings). abnb.me short links and /h/<name> links are not read: paste the /rooms/ URL. A value that names none of these is a free `invalid` row; the run goes on.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "Check-in",
            "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
            "type": "string",
            "description": "The check-in date (YYYY-MM-DD), with checkOut. Every search, record and price call is sent this stay; every row says the stay it was priced for. Empty: each card's own stay (Airbnb proposes one per card), a listing URL's own check_in, or no price."
          },
          "checkOut": {
            "title": "Check-out",
            "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
            "type": "string",
            "description": "The check-out date (YYYY-MM-DD), after checkIn (at most 365 nights)."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Adults (13+); 1 when empty. Airbnb's own guest rules apply: a stay over a listing's maximum is a free `unavailable` row with Airbnb's message."
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 15,
            "type": "integer",
            "description": "Children (2–12): they count toward the listing's maximum."
          },
          "infants": {
            "title": "Infants",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Infants (under 2): Airbnb does not count them toward the maximum."
          },
          "pets": {
            "title": "Pets",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Pets: a search with pets lists only places that allow them."
          },
          "priceMin": {
            "title": "Minimum price",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Airbnb's price filter, lower end, in the run's currency (Airbnb filters on its nightly price with fees)."
          },
          "priceMax": {
            "title": "Maximum price",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Airbnb's price filter, upper end."
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Airbnb's bedrooms filter."
          },
          "minBeds": {
            "title": "Minimum beds",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Airbnb's beds filter."
          },
          "minBathrooms": {
            "title": "Minimum bathrooms",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Airbnb's bathrooms filter."
          },
          "roomTypes": {
            "title": "Type of place",
            "type": "array",
            "description": "Airbnb's type-of-place filter; empty = any.",
            "items": {
              "type": "string",
              "enum": [
                "entire_home",
                "private_room",
                "hotel_room",
                "shared_room"
              ],
              "enumTitles": [
                "Entire home",
                "Private room",
                "Hotel room",
                "Shared room"
              ]
            },
            "default": []
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Airbnb's property-type filter (the catalogue's House, Apartment, Guesthouse and Hotel); empty = any.",
            "items": {
              "type": "string",
              "enum": [
                "house",
                "apartment",
                "guesthouse",
                "hotel"
              ],
              "enumTitles": [
                "House",
                "Apartment",
                "Guesthouse",
                "Hotel"
              ]
            },
            "default": []
          },
          "amenities": {
            "title": "Amenities",
            "type": "array",
            "description": "Every amenity picked must be there (Airbnb's own amenity filter, all values in one key). Empty = no amenity filter.",
            "items": {
              "type": "string",
              "enum": [
                "wifi",
                "kitchen",
                "washer",
                "dryer",
                "air_conditioning",
                "heating",
                "dedicated_workspace",
                "tv",
                "hair_dryer",
                "iron",
                "pool",
                "hot_tub",
                "free_parking",
                "ev_charger",
                "crib",
                "king_bed",
                "gym",
                "bbq_grill",
                "breakfast",
                "indoor_fireplace",
                "smoking_allowed",
                "smoke_alarm",
                "carbon_monoxide_alarm",
                "self_check_in",
                "step_free_access",
                "disabled_parking_spot",
                "wide_guest_entrance",
                "step_free_bedroom_access",
                "wide_bedroom_entrance",
                "step_free_bathroom_access",
                "wide_bathroom_entrance",
                "toilet_grab_bar",
                "shower_grab_bar",
                "step_free_shower",
                "shower_or_bath_chair",
                "ceiling_or_mobile_hoist"
              ],
              "enumTitles": [
                "Wifi",
                "Kitchen",
                "Washer",
                "Dryer",
                "Air conditioning",
                "Heating",
                "Dedicated workspace",
                "TV",
                "Hair dryer",
                "Iron",
                "Pool",
                "Hot tub",
                "Free parking",
                "EV charger",
                "Crib",
                "King bed",
                "Gym",
                "BBQ grill",
                "Breakfast",
                "Indoor fireplace",
                "Smoking allowed",
                "Smoke alarm",
                "Carbon monoxide alarm",
                "Self check in",
                "Step free access",
                "Disabled parking spot",
                "Wide guest entrance",
                "Step free bedroom access",
                "Wide bedroom entrance",
                "Step free bathroom access",
                "Wide bathroom entrance",
                "Toilet grab bar",
                "Shower grab bar",
                "Step free shower",
                "Shower or bath chair",
                "Ceiling or mobile hoist"
              ]
            },
            "default": []
          },
          "instantBook": {
            "title": "Instant Book only",
            "type": "boolean",
            "description": "Airbnb's Instant Book filter.",
            "default": false
          },
          "superhost": {
            "title": "Superhosts only",
            "type": "boolean",
            "description": "Only listings of Superhosts (Airbnb's own key: 12,650 → 4,288 for London, every row checked).",
            "default": false
          },
          "guestFavorite": {
            "title": "Guest favourites only",
            "type": "boolean",
            "description": "Airbnb's Guest favourite filter.",
            "default": false
          },
          "freeCancellation": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Airbnb's free-cancellation filter.",
            "default": false
          },
          "luxe": {
            "title": "Airbnb Luxe only",
            "type": "boolean",
            "description": "Airbnb's Luxe tier.",
            "default": false
          },
          "boundingBox": {
            "title": "Map box",
            "pattern": "^$|^\\s*-?\\d+(\\.\\d+)?\\s*[,; ]\\s*-?\\d+(\\.\\d+)?\\s*[,; ]\\s*-?\\d+(\\.\\d+)?\\s*[,; ]\\s*-?\\d+(\\.\\d+)?\\s*$",
            "type": "string",
            "description": "A map area instead of (or with) a place: four numbers, north-east latitude, north-east longitude, south-west latitude, south-west longitude (\"51.51, -0.17, 51.49, -0.20\"). Every listing read is inside the box (Airbnb's own map search). With no place, the box is a search of its own.",
            "default": ""
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Keep listings rated at least this (0–5). A listing with no rating shown (new, or fewer than three reviews) is dropped when this is set."
          },
          "maxRating": {
            "title": "Maximum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Keep listings rated at most this."
          },
          "minReviews": {
            "title": "Minimum reviews",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Keep listings with at least this many reviews."
          },
          "excludeKeywords": {
            "title": "Exclude words",
            "maxItems": 100,
            "type": "array",
            "description": "Drop a card whose name, heading or subtitle holds one of these words (whole words, any case).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeDetails": {
            "title": "Listing details",
            "type": "boolean",
            "description": "On (default): each listing's record — the name, the description and its sections, the guests, bedrooms, beds and baths, the amenities, every photo with its room, the house rules with the check-in and check-out times, the six sub-ratings, the host's public fields, the registration number — and the price breakdown for the stay. Off: the search card alone (name, price for the stay, rating, beds, photos, coordinates), a cheaper row.",
            "default": true
          },
          "includeTaxes": {
            "title": "Prices with taxes",
            "type": "boolean",
            "description": "On (default): the price is read from a UK connection, where Airbnb shows the taxes as a line and the total with taxes (the US view shows the total before taxes only; no setting moves it). Off: the US view. Every row says which view it carries (`price_view`).",
            "default": true
          },
          "includeCancellationPolicy": {
            "title": "Cancellation policy",
            "type": "boolean",
            "description": "On (default): the cancellation policy for the stay (its summary and each refund milestone with its deadline), a hotel's booking requirements, and the check-in and check-out times: one small call more per listing.",
            "default": true
          },
          "includeHostProfile": {
            "title": "Host profile",
            "type": "boolean",
            "description": "One call per host: the host's listing count, languages and verifications on each listing row.",
            "default": false
          },
          "calendarMonths": {
            "title": "Calendar months",
            "minimum": 0,
            "maximum": 12,
            "type": "integer",
            "description": "0 = no calendar. 1–12: each listing's availability per day (available, check-in and check-out days, minimum and maximum nights) for this many months from this month, and the unavailable days per month (booked or blocked: Airbnb does not tell them apart). Airbnb serves 12 months at most.",
            "default": 0
          },
          "datedPriceDays": {
            "title": "Dated prices (days ahead)",
            "minimum": 0,
            "maximum": 60,
            "type": "integer",
            "description": "0 = off. 1–60: for each check-in day in the next N days that Airbnb opens for check-in, the price of a stay of datedPriceNights (one small call per date), in `dated_prices`.",
            "default": 0
          },
          "datedPriceNights": {
            "title": "Dated prices: nights",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "The stay length of each dated price; 0 = the day's own minimum nights.",
            "default": 0
          },
          "currency": {
            "title": "Currency",
            "pattern": "^[A-Z]{3}$",
            "type": "string",
            "description": "The currency of every price (an ISO code: USD, EUR, GBP…); every row carries it beside the amounts.",
            "default": "USD"
          },
          "locale": {
            "title": "Language",
            "pattern": "^[a-z]{2}(-[A-Za-z]{2,4})?$",
            "type": "string",
            "description": "Airbnb's language for the texts (en, en-GB, de, fr, es…): the titles and descriptions as Airbnb translates them, with the original beside a translated title and description.",
            "default": "en"
          },
          "country": {
            "title": "Search country",
            "enum": [
              "US",
              "GB",
              "DE",
              "FR",
              "ES",
              "IT",
              "NL",
              "CA",
              "AU",
              "IE",
              "PT",
              "AT",
              "CH",
              "BE",
              "SE",
              "DK",
              "NO",
              "PL",
              "MX",
              "BR",
              "JP",
              "IN",
              "SG",
              "AE",
              "NZ",
              "ZA"
            ],
            "type": "string",
            "description": "The country the searches are read from: Airbnb orders a search and resolves a place by the visitor's country (a US and a UK reader share 14–20 of the first 40 London listings). US by default; every row says the country it was read from.",
            "default": "US"
          },
          "monitorMode": {
            "title": "Only new or changed listings",
            "enum": [
              "all",
              "new",
              "changed"
            ],
            "type": "string",
            "description": "`new`: a search delivers (and charges) only the listings an earlier run of this memory has not delivered; `changed`: also a listing whose price for the stay moved (`change_type`, `previous_price`, `price_change` say what moved). A held-back listing is free and takes no room.",
            "default": "all"
          },
          "stateStoreName": {
            "title": "Memory name",
            "pattern": "^[A-Za-z0-9._-]{0,60}$",
            "type": "string",
            "description": "The name of the memory monitorMode keeps between runs; empty = a name made from the searches.",
            "default": ""
          },
          "maxItems": {
            "title": "Max charged rows",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "The most charged rows of the whole run (listings and hosts); 0 = no limit. The form starts at 240. Without a limit a search reads every listing Airbnb lists for it: 1,233 for Moab, UT on our test (Airbnb counted 1,308), more than 20,000 for London. The cap is claimed before a listing is read, so nothing past it is read or charged.",
            "default": 0
          },
          "maxListingsPerSearch": {
            "title": "Max listings per search",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "The most listings each search delivers, in Airbnb's order; 0 = every listing. Airbnb shows 280 listings a view; past that the run reads the search by price bands, each to its own end, every listing once (20,257 for London on our test).",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Parallel reads",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many listings are read at once (each on its own connection). 12 read 200 listings in 64 s on our test (6: 82 s); with a run timeout under about 2 minutes keep 6, so a cut run still delivers and ends in time.",
            "default": 6
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}