{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Scraper — Prices, Availability Calendar & Occupancy",
    "description": "Airbnb scraper for prices and availability: search a place or paste Airbnb URLs and get each listing’s price for your dates and guests, plus up to 24 months of availability calendar with occupancy, listing details and reviews. No login, no Airbnb API key. Pay per row; unknown places are free.",
    "version": "1.0",
    "x-build-id": "iSqZlzCfja5Xtzj0O"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kestrel~airbnb-prices-calendar/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kestrel-airbnb-prices-calendar",
        "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/kestrel~airbnb-prices-calendar/runs": {
      "post": {
        "operationId": "runs-sync-kestrel-airbnb-prices-calendar",
        "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/kestrel~airbnb-prices-calendar/run-sync": {
      "post": {
        "operationId": "run-sync-kestrel-airbnb-prices-calendar",
        "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",
            "uniqueItems": true,
            "type": "array",
            "description": "Places to search exactly as you would type them on Airbnb: \"Lisbon, Portugal\", \"Algarve\", \"Brooklyn, NY\". An unrecognised place produces a status row (unknown_area) and costs nothing instead of random listings.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Airbnb URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "Airbnb search URLs (all their filters are honoured: dates, guests, price, room type, bedrooms, map bounds) or listing URLs (https://www.airbnb.com/rooms/12345678).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "listingIds": {
            "title": "Listing ids",
            "uniqueItems": true,
            "type": "array",
            "description": "Numeric Airbnb listing ids to price and/or fetch calendars, details and reviews for — no search needed.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxListingsPerQuery": {
            "title": "Max listings per place",
            "minimum": 1,
            "maximum": 280,
            "type": "integer",
            "description": "Distinct listings to collect per place or search URL (Airbnb returns at most about 280 for one search; split big areas into neighbourhoods or price bands for more).",
            "default": 40
          },
          "checkIn": {
            "title": "Check-in",
            "pattern": "^(\\d{4}-\\d{2}-\\d{2}|\\+?\\s*\\d+\\s*(d|days?|w|weeks?|m|months?|y|years?)|today|tomorrow)?$",
            "type": "string",
            "description": "Check-in date, YYYY-MM-DD or relative to the run date (\"30 days\", \"6 weeks\") — relative dates keep a schedule valid forever. Leave empty for each listing’s default displayed price."
          },
          "checkOut": {
            "title": "Check-out",
            "pattern": "^(\\d{4}-\\d{2}-\\d{2}|\\+?\\s*\\d+\\s*(d|days?|w|weeks?|m|months?|y|years?)|today|tomorrow)?$",
            "type": "string",
            "description": "Check-out date (after check-in), absolute or relative."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Adults; prices depend on guests exactly as on Airbnb.",
            "default": 2
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Children (2–12).",
            "default": 0
          },
          "infants": {
            "title": "Infants",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Infants (under 2).",
            "default": 0
          },
          "pets": {
            "title": "Pets",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Pets.",
            "default": 0
          },
          "currency": {
            "title": "Currency",
            "pattern": "^[A-Z]{3}$",
            "minLength": 3,
            "maxLength": 3,
            "type": "string",
            "description": "Currency for every price (USD, EUR, GBP, …). Echoed in every row.",
            "default": "USD"
          },
          "locale": {
            "title": "Language",
            "type": "string",
            "description": "Airbnb locale for names, descriptions and reviews (en, fr, de, es, pt, it, ja, …).",
            "default": "en"
          },
          "priceMin": {
            "title": "Min price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum nightly price in the currency above; 0 = no minimum.",
            "default": 0
          },
          "priceMax": {
            "title": "Max price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum nightly price in the currency above; 0 = no maximum.",
            "default": 0
          },
          "roomTypes": {
            "title": "Room types",
            "type": "array",
            "description": "Restrict to entire homes, private rooms, shared rooms and/or hotel rooms.",
            "items": {
              "type": "string",
              "enum": [
                "entire_home",
                "private_room",
                "shared_room",
                "hotel_room"
              ],
              "enumTitles": [
                "Entire home",
                "Private room",
                "Shared room",
                "Hotel room"
              ]
            },
            "default": []
          },
          "minBedrooms": {
            "title": "Min bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum bedrooms.",
            "default": 0
          },
          "minBeds": {
            "title": "Min beds",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum beds.",
            "default": 0
          },
          "minBathrooms": {
            "title": "Min bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum bathrooms.",
            "default": 0
          },
          "includeDetails": {
            "title": "Listing details",
            "type": "boolean",
            "description": "Fetch each listing’s page: description, amenities, house rules, cancellation policy, category ratings, host, capacity, sleeping arrangement, exact price breakdown for the dates (one extra call per listing; same listing price).",
            "default": false
          },
          "calendarMonths": {
            "title": "Calendar months",
            "minimum": 0,
            "maximum": 24,
            "type": "integer",
            "description": "0 = no calendar. N = a calendar row per listing with day-by-day availability for the next N months (up to 24) and an occupancy summary. Priced per listing-month.",
            "default": 0
          },
          "maxReviewsPerListing": {
            "title": "Max reviews per listing",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "0 = none. N = up to N reviews per listing with rating, text, date, reviewer and host reply.",
            "default": 0
          },
          "reviewsSort": {
            "title": "Reviews order",
            "enum": [
              "most_recent",
              "highest_rated",
              "lowest_rated",
              "most_relevant"
            ],
            "type": "string",
            "description": "Which reviews to take first.",
            "default": "most_recent"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Airbnb accepts Apify datacenter proxies for these calls; keep the default.",
            "default": {
              "useApifyProxy": true
            }
          },
          "sessions": {
            "title": "Parallel proxy sessions",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Concurrent egress IPs; each paced at perIp requests per second.",
            "default": 4
          },
          "perIp": {
            "title": "Requests per second per IP",
            "minimum": 0.1,
            "maximum": 3,
            "type": "number",
            "description": "Pace per session. Airbnb tolerated 1 request/second and short bursts in tests.",
            "default": 1
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}