{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Daily Rate & Comp-Set Price Tracker",
    "description": "Track Airbnb nightly rates for any market or pinned comp set across many check-in dates and stay lengths. Every row carries the nightly and total price, discounts, promotions, ratings and the move since your last run, plus a median, quartile and spread summary for each date. No account needed.",
    "version": "0.0",
    "x-build-id": "0kEANXOWoCTrdpDcM"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/apt_marble~airbnb-price-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-apt_marble-airbnb-price-tracker",
        "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-price-tracker/runs": {
      "post": {
        "operationId": "runs-sync-apt_marble-airbnb-price-tracker",
        "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-price-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-apt_marble-airbnb-price-tracker",
        "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 place whose rates you want to track, written the way you would type it into Airbnb — for example \"Paris, France\", \"Austin, Texas\" or \"Lake Como\". This is always used, including when you add map areas below, because without it results lose their property-type line and review counts.",
            "default": "Paris, France"
          },
          "bboxes": {
            "title": "Map areas (optional)",
            "maxItems": 10,
            "type": "array",
            "description": "Optional map areas to price separately, so a large city can be split into neighbourhoods that each get their own median. One area per row, as four corner coordinates: \"neLat,neLng,swLat,swLng\". Up to 10 rows.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "listingIds": {
            "title": "Tracked listings (optional)",
            "maxItems": 500,
            "type": "array",
            "description": "Optional comp set. Paste the listings you care about as numeric ids or room addresses; only those listings are written as rate rows, and one that has no availability in a window is still written with notFoundInWindow set to true. Leave empty to write every listing found in the market. Up to 500 listings.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "leadTimeDays": {
            "title": "Days ahead to price",
            "maxItems": 8,
            "type": "array",
            "description": "How far ahead of today each check-in date sits, one value per row. 7, 14, 30, 60 and 90 price next week, a fortnight out, a month out, two months out and a quarter out — the classic booking curve. Up to 8 rows, each a whole number of days from 0 to 365.",
            "items": {
              "type": "string"
            },
            "default": [
              "7",
              "14",
              "30",
              "60",
              "90"
            ]
          },
          "stayLengths": {
            "title": "Stay lengths (nights)",
            "maxItems": 4,
            "type": "array",
            "description": "How many nights each stay covers, one value per row. 2 and 5 give you a short-break rate and a week-ish rate for every check-in date. Up to 4 rows, each from 1 to 28 nights.",
            "items": {
              "type": "string"
            },
            "default": [
              "2",
              "5"
            ]
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Guest count the prices are quoted for. Airbnb's prices change with occupancy, so keep this the same between runs if you want a comparable series.",
            "default": 2
          },
          "priceMin": {
            "title": "Minimum nightly price",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Only price listings at or above this nightly figure, in the currency you pin below. Price bands are the best way to see deeper into a busy market: run the same market once per band and merge the results."
          },
          "priceMax": {
            "title": "Maximum nightly price",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Only price listings at or below this nightly figure, in the currency you pin below."
          },
          "roomTypes": {
            "title": "Property types",
            "maxItems": 4,
            "type": "array",
            "description": "Restrict the comp set to specific property types, exactly as Airbnb labels them.",
            "items": {
              "type": "string",
              "enum": [
                "Entire home/apt",
                "Private room",
                "Shared room",
                "Hotel room"
              ],
              "enumTitles": [
                "Entire home or apartment",
                "Private room",
                "Shared room",
                "Hotel room"
              ]
            },
            "default": []
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Only price listings with at least this many bedrooms."
          },
          "maxListingsPerWindow": {
            "title": "Listings per date window",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many listings to price for each check-in date and stay length. 200 gives a solid median for a city; raise it for a wider sample, lower it for a faster, cheaper run.",
            "default": 200
          },
          "stateKey": {
            "title": "Tracker name",
            "type": "string",
            "description": "Names the price history this run compares against. Keep it the same between runs to build a series; use a different name to track a second market or comp set independently.",
            "default": "default"
          },
          "minChangePctToFlag": {
            "title": "Smallest change worth flagging (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "A rate has to move by at least this percentage before it counts as a change. Useful for ignoring rounding noise.",
            "default": 1
          },
          "emitUnchanged": {
            "title": "Write unchanged rows too",
            "type": "boolean",
            "description": "On, every priced listing is written every run, so you always get the full picture. Off, only listings whose rate moved, whose discount started or ended, or that are newly seen are written — a much smaller daily digest.",
            "default": true
          },
          "maxRequests": {
            "title": "Maximum work per run",
            "minimum": 1,
            "maximum": 4000,
            "type": "integer",
            "description": "Safety cap on how much work one run may do. The plan is checked against it before anything starts: coverage inside each window is trimmed first, and only then are the longest-lead dates dropped, so the near-term dates always survive.",
            "default": 400
          },
          "maxConcurrency": {
            "title": "Date windows in parallel",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many date windows to price at the same time. 4 is a good balance; higher is faster but heavier on the source site.",
            "default": 4
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Currency every price is quoted in. Pin it and keep it fixed, or a series stops being comparable.",
            "default": "USD"
          },
          "locale": {
            "title": "Language",
            "type": "string",
            "description": "Language for the text Airbnb returns. English is the tested option; other languages are accepted but not verified.",
            "default": "en"
          },
          "proxyCountry": {
            "title": "Browse from",
            "type": "string",
            "description": "Country to appear to browse from, as a two-letter code such as us, gb or fr. Leave empty for the default.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}