{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Prices Scraper",
    "description": "Scrape Google Hotels price comparisons for any hotel and stay. Just add hotel names, URLs or ids and your dates, and get every provider's nightly and total price, cancellation deadline and booking link, plus hotel details, room rates, guest sentiment and amenities. $10 per 1,000 priced hotel-stays.",
    "version": "1.0",
    "x-build-id": "k52Sz8yQb2xbydecw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/boncross~google-hotels-prices/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-boncross-google-hotels-prices",
        "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/boncross~google-hotels-prices/runs": {
      "post": {
        "operationId": "runs-sync-boncross-google-hotels-prices",
        "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/boncross~google-hotels-prices/run-sync": {
      "post": {
        "operationId": "run-sync-boncross-google-hotels-prices",
        "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": {
          "hotels": {
            "title": "Hotels",
            "type": "array",
            "description": "One hotel per entry: a Google Hotels URL (https://www.google.com/travel/hotels/entity/Ch…), a bare entity id (Ch…), or a hotel name. Add the city for names (\"The Plaza, New York\", \"Hotel Adlon Kempinski Berlin\"). Entity ids are what the Google Hotels Search Scraper actor returns.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (bulk upload)",
            "type": "array",
            "description": "Google Hotels page addresses, with the option to load them in bulk from a file, a Google Sheet or a remote list. Use this when you have more links than you want to paste. Combined with anything in the list above.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Maximum results for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many results across the whole run. A result is one hotel for one stay, carrying all of its offers and rates, so three hotels over two stays is six. 0 = no limit. Rows that report an input the actor could not resolve are not counted.",
            "default": 0
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "YYYY-MM-DD. Leave empty to use \"Check-in days ahead\". Ignored when Stays is set. The lowercase spelling checkin still works.",
            "default": ""
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "YYYY-MM-DD. Leave empty to use \"Nights\". Ignored when Stays is set. The lowercase spelling checkout still works.",
            "default": ""
          },
          "checkInDaysAhead": {
            "title": "Check-in days ahead",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Only used when Check-in date is empty: check in this many days from today, which suits scheduled runs. The lowercase spelling checkinDaysAhead still works.",
            "default": 30
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Used when Check-out date is empty.",
            "default": 2
          },
          "stays": {
            "title": "Multiple stays (advanced)",
            "type": "array",
            "description": "Price every hotel for several date ranges in one run: [{\"checkin\":\"2026-11-10\",\"checkout\":\"2026-11-12\"}, {\"checkin\":\"2026-11-17\",\"checkout\":\"2026-11-19\"}]. One result per hotel per stay.",
            "default": []
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "1 to 8. Providers quote for this occupancy.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children (ages)",
            "type": "array",
            "description": "One age per child, e.g. [4, 9]. Empty = no children.",
            "default": []
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "1 to 8.",
            "default": 1
          },
          "providerInclude": {
            "title": "Only these providers",
            "type": "array",
            "description": "Case-insensitive substrings, e.g. [\"Booking.com\", \"Agoda\", \"Expedia\"]. Empty = all providers.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "providerExclude": {
            "title": "Exclude providers",
            "type": "array",
            "description": "Case-insensitive substrings to drop, e.g. [\"Trip.com\"].",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "freeCancellationOnly": {
            "title": "Free-cancellation offers only",
            "type": "boolean",
            "description": "Keep only offers Google marks as free cancellation.",
            "default": false
          },
          "includeRates": {
            "title": "Include room rates",
            "type": "boolean",
            "description": "Include the room-level rates Google lists (room name, features, per-night and total price).",
            "default": true
          },
          "includeImages": {
            "title": "Include photos",
            "type": "boolean",
            "description": "Include up to 20 photo URLs per hotel.",
            "default": true
          },
          "includeReviews": {
            "title": "Include review breakdown",
            "type": "boolean",
            "description": "Include the star histogram and third-party review sources (Tripadvisor, Trip.com, …) with one sample review each.",
            "default": true
          },
          "includeSentiment": {
            "title": "Include review sentiment by topic",
            "type": "boolean",
            "description": "Google's \"what guests are saying\" breakdown: for each topic (Service, Location, Breakfast, Cleanliness, Sleep and so on) the number of mentions and how many were positive or negative. It is on the same page, so it costs nothing extra.",
            "default": true
          },
          "includeAmenities": {
            "title": "Include amenities",
            "type": "boolean",
            "description": "The full amenities list grouped the way Google shows it (Internet, Services, Wellness, Pets, Pools, Parking, Accessibility and so on) with qualifiers such as \"free\", \"extra charge\" or \"24 hour\", plus the popular-amenities shortlist. Same page, no extra charge.",
            "default": true
          },
          "includeSustainability": {
            "title": "Include sustainability and health & safety",
            "type": "boolean",
            "description": "Eco-certification, the sustainability practices and the health & safety measures the hotel lists (English pages). Switch this off together with amenities and similar hotels for a lighter, price-focused run: every price column, the hotel record and the Place ID are unchanged.",
            "default": true
          },
          "includeSimilarHotels": {
            "title": "Include similar hotels",
            "type": "boolean",
            "description": "The hotels Google lists as similar on the page, each priced for the same stay, with rating, class and coordinates.",
            "default": false
          },
          "includeNearbyPlaces": {
            "title": "Include nearby places",
            "type": "boolean",
            "description": "Attractions, transit hubs and restaurants Google lists near the hotel, with walking / transit times, rating and coordinates.",
            "default": false
          },
          "includeAbout": {
            "title": "Include About (description, typical price, location score)",
            "type": "boolean",
            "description": "Also fetch the hotel's About tab, one extra page per hotel and stay billed as hotel-about: Google's description, the AI review summary, the typical nightly price range for your dates with a \"prices are low\" flag, and the location score with its sub-scores.",
            "default": false
          },
          "includeMapsDetails": {
            "title": "Include Google Maps details",
            "type": "boolean",
            "description": "Also read the hotel's Google Maps listing, at no extra charge: plus code, categories, Google's editorial tagline and description paragraphs, Maps amenities with available or not-available flags, check-in and check-out times, phone and website.",
            "default": false
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "ISO code, e.g. USD, EUR, GBP, JPY.",
            "default": "USD"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Google interface language code, e.g. en, ja, de. Affects names, address formatting and provider labels.",
            "default": "en"
          },
          "priceStoreName": {
            "title": "Price memory store",
            "type": "string",
            "description": "Name of a key-value store. When set, the actor remembers the lowest price per hotel, stay, occupancy and currency, and on later runs adds previousLowestPerNight, priceChange and priceChangePct. Pair it with a schedule for rate monitoring.",
            "default": ""
          },
          "onlyNewOrChanged": {
            "title": "Only new or changed prices",
            "type": "boolean",
            "description": "Needs a price memory store. Skips results whose lowest price is unchanged since last run. A skipped stay is charged only the small hotel-checked fee, not the priced-stay fee.",
            "default": false
          },
          "strictNameMatch": {
            "title": "Strict name match",
            "type": "boolean",
            "description": "For hotels given by name: if the hotel Google resolves the name to does not look like the one you typed, return an error row naming both instead, uncharged; the rest of that hotel's stays are not fetched. Names are compared across scripts (a Japanese or Korean name matches its hotel in an English run) and ignoring case, accents and character width.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 32,
            "type": "integer",
            "description": "How many requests run at once across the whole run. The default is the fastest level measured clean; lower it only if a run reports refusals or errors.",
            "default": 16
          },
          "delayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Optional pause before each call, in milliseconds. 0 (the default) runs as fast as the parallel limit allows.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}