{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Scraper — Listings, Prices, Calendar & Reviews",
    "description": "Airbnb scraper without the 240-result cap: listings, prices for your dates, ratings, amenities, host stats, 12-month availability, occupancy and reviews.",
    "version": "1.0",
    "x-build-id": "1PEFGShiyFkWPco09"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cheapapi~airbnb-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cheapapi-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/cheapapi~airbnb-scraper/runs": {
      "post": {
        "operationId": "runs-sync-cheapapi-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/cheapapi~airbnb-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-cheapapi-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": {
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, neighbourhoods, regions or addresses to search, one per line (e.g. \"Lisbon, Portugal\", \"Brooklyn, New York\"). Each one is searched across its whole map area, so you are not limited to the ~240 results Airbnb shows per search.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Airbnb URLs (optional)",
            "type": "array",
            "description": "Paste Airbnb search URLs (all their filters are used, e.g. amenities or property types) and/or listing URLs (<code>https://www.airbnb.com/rooms/12345</code>). Listing URLs always include the listing details.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max listings per location",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "How many listings to collect for each location or search URL. Dense areas are split automatically into smaller map areas to go past Airbnb's ~240-per-search limit.",
            "default": 100
          },
          "stayInsideBoundary": {
            "title": "Only homes inside the place's boundary",
            "type": "boolean",
            "description": "Locations are searched across their map rectangle; with this on, homes outside the place's real boundary (e.g. New Jersey when you search \"Manhattan\") are left out and not charged. Turn off to keep everything in the rectangle. Search URLs always use their own map.",
            "default": true
          },
          "checkIn": {
            "title": "Check-in",
            "type": "string",
            "description": "Optional. With dates, every price is for your stay and only listings available for those dates are returned. Without dates, Airbnb shows each listing's price for its own next available nights (see checkIn/checkOut in each row)."
          },
          "checkOut": {
            "title": "Check-out",
            "type": "string",
            "description": "Optional; needed together with Check-in."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Guests aged 13 or over.",
            "default": 1
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 15,
            "type": "integer",
            "description": "Ages 2–12.",
            "default": 0
          },
          "infants": {
            "title": "Infants",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Under 2.",
            "default": 0
          },
          "pets": {
            "title": "Pets",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Only listings that allow pets when above 0.",
            "default": 0
          },
          "priceMin": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "In the chosen currency, per night (Airbnb's own price filter)."
          },
          "priceMax": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "In the chosen currency, per night."
          },
          "roomType": {
            "title": "Type of place",
            "enum": [
              "any",
              "entire",
              "private",
              "shared",
              "hotel"
            ],
            "type": "string",
            "description": "Airbnb's type-of-place filter.",
            "default": "any"
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "0 = any.",
            "default": 0
          },
          "minBeds": {
            "title": "Minimum beds",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "0 = any.",
            "default": 0
          },
          "minBathrooms": {
            "title": "Minimum bathrooms",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "0 = any.",
            "default": 0
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "3-letter currency code for all prices (USD, EUR, GBP, TRY…).",
            "default": "USD"
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it",
              "pt",
              "nl",
              "tr",
              "pl",
              "sv",
              "da",
              "no",
              "fi",
              "cs",
              "el",
              "hu",
              "ro",
              "ru",
              "uk",
              "ja",
              "ko",
              "zh",
              "zh-TW",
              "ar",
              "he",
              "th",
              "id",
              "vi"
            ],
            "type": "string",
            "description": "Language of the texts Airbnb returns: listing names and descriptions (Airbnb's translations), amenities, house rules, highlights, location texts and reviews. Numbers, prices and facts are the same in every language.",
            "default": "en"
          },
          "includeDetails": {
            "title": "Listing details",
            "type": "boolean",
            "description": "Adds description, all amenities (by group), house rules, check-in/out times, sleeping arrangements, highlights, neighbourhood texts, city and country, rating categories, host stats (superhost, rating, years hosting, languages, response rate and time) and all photos with captions. With Check-in/Check-out it also adds the full price breakdown (nightly rate, fees, taxes where Airbnb shows them, total), availability, instant booking and cancellation terms — same request, no extra fee. Almost free: $0.01 per 1,000 listings on the Free, Bronze and Silver plans, $0.075 per 1,000 on Gold and higher (see Pricing).",
            "default": false
          },
          "includeCalendar": {
            "title": "Availability calendar & occupancy estimate",
            "type": "boolean",
            "description": "Adds available days in the next 30 and 90 days and over the whole loaded calendar, the share of unavailable days (an occupancy estimate: Airbnb does not separate booked from host-blocked days), the next available date and typical minimum stay. Charged per listing.",
            "default": false
          },
          "calendarMonths": {
            "title": "Calendar months",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Months of availability to read, starting this month (Airbnb gives at most 12, i.e. 336–365 days from today). The 30/90-day figures need at least 1/3 months.",
            "default": 12
          },
          "includeCalendarDays": {
            "title": "Include every calendar day",
            "type": "boolean",
            "description": "Also add the day-by-day list (date, available, minimum nights) to each listing. No extra charge.",
            "default": false
          },
          "includeHostProfile": {
            "title": "Host profile",
            "type": "boolean",
            "description": "Adds the host's public profile: number of listings and the list of them (name, type, rating, reviews), reviews from guests and from hosts, identity verification, months hosting, trips, profile languages. With 'Include names and photos' also the host's name, photo, about text, home town, profile answers and interests. One profile request per host is shared by all of that host's listings. Turns on the details add-on (the host comes from there).",
            "default": false
          },
          "includeTaxes": {
            "title": "Prices with taxes",
            "type": "boolean",
            "description": "Needs Check-in/Check-out. Airbnb shows taxes (e.g. tourist tax) only to visitors from Europe; this reads each listing's price once more as a European visitor and gives the total with taxes and the tax amount (quoteTaxes). Turns on the details add-on.",
            "default": false
          },
          "taxCountry": {
            "title": "Country for prices with taxes",
            "type": "string",
            "description": "2-letter code of the European country whose visitors' view is used (DE, FR, PT, ES, IT, NL…).",
            "default": "DE"
          },
          "includeReviews": {
            "title": "Reviews",
            "type": "boolean",
            "description": "Adds the newest reviews of every listing as separate rows (rating, date, text, host response). Charged per review.",
            "default": false
          },
          "maxReviewsPerListing": {
            "title": "Max reviews per listing",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Newest first.",
            "default": 20
          },
          "includePersonalData": {
            "title": "Include names and photos of hosts and reviewers",
            "type": "boolean",
            "description": "Off by default to keep personal data out of your dataset. Turn on only if you have a lawful reason to process it (e.g. GDPR).",
            "default": false
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 32,
            "type": "integer",
            "description": "How many Airbnb requests run at the same time. The default is the fastest setting that ran without errors in our tests; lower it if you see many retries in RUN_SUMMARY.",
            "default": 16
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}