{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper – Prices, Ratings & Every Booking Site",
    "description": "Scrape Google Hotels for any city and dates: hundreds of hotels with nightly and total price, star class, rating, reviews, amenities, address, phone, website and photos. Optional: every booking site's price (Booking.com, Expedia, Hotels.com, Agoda, official site) with links. Filters, any currency.",
    "version": "0.1",
    "x-build-id": "Hb9dJhdOd7q4fQJPE"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ecclesiasteslabs~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ecclesiasteslabs-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/ecclesiasteslabs~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-ecclesiasteslabs-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/ecclesiasteslabs~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-ecclesiasteslabs-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",
        "required": [
          "destinations"
        ],
        "properties": {
          "destinations": {
            "title": "Destinations",
            "type": "array",
            "description": "Cities, areas or landmarks to search, e.g. \"Paris\", \"New York, NY\", \"Shibuya, Tokyo\", \"near Eiffel Tower\". One search is run per destination. City names work best.",
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "Check-in date",
            "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
            "type": "string",
            "description": "Arrival date (YYYY-MM-DD). Leave empty for 14 days from today. Google shows prices up to about 11 months ahead."
          },
          "checkOut": {
            "title": "Check-out date",
            "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
            "type": "string",
            "description": "Departure date (YYYY-MM-DD). Leave empty for a 1-night stay. Maximum 30 nights."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Number of adult guests. Prices and availability depend on it.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children's ages",
            "type": "array",
            "description": "One entry per child with their age (0-17), e.g. [\"8\", \"5\"]. Leave empty for no children.",
            "items": {
              "type": "string"
            }
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "3-letter currency code for all prices, e.g. USD, EUR, GBP, JPY, INR, AUD, CAD.",
            "default": "USD"
          },
          "maxItems": {
            "title": "Maximum number of hotels",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Stop after this many unique hotels in total (across all destinations). You pay per hotel saved. One Google page shows about 20 hotels, so the scraper runs variations of your search (star classes, amenities, nearby towns) and removes duplicates. Big cities give 300-600 hotels; small towns fewer.",
            "default": 100
          },
          "includeBookingPrices": {
            "title": "Include every booking site's price",
            "type": "boolean",
            "description": "Also get each hotel's prices on every booking site Google compares (Booking.com, Expedia, Hotels.com, Agoda, Trip.com, the hotel's official site and more, usually 5-20 sites), with free-cancellation info and direct links, plus the full street address. Takes one extra page per hotel, so runs are slower and a small extra charge applies per hotel.",
            "default": false
          },
          "minPrice": {
            "title": "Minimum price per night",
            "type": "integer",
            "description": "Only hotels whose lowest nightly price (before taxes, in your currency) is at least this much. Hotels without a price for your dates are skipped when a price filter is set."
          },
          "maxPrice": {
            "title": "Maximum price per night",
            "type": "integer",
            "description": "Only hotels whose lowest nightly price (before taxes, in your currency) is at most this much."
          },
          "hotelClass": {
            "title": "Hotel class (stars)",
            "type": "array",
            "description": "Only hotels with these official star ratings. Leave empty for all, including unrated properties.",
            "items": {
              "type": "string",
              "enum": [
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "2-star",
                "3-star",
                "4-star",
                "5-star"
              ]
            }
          },
          "minRating": {
            "title": "Minimum guest rating",
            "enum": [
              "any",
              "3.5",
              "4",
              "4.5"
            ],
            "type": "string",
            "description": "Only hotels with at least this Google guest rating (out of 5).",
            "default": "any"
          },
          "amenities": {
            "title": "Amenities",
            "type": "array",
            "description": "Only hotels that have all of these amenities.",
            "items": {
              "type": "string",
              "enum": [
                "freeWifi",
                "freeBreakfast",
                "freeParking",
                "parking",
                "pool",
                "spa",
                "fitnessCenter",
                "restaurant",
                "bar",
                "petFriendly",
                "kidFriendly",
                "airConditioning",
                "airportShuttle",
                "accessible",
                "beachAccess",
                "hotTub",
                "kitchen"
              ],
              "enumTitles": [
                "Free Wi-Fi",
                "Free breakfast",
                "Free parking",
                "Parking (free or paid)",
                "Pool",
                "Spa",
                "Fitness center",
                "Restaurant",
                "Bar",
                "Pet-friendly",
                "Kid-friendly",
                "Air conditioning",
                "Airport shuttle",
                "Wheelchair accessible",
                "Beach access",
                "Hot tub",
                "Kitchen"
              ]
            }
          },
          "searchNearbyTowns": {
            "title": "Include nearby towns",
            "type": "boolean",
            "description": "To find more hotels, also search towns and suburbs next to the destination that Google itself shows in the results (e.g. Boulogne-Billancourt for Paris). Turn off to stay strictly inside the main destination's results.",
            "default": true
          },
          "language": {
            "title": "Language code",
            "type": "string",
            "description": "Google interface language (hl), e.g. en, de, fr, es, ja. Affects hotel descriptions and labels. Amenity names in the output stay in English.",
            "default": "en"
          },
          "country": {
            "title": "Country code",
            "type": "string",
            "description": "Google country (gl) for the search, e.g. us, gb, de, in. This is where the traveler searches FROM, not where the hotel is. It can change which booking sites appear.",
            "default": "us"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed: the scraper works without a proxy. Use only if your runs report blocked 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}