{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Scraper",
    "description": "An Airbnb scraper that returns listings for a location and a date window, with the nightly rate and the stay total as separate numbers, plus coordinates, rating, review count and badges. No login, no cookie, no API key.",
    "version": "0.1",
    "x-build-id": "I7ZCLnjh8dpJykapK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/s-r~airbnb-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-s-r-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/s-r~airbnb-scraper/runs": {
      "post": {
        "operationId": "runs-sync-s-r-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/s-r~airbnb-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-s-r-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",
        "required": [
          "location"
        ],
        "properties": {
          "location": {
            "title": "Where to search",
            "type": "string",
            "description": "A place as Airbnb names it, for example Amsterdam, Netherlands or Austin, Texas, United States. Write it the way Airbnb writes it in its own breadcrumb: the city, then the region or country, separated by a comma. A location Airbnb cannot place is answered with a neighbouring town rather than an error, so the slug that was actually requested is reported in the run summary."
          },
          "checkin": {
            "title": "Check-in date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "First night of the stay, as YYYY-MM-DD. Airbnb quotes a total for a window, not a nightly rack rate, so this is what the price on every row means. Left empty, the actor picks a fixed window 30 days out and says so in the summary."
          },
          "checkout": {
            "title": "Check-out date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Morning of departure, as YYYY-MM-DD. Must be after check-in. Both dates are written onto every row so a saved dataset stays readable once the window has passed."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Adult guests. Airbnb prices per stay and per party size, so changing this changes the price on every row, and the value used is written onto each row.",
            "default": 1
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 15,
            "type": "integer",
            "description": "Children aged 2 to 12. Counts toward the party size Airbnb prices against.",
            "default": 0
          },
          "infants": {
            "title": "Infants",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Guests under 2. Airbnb usually does not price them but some hosts cap them, so they can change which listings are offered.",
            "default": 0
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "ISO code the prices should be quoted in, for example EUR, USD or GBP. Left empty, Airbnb picks one from the exit country, which makes rows from different runs silently incomparable. The code is written onto every row next to the symbol the page printed.",
            "default": "EUR"
          },
          "room_type": {
            "title": "Room type",
            "enum": [
              "any",
              "entire_home",
              "private_room",
              "shared_room",
              "hotel_room"
            ],
            "type": "string",
            "description": "Restrict to one kind of stay.",
            "default": "any"
          },
          "price_min": {
            "title": "Minimum nightly price",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest nightly price to include, in the currency above. Airbnb applies this to its own displayed nightly figure, which is before fees."
          },
          "price_max": {
            "title": "Maximum nightly price",
            "minimum": 0,
            "type": "integer",
            "description": "Highest nightly price to include, in the currency above."
          },
          "min_bedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Only listings with at least this many bedrooms. Measured to narrow the result set: an Amsterdam search offering 15 pages of results dropped to 9 at 3 bedrooms."
          },
          "min_beds": {
            "title": "Minimum beds",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Only listings with at least this many beds. The same Amsterdam search dropped from 15 pages to 12 at 4 beds."
          },
          "min_bathrooms": {
            "title": "Minimum bathrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Only listings with at least this many bathrooms. The same Amsterdam search dropped from 15 pages to 8 at 2 bathrooms."
          },
          "proxy_country": {
            "title": "Exit country",
            "type": "string",
            "description": "Two-letter country code for the network exit, for example nl or us. On a travel site the exit decides the default currency and can change which listings are shown, so it is pinned rather than left to chance."
          },
          "limit": {
            "title": "Max listings",
            "minimum": 1,
            "maximum": 270,
            "type": "integer",
            "description": "How many listings to return. Airbnb pages 18 at a time and publishes an exact cursor list, so the walk never overruns. It stops at 15 pages.",
            "default": 36
          },
          "retries": {
            "title": "Retries per page",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "Airbnb answers roughly three requests in ten with a larger page carrying no results at all, at HTTP 200 and with no error on it. Those are retried rather than counted as an empty search, and any page that still came back empty is reported in the summary.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}