{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Scraper — Listings, Prices, Reviews & Calendar",
    "description": "Scrape Airbnb listings for any place and dates: price per night and per stay, rating, coordinates, beds, photos, host and amenities. Add guest reviews with host replies and the availability calendar with minimum nights and occupancy, or get one row per review or per calendar. No browser, no login.",
    "version": "0.1",
    "x-build-id": "Hcjhe6zgnk86YWThz"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lergassy~airbnb-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lergassy-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/lergassy~airbnb-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lergassy-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/lergassy~airbnb-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lergassy-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": {
          "mode": {
            "title": "🧭 What to collect",
            "enum": [
              "listings",
              "reviews",
              "calendar"
            ],
            "type": "string",
            "description": "<b>Listings</b> (default): one row per listing with the price for your dates; switch on details, calendar or reviews below to add them to the same row. <b>Reviews</b>: one row per guest review of the listings in <code>startUrls</code> (or found for the place). <b>Availability calendar</b>: one row per listing with free and booked nights, minimum stay, first free date and occupancy per month. Leave empty for Listings — an input of the former Airbnb Reviews Scraper or Airbnb Availability Calendar is recognised by its fields and runs in its mode."
          },
          "locationQueries": {
            "title": "📍 Where",
            "type": "array",
            "description": "Places to search, one per line, the way you would type them into Airbnb: <code>Ubud, Bali</code>, <code>Lisbon, Portugal</code>, <code>Brooklyn, NY</code>.",
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "📅 Check-in",
            "type": "string",
            "description": "First night, YYYY-MM-DD. Airbnb quotes a price only for a date range; leave both dates empty and the Actor searches a stay one month out."
          },
          "checkOut": {
            "title": "📅 Check-out",
            "type": "string",
            "description": "Departure day, YYYY-MM-DD."
          },
          "adults": {
            "title": "👥 Adults",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Prices change with occupancy, so set the real party size.",
            "default": 2
          },
          "maxListings": {
            "title": "💯 Maximum listings",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Cap per run across all places. Airbnb returns 18 listings per page and rarely more than about 270 per search.",
            "default": 60
          },
          "currency": {
            "title": "💱 Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "AUD",
              "IDR",
              "SGD",
              "THB",
              "JPY",
              "INR",
              "CAD",
              "BRL",
              "MXN"
            ],
            "type": "string",
            "description": "Currency the prices are quoted in.",
            "default": "USD"
          },
          "includeDetails": {
            "title": "🔎 Open every listing page",
            "type": "boolean",
            "description": "Adds description, amenities, host, capacity, bedrooms and beds, review tags and exact-location flag. One extra request per listing.",
            "default": false
          },
          "includeCalendar": {
            "title": "📅 Availability calendar and minimum nights",
            "type": "boolean",
            "description": "Listings mode: for each listing, read the host's calendar — day-by-day availability, the minimum and maximum nights on your check-in date, and occupancy per month. Needs the listing page, so it is billed as a detail row — no extra event. For one compact calendar row per listing choose the Availability calendar mode.",
            "default": false
          },
          "calendarMonths": {
            "title": "Calendar months",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "How many months ahead to read, 1–12 (listings mode counts from check-in, calendar mode from today). Airbnb answers the whole range in one request, so twelve months cost the same as one.",
            "default": 3
          },
          "onlyAvailableListings": {
            "title": "Skip fully booked listings",
            "type": "boolean",
            "description": "Availability calendar mode: return only listings that still have at least one free night in the scanned window."
          },
          "includeReviews": {
            "title": "💬 Guest reviews",
            "type": "boolean",
            "description": "Listings mode: for each listing, the latest guest reviews (rating, date, text, reviewer, host reply) inside the listing row, up to 200. Billed as a detail row — no extra event. For one row per review — and up to 2,000 per listing — choose the Reviews mode.",
            "default": false
          },
          "maxReviews": {
            "title": "💬 Reviews per listing",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Reviews mode: up to 2,000 per listing, 24 per request. Listings mode with guest reviews on: up to 200 inside each row.",
            "default": 24
          },
          "sortBy": {
            "title": "↕️ Reviews order",
            "enum": [
              "MOST_RECENT",
              "LOWEST_RATED",
              "HIGHEST_RATED"
            ],
            "type": "string",
            "description": "Newest first when empty. <b>Lowest ratings first</b> reads the complaints first. Applies to the Reviews mode and to guest reviews inside listing rows."
          },
          "startUrls": {
            "title": "🔗 Airbnb URLs",
            "type": "array",
            "description": "Instead of a place, or together with it: Airbnb search URLs (with your own filters), listing URLs like <code>https://www.airbnb.com/rooms/1591176990185841592</code> or bare listing ids. Listing URLs are always opened in full.",
            "items": {
              "type": "string"
            }
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Children in the party.",
            "default": 0
          },
          "infants": {
            "title": "Infants",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Infants in the party.",
            "default": 0
          },
          "pets": {
            "title": "Pets",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Pets travelling.",
            "default": 0
          },
          "priceMin": {
            "title": "Minimum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "In the chosen currency."
          },
          "priceMax": {
            "title": "Maximum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "In the chosen currency."
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Filter applied by Airbnb itself."
          },
          "minBeds": {
            "title": "Minimum beds",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Filter applied by Airbnb itself."
          },
          "minBathrooms": {
            "title": "Minimum bathrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Filter applied by Airbnb itself."
          },
          "roomTypes": {
            "title": "Room types",
            "type": "array",
            "description": "Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "Entire home/apt",
                "Private room",
                "Shared room",
                "Hotel room"
              ],
              "enumTitles": [
                "Entire place",
                "Private room",
                "Shared room",
                "Hotel room"
              ]
            }
          },
          "maxPages": {
            "title": "Maximum pages per place",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Each page holds 18 listings. The run stops earlier when a page adds nothing new.",
            "default": 15
          },
          "onlyNewRowsStore": {
            "title": "🔁 Only new rows — memory name",
            "pattern": "^[A-Za-z0-9-]{0,63}$",
            "type": "string",
            "description": "Give this run a name — <code>my-listings-watch</code> — and the Actor remembers every listing row it delivered under that name. Every later run with the same name writes and charges <b>only rows you have not received before</b>. Schedule the Actor daily to get a feed of new listings instead of the whole list each time. Leave empty to get everything found, every time."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy is on by default — Airbnb rate-limits repeat callers by IP address. If Airbnb starts refusing pages, the run switches itself to residential addresses; you can also pick residential here up front for large jobs.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}