{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Market & Nightly Rate Scraper",
    "description": "Scrape Airbnb stays with the real nightly rate, taxes, fees and total as separate figures that add up - plus rating, reviews, capacity and coordinates. Median rate per market. Every breakdown is checked against its own total and withheld rather than guessed. Global. No API key.",
    "version": "0.0",
    "x-build-id": "CxncnJRrJQaOuTN14"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/eiv~airbnb-market-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-eiv-airbnb-market-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/eiv~airbnb-market-scraper/runs": {
      "post": {
        "operationId": "runs-sync-eiv-airbnb-market-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/eiv~airbnb-market-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-eiv-airbnb-market-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": "Places or Airbnb search URLs",
            "type": "array",
            "description": "One per line. A plain place name works — \"Austin, TX\", \"Paris\", \"Lisbon, Portugal\" — or paste an airbnb.com/s/... search URL if you have already filtered it on the site.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (for chaining)",
            "type": "array",
            "description": "Alternative to Places, for feeding output from another Actor straight into this one.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "sourceDatasetId": {
            "title": "Source dataset ID",
            "type": "string",
            "description": "Read places from an existing dataset instead of typing them."
          },
          "sourceDatasetField": {
            "title": "Source dataset field",
            "type": "string",
            "description": "Which field on the source dataset holds the place or search URL.",
            "default": "searchUrl"
          },
          "checkIn": {
            "title": "Check-in (YYYY-MM-DD)",
            "type": "string",
            "description": "Strongly recommended. Without dates Airbnb picks its own window and applies its own long-stay discounts, so prices are not comparable between markets or between runs."
          },
          "checkOut": {
            "title": "Check-out (YYYY-MM-DD)",
            "type": "string",
            "description": "Must be after check-in. Ignored unless check-in is also set."
          },
          "adults": {
            "title": "Adults",
            "minimum": 0,
            "maximum": 16,
            "type": "integer",
            "description": "Guest count changes which listings qualify and what they cost. 0 leaves it to Airbnb.",
            "default": 2
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 16,
            "type": "integer",
            "description": "Ages 2-12. 0 disables.",
            "default": 0
          },
          "infants": {
            "title": "Infants",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Under 2. 0 disables.",
            "default": 0
          },
          "pets": {
            "title": "Pets",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "0 disables. Filters to listings that allow them.",
            "default": 0
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "ISO code such as USD, EUR or GBP. Always sent, because Airbnb otherwise picks a currency from the proxy's IP address — the same market priced from two countries returns two incomparable answers.",
            "default": "USD"
          },
          "roomTypes": {
            "title": "Room types",
            "type": "array",
            "description": "Leave empty for all. Valid values: entire-home, private-room, shared-room, hotel.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum nightly price",
            "minimum": 0,
            "type": "integer",
            "description": "In the currency above. 0 disables.",
            "default": 0
          },
          "maxPrice": {
            "title": "Maximum nightly price",
            "minimum": 0,
            "type": "integer",
            "description": "In the currency above. 0 disables. Pairing a min and max is also how to get past the search-depth ceiling: run the same market in price bands.",
            "default": 0
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "0 disables.",
            "default": 0
          },
          "minBeds": {
            "title": "Minimum beds",
            "minimum": 0,
            "maximum": 16,
            "type": "integer",
            "description": "0 disables. Beds and bedrooms are different claims and Airbnb lists whichever it has.",
            "default": 0
          },
          "minBathrooms": {
            "title": "Minimum bathrooms",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "0 disables.",
            "default": 0
          },
          "superhostOnly": {
            "title": "Superhosts only",
            "type": "boolean",
            "description": "Restrict to Superhost listings.",
            "default": false
          },
          "maxListingsPerLocation": {
            "title": "Max stays per market",
            "minimum": 1,
            "maximum": 270,
            "type": "integer",
            "description": "Airbnb's search returns 18 per page and stops handing out cursors after 15 pages, so 270 is the hard ceiling per search. Narrow with dates, price bands or room type to see past it.",
            "default": 180
          },
          "includeMarketSummary": {
            "title": "Include a summary per market",
            "type": "boolean",
            "description": "Add one rollup record per market with median nightly rate, median total, rating and the whole-home versus private-room split. Not billed as a stay.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Markets processed in parallel. Airbnb answers bursts with a page that has no search data on it, so this is deliberately conservative.",
            "default": 3
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 180,
            "type": "integer",
            "description": "Per-request timeout.",
            "default": 60
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries for connection resets and 5xx responses. Blocked pages are retried separately with a backoff.",
            "default": 2
          },
          "flattenOutput": {
            "title": "Flatten output for CSV",
            "type": "boolean",
            "description": "Emit flat dot-notation columns. The stay records are already flat, so this mainly affects badges and fee labels.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Recommended. Airbnb rate-limits by address, and the proxy country also decides which currency it would default to if one were not pinned.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}