{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Occupancy & Revenue Estimator",
    "description": "Score any Airbnb market or your own listings on a full year of availability: 30/60/90-day and 12-month occupancy, minimum-stay rules, first free night, plus estimated revenue, ADR and RevPAR from nightly rates observed for the dates you pick. Per-month breakdowns and market medians included.",
    "version": "0.0",
    "x-build-id": "LgNE9CK9IYJjcwZf6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/apt_marble~airbnb-occupancy-revenue-estimator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-apt_marble-airbnb-occupancy-revenue-estimator",
        "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/apt_marble~airbnb-occupancy-revenue-estimator/runs": {
      "post": {
        "operationId": "runs-sync-apt_marble-airbnb-occupancy-revenue-estimator",
        "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/apt_marble~airbnb-occupancy-revenue-estimator/run-sync": {
      "post": {
        "operationId": "run-sync-apt_marble-airbnb-occupancy-revenue-estimator",
        "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": {
          "query": {
            "title": "Market",
            "type": "string",
            "description": "The city, neighbourhood or region to score, written the way you would type it into Airbnb's own search box — for example \"Paris, France\" or \"Austin, Texas\". This is always used, including when you also give a map area, because it makes the results carry their full details.",
            "default": "Paris, France"
          },
          "bbox": {
            "title": "Map area (optional)",
            "type": "object",
            "description": "Restrict the market to a rectangle on the map. Give all four corners: {\"neLat\": 48.90, \"neLng\": 2.42, \"swLat\": 48.81, \"swLng\": 2.25}. The north-east corner must be north and east of the south-west one."
          },
          "listingUrls": {
            "title": "Listing addresses (optional)",
            "maxItems": 2000,
            "type": "array",
            "description": "Score exactly these listings instead of searching a market — one Airbnb room address per line, for example https://www.airbnb.com/rooms/5398166. Up to 2,000. Nightly rates are only filled in for listings that also show up in the market results for your dates.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "listingIds": {
            "title": "Listing IDs (optional)",
            "maxItems": 2000,
            "type": "array",
            "description": "The same thing as the addresses above, but as plain numeric listing IDs — one per line. Up to 2,000.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "rateCheckIn": {
            "title": "Rate window start",
            "type": "string",
            "description": "The check-in date whose nightly rate is used for every revenue figure. Leave empty for 30 days from the run date, which keeps a scheduled run rolling forward. Past dates are moved forward automatically because they return no rates."
          },
          "rateStayLength": {
            "title": "Nights in the rate window",
            "minimum": 1,
            "maximum": 28,
            "type": "integer",
            "description": "How many nights the rate window covers. Short windows read like weekend pricing, longer ones pick up weekly discounts.",
            "default": 4
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Guest count used when the rate is read. Larger parties can see different prices and fewer listings.",
            "default": 2
          },
          "horizonMonths": {
            "title": "Months of availability",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "How far ahead to read availability. Airbnb publishes 12 months and no further, which is the maximum here.",
            "default": 12
          },
          "calendarStartMonth": {
            "title": "First month",
            "type": "string",
            "description": "Where the availability window starts, as YYYY-MM (for example 2026-09). Leave empty for the current month. A month in the past is moved forward, since nothing is published behind today.",
            "default": ""
          },
          "priceMin": {
            "title": "Lowest nightly price",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Only score listings priced at or above this for your rate window. Also used to split a large market into price bands so more of it can be reached."
          },
          "priceMax": {
            "title": "Highest nightly price",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Only score listings priced at or below this for your rate window."
          },
          "roomTypes": {
            "title": "Room types",
            "maxItems": 4,
            "type": "array",
            "description": "Restrict to whole homes, private rooms, shared rooms or hotel rooms. \"Entire home/apt\" is the value confirmed to filter as expected; the others are passed through as given and may be ignored by the site.",
            "items": {
              "type": "string",
              "enum": [
                "Entire home/apt",
                "Private room",
                "Shared room",
                "Hotel room"
              ],
              "enumTitles": [
                "Entire home or apartment (confirmed)",
                "Private room (untested)",
                "Shared room (untested)",
                "Hotel room (untested)"
              ]
            },
            "default": []
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Only score listings with at least this many bedrooms."
          },
          "maxListings": {
            "title": "Listings to score",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "How many listings to score at most. Airbnb shows only a few hundred listings for any single search, so large numbers are reached by splitting the market into price bands.",
            "default": 100
          },
          "includeMonthlyBreakdown": {
            "title": "Month-by-month breakdown",
            "type": "boolean",
            "description": "Nest a per-month table inside every listing row: nights, unavailable nights, occupancy and estimated revenue for each of the 12 months. Free — it adds no extra rows.",
            "default": true
          },
          "includeNightRows": {
            "title": "One row per night (off by default)",
            "type": "boolean",
            "description": "Also write a separate row for every single night of every listing, with availability, check-in and check-out rules and the minimum stay. This multiplies the number of rows by up to 365, so leave it off unless you need night-level data.",
            "default": false
          },
          "includePdpDetails": {
            "title": "Add capacity and property type",
            "type": "boolean",
            "description": "Also read each listing's own summary for guest capacity, property type, bedrooms, beds and bathrooms. Adds one extra read per listing, so it makes the run slower.",
            "default": false
          },
          "maxRequests": {
            "title": "Run budget",
            "minimum": 1,
            "maximum": 12000,
            "type": "integer",
            "description": "A hard ceiling on how much work one run may do. The projected total is printed before the run starts and the run stops cleanly when the budget is spent.",
            "default": 1200
          },
          "maxConcurrency": {
            "title": "Parallel listings",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many listings to work on at the same time. Higher is faster but more likely to be turned away by the site; 4 is a safe default.",
            "default": 4
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Currency for every price and revenue figure, as a three-letter code such as USD, EUR or GBP. Currencies other than USD are untested.",
            "default": "USD"
          },
          "locale": {
            "title": "Language",
            "type": "string",
            "description": "Language for listing text, such as en, fr or de. Languages other than English are untested.",
            "default": "en"
          },
          "proxyCountry": {
            "title": "Country to appear to browse from",
            "type": "string",
            "description": "Two-letter country code, for example us, gb or fr. Leave empty to let the actor choose. Airbnb tailors prices and availability by region, so pick the market your buyers come from.",
            "default": ""
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}