{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Hotels Scraper & API - Hotel Prices",
    "description": "Google Hotels scraper and API: hotel prices for any city, hotel name or link and your dates. Nightly rate, total with taxes, stars, rating, reviews, photos and GPS, plus every booking site's price (Booking.com, Expedia, Agoda, official site). Hotel price tracking & rate parity.",
    "version": "0.1",
    "x-build-id": "eAnpHyVsmHZX6jhpl"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/acebuilds~google-hotels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-acebuilds-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/acebuilds~google-hotels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-acebuilds-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/acebuilds~google-hotels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-acebuilds-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": "🔍 Destinations",
            "type": "array",
            "description": "What to search on Google Hotels, one per line, as you would type it — e.g. \"hotels in Lisbon\", \"resorts in Bali\", \"hotels in Shinjuku Tokyo\". Each line runs as its own search.",
            "items": {
              "type": "string"
            }
          },
          "hotelUrls": {
            "title": "🏨 Hotel links",
            "type": "array",
            "description": "Specific hotels by Google Hotels link (https://www.google.com/travel/hotels/entity/…) or by the entity token from a previous run's `entityToken`. One row each, with address, phone and every booking site's price.",
            "items": {
              "type": "string"
            }
          },
          "hotelNames": {
            "title": "🏷️ Hotel names",
            "type": "array",
            "description": "Specific hotels by name — add the city for an exact match, e.g. \"Hyatt Regency Lisbon\". One row each, like hotel links.",
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "📅 Check-in",
            "type": "string",
            "description": "Date as YYYY-MM-DD (e.g. 2026-12-18), or days from the day the run starts (e.g. \"30\" or \"30 days\") — handy for scheduled price tracking. Empty = 14 days from today."
          },
          "checkOut": {
            "title": "📅 Check-out",
            "type": "string",
            "description": "Date as YYYY-MM-DD, or days from today like check-in. Must be after check-in, at most 30 nights. Empty = 2 nights after check-in."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "Adults in the room (1–6). Google prices one room for the whole party.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children's ages",
            "type": "array",
            "description": "Ages (0–17) of children in the room, e.g. [5, 9]. Adults-only hotels show as unavailable, and fewer booking sites quote family rooms.",
            "default": []
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "3-letter currency code for every price, e.g. USD, EUR, GBP, JPY, AUD, INR.",
            "default": "USD"
          },
          "maxHotels": {
            "title": "Max hotels per destination",
            "minimum": 1,
            "maximum": 300,
            "type": "integer",
            "description": "Stop each destination after this many hotels (1–300). Google usually lists 100–150 per destination.",
            "default": 20
          },
          "includeOffers": {
            "title": "💶 Every booking site's price (add-on)",
            "type": "boolean",
            "description": "Add an `offers` list to each hotel: the nightly and total price at each booking site (Booking.com, Expedia, Agoda, Hotels.com, the hotel's official site…), cheapest first, with booking links. One add-on charge per hotel — only when at least one price is found.",
            "default": false
          },
          "includeDetails": {
            "title": "📞 Address & phone",
            "type": "boolean",
            "description": "Open each hotel's page to add its street address and phone number. Free, but slower. Always on for hotel links and names.",
            "default": false
          },
          "minPrice": {
            "title": "Min price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep hotels whose nightly price (before taxes, in your currency) is at least this. 0 = no minimum.",
            "default": 0
          },
          "maxPrice": {
            "title": "Max price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep hotels whose nightly price (before taxes) is at most this. Unpriced (sold-out) hotels are dropped. 0 = no maximum.",
            "default": 0
          },
          "minRating": {
            "title": "Min guest rating",
            "enum": [
              "0",
              "3",
              "3.5",
              "4",
              "4.5"
            ],
            "type": "string",
            "description": "Only keep hotels with at least this Google guest rating (out of 5).",
            "default": "0"
          },
          "hotelClass": {
            "title": "Star class",
            "type": "array",
            "description": "Only keep these star classes, e.g. [4, 5]. Vacation rentals have no star class and are dropped when this is set. Empty = all.",
            "default": []
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Google interface language (hl), e.g. en, de, fr, es, ja.",
            "default": "en"
          },
          "country": {
            "title": "Google market",
            "type": "string",
            "description": "Google country (gl), e.g. us, gb, de. Changes which booking sites appear.",
            "default": "us"
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many hotels' prices are fetched at once (1–10).",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify datacenter proxy by default; the run switches to residential automatically if Google blocks it.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}