{
  "openapi": "3.0.1",
  "info": {
    "title": "Short Term Rental Data API - Airbnb Revenue, Occupancy",
    "description": "Get short term rental market data, Airbnb and Vrbo listing revenue, occupancy and daily rates, monthly market metrics with percentiles, forward pricing, comparable rentals near any address, and projected revenue estimates for any address worldwide.",
    "version": "0.1",
    "x-build-id": "gL32FvppfRKE8psaT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nabeelbaghoor~short-term-rental-data-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nabeelbaghoor-short-term-rental-data-api",
        "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/nabeelbaghoor~short-term-rental-data-api/runs": {
      "post": {
        "operationId": "runs-sync-nabeelbaghoor-short-term-rental-data-api",
        "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/nabeelbaghoor~short-term-rental-data-api/run-sync": {
      "post": {
        "operationId": "run-sync-nabeelbaghoor-short-term-rental-data-api",
        "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": {
          "mode": {
            "title": "What to do",
            "enum": [
              "marketSearch",
              "marketDetails",
              "marketMetrics",
              "futurePricing",
              "exploreRegions",
              "listings",
              "areaComps",
              "listingDetails",
              "listingComps",
              "rentalEstimate"
            ],
            "type": "string",
            "description": "Market search finds the provider's market and submarket IDs, which every other mode needs. Market details reads the score and last twelve months for those IDs. Market metrics reads the monthly series behind them. Listings searches the individual rentals inside a market, submarket or country. Area comparables searches within a radius of an address. Rental estimate takes plain addresses and returns projected revenue.",
            "default": "marketSearch"
          },
          "searchTerms": {
            "title": "Place names",
            "type": "array",
            "description": "Market search mode. One place name per line, for example Denver, or Cornwall, or a ZIP code. Each one returns the markets and submarkets the provider matches to it, with the IDs the other modes need.",
            "items": {
              "type": "string"
            }
          },
          "regionIds": {
            "title": "Market or submarket IDs",
            "type": "array",
            "description": "One market or submarket ID per line, as returned by market search. Used by market details, market metrics, future pricing and listings. In explore mode a single market ID lists that market's own submarkets instead.",
            "items": {
              "type": "string"
            }
          },
          "regionKind": {
            "title": "Market or submarket",
            "enum": [
              "market",
              "submarket"
            ],
            "type": "string",
            "description": "Whether the IDs above are markets or submarkets. A submarket is a neighbourhood sized area inside a market, so the same ID is not valid for both.",
            "default": "market"
          },
          "countryCode": {
            "title": "Country code",
            "type": "string",
            "description": "Explore markets mode, and listings mode when no market ID is set. A two letter country code such as us, gb, fr or au."
          },
          "listingIds": {
            "title": "Listing IDs",
            "type": "array",
            "description": "Listing details and listing comparables modes. One listing ID per line, as returned in the propertyId column of a listings search.",
            "items": {
              "type": "string"
            }
          },
          "addresses": {
            "title": "Property addresses",
            "type": "array",
            "description": "Rental estimate and area comparables modes. One address per line. The provider geocodes each one, so a full street address with city and region matches best.",
            "items": {
              "type": "string"
            }
          },
          "latitude": {
            "title": "Latitude",
            "type": "string",
            "description": "An alternative to a place name or address in market search, area comparables and rental estimate modes. Give a longitude with it."
          },
          "longitude": {
            "title": "Longitude",
            "type": "string",
            "description": "An alternative to a place name or address in market search, area comparables and rental estimate modes. Give a latitude with it."
          },
          "radiusMeters": {
            "title": "Radius in metres",
            "minimum": 1,
            "type": "integer",
            "description": "Area comparables mode. How far from the address or point to search, in metres. 1600 is about one mile.",
            "default": 1600
          },
          "metrics": {
            "title": "Metric series",
            "type": "array",
            "description": "Market metrics mode. Which monthly series to read. Each one produces one row per month. Occupancy, average revenue and average daily rate are read when none is chosen.",
            "items": {
              "type": "string",
              "enum": [
                "occupancy",
                "avg_revenue",
                "adr",
                "revpar",
                "booking_lead_time",
                "avg_length_of_stay",
                "active_listings_count"
              ],
              "enumTitles": [
                "Occupancy rate",
                "Average revenue",
                "Average daily rate",
                "RevPAR",
                "Booking lead time",
                "Average length of stay",
                "Active listings count"
              ]
            }
          },
          "numMonths": {
            "title": "Months of history",
            "minimum": 1,
            "type": "integer",
            "description": "Market metrics and future pricing modes. How many months to read. Twelve months of history is the usual basis for a year on year comparison.",
            "default": 12
          },
          "percentiles": {
            "title": "Percentiles",
            "type": "array",
            "description": "Market metrics mode, on the occupancy, revenue and daily rate series only. One decimal per line between 0 and 1, for example 0.25, so you get the spread across the market rather than only its average.",
            "items": {
              "type": "string"
            }
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "The three letter currency code money figures are returned in, lower case, for example usd, eur or gbp. The provider converts on its side.",
            "default": "usd"
          },
          "accommodates": {
            "title": "Accommodates",
            "type": "string",
            "description": "Guest capacity. Write an exact number such as 8, a comparison such as >=6, or a range such as 2-8. The same three spellings work on every numeric filter below."
          },
          "bedrooms": {
            "title": "Bedrooms",
            "type": "string",
            "description": "An exact count such as 3, a comparison such as >=2, or a range such as 2-4."
          },
          "bathrooms": {
            "title": "Bathrooms",
            "type": "string",
            "description": "An exact count such as 2, a comparison such as >=1.5, or a range such as 1-3."
          },
          "occupancyRateLtm": {
            "title": "Occupancy rate, last 12 months",
            "type": "string",
            "description": "Expressed as a decimal share rather than a percentage, so 0.6 means sixty percent. A comparison such as >=0.6 or a range such as 0.6-1 both work."
          },
          "daysAvailableLtm": {
            "title": "Days available, last 12 months",
            "type": "string",
            "description": "How many nights the listing was open for booking. A high value separates a full time rental from an occasional one, for example >=300."
          },
          "ratings": {
            "title": "Guest rating",
            "type": "string",
            "description": "Out of five. A comparison such as >=4.5 keeps only well reviewed listings."
          },
          "reviewsCount": {
            "title": "Review count",
            "type": "string",
            "description": "How many reviews the listing has. A comparison such as >=20 filters out listings too new to judge."
          },
          "listingCount": {
            "title": "Market listing count",
            "type": "string",
            "description": "Explore markets mode. How many active listings a market has, for example >=500 to keep only markets with real depth."
          },
          "investability": {
            "title": "Investability score",
            "type": "string",
            "description": "The provider's 0 to 100 score for a market as an investment. A comparison such as >=60 works."
          },
          "rentalDemand": {
            "title": "Rental demand score",
            "type": "string",
            "description": "The provider's 0 to 100 demand score for a market, for example >=70."
          },
          "revenueGrowth": {
            "title": "Revenue growth score",
            "type": "string",
            "description": "The provider's 0 to 100 revenue growth score for a market."
          },
          "seasonality": {
            "title": "Seasonality score",
            "type": "string",
            "description": "The provider's 0 to 100 seasonality score. A low score means demand is spread evenly through the year."
          },
          "regulation": {
            "title": "Regulation score",
            "type": "string",
            "description": "The provider's 0 to 100 score for how permissive a market's short term rental rules are. A high score means fewer restrictions."
          },
          "listingType": {
            "title": "Listing type",
            "type": "array",
            "description": "Keeps only listings of these types. Entire place is the whole property; private room and shared room are parts of one.",
            "items": {
              "type": "string",
              "enum": [
                "entire_place",
                "private_room",
                "shared_room"
              ],
              "enumTitles": [
                "Entire place",
                "Private room",
                "Shared room"
              ]
            }
          },
          "propertyType": {
            "title": "Property type",
            "type": "array",
            "description": "Keeps only listings of these property types, in the provider's own spelling, for example house, apartment, condominium, townhouse, villa, cabin, cottage or loft.",
            "items": {
              "type": "string"
            }
          },
          "realEstateType": {
            "title": "Real estate type",
            "type": "array",
            "description": "A coarser grouping than property type, useful when you want every kind of house or apartment without listing each spelling.",
            "items": {
              "type": "string",
              "enum": [
                "apartment",
                "house",
                "bed_and_breakfast",
                "unique"
              ],
              "enumTitles": [
                "Apartment",
                "House",
                "Bed and breakfast",
                "Unique stay"
              ]
            }
          },
          "priceTier": {
            "title": "Price tier",
            "type": "array",
            "description": "The provider's price banding for a listing within its own market, so upscale means upscale locally rather than in absolute terms.",
            "items": {
              "type": "string",
              "enum": [
                "budget",
                "economy",
                "midscale",
                "upscale",
                "luxury"
              ],
              "enumTitles": [
                "Budget",
                "Economy",
                "Midscale",
                "Upscale",
                "Luxury"
              ]
            }
          },
          "marketType": {
            "title": "Market type",
            "type": "array",
            "description": "Explore markets mode. Keeps only markets of these kinds.",
            "items": {
              "type": "string",
              "enum": [
                "urban_metro",
                "mountains_lakes",
                "coastal",
                "suburban",
                "rural",
                "mid_size_city"
              ],
              "enumTitles": [
                "Urban metro",
                "Mountains and lakes",
                "Coastal",
                "Suburban",
                "Rural",
                "Mid size city"
              ]
            }
          },
          "marketIds": {
            "title": "Restrict to market IDs",
            "type": "array",
            "description": "A filter rather than a location: keeps only records belonging to these market IDs. Useful when exploring a country and you want a named subset of it.",
            "items": {
              "type": "string"
            }
          },
          "channels": {
            "title": "Booking channels",
            "type": "array",
            "description": "Keeps only listings advertised on these platforms.",
            "items": {
              "type": "string",
              "enum": [
                "airbnb",
                "vrbo",
                "booking"
              ],
              "enumTitles": [
                "Airbnb",
                "Vrbo",
                "Booking.com"
              ]
            }
          },
          "channelMatch": {
            "title": "How to match channels",
            "enum": [
              "any",
              "subset",
              "exact"
            ],
            "type": "string",
            "description": "Any means the listing is on at least one of them. Only these means it is on no others. Exactly these means it is on all of them and no others.",
            "default": "any"
          },
          "amenitiesRequired": {
            "title": "Amenities the listing must have",
            "type": "array",
            "description": "Keeps only listings with all of these.",
            "items": {
              "type": "string",
              "enum": [
                "has_pool",
                "has_hottub",
                "has_aircon",
                "has_heating",
                "has_kitchen",
                "has_washer",
                "has_dryer",
                "has_parking",
                "has_gym",
                "has_elevator",
                "has_tv",
                "has_cable_tv",
                "has_wireless_internet",
                "has_breakfast",
                "has_pets_allowed",
                "has_smoking"
              ],
              "enumTitles": [
                "Pool",
                "Hot tub",
                "Air conditioning",
                "Heating",
                "Kitchen",
                "Washer",
                "Dryer",
                "Parking",
                "Gym",
                "Elevator",
                "TV",
                "Cable TV",
                "Wireless internet",
                "Breakfast",
                "Pets allowed",
                "Smoking allowed"
              ]
            }
          },
          "amenitiesExcluded": {
            "title": "Amenities the listing must not have",
            "type": "array",
            "description": "Keeps only listings without any of these. An amenity named on both lists is treated as required, since that is the deliberate half of the contradiction.",
            "items": {
              "type": "string",
              "enum": [
                "has_pool",
                "has_hottub",
                "has_aircon",
                "has_heating",
                "has_kitchen",
                "has_washer",
                "has_dryer",
                "has_parking",
                "has_gym",
                "has_elevator",
                "has_tv",
                "has_cable_tv",
                "has_wireless_internet",
                "has_breakfast",
                "has_pets_allowed",
                "has_smoking"
              ],
              "enumTitles": [
                "Pool",
                "Hot tub",
                "Air conditioning",
                "Heating",
                "Kitchen",
                "Washer",
                "Dryer",
                "Parking",
                "Gym",
                "Elevator",
                "TV",
                "Cable TV",
                "Wireless internet",
                "Breakfast",
                "Pets allowed",
                "Smoking allowed"
              ]
            }
          },
          "instantBook": {
            "title": "Instant book only",
            "type": "boolean",
            "description": "Leave this alone to ignore it. Ticked keeps only instant book listings; the filter is applied only when you set it either way."
          },
          "superhost": {
            "title": "Superhost only",
            "type": "boolean",
            "description": "Leave this alone to ignore it. Ticked keeps only listings whose host holds superhost status."
          },
          "professionallyManaged": {
            "title": "Professionally managed only",
            "type": "boolean",
            "description": "Leave this alone to ignore it. Ticked keeps only listings run by a management company rather than an individual host."
          },
          "listingSortOrder": {
            "title": "Sort listings by",
            "enum": [
              "revenue",
              "occupancy",
              "adr",
              "review_count"
            ],
            "type": "string",
            "description": "Listings mode. Results come back highest first.",
            "default": "revenue"
          },
          "compsSortOrder": {
            "title": "Sort comparables by",
            "enum": [
              "proximity",
              "revenue",
              "adr",
              "review_count"
            ],
            "type": "string",
            "description": "Area comparables mode. Proximity returns the nearest listings first, which is usually what a comparables set should be.",
            "default": "revenue"
          },
          "marketSortOrder": {
            "title": "Sort markets by",
            "enum": [
              "market_score",
              "revenue",
              "occupancy",
              "adr",
              "review_count"
            ],
            "type": "string",
            "description": "Explore markets mode. Results come back highest first.",
            "default": "market_score"
          },
          "detailedEstimates": {
            "title": "Full detail on each estimate",
            "type": "boolean",
            "description": "Rental estimate mode. Off returns the headline projection and batches up to 25 addresses per request, which is much faster and cheaper. On returns the month by month forward curve, the history and every comparable behind the estimate, one address per request.",
            "default": false
          },
          "estimateBedrooms": {
            "title": "Subject bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Rental estimate mode. Describes the property being valued. Leave empty to have the provider fill it in from its own records, which is usually what you want when working from a list of addresses."
          },
          "estimateBathrooms": {
            "title": "Subject bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Rental estimate mode. Describes the property being valued. Leave empty to have the provider fill it in."
          },
          "estimateAccommodates": {
            "title": "Subject guest capacity",
            "minimum": 1,
            "type": "integer",
            "description": "Rental estimate mode. How many guests the property sleeps. Leave empty to have the provider fill it in."
          },
          "maxResults": {
            "title": "Maximum rows",
            "minimum": 1,
            "type": "integer",
            "description": "The most rows this run will save and charge for. This is the spending control on both sides.",
            "default": 1000
          },
          "pageSize": {
            "title": "Results per request",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "How many rows to ask for at a time. The provider's ceiling is 25 on every paged endpoint, so a whole market takes many requests.",
            "default": 25
          },
          "requestsPerMinute": {
            "title": "Requests per minute",
            "minimum": 1,
            "maximum": 1200,
            "type": "integer",
            "description": "How fast to call the provider. Lower this if your plan is metered tightly, since the 25 row page cap means row counts and request counts are close together.",
            "default": 120
          },
          "baseUrl": {
            "title": "API base URL",
            "type": "string",
            "description": "Only set this if the provider has given you a different host. Leave empty to use the documented one."
          },
          "apiKey": {
            "title": "API key",
            "type": "string",
            "description": "Your own API key for the short term rental data provider. This actor is bring your own key: it never uses anyone else's credentials, and the key is stored as a secret. A leading Bearer is stripped for you if you paste one."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}