{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Review Scraper With Full Coverage & Date Filters",
    "description": "Airbnb Review Scraper extracts public guest reviews, ratings, reviewer details, review dates, listing information, and review text. Apply date filters to collect targeted feedback for property research, reputation monitoring, competitor analysis, and hospitality insights.",
    "version": "0.1",
    "x-build-id": "Sln7ZXS8zi84f0hwa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~airbnb-review-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-airbnb-review-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/api-empire~airbnb-review-scraper/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-airbnb-review-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/api-empire~airbnb-review-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-airbnb-review-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": {
          "reviewSources": {
            "title": "🏡 Listings To Sweep",
            "type": "array",
            "description": "📥 Airbnb listing URLs (e.g. https://www.airbnb.com/rooms/12937) or bare room ids (e.g. 12937). Both fields on this screen are read, so an existing input that uses the older key keeps working.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "🔗 Listings (Compatibility Field)",
            "type": "array",
            "description": "📎 Same meaning as the field above and merged with it. Keep using this key if you already have an input JSON built around it. Host names and free-text search phrases are not listings and are reported as skipped rather than matched to something else.",
            "items": {
              "type": "string"
            }
          },
          "reviewsSince": {
            "title": "📅 Reviews Since",
            "type": "string",
            "description": "⏪ Keep only reviews written on or after this date. Accepts an absolute date (2025-01-01) or a relative one (e.g. 3 months). Leave empty for no lower bound."
          },
          "reviewsUntil": {
            "title": "📅 Reviews Until",
            "type": "string",
            "description": "⏩ Keep only reviews written on or before this date. Accepts an absolute date (2025-12-31) or a relative one (e.g. 1 week). Leave empty for no upper bound."
          },
          "stopEarlyOutsideWindow": {
            "title": "⏱️ Stop As Soon As The Window Is Passed",
            "type": "boolean",
            "description": "✅ With the newest-first order, the sweep ends the moment it walks past your 'reviews since' date instead of reading the rest of the listing. The summary row reports how many pages that saved. Ignored for the rating-based orders, whose results are not in date order.",
            "default": true
          },
          "reviewCap": {
            "title": "📊 Reviews Per Listing (0 = Every Review)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "🔢 Maximum reviews to collect per listing. 0 means every review the listing has, which is what makes the coverage figure reach 100%. This value wins over the compatibility field below whenever it is present."
          },
          "pagingSort": {
            "title": "🔽 Review Order",
            "enum": [
              "MOST_RECENT",
              "RATING_DESC",
              "RATING_ASC",
              "BEST_QUALITY"
            ],
            "type": "string",
            "description": "🧭 Newest first is the default because it walks a listing without repeating rows and it is the only order that supports stopping early on a date window. Airbnb's own ranking is available for parity, but its order is not stable, so a sweep can return the same review twice — those repeats are counted and reported rather than hidden."
          },
          "emitCoverageRow": {
            "title": "🧾 Add The Coverage Summary Row",
            "type": "boolean",
            "description": "✅ Adds one summary row per listing carrying the listing's own review total, the number collected, the coverage percentage, duplicates skipped, pages walked and the date range covered. Turn it off for a reviews-only export.",
            "default": true
          },
          "maxComments": {
            "title": "🔢 Max Reviews Per Target (Compatibility Field)",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "📎 Same meaning as 'Reviews per listing' and kept so an existing input JSON keeps working. It is used only when 'Reviews per listing' is absent from the input.",
            "default": 10
          },
          "sortOrder": {
            "title": "🔃 Sort Order (Compatibility Field)",
            "enum": [
              "MOST_RECENT",
              "RATING_DESC",
              "RATING_ASC",
              "BEST_QUALITY"
            ],
            "type": "string",
            "description": "📎 Same meaning as 'Review order' and kept so an existing input JSON keeps working. It is used only when 'Review order' is absent from the input."
          },
          "locale": {
            "title": "🗣️ Review Language",
            "enum": [
              "en-US",
              "az-AZ",
              "id-ID",
              "bs-BA",
              "ca-ES",
              "cs-CZ",
              "sr-ME",
              "da-DK",
              "de-DE",
              "de-AT",
              "de-CH",
              "de-LU",
              "et-EE",
              "en-AU",
              "en-CA",
              "en-GB",
              "en-GY",
              "en-IN",
              "en-IE",
              "en-NZ",
              "en-SG",
              "en-AE",
              "es-AR",
              "es-BZ",
              "es-BO",
              "es-CL",
              "es-CO",
              "es-CR",
              "es-EC",
              "es-SV",
              "es-ES",
              "es-US",
              "es-GT",
              "es-HN",
              "es-419",
              "es-MX",
              "es-NI",
              "es-PA",
              "es-PY",
              "es-PE",
              "es-VE",
              "fr-BE",
              "fr-CA",
              "fr-FR",
              "fr-CH",
              "fr-LU",
              "ga-IE",
              "hr-HR",
              "xh-ZA",
              "zu-ZA"
            ],
            "type": "string",
            "description": "🌐 Language used for the localized review text and the human-readable date. Note that the choice also influences which reviews are returned first, so keep it fixed when you compare two runs.",
            "default": "en-US"
          },
          "proxyConfiguration": {
            "title": "🌐 Connection",
            "type": "object",
            "description": "🔧 Leave as is unless you need a specific connection setup for this run.",
            "properties": {
              "useApifyProxy": {
                "title": "✅ Use Apify Proxy",
                "type": "boolean",
                "description": "🎛️ Route the run through Apify Proxy."
              },
              "apifyProxyGroups": {
                "title": "🧩 Proxy Groups",
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "🏷️ Optional group names available on your Apify plan."
              },
              "apifyProxyCountry": {
                "title": "🌍 Country",
                "type": "string",
                "description": "📌 Optional ISO-2 country code, e.g. US, GB, CA."
              }
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}