{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper 💰$2/1K (Google Travel): Hotel Prices",
    "description": "Unofficial Google Hotels API and hotel price tracker: hotel prices from Google Hotels for any destination and dates — per night and total, rating, stars, plus the price on every booking site (Booking.com, Expedia, Agoda…). Hotel price comparison, price calendars, rate parity, price-drop alerts.",
    "version": "0.1",
    "x-build-id": "yk5n7yyhZYL8HmSr7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/euroscrape~google-hotels-prices/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-euroscrape-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/euroscrape~google-hotels-prices/runs": {
      "post": {
        "operationId": "runs-sync-euroscrape-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/euroscrape~google-hotels-prices/run-sync": {
      "post": {
        "operationId": "run-sync-euroscrape-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": {
          "locations": {
            "title": "Destinations",
            "type": "array",
            "description": "Cities, areas or landmarks to search, e.g. \"Paris\", \"Lisbon Alfama\", \"hotels near Eiffel Tower\". Each destination returns hotels with their price for your dates, rating, class, amenities and location.",
            "items": {
              "type": "string"
            }
          },
          "hotels": {
            "title": "Hotels to track (rate shopping)",
            "type": "array",
            "description": "Hotel names (e.g. \"Novotel Paris Est\") or Google Hotels URLs. For each hotel and each date you get the price on every booking site (hotel website, Booking.com, Expedia, Agoda…): cheapest site, official price and the gap between them.",
            "items": {
              "type": "string"
            }
          },
          "checkInDate": {
            "title": "Check-in date",
            "type": "string",
            "description": "First check-in date (YYYY-MM-DD). Default: in 14 days."
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of stay.",
            "default": 1
          },
          "numberOfDates": {
            "title": "Number of check-in dates (price calendar)",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Check prices for several check-in dates in a row, e.g. 30 = every day of the next month. Each date is one search.",
            "default": 1
          },
          "daysBetweenDates": {
            "title": "Days between check-in dates",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "1 = every day, 7 = same weekday every week.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Number of adult guests.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children ages",
            "type": "array",
            "description": "One age per child, e.g. [4, 9].",
            "default": []
          },
          "currency": {
            "title": "Currency",
            "enum": [
              "EUR",
              "USD",
              "GBP",
              "CHF",
              "SEK",
              "NOK",
              "DKK",
              "PLN",
              "CZK",
              "HUF",
              "RON",
              "TRY",
              "CAD",
              "AUD",
              "JPY",
              "INR",
              "BRL",
              "MXN",
              "AED",
              "THB"
            ],
            "type": "string",
            "description": "Currency of all prices.",
            "default": "EUR"
          },
          "countryCode": {
            "title": "Market (country)",
            "type": "string",
            "description": "Country of the traveller (Google \"gl\" parameter): it changes which booking sites are shown and sometimes the prices, e.g. \"us\", \"gb\", \"fr\", \"de\".",
            "default": "us"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of descriptions and place names, e.g. \"en\", \"fr\", \"de\", \"es\".",
            "default": "en"
          },
          "maxHotelsPerLocation": {
            "title": "Maximum hotels per destination and date",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Google shows about 18 new hotels per page.",
            "default": 40
          },
          "includeBookingSites": {
            "title": "Destinations: add prices from every booking site",
            "type": "boolean",
            "description": "For each hotel found, also get the price on every booking site (one extra page per hotel, billed separately). Always on for tracked hotels.",
            "default": false
          },
          "freeCancellationOnly": {
            "title": "Only hotels with free cancellation",
            "type": "boolean",
            "description": "Keep only hotels for which Google shows at least one room offer with free cancellation, with the cheapest such price per night, the site and the deadline. Reads each hotel's page, so the booking-sites price applies. Hotels for which Google details no room offer are left out and not charged.",
            "default": false
          },
          "includeVacationRentals": {
            "title": "Include vacation rentals",
            "type": "boolean",
            "description": "Google Hotels mixes apartments and vacation rentals with hotels. Off = hotels only.",
            "default": false
          },
          "onlyAvailable": {
            "title": "Only hotels with a price",
            "type": "boolean",
            "description": "Skip hotels for which Google shows no price for your dates (no availability).",
            "default": true
          },
          "minRating": {
            "title": "Minimum guest rating",
            "minimum": 1,
            "maximum": 5,
            "type": "number",
            "description": "From 1 to 5, e.g. 4.2."
          },
          "hotelClasses": {
            "title": "Hotel class (stars)",
            "type": "array",
            "description": "Keep only these star ratings.",
            "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": "In the chosen currency."
          },
          "maxPricePerNight": {
            "title": "Maximum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "In the chosen currency."
          },
          "amenities": {
            "title": "Required amenities",
            "type": "array",
            "description": "Keep only hotels with all of these.",
            "items": {
              "type": "string",
              "enum": [
                "free_wifi",
                "free_breakfast",
                "breakfast",
                "pool",
                "spa",
                "parking",
                "free_parking",
                "pet_friendly",
                "air_conditioning",
                "restaurant",
                "bar",
                "fitness_center",
                "beach_access",
                "airport_shuttle",
                "kitchen",
                "accessible",
                "kid_friendly",
                "hot_tub",
                "room_service",
                "business_center"
              ],
              "enumTitles": [
                "Free Wi-Fi",
                "Free breakfast",
                "Breakfast (free or paid)",
                "Pool",
                "Spa",
                "Parking",
                "Free parking",
                "Pet-friendly",
                "Air conditioning",
                "Restaurant",
                "Bar",
                "Fitness center",
                "Beach access",
                "Airport shuttle",
                "Kitchen",
                "Accessible",
                "Kid-friendly",
                "Hot tub",
                "Room service",
                "Business center"
              ]
            }
          },
          "sortBy": {
            "title": "Sort hotels by",
            "enum": [
              "relevance",
              "lowest_price",
              "highest_rating",
              "most_reviewed"
            ],
            "type": "string",
            "description": "Order of the hotels of each destination in the dataset.",
            "default": "relevance"
          },
          "includeSummary": {
            "title": "Add free summaries",
            "type": "boolean",
            "description": "Destination: median, cheapest and best-value hotels per date. Tracked hotel: price calendar, cheapest date and how often the official site is cheapest.",
            "default": true
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Set a name and schedule the Actor (e.g. daily): each item then shows the price change since the previous run, and you can get alerts on price drops."
          },
          "onlyChanges": {
            "title": "Only new hotels and price drops",
            "type": "boolean",
            "description": "Monitoring: skip unchanged prices and price increases.",
            "default": false
          },
          "alertOnPriceDropPct": {
            "title": "Alert on price drops of at least (%)",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Monitoring: send an alert when a price per night drops by this percentage or more.",
            "default": 10
          },
          "telegramBotToken": {
            "title": "Telegram bot token",
            "type": "string",
            "description": "Alerts on Telegram: create a bot with @BotFather and paste its token."
          },
          "telegramChatId": {
            "title": "Telegram chat ID",
            "type": "string",
            "description": "Your chat ID (send a message to your bot, then open api.telegram.org/bot<token>/getUpdates)."
          },
          "discordWebhookUrl": {
            "title": "Discord webhook URL",
            "type": "string",
            "description": "Alerts in a Discord channel: Channel settings → Integrations → Webhooks."
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL",
            "type": "string",
            "description": "Alerts in Slack: create an Incoming Webhook for your channel."
          },
          "webhookUrl": {
            "title": "Webhook URL (JSON)",
            "type": "string",
            "description": "Receives one POST per run with all price drops (Make, Zapier, n8n…)."
          },
          "maxNotifications": {
            "title": "Maximum alerts per run",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum number of alert messages per run.",
            "default": 30
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}