{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper - Prices and Rate Calendar",
    "description": "Extracts hotel prices from Google Hotels for given dates, guests and currency. Supports Google's filters, booking-site rates and a per-date price calendar.",
    "version": "1.1",
    "x-build-id": "GbCbFATUCn5pM0lt3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/conserving_windflower~google-hotels-scraper-prices/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-conserving_windflower-google-hotels-scraper-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/conserving_windflower~google-hotels-scraper-prices/runs": {
      "post": {
        "operationId": "runs-sync-conserving_windflower-google-hotels-scraper-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/conserving_windflower~google-hotels-scraper-prices/run-sync": {
      "post": {
        "operationId": "run-sync-conserving_windflower-google-hotels-scraper-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "priceCalendar"
            ],
            "type": "string",
            "description": "Search: one row per hotel for one date range. Price calendar: one row per hotel and check-in date.",
            "default": "search"
          },
          "queries": {
            "title": "Search queries",
            "type": "array",
            "description": "One Google Hotels search per entry, e.g. \"hotels in Barcelona\". Optional in price-calendar mode when hotel URLs or names are given.",
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "YYYY-MM-DD. If empty, Google's default dates are used."
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "YYYY-MM-DD, after the check-in date."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "Number of adult guests. Prices depend on party size.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children's ages",
            "type": "array",
            "description": "List of ages, e.g. [5, 9]. Leave empty for no children.",
            "default": []
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "ISO 4217 code, e.g. USD, EUR, GBP.",
            "default": "USD"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Google interface language code (hl), e.g. en, de.",
            "default": "en"
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Google country code (gl), e.g. us, gb. Can affect which prices and booking sites are shown.",
            "default": "us"
          },
          "hotelClass": {
            "title": "Hotel class",
            "type": "array",
            "description": "Any of 2, 3, 4, 5, e.g. [4, 5]. Leave empty for all classes.",
            "default": []
          },
          "minRating": {
            "title": "Minimum guest rating",
            "enum": [
              "any",
              "3.5",
              "4.0",
              "4.5"
            ],
            "type": "string",
            "description": "Google guest-rating filter.",
            "default": "any"
          },
          "minPrice": {
            "title": "Minimum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Whole units of the selected currency."
          },
          "maxPrice": {
            "title": "Maximum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Whole units of the selected currency."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "lowest_price",
              "highest_rating",
              "most_reviewed"
            ],
            "type": "string",
            "description": "Sort order applied by Google.",
            "default": "relevance"
          },
          "amenities": {
            "title": "Amenities",
            "type": "array",
            "description": "Return only properties that have all selected amenities.",
            "items": {
              "type": "string",
              "enum": [
                "free_parking",
                "parking",
                "indoor_pool",
                "outdoor_pool",
                "pool",
                "fitness_center",
                "restaurant",
                "free_breakfast",
                "spa",
                "beach_access",
                "child_friendly",
                "bar",
                "pet_friendly",
                "room_service",
                "free_wifi",
                "air_conditioned",
                "all_inclusive",
                "wheelchair_accessible",
                "ev_charger"
              ],
              "enumTitles": [
                "Free parking",
                "Parking",
                "Indoor pool",
                "Outdoor pool",
                "Pool",
                "Fitness center",
                "Restaurant",
                "Free breakfast",
                "Spa",
                "Beach access",
                "Child friendly",
                "Bar",
                "Pet friendly",
                "Room service",
                "Free Wi-Fi",
                "Air conditioned",
                "All inclusive",
                "Wheelchair accessible",
                "EV charger"
              ]
            },
            "default": []
          },
          "freeCancellation": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Google filter for rates with free cancellation.",
            "default": false
          },
          "specialOffers": {
            "title": "Special offers only",
            "type": "boolean",
            "description": "Google filter for rates marked as special offers.",
            "default": false
          },
          "strictFilters": {
            "title": "Drop non-matching rows",
            "type": "boolean",
            "description": "Check class, rating, price and supported amenities on every row and drop rows that do not match. Dropped rows are not charged. If off, such rows are kept and marked in filterMismatch.",
            "default": true
          },
          "maxResultsPerQuery": {
            "title": "Maximum hotels per query",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Results are paginated automatically. Google may return fewer hotels than requested.",
            "default": 50
          },
          "includeOffers": {
            "title": "Include booking-site rates",
            "type": "boolean",
            "description": "Adds rates from booking sites and the hotel's official site, with links. One extra request per hotel, charged as a separate event.",
            "default": false
          },
          "maxOfferHotels": {
            "title": "Maximum hotels with rates per query",
            "minimum": 0,
            "type": "integer",
            "description": "Limits how many hotels per query get booking-site rates. 0 means all.",
            "default": 0
          },
          "hotelUrls": {
            "title": "Hotel URLs or tokens",
            "type": "array",
            "description": "Google Hotels property URLs or entityToken values from search results.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "hotelNames": {
            "title": "Hotel names",
            "type": "array",
            "description": "Hotel name and city, e.g. \"Hotel Adlon Berlin\". If Google does not find the hotel directly, nearby hotels are checked for a close name match. Names that still do not match are returned as error rows and not charged.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "calendarTopHotels": {
            "title": "Top hotels per query",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Number of hotels from each search query to include in the calendar. 0 means only the hotels listed above.",
            "default": 5
          },
          "calendarStartDate": {
            "title": "First check-in date",
            "type": "string",
            "description": "YYYY-MM-DD. If empty, the check-in date above is used, or 7 days from today."
          },
          "calendarDays": {
            "title": "Number of check-in dates",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Check-in dates to price per hotel.",
            "default": 14
          },
          "calendarStepDays": {
            "title": "Days between check-in dates",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "1 means every day, 7 means the same weekday each week.",
            "default": 1
          },
          "calendarNights": {
            "title": "Nights per stay",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of each priced stay. If empty, the stay length from the dates above is used, or 1 night."
          },
          "calendarFastMode": {
            "title": "Fast mode",
            "type": "boolean",
            "description": "Price hotels from search result pages where possible, which needs fewer requests. If off, each hotel page is opened, which also returns the cheapest booking site and the official-site rate.",
            "default": true
          },
          "calendarListPages": {
            "title": "Result pages per date (fast mode)",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "In fast mode, how many search result pages to check for each date before opening individual hotel pages for hotels that were not listed. More pages usually means fewer requests in total.",
            "default": 2
          },
          "maxConcurrency": {
            "title": "Maximum concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Number of parallel requests.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. The run slows down automatically if requests start failing and stops if the success rate falls below 50%.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}