{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper: Prices & Booking Sites",
    "description": "Google Hotels prices for your stay by place, Hotels or Maps link, id or hotel name, hotels and vacation rentals, no login. Rows: nightly and stay price, deal, class, rating, amenities. Add all booking sites with their own links, reviews, photos, 41 more markets. JSON, CSV, API; pay per property.",
    "version": "0.1",
    "x-build-id": "xbbSxsaYCSksSNIWg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-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/automation_craft~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-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/automation_craft~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-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": "Places to search",
            "type": "array",
            "description": "Cities, areas or landmarks, one per entry, such as \"Lisbon\" or \"Times Square, New York\", searched as \"hotels in <place>\" unless the text names a kind of stay (\"resorts in Cancun\"). Add the country when a name is shared, or give the place's Google Maps feature id (\"0x47e66e1f06e2b70f:0x40b82c3688c9460\" is Paris). A place Google does not know is a free row. Up to about 1,000 properties a place (Google's depth).",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Google Hotels or Google Maps links",
            "type": "array",
            "description": "Links copied from Google: a Google Hotels search (google.com/travel/search?...), it keeps its own place, dates, guests, currency, filters and sort unless you set them below; a Google Hotels property page (google.com/travel/hotels/entity/...); a Google Maps place link of a hotel, or a Maps share link (maps.app.goo.gl).",
            "items": {
              "type": "string"
            }
          },
          "propertyIds": {
            "title": "Property ids",
            "type": "array",
            "description": "Google Hotels property ids (\"ChUI...\"), Google Maps place ids (\"ChIJ...\"), Maps feature ids (\"0x..:0x..\") or Maps CIDs (digits or \"0x..\"). Each is read from its property record, so its row always carries the Property details.",
            "items": {
              "type": "string"
            }
          },
          "hotelNames": {
            "title": "Hotel names",
            "type": "array",
            "description": "Hotel names, such as \"The Ritz London\". A name is looked up only when Google lists exactly one hotel of exactly that name; otherwise a free row lists the closest names and their ids.",
            "items": {
              "type": "string"
            }
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "hotels",
              "vacationRentals",
              "hotelsAndVacationRentals"
            ],
            "type": "string",
            "description": "Hotels (the default), vacation rentals, or both (each place is read twice, once per view)."
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "YYYY-MM-DD, at most 330 days ahead (Google Hotels prices no stay further out). Give it with \"checkOut\", or use the relative dates below. Neither given: 14 days from the run's day, 2 nights (a pasted search link keeps its own dates)."
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "YYYY-MM-DD, after the check-in date, at most 30 nights later."
          },
          "checkInDaysFromToday": {
            "title": "Check-in, days from the run's day",
            "minimum": 0,
            "maximum": 330,
            "type": "integer",
            "description": "Relative dates for scheduled runs: the check-in this many days after the run's day (UTC), 0 to 330."
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of the stay with relative dates, 1 to 30."
          },
          "dateWindowDays": {
            "title": "Date window (consecutive check-in days)",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "Read every check-in day from the check-in date on, this many days in a row (1 to 60), each with the same number of nights: one search or lookup per day, to compare prices across dates. Each day is its own search, charged as one."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Adults, 1 to 10 (default 2). Google Hotels prices a stay for the guests; it has no rooms setting."
          },
          "childrenAges": {
            "title": "Children's ages",
            "type": "array",
            "description": "One age per child, 0 to 17, at most 6 children."
          },
          "currencies": {
            "title": "Currencies",
            "type": "array",
            "description": "Three letter currency codes (default USD). Several currencies read every search once per currency, charged as one search each.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Booking site markets (countries)",
            "type": "array",
            "description": "The country whose booking sites and prices Google shows (default US, read from Apify's own network). Another country is read through Apify residential exits in that country and adds the Local market run and Local market page events. Several countries read every search once per country.",
            "items": {
              "type": "string",
              "enum": [
                "US",
                "GB",
                "DE",
                "FR",
                "ES",
                "IT",
                "NL",
                "BE",
                "CH",
                "AT",
                "IE",
                "PT",
                "SE",
                "NO",
                "DK",
                "FI",
                "PL",
                "CZ",
                "GR",
                "TR",
                "CA",
                "MX",
                "BR",
                "AR",
                "AU",
                "NZ",
                "JP",
                "KR",
                "SG",
                "HK",
                "TW",
                "TH",
                "MY",
                "ID",
                "PH",
                "VN",
                "IN",
                "AE",
                "SA",
                "IL",
                "ZA",
                "EG"
              ]
            }
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "en-GB",
              "fr",
              "de",
              "es",
              "it",
              "pt",
              "pt-BR",
              "nl",
              "sv",
              "no",
              "da",
              "fi",
              "pl",
              "cs",
              "el",
              "tr",
              "ru",
              "uk",
              "ja",
              "ko",
              "zh-CN",
              "zh-TW",
              "th",
              "vi",
              "id",
              "ms",
              "hi",
              "ar",
              "he"
            ],
            "type": "string",
            "description": "The language of names and descriptions (default English)."
          },
          "device": {
            "title": "Device",
            "enum": [
              "desktop",
              "mobile"
            ],
            "type": "string",
            "description": "Desktop (default) or mobile: Google shows a phone another booking site set and other prices."
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "relevance",
              "lowestPrice",
              "highestRating",
              "mostReviewed"
            ],
            "type": "string",
            "description": "Google's own order: relevance (default), lowest price, highest rating or most reviewed. A sorted list holds fewer properties than the relevance list (Google keeps priced properties only)."
          },
          "minPrice": {
            "title": "Minimum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Per night before taxes and fees, in the search's currency (Google's own price filter)."
          },
          "maxPrice": {
            "title": "Maximum price per night",
            "minimum": 1,
            "type": "integer",
            "description": "Per night before taxes and fees, in the search's currency (Google's own price filter)."
          },
          "minRating": {
            "title": "Minimum guest rating",
            "enum": [
              "3.5",
              "4",
              "4.5"
            ],
            "type": "string",
            "description": "3.5+, 4+ or 4.5+ (Google's rating filter)."
          },
          "hotelClass": {
            "title": "Hotel class (stars)",
            "type": "array",
            "description": "Hotels: 2 to 5 stars, several at once.",
            "items": {
              "type": "string",
              "enum": [
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            }
          },
          "amenities": {
            "title": "Hotel amenities",
            "type": "array",
            "description": "Hotels: every amenity chosen must be offered (Google's own amenity filter).",
            "items": {
              "type": "string",
              "enum": [
                "freeWifi",
                "freeBreakfast",
                "restaurant",
                "bar",
                "kidFriendly",
                "petFriendly",
                "freeParking",
                "parking",
                "evCharger",
                "roomService",
                "fitnessCenter",
                "spa",
                "pool",
                "indoorPool",
                "outdoorPool",
                "airConditioned",
                "wheelchairAccessible",
                "beachAccess",
                "allInclusive"
              ],
              "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"
              ]
            }
          },
          "hotelTypes": {
            "title": "Hotel types",
            "type": "array",
            "description": "Hotels: boutique hotels, resorts, hostels, B&Bs and the other types Google lists.",
            "items": {
              "type": "string",
              "enum": [
                "boutique",
                "spa",
                "bedAndBreakfast",
                "hostel",
                "resort",
                "inn",
                "apartmentHotel",
                "motel",
                "beachHotel",
                "other"
              ],
              "enumTitles": [
                "Boutique hotels",
                "Spa hotels",
                "Bed and breakfasts",
                "Hostels",
                "Resorts",
                "Inns",
                "Apartment hotels",
                "Motels",
                "Beach hotels",
                "Other"
              ]
            }
          },
          "brands": {
            "title": "Hotel brands and chains",
            "type": "array",
            "description": "Hotels: brand or chain names exactly as Google Hotels lists them for the place (\"Hilton Honors\", \"Marriott Bonvoy\", \"Hampton by Hilton\"). A chain includes all its brands. A name Google does not list for the place makes that search a free row listing the brands it does list. Not with hotel types (Google applies none to a brand search).",
            "items": {
              "type": "string"
            }
          },
          "freeCancellation": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Hotels: only properties with a free cancellation offer for the stay."
          },
          "specialOffers": {
            "title": "Special offers only",
            "type": "boolean",
            "description": "Hotels: only properties with a deal for the stay."
          },
          "ecoCertified": {
            "title": "Eco certified only",
            "type": "boolean",
            "description": "Hotels: only properties with an eco certification."
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Vacation rentals: 1 to 5 or more."
          },
          "minBathrooms": {
            "title": "Minimum bathrooms",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Vacation rentals: 1 to 5 or more."
          },
          "rentalTypes": {
            "title": "Rental types",
            "type": "array",
            "description": "Vacation rentals: apartments, houses, villas, cottages or other.",
            "items": {
              "type": "string",
              "enum": [
                "apartment",
                "house",
                "villa",
                "cottage",
                "other"
              ],
              "enumTitles": [
                "Apartments",
                "Houses",
                "Villas",
                "Cottages",
                "Other"
              ]
            }
          },
          "rentalAmenities": {
            "title": "Rental amenities",
            "type": "array",
            "description": "Vacation rentals: every amenity chosen must be offered.",
            "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"
              ]
            }
          },
          "maxItems": {
            "title": "Maximum properties (the run)",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "The most property rows the whole run delivers. Empty: no limit beyond Google's depth and the searches' own maximum."
          },
          "maxItemsPerSearch": {
            "title": "Maximum properties per search",
            "minimum": 1,
            "maximum": 1080,
            "type": "integer",
            "description": "The most property rows one search (one place, stay, currency, market and view) delivers, 1 to 1,080 (default 1,000; Google shows about 1,000 a search)."
          },
          "includeDetails": {
            "title": "Property details (every booking site)",
            "type": "boolean",
            "description": "Adds each property's full record to its row: every booking site with its price per night and stay total with and without taxes, free cancellation and deadline, member prices and the site's own booking link, the cheapest site and the official site, sponsored room offers, the price insight for the dates, address, phone, every amenity, review sources, neighbourhood, similar properties and photos. Charged per property as Property details."
          },
          "maxPropertiesWithDetails": {
            "title": "Max properties with details",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "With Property details: the most search rows of the run that get them (the rows after it are delivered without details and without the details charge). A property by link, id or name always carries its record. Empty: every row."
          },
          "includePhotoGallery": {
            "title": "Photo gallery",
            "type": "boolean",
            "description": "With Property details: adds the property's photo gallery by category, up to the maximum below. Charged per photo."
          },
          "maxPhotosPerProperty": {
            "title": "Maximum gallery photos per property",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "1 to 1,000 (default 100)."
          },
          "includeReviews": {
            "title": "Reviews",
            "type": "boolean",
            "description": "Adds guest reviews of each delivered property as their own rows (the reviews Google shows: Google, Tripadvisor, Trip.com, Priceline and, for vacation rentals, the rental sites). Charged per review."
          },
          "maxReviewsPerProperty": {
            "title": "Maximum reviews per property",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "1 to 5,000 (default 20)."
          },
          "reviewsSort": {
            "title": "Review order",
            "enum": [
              "mostHelpful",
              "newest",
              "highestRating",
              "lowestRating"
            ],
            "type": "string",
            "description": "Newest (default), most helpful, highest or lowest rating."
          },
          "reviewsSource": {
            "title": "Review source",
            "enum": [
              "google",
              "tripadvisor",
              "tripcom",
              "priceline"
            ],
            "type": "string",
            "description": "Only reviews of one source (empty: every source)."
          },
          "reviewsQuery": {
            "title": "Reviews mentioning",
            "type": "string",
            "description": "Only reviews that mention this word or phrase (Google's review search), such as \"breakfast\"."
          },
          "reviewsTopic": {
            "title": "Review topic",
            "type": "string",
            "description": "Only reviews about one topic, by Google's own topic filter (by meaning, not only the word): a topic name as the property rows list it in \"reviewAspects\", such as \"Breakfast\", \"Location\" or \"Food and Beverage\". Not with \"Reviews mentioning\"."
          },
          "reviewsTopicSentiment": {
            "title": "Review topic: mentions",
            "enum": [
              "all",
              "positive",
              "negative"
            ],
            "type": "string",
            "description": "All mentions of the topic (default), or only the positive or only the negative ones."
          },
          "includeMarkdown": {
            "title": "Markdown summary",
            "type": "boolean",
            "description": "Adds a Markdown summary of each property row (its facts, prices and booking sites), ready for notes and language models. Free."
          },
          "includePersonalData": {
            "title": "Include personal data",
            "type": "boolean",
            "description": "All public data is always delivered and this setting has no effect (kept so saved inputs keep working)."
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "Requests in parallel, 1 to 3 (default 3)."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify's own network by default, included in the price: the run's own address first, Apify's datacenter proxy as the fallback. You may give your own proxy links instead."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}