{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb & Vrbo Scraper - Listings, Calendar, Occupancy & Revenue",
    "description": "Scrape Airbnb and Vrbo listings by location or URL. Get prices, amenities, host details, reviews and day-by-day availability, plus occupancy rate, ADR, RevPAR and revenue estimates. No login. Export to JSON, CSV or Excel.",
    "version": "0.1",
    "x-build-id": "odsZtmTwUk5N27ecW"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/headply~airbnb-vrbo-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-headply-airbnb-vrbo-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/headply~airbnb-vrbo-scraper/runs": {
      "post": {
        "operationId": "runs-sync-headply-airbnb-vrbo-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/headply~airbnb-vrbo-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-headply-airbnb-vrbo-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": [
          "platforms"
        ],
        "properties": {
          "platforms": {
            "title": "Platforms",
            "type": "array",
            "description": "Which sites to scrape. Keep both to compare Airbnb and Vrbo side by side.",
            "items": {
              "type": "string",
              "enum": [
                "airbnb",
                "vrbo"
              ],
              "enumTitles": [
                "Airbnb",
                "Vrbo"
              ]
            },
            "default": [
              "airbnb",
              "vrbo"
            ]
          },
          "search": {
            "title": "Locations to search",
            "type": "array",
            "description": "One market per line, for example <b>Austin, Texas</b> or <b>Lisbon, Portugal</b>. Each location is expanded into full map coverage. Leave empty if you only pass listing URLs below.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Listing or search URLs",
            "type": "array",
            "description": "Direct Airbnb room URLs (airbnb.com/rooms/...) or Vrbo listing URLs (vrbo.com/1234567). Use these when you already know the exact properties you want.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxListings": {
            "title": "Max listings per location",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Upper bound on unique listings returned for each search location. Airbnb caps a single query at a few hundred results, so higher numbers trigger automatic map-tile subdivision for full coverage.",
            "default": 50
          },
          "includeDetails": {
            "title": "Scrape full listing details",
            "type": "boolean",
            "description": "Open each listing page to add amenities, the full description, host profile, house rules, coordinates and every photo. Turn off for a faster, cheaper scan that keeps only the search-card fields.",
            "default": true
          },
          "includeCalendar": {
            "title": "Scrape availability calendar",
            "type": "boolean",
            "description": "Add a day-by-day availability calendar for each listing (up to 12 months for Airbnb, up to ~24 months for Vrbo).",
            "default": false
          },
          "includeOccupancy": {
            "title": "Estimate occupancy & revenue",
            "type": "boolean",
            "description": "Derive booked nights, occupancy rate, ADR (average daily rate), RevPAR and estimated revenue for the next 30, 90 and 365 days. Accuracy improves every time you re-scan the same market, because the Actor stores calendar history. Automatically turns the calendar on.",
            "default": false
          },
          "calendarMonths": {
            "title": "Calendar months (Airbnb)",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "How many months of Airbnb availability to pull. Vrbo always returns its full published horizon.",
            "default": 12
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "Optional. Sets the stay used for pricing. Vrbo search requires a stay, so if you leave this empty a date about a month out is used automatically. Format: YYYY-MM-DD."
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "Optional. Format: YYYY-MM-DD. Must be after the check-in date."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Number of adults used when requesting prices.",
            "default": 2
          },
          "currency": {
            "title": "Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "CAD",
              "AUD",
              "MXN",
              "BRL",
              "JPY",
              "INR",
              "AED"
            ],
            "type": "string",
            "description": "Currency for Airbnb prices. Vrbo prices are returned in USD.",
            "default": "USD"
          },
          "subdivideMap": {
            "title": "Subdivide the map for full coverage",
            "type": "boolean",
            "description": "When a search area returns more listings than Airbnb will page through, split it into smaller map tiles until every listing is captured. Turn off to keep only the first few hundred results per location.",
            "default": true
          },
          "maxTilesPerSearch": {
            "title": "Max map tiles per location",
            "minimum": 1,
            "maximum": 400,
            "type": "integer",
            "description": "Safety cap on how many map tiles a single location may expand into. Raise it for dense cities where you want every last listing.",
            "default": 40
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many listing pages to fetch in parallel. Higher is faster but heavier on proxies.",
            "default": 6
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}