{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper: Booking.com, Expedia, Agoda prices",
    "description": "Hotel prices on Booking.com, Expedia, Agoda, Trip.com and the hotel's own site, compared by Google Hotels, for any city or hotel and dates: every offer with rooms and rates, a price calendar, reviews, amenities and ratings.",
    "version": "0.1",
    "x-build-id": "Yx2OGVoPNYnDkmLvd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/famed_bonobo~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-famed_bonobo-google-hotels-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/famed_bonobo~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-famed_bonobo-google-hotels-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/famed_bonobo~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-famed_bonobo-google-hotels-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": {
          "queries": {
            "title": "Search queries",
            "type": "array",
            "description": "What to search on Google Hotels, one search per line. Use a city, an area or landmark, or a full query such as \"beach hotels in Cancun\". Leave empty to look up only the hotels listed below.",
            "items": {
              "type": "string"
            }
          },
          "hotels": {
            "title": "Specific hotels",
            "type": "array",
            "description": "Hotels to look up one by one, without a search: paste each hotel's Google Hotels link, its property token, or its name with the city (for example \"Hotel Arts Barcelona\"). Each comes with its full page: prices for your dates, ratings, every amenity, address, phone and, with booking sites on, every offer. A name is accepted only when Google's first result is that hotel; otherwise the run says so instead of guessing.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "checkInDate": {
            "title": "Check-in date",
            "type": "string",
            "description": "First night of the stay. Leave empty to use \"Check-in in this many days\"."
          },
          "checkOutDate": {
            "title": "Check-out date",
            "type": "string",
            "description": "Departure day; must be after the check-in date. Leave empty to use \"Nights\"."
          },
          "checkInDaysFromToday": {
            "title": "Check-in in this many days",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Used when the check-in date is empty: check in this many days after the run starts. Handy for scheduled runs that should always look the same distance ahead.",
            "default": 14
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Used when the check-out date is empty: the stay lasts this many nights.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Number of adult guests. Prices change with the number of guests.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children (ages)",
            "type": "array",
            "description": "Age of each child, from 0 to 17, for example [5, 12] for two children. Google prices the stay for this family.",
            "default": []
          },
          "maxResultsPerQuery": {
            "title": "Max hotels per query",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Stop each search after this many hotels. Google shows about 20 hotels per page.",
            "default": 50
          },
          "includeBookingSources": {
            "title": "Include prices from each booking site",
            "type": "boolean",
            "description": "Also collect the offer from every booking site Google lists for each hotel (Booking.com, Expedia, Agoda, the hotel's own site and more), with price and booking link, plus each site's rooms and rate plans with free cancellation and breakfast where the site lists them. Needs one extra request per hotel, so it is charged as a separate event.",
            "default": false
          },
          "priceCalendarDays": {
            "title": "Price calendar (check-in days)",
            "minimum": 0,
            "maximum": 400,
            "type": "integer",
            "description": "For each hotel, the price of the same stay (same nights and guests) for every check-in date from your check-in date on, as Google's date picker shows it: up to about 300 days ahead, in one extra request per hotel. Each priced date is charged as a calendar date. 0 leaves it out.",
            "default": 0
          },
          "maxReviewsPerHotel": {
            "title": "Reviews per hotel",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Reviews to add to each hotel, from Google and the other sites Google shows (Tripadvisor, Trip.com...): text (Google's translation and the original), rating, date, trip type, ratings by category, highlights and the hotel's reply. 200 come in one request. The reviewer's name and photo are not collected. Each review is charged as a review. 0 leaves them out.",
            "default": 0
          },
          "reviewsSort": {
            "title": "Reviews order",
            "enum": [
              "mostHelpful",
              "newest",
              "highestRating",
              "lowestRating"
            ],
            "type": "string",
            "description": "Order of the reviews, as Google sorts them.",
            "default": "mostHelpful"
          },
          "reviewsSource": {
            "title": "Reviews from",
            "enum": [
              "all",
              "google"
            ],
            "type": "string",
            "description": "Google reviews only, or also the reviews Google shows from other sites.",
            "default": "all"
          },
          "reviewsQuery": {
            "title": "Reviews mentioning",
            "type": "string",
            "description": "Only reviews that mention this text, as the search box of Google's reviews tab (for example \"noise\" or \"breakfast\").",
            "default": ""
          },
          "maxPhotosPerHotel": {
            "title": "Photos per hotel",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Photos to add to each hotel, at full size and by category (bedroom, bathroom, exterior, interior, amenities, food & drink): the property's own and the booking sites'. Visitors' photos are not collected, since they can show people. No extra charge. 0 leaves them out.",
            "default": 0
          },
          "includeCityReport": {
            "title": "City report",
            "type": "boolean",
            "description": "For each search, Google's report on the place: typical nightly price by star class, every month's prices, temperatures and crowds, and the neighbourhoods to stay in with their typical price, map outline and highlights. Stored in the run's key-value store as CITY-REPORT-<search>. No extra charge.",
            "default": false
          },
          "propertyMode": {
            "title": "What to list",
            "enum": [
              "hotelsAndVacationRentals",
              "hotels",
              "vacationRentals"
            ],
            "type": "string",
            "description": "Hotels and vacation rentals together (Google's default), only hotels, or only vacation rentals. Vacation rentals have their own filters below.",
            "default": "hotelsAndVacationRentals"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "lowestPrice",
              "highestRating",
              "mostReviewed"
            ],
            "type": "string",
            "description": "Order of the results, as Google sorts them.",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Minimum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "In the chosen currency, taxes included. Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Maximum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "In the chosen currency, taxes included. Leave empty for no maximum."
          },
          "minRating": {
            "title": "Minimum guest rating",
            "enum": [
              "any",
              "3.5",
              "4",
              "4.5"
            ],
            "type": "string",
            "description": "Only places rated at least this much.",
            "default": "any"
          },
          "freeCancellationOnly": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Only places with a free-cancellation rate; their price is then that rate.",
            "default": false
          },
          "specialOffersOnly": {
            "title": "Special offers only",
            "type": "boolean",
            "description": "Only places priced below their usual price.",
            "default": false
          },
          "hotelClasses": {
            "title": "Hotel star class",
            "type": "array",
            "description": "Only hotels with these official star classes. Empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "2-star",
                "3-star",
                "4-star",
                "5-star"
              ]
            },
            "default": []
          },
          "amenities": {
            "title": "Hotel amenities",
            "type": "array",
            "description": "Only hotels that have all of these.",
            "items": {
              "type": "string",
              "enum": [
                "freeWifi",
                "freeBreakfast",
                "restaurant",
                "bar",
                "kidFriendly",
                "petFriendly",
                "freeParking",
                "parking",
                "evCharger",
                "roomService",
                "fitnessCenter",
                "spa",
                "pool",
                "indoorPool",
                "outdoorPool",
                "airConditioned",
                "wheelchairAccessible",
                "beachAccess",
                "allInclusiveAvailable"
              ],
              "enumTitles": [
                "Free Wi-Fi",
                "Free breakfast",
                "Restaurant",
                "Bar",
                "Kid-friendly",
                "Pet-friendly",
                "Free parking",
                "Parking",
                "EV charger",
                "Room service",
                "Fitness center",
                "Spa",
                "Pool",
                "Indoor pool",
                "Outdoor pool",
                "Air-conditioned",
                "Wheelchair accessible",
                "Beach access",
                "All-inclusive available"
              ]
            },
            "default": []
          },
          "hotelTypes": {
            "title": "Hotel types",
            "type": "array",
            "description": "Only these kinds of hotel.",
            "items": {
              "type": "string",
              "enum": [
                "beachHotels",
                "boutiqueHotels",
                "hostels",
                "inns",
                "motels",
                "spaHotels",
                "bedAndBreakfasts",
                "apartmentHotels",
                "other"
              ],
              "enumTitles": [
                "Beach hotels",
                "Boutique hotels",
                "Hostels",
                "Inns",
                "Motels",
                "Spa hotels",
                "Bed and breakfasts",
                "Apartment hotels",
                "Other"
              ]
            },
            "default": []
          },
          "ecoCertifiedOnly": {
            "title": "Eco-certified only",
            "type": "boolean",
            "description": "Only hotels with an independent sustainability certification.",
            "default": false
          },
          "rentalTypes": {
            "title": "Vacation rental types",
            "type": "array",
            "description": "With \"Vacation rentals only\": only these kinds of rental.",
            "items": {
              "type": "string",
              "enum": [
                "apartments",
                "chalets",
                "cottages",
                "houses",
                "houseboats",
                "villas",
                "other"
              ],
              "enumTitles": [
                "Apartments",
                "Chalets",
                "Cottages",
                "Houses",
                "Houseboats",
                "Villas",
                "Other"
              ]
            },
            "default": []
          },
          "rentalAmenities": {
            "title": "Vacation rental amenities",
            "type": "array",
            "description": "With \"Vacation rentals only\": only rentals that have all of these.",
            "items": {
              "type": "string",
              "enum": [
                "freeWifi",
                "fitnessCenter",
                "airConditioned",
                "kidFriendly",
                "pool",
                "petFriendly",
                "hotTub",
                "kitchen",
                "patioOrDeck",
                "outdoorGrill",
                "crib",
                "fireplace"
              ],
              "enumTitles": [
                "Free Wi-Fi",
                "Fitness center",
                "Air-conditioned",
                "Kid-friendly",
                "Pool",
                "Pet-friendly",
                "Hot tub",
                "Kitchen",
                "Patio or deck",
                "Outdoor grill",
                "Crib",
                "Fireplace"
              ]
            },
            "default": []
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "With \"Vacation rentals only\"."
          },
          "minBathrooms": {
            "title": "Minimum bathrooms",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "With \"Vacation rentals only\"."
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Three-letter currency code for all prices, such as USD, EUR or GBP.",
            "default": "USD"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of hotel descriptions and texts, as a Google language code such as en, es or fr.",
            "default": "en"
          },
          "country": {
            "title": "Country of the searcher",
            "type": "string",
            "description": "Two-letter country code Google uses to localize results, such as us, gb or de.",
            "default": "us"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxies used to reach Google. The default works for most runs.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}