{
  "openapi": "3.0.1",
  "info": {
    "title": "Despegar Reviews Scraper [Only $1.5/1K💰] | Hotels | Scores",
    "description": "Scrape complete hotel review sets from any Despegar country site — Mexico, Argentina, Colombia, Chile and more — with reviewer, traveller type, month, score and liked/disliked comments, plus six category scores and AI summaries. No browser, no API key, $0.0015 per review.",
    "version": "0.2",
    "x-build-id": "zITUncok5BvPHGJvr"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ahmed_jasarevic~despegar-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ahmed_jasarevic-despegar-reviews-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/ahmed_jasarevic~despegar-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-ahmed_jasarevic-despegar-reviews-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/ahmed_jasarevic~despegar-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-ahmed_jasarevic-despegar-reviews-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",
        "required": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "Hotel page URLs",
            "type": "array",
            "description": "Despegar hotel page URLs to scrape reviews from. The country domain in each URL decides the language and country sent to the API, so mix domains freely (for example despegar.com.ar and us.despegar.com).",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxHotels": {
            "title": "Max hotels",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of hotels to scrape. Extra URLs are ignored once this limit is reached.",
            "default": 20
          },
          "maxReviewsPerHotel": {
            "title": "Max reviews per hotel",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum reviews to collect per hotel. Use 0 for every review the endpoint returns.",
            "default": 0
          },
          "cutoffDate": {
            "title": "Cutoff month",
            "pattern": "^$|^\\d{4}-(0[1-9]|1[0-2])$",
            "type": "string",
            "description": "Only keep reviews from this month onwards, formatted YYYY-MM. Despegar publishes review dates with month granularity only, so a day component is not possible.",
            "default": ""
          },
          "locale": {
            "title": "Locale override",
            "pattern": "^$|^[a-z]{2,3}(-[A-Za-z]{2})?$",
            "type": "string",
            "description": "Force the language and country sent to the API, formatted like es-MX or pt-BR. Leave empty to derive it from each start URL's domain, which is the recommended setting.",
            "default": ""
          },
          "travelerType": {
            "title": "Traveler types",
            "enum": [
              "all",
              "general",
              "couple",
              "friends",
              "singles",
              "family"
            ],
            "type": "string",
            "description": "Which traveler-type queries to run. \"all\" runs every one of them and merges the results, which is the only way to reach a hotel's full review set — the unfiltered query on its own silently omits roughly a third of reviews. Pick a single type for targeted analysis at lower cost.",
            "default": "all"
          },
          "reviewPageSize": {
            "title": "Reviews per request",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Reviews fetched per request. The endpoint accepts at most 100; higher values mean fewer requests per hotel.",
            "default": 100
          },
          "includeHotelSummary": {
            "title": "Include hotel summary",
            "type": "boolean",
            "description": "Emit one hotelSummary item per hotel with the aggregate score, the six category scores, the review count and Despegar's AI review summary.",
            "default": true
          },
          "fetchHotelPages": {
            "title": "Fetch hotel pages",
            "type": "boolean",
            "description": "Fetch each hotel page to capture the hotel name. The hotel id is taken from the URL either way, so turning this off saves one request per hotel and leaves hotelName empty.",
            "default": true
          },
          "maxRequestsPerCrawl": {
            "title": "Max requests per crawl",
            "minimum": 0,
            "type": "integer",
            "description": "Safety cap on total requests. Use 0 for no limit.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Parallel requests. Despegar serves these endpoints cheaply, so 10 is comfortable; lower it if you hit rate limiting.",
            "default": 10
          },
          "proxyCountry": {
            "title": "Proxy country",
            "pattern": "^$|^[A-Za-z]{2}$",
            "type": "string",
            "description": "Pin the residential proxy to a specific country, as an ISO code such as AR, MX or BR. Leave empty to pin each hotel to the country of its own domain, which is the recommended setting — Despegar rejects far more requests when a market is reached through a foreign exit IP.",
            "default": ""
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Despegar rejects all requests from datacenter IP addresses with HTTP 403, which includes Apify's own servers and Apify Datacenter proxies. Residential proxies are therefore required to run this Actor in the cloud, and the default below turns them on. If a run returns 403, check this first.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}