{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper & Hotel Prices API",
    "description": "Scrape Google Hotels for any city or hotel: prices for your dates and guests from every booking site (Booking.com, Expedia, Agoda...) with booking links, room rates, ratings, review insights, amenities and contacts. Track competitor rates daily. No API key.",
    "version": "1.0",
    "x-build-id": "MGg8gQHzETIuFqkZL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapr~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapr-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/scrapr~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapr-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/scrapr~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapr-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": {
          "locations": {
            "title": "📍 Locations to search",
            "type": "array",
            "description": "Cities, neighborhoods, landmarks or free-text searches, one per line. Examples: \"Madrid\", \"Shibuya, Tokyo\", \"hotels near Times Square\", \"beach resorts in Cancun\". Any language works.",
            "items": {
              "type": "string"
            }
          },
          "hotelUrls": {
            "title": "🏨 Specific hotels (Google Hotels or Google Maps links)",
            "type": "array",
            "description": "Track specific hotels: open a hotel on Google Hotels (google.com/travel/hotels) and paste its link. Links copied after clicking a hotel in the results, Google share links and Google Maps links of the hotel work too. Ideal for daily rate monitoring of your hotel and competitors. Search links (google.com/travel/search?q=...) are searched like a location.",
            "items": {
              "type": "string"
            }
          },
          "maxHotelsPerLocation": {
            "title": "Max hotels per location",
            "minimum": 1,
            "maximum": 3000,
            "type": "integer",
            "description": "How many hotels to return for each location. One Google search shows ~650 unique hotels; when you ask for more, the Actor adds narrower searches and landmark searches across the same place (New York: 2,600+ hotels).",
            "default": 100
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "A date (YYYY-MM-DD) or a relative date like \"30 days\" (counted from the day of each run, ideal for scheduled price monitoring). Without dates, Google picks a default stay (usually 1 night about a week ahead); the dates it used are in each result."
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "A date (YYYY-MM-DD) or a relative date. Relative check-outs count from the day of the run (\"32 days\" with check-in \"30 days\" = 2 nights); a small one like \"2 days\" counts from the check-in. Up to 30 nights."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Number of adult guests. Prices and booking links are for this many people.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children ages",
            "type": "array",
            "description": "One age (0-17) per child, e.g. 5 and 9 for two children. Leave empty for no children.",
            "items": {
              "type": "string"
            }
          },
          "checkInDatesToScan": {
            "title": "Number of check-in dates to scan",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Price calendar: repeat the same stay starting on consecutive days. E.g. check-in Dec 1, check-out Dec 3 and 14 dates = 2-night stays starting Dec 1, 2, 3 ... 14. Each hotel x date is one result. Best combined with Specific hotels.",
            "default": 1
          },
          "currency": {
            "title": "Convert prices to currency",
            "type": "string",
            "description": "Optional ISO code (USD, EUR, GBP, JPY...). Google prices in the currency of the search region (USD by default); this adds converted prices using the daily European Central Bank rates."
          },
          "minRating": {
            "title": "Minimum guest rating",
            "minimum": 1,
            "maximum": 5,
            "type": "number",
            "description": "Only hotels rated at least this (1.0–5.0)."
          },
          "hotelClasses": {
            "title": "Star classes",
            "type": "array",
            "description": "Only these hotel classes, e.g. 4 and 5 stars. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            }
          },
          "minPricePerNight": {
            "title": "Minimum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Per night. In the currency set in \"Convert prices to currency\" if you set one, otherwise in the currency Google returns (USD by default)."
          },
          "maxPricePerNight": {
            "title": "Maximum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Per night. In the currency set in \"Convert prices to currency\" if you set one, otherwise in the currency Google returns (USD by default)."
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "all",
              "hotels",
              "vacationRentals"
            ],
            "type": "string",
            "description": "Hotels (with a Google Maps place) or vacation rentals (apartments, rooms).",
            "default": "all"
          },
          "fetchDetails": {
            "title": "Full hotel details",
            "type": "boolean",
            "description": "Open each hotel's page to add prices from every booking site (Booking.com, Expedia, the hotel's own site...) with direct booking links, room rates (room type, beds, free cancellation, breakfast), ratings on Tripadvisor and other sites, the full address, international phone, the complete amenity list and languages spoken. Charged as an extra event (see Pricing); turn it off to pay only for search results.",
            "default": true
          },
          "maxRoomRates": {
            "title": "Room rates per hotel",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "With Full hotel details, the cheapest room rates to keep per hotel (room type, beds, free cancellation, breakfast). Big hotels can have 200+ rates; 0 skips them. No extra cost.",
            "default": 20
          },
          "maxPhotos": {
            "title": "Photos per hotel",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of photo URLs per hotel.",
            "default": 5
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of hotel names, descriptions and labels: a code (en, es, fr, de, ja, pt-BR, zh-TW...) or a name (Spanish, Deutsch...). Any language Google supports works. Amenities are always in English, so results compare across languages.",
            "default": "en"
          },
          "countryCode": {
            "title": "Google country",
            "type": "string",
            "description": "Google country code (gl): us, gb, es, de...",
            "default": "us"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed in most cases. The Actor switches to Apify Proxy automatically if Google starts limiting requests.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}