{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Scraper + STR Market KPIs (ADR · Occupancy · RevPAR)",
    "description": "🏠 Airbnb scraper for STR investors — listings + ADR + occupancy + RevPAR + estimated annual revenue. Market KPIs, HTML report, calendar enrichment. Search by destination, coordinates, place ID, category, or URL. Independent tool — not affiliated with Airbnb, Inc.",
    "version": "1.0",
    "x-build-id": "3UvpqpMlyg5L7ispX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~airbnb-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-airbnb-property-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/sian.agency~airbnb-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-airbnb-property-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/sian.agency~airbnb-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-airbnb-property-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": {
          "searchMode": {
            "title": "🧭 Search Mode",
            "enum": [
              "destination",
              "coordinates",
              "placeId",
              "category",
              "url"
            ],
            "type": "string",
            "description": "Pick how you want to search Airbnb. Each mode reads its own dedicated input fields below — fields outside the chosen mode are ignored.\n\n• **destination** — text destination (default; e.g. 'Lisbon, Portugal')\n• **coordinates** — map-bounds (NE + SW lat/lng box)\n• **placeId** — Google/Airbnb internal place ID\n• **category** — browse by Airbnb category tag (PAID)\n• **url** — paste an Airbnb search URL",
            "default": "destination"
          },
          "maxResultsPerQuery": {
            "title": "📊 Max results per query",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Hard cap on listings returned per query. Auto-paginates via cursor until cap is reached or search is fully drained. Default 40 = exactly one upstream request. FREE tier is always capped at 25.",
            "default": 40
          },
          "destination": {
            "title": "📍 Destination  (used when Search Mode = destination)",
            "type": "string",
            "description": "Free-text destination, e.g. 'Lisbon, Portugal' or 'Brooklyn, NY'. Use the Airbnb autocomplete on airbnb.com to find canonical strings.",
            "default": "Lisbon, Portugal"
          },
          "destinations": {
            "title": "📋 Bulk Destinations  (PAID, destination mode)",
            "uniqueItems": true,
            "type": "array",
            "description": "Array of destination strings. PAID tier only.",
            "items": {
              "type": "string"
            }
          },
          "ne_lat": {
            "title": "🧭 Northeast Latitude  (used when Search Mode = coordinates)",
            "type": "string",
            "description": "Northeast corner latitude of the map-bounds box. -90 to 90."
          },
          "ne_lng": {
            "title": "🧭 Northeast Longitude",
            "type": "string",
            "description": "Northeast corner longitude. -180 to 180."
          },
          "sw_lat": {
            "title": "🧭 Southwest Latitude",
            "type": "string",
            "description": "Southwest corner latitude. Must be less than northeast lat."
          },
          "sw_lng": {
            "title": "🧭 Southwest Longitude",
            "type": "string",
            "description": "Southwest corner longitude. Must be less than northeast lng."
          },
          "placeId": {
            "title": "🆔 Place ID  (used when Search Mode = placeId)",
            "type": "string",
            "description": "Google/Airbnb internal place ID, e.g. 'ChIJpTvG15DL1IkRd8S0KlBVNTI'."
          },
          "category_tag": {
            "title": "🎯 Category Tag  (PAID, category mode)",
            "type": "string",
            "description": "Airbnb category tag, e.g. 'Tag:4104' (Beach), 'Tag:8186' (Cabin). PAID tier only."
          },
          "airbnbUrl": {
            "title": "🔗 Airbnb Search URL  (used when Search Mode = url)",
            "pattern": "^https?://(www\\.)?airbnb\\.[a-z.]+/.+",
            "type": "string",
            "description": "Paste an Airbnb search URL from your browser. Auto-paginates via cursor until 'Max results per query' is reached."
          },
          "airbnbUrls": {
            "title": "📋 Bulk Airbnb URLs  (PAID, url mode)",
            "uniqueItems": true,
            "type": "array",
            "description": "Array of Airbnb search URLs. PAID tier only.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "checkIn": {
            "title": "📅 Check-in date (optional)",
            "type": "string",
            "description": "ISO date YYYY-MM-DD. Today or later. When provided alongside checkOut, search applies date filtering and per-night prices populate in the calendar."
          },
          "checkOut": {
            "title": "📅 Check-out date (optional)",
            "type": "string",
            "description": "ISO date YYYY-MM-DD. Strictly after checkIn."
          },
          "adults": {
            "title": "🧑 Adults",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Number of adults (ages 13+). Default 2.",
            "default": 2
          },
          "children": {
            "title": "🧒 Children",
            "minimum": 0,
            "maximum": 16,
            "type": "integer",
            "description": "Number of children (ages 2-12). Default 0.",
            "default": 0
          },
          "infants": {
            "title": "👶 Infants",
            "minimum": 0,
            "maximum": 16,
            "type": "integer",
            "description": "Number of infants (ages 2 or below). Default 0.",
            "default": 0
          },
          "pets": {
            "title": "🐶 Pets",
            "minimum": 0,
            "maximum": 16,
            "type": "integer",
            "description": "Number of pets. Default 0.",
            "default": 0
          },
          "currency": {
            "title": "💱 Currency",
            "pattern": "^[A-Za-z]{3}$",
            "type": "string",
            "description": "3-letter ISO currency code, e.g. USD, EUR, GBP. Default USD.",
            "default": "USD"
          },
          "typeOfPlace": {
            "title": "🏘 Type of place (filter)",
            "enum": [
              "Any_type",
              "Room",
              "Entire_home"
            ],
            "type": "string",
            "description": "Filter by place type.",
            "default": "Any_type"
          },
          "priceRangeMin": {
            "title": "💵 Min nightly price",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum nightly price (in selected currency)."
          },
          "priceRangeMax": {
            "title": "💵 Max nightly price",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum nightly price (in selected currency)."
          },
          "bedrooms": {
            "title": "🛏 Min bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bedrooms."
          },
          "beds": {
            "title": "🛏 Min beds",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of beds."
          },
          "bathrooms": {
            "title": "🛁 Min bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bathrooms."
          },
          "superhost": {
            "title": "⭐ Superhost only",
            "type": "boolean",
            "description": "Restrict results to Superhost listings.",
            "default": false
          },
          "guestFavorite": {
            "title": "❤️ Guest favorite only",
            "type": "boolean",
            "description": "Restrict results to Airbnb 'Guest favorite' listings.",
            "default": false
          },
          "luxuryHomes": {
            "title": "💎 Luxury homes only",
            "type": "boolean",
            "description": "Restrict results to Airbnb Luxe / luxury listings.",
            "default": false
          },
          "computeOccupancy": {
            "title": "📅 Compute occupancy & RevPAR (recommended for investors)",
            "type": "boolean",
            "description": "When ON, fetches each listing's calendar (1 extra API call per listing) and computes occupancy rate, RevPAR, and estimated annual revenue. Adds an OccupancyEnriched charge per listing. Disabled on FREE tier.",
            "default": false
          },
          "availabilityWindowDays": {
            "title": "📅 Availability window (days)",
            "minimum": 30,
            "maximum": 365,
            "type": "integer",
            "description": "Forward-looking calendar window for occupancy/RevPAR computation. 30 = next month, 90 = next quarter (recommended), 180 = half year, 365 = full year. Allowed: 30, 90, 180, 365.",
            "default": 90
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}