Google Hotels Search Scraper

Google Hotels Search Scraper

by johnvc

Extract comprehensive hotel data from Google Hotels including prices, ratings, amenities, property details, and images. Supports advanced filtering, v...

134 runs
24 users
Try This Actor

Opens on Apify.com

About Google Hotels Search Scraper

Extract comprehensive hotel data from Google Hotels including prices, ratings, amenities, property details, and images. Supports advanced filtering, vacation rentals, localization, and multi-page pagination. Ideal for market research, price monitoring, and travel applications.

What does this actor do?

Google Hotels Search Scraper is a web scraping and automation tool available on the Apify platform. It's designed to help you extract data and automate tasks efficiently in the cloud.

Key Features

  • Cloud-based execution - no local setup required
  • Scalable infrastructure for large-scale operations
  • API access for integration with your applications
  • Built-in proxy rotation and anti-blocking measures
  • Scheduled runs and webhooks for automation

How to Use

  1. Click "Try This Actor" to open it on Apify
  2. Create a free Apify account if you don't have one
  3. Configure the input parameters as needed
  4. Run the actor and download your results

Documentation

๐Ÿจ Google Hotels Search Scraper > The most powerful, reliable, and feature-rich Google Hotels search scraper for Apify ## ๐Ÿ’ก What is Google Hotels Search Scraper? A Google Hotels Search Scraper is a smart automation tool that helps you extract hotel property listings, prices, ratings, amenities, images, and detailed property information from Google Hotels โ€” all in structured data formats like JSON, CSV, or Excel. This scraper lets you turn Google Hotels' vast database into a valuable dataset for market research, price monitoring, competitive analysis, or travel planning. Whether you're building hotel comparison tools, monitoring competitor pricing, conducting market analysis, or creating travel applications, you'll gain actionable insights fast โšก. โœ… SEO Benefit: By using structured Google Hotels data, businesses can optimize hotel listing pages, monitor competition, and create data-rich content that boosts organic visibility. --- ## ๐Ÿ“ฆ What Data Can You Extract with Google Hotels Scraper? | ๐Ÿท๏ธ Data Type | ๐Ÿ“‹ Description | | ---------------------- | ---------------------------------------------- | | ๐Ÿจ Property Details | Hotel name, description, address, GPS coordinates, property token | | ๐Ÿ’ต Pricing Information | Rate per night, total rate, deals, currency | | โญ Ratings & Reviews | Overall rating, location rating, number of reviews, rating breakdown | | ๐Ÿ–ผ๏ธ Images | Property images and thumbnails | | ๐Ÿ›Ž๏ธ Amenities | Complete list of amenities (Wi-Fi, pool, parking, etc.) | | ๐Ÿ“ Location Data | Address, GPS coordinates, nearby places | | ๐Ÿท๏ธ Property Type | Hotel class, star ratings, property type (resort, spa, etc.) | | ๐Ÿ“ž Contact Info | Phone number, phone link, check-in/check-out times | | ๐ŸŽฏ Filters & Refinements | Available search filters and refinement options | | ๐Ÿ“Š Search Metadata | Total results, pages processed, pagination info | This structured Google Hotels dataset can be exported for analysis, visualization, or integration into your travel and hospitality workflows. --- ## โš™๏ธ Key Features of Google Hotels Scraper โœจ Comprehensive Data Coverage โ€” Extract every essential data field: prices, descriptions, images, ratings, amenities, and property details. ๐Ÿ” Advanced Filtering โ€” Filter by price range, star ratings, amenities, property types, guest ratings, and vacation rental options to get precisely the data you need. ๐ŸŒ Localization Support โ€” Search in different countries and languages with currency support for accurate pricing in local markets. ๐Ÿ–๏ธ Vacation Rentals โ€” Search for vacation rentals with filters for bedrooms, bathrooms, and rental types (houses, villas, apartments, etc.). ๐Ÿ“„ Intelligent Pagination โ€” Automatic handling of pagination with support for fetching multiple pages of results. ๐ŸŽฏ Two Search Modes โ€” Search by query (location-based) or fetch detailed information for a specific property using a property token. ๐Ÿ’ฐ Cost-Effective Pricing โ€” Pay only for what you use with transparent per-page pricing. No hidden fees or monthly subscriptions. ๐Ÿ›ก๏ธ Enterprise-Grade Reliability โ€” Built for developers and businesses who demand reliability. Comprehensive error handling, robust logging, and production-ready code. ๐Ÿ“ฆ Structured Output โ€” Clean, structured JSON output ready for immediate use in your applications. --- ## ๐Ÿ“– Usage Examples ### Example 0: Basic Search (Hotels in Paris) Search for hotels with a simple query and dates. json { "q": "hotels in Paris", "check_in_date": "2025-12-13", "check_out_date": "2025-12-14", "adults": 2, "max_pages": 1 } ### Example 1: Search with Dates and Guests Search for resorts with specific guest configuration. json { "q": "Bali Resorts", "check_in_date": "2025-12-13", "check_out_date": "2025-12-14", "adults": 2, "children": 0, "currency": "USD", "max_pages": 1 } ### Example 2: Search with Filters (Price, Stars, Amenities, Property Types) Search for hotels with comprehensive filtering options. json { "q": "hotels in New York", "check_in_date": "2025-12-13", "check_out_date": "2025-12-14", "adults": 2, "min_price": "100", "max_price": "300", "stars": "4,5", "amenities": "35,40", "property_type": "17,18", "currency": "USD", "max_pages": 1 } Filter ID Reference: - Amenities: 35 = Free Wi-Fi, 40 = Air-conditioned (see full list below) - Property Types: 17 = Resorts, 18 = Spa hotels (see full list below) ### Example 3: Vacation Rentals Search Search for vacation rentals with family-friendly options. json { "q": "vacation rentals in Miami", "check_in_date": "2025-12-13", "check_out_date": "2025-12-20", "adults": 4, "children": 2, "children_ages": "5,8", "vacation_rentals": true, "bedrooms": 2, "bathrooms": 2, "currency": "USD", "max_pages": 1 } ### Example 4: Property Details (using property_token) Fetch detailed information about a specific property using its token. json { "property_token": "ChYIq6y...", "max_pages": 1 } Note: You can obtain a property_token from the property_token field in search results. This mode returns comprehensive property details including all amenities, images, reviews, and essential information. ### Example 5: Pagination (Multiple Pages) Search across multiple pages to get more results. json { "q": "hotels in Tokyo", "check_in_date": "2025-12-13", "check_out_date": "2025-12-15", "adults": 2, "currency": "USD", "max_pages": 2 } ### Example 6: Localized Search (Different Country/Language) Search in different countries and languages with local currency. json { "q": "hotels in London", "gl": "uk", "hl": "en", "currency": "GBP", "check_in_date": "2025-12-13", "check_out_date": "2025-12-14", "adults": 2, "max_pages": 1 } --- ## ๐Ÿ” Input Parameters | Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | q | string | โš ๏ธ Conditional | - | Search query string (e.g., "hotels in Paris", "Bali Resorts"). Required if property_token is not provided. Either q or property_token must be provided. | | property_token | string | โš ๏ธ Conditional | - | Google Hotels property token for a specific hotel property. Use this to get detailed information about a specific property. Required if q is not provided. Either q or property_token must be provided. | | gl | string | โŒ | "us" | Country code for localization (ISO 3166-1 alpha-2, e.g., "us", "fr", "uk"). Optional. | | hl | string | โŒ | "en" | Language code for localization (ISO 639-1, e.g., "en", "fr", "es"). Optional. | | currency | string | โŒ | Based on country | Currency code for prices (ISO 4217, e.g., "USD", "EUR", "GBP"). Optional. | | check_in_date | string | โš ๏ธ Recommended | - | Check-in date in YYYY-MM-DD format (e.g., "2025-12-13"). Recommended when using search query (q). Must be today or in the future. Optional. | | check_out_date | string | โš ๏ธ Recommended | - | Check-out date in YYYY-MM-DD format (e.g., "2025-12-14"). Recommended when using search query (q). Must be after check_in_date. Optional. | | adults | integer | โŒ | 2 | Number of adult guests. Optional. Minimum: 1, Maximum: 50. | | children | integer | โŒ | 0 | Number of child guests. Optional. Minimum: 0, Maximum: 50. | | children_ages | string | โš ๏ธ Conditional | - | Comma-separated list of children ages as integers (e.g., "5,8,12"). Required if children > 0. Must have the same number of ages as children. Optional otherwise. | | min_price | string | โŒ | "0.00" | Minimum price filter in the specified currency. Optional. Must be a valid number (e.g., "50" or "99.99"). Default: "0.00" (no minimum). | | max_price | string | โŒ | "0.00" | Maximum price filter in the specified currency. Optional. Must be a valid number (e.g., "200" or "299.99"). Default: "0.00" (no maximum). | | stars | string | โŒ | - | Comma-separated list of star ratings to filter by (e.g., "3,4,5" for 3, 4, or 5 star hotels). Each value must be an integer between 1 and 5. Optional. | | amenities | string | โŒ | - | Comma-separated list of amenity IDs to filter by (integer IDs). Optional. See Amenity IDs section below for available options. | | hotel_class | string | โŒ | - | Comma-separated list of hotel class IDs to filter by (integer IDs). Optional. | | guest_rating | string | โŒ | "0.0" | Minimum guest rating filter (0.0 to 5.0). Optional. Must be a valid number (e.g., "4.0" or "4.5"). Default: "0.0" (no minimum). | | property_type | string | โŒ | - | Comma-separated list of property type IDs to filter by (integer IDs). Optional. See Property Type IDs section below for available options. | | vacation_rentals | boolean | โŒ | false | Whether to include vacation rentals in search results. Optional. Defaults to false. | | rental_type | string | โŒ | - | Comma-separated list of rental type IDs to filter by (integer IDs). Only relevant when vacation_rentals is true. Optional. See Vacation Rental Type IDs section below. | | bedrooms | integer | โŒ | - | Number of bedrooms filter for vacation rentals. Only relevant when vacation_rentals is true. Optional. Minimum: 1, Maximum: 20. | | bathrooms | integer | โŒ | - | Number of bathrooms filter for vacation rentals. Only relevant when vacation_rentals is true. Optional. Minimum: 1, Maximum: 20. | | max_pages | integer | โŒ | 1 | Maximum number of pages to fetch (1-indexed). Set to 0 for no limit (fetch all available pages). Default: 1. Each page is charged separately. | | output_file | string | โŒ | Auto-generated | Optional filename to save results as JSON. If not provided, will auto-generate based on query and timestamp. | --- ## ๐Ÿท๏ธ Property Type IDs ### Hotel Property Types Use these IDs when searching for hotels (when vacation_rentals is false or not specified): | ID | Property Type | |----|---------------| | 12 | Beach hotels | | 13 | Boutique hotels | | 14 | Hostels | | 15 | Inns | | 16 | Motels | | 17 | Resorts | | 18 | Spa hotels | | 19 | Bed and breakfasts | | 20 | Other | | 21 | Apartment hotels | | 22 | Minshuku | | 23 | Japanese-style business hotels | | 24 | Ryokan | Example: "property_type": "17,18" filters for Resorts and Spa hotels. ### Vacation Rental Property Types Use these IDs when searching for vacation rentals (when vacation_rentals is true): | ID | Property Type | |----|---------------| | 1 | Apartments | | 2 | Bungalows | | 3 | Cabins | | 4 | Chalets | | 5 | Cottages | | 6 | Gรฎtes | | 7 | Holiday villages | | 8 | Houses | | 9 | Houseboats | | 10 | Villas | | 11 | Other | | 21 | Apartment hotels | Example: "rental_type": "8,10" filters for Houses and Villas. --- ## ๐Ÿ›Ž๏ธ Amenity IDs ### Hotel Amenities Use these IDs when searching for hotels (when vacation_rentals is false or not specified): | ID | Amenity | |----|---------| | 1 | Free parking | | 3 | Parking | | 4 | Indoor pool | | 5 | Outdoor pool | | 6 | Pool | | 7 | Fitness center | | 8 | Restaurant | | 9 | Free breakfast | | 10 | Spa | | 11 | Beach access | | 12 | Child-friendly | | 15 | Bar | | 19 | Pet-friendly | | 22 | Room service | | 35 | Free Wi-Fi | | 40 | Air-conditioned | | 52 | All-inclusive available | | 53 | Wheelchair accessible | | 61 | EV charger | Example: "amenities": "35,40" filters for Free Wi-Fi and Air-conditioned properties. ### Vacation Rental Amenities Use these IDs when searching for vacation rentals (when vacation_rentals is true): | ID | Amenity | |----|---------| | 1 | Free parking | | 3 | Parking | | 4 | Indoor pool | | 5 | Outdoor pool | | 6 | Pool | | 7 | Fitness center | | 8 | Restaurant | | 9 | Free breakfast | | 10 | Spa | | 11 | Beach access | | 12 | Child-friendly | | 15 | Bar | | 19 | Pet-friendly | | 22 | Room service | | 35 | Free Wi-Fi | | 40 | Air-conditioned | | 52 | All-inclusive available | | 53 | Wheelchair accessible | | 61 | EV charger | Note: The amenity IDs are the same for both hotels and vacation rentals. --- ## ๐Ÿ“Š Output Format ### Dataset Item Structure Each page of results is pushed as a separate dataset item with the following structure: json { "search_parameters": { "q": "hotels in Paris", "property_token": null, "gl": "us", "hl": "en", "currency": "USD", "check_in_date": "2025-12-13", "check_out_date": "2025-12-14", "adults": 2, "children": 0, "children_ages": null, "min_price": null, "max_price": null, "stars": null, "amenities": null, "hotel_class": null, "guest_rating": null, "property_type": null, "vacation_rentals": false, "rental_type": null, "bedrooms": null, "bathrooms": null, "max_pages": 1 }, "search_metadata": { "total_results": 1250, "hotels_results_state": "Showing results for hotels", "properties_count": 20, "ads_count": 3, "pages_processed": 1, "max_pages_set": 1, "pagination_limit_reached": false }, "search_timestamp": "2025-12-13T10:30:00.123456", "page_number": 1, "properties": [ { "type": "Hotel", "name": "Luxury Hotel Paris", "description": "Elegant hotel in the heart of Paris...", "link": "https://www.google.com/travel/hotels/entity/...", "property_token": "ChYIq6y...", "gps_coordinates": { "latitude": 48.8566, "longitude": 2.3522 }, "check_in_time": "15:00", "check_out_time": "11:00", "rate_per_night": { "extracted": 250, "currency": "USD" }, "total_rate": { "extracted": 250, "currency": "USD" }, "deal": "Special offer", "deal_description": "Limited time discount", "nearby_places": [], "hotel_class": "4 stars", "extracted_hotel_class": 4, "images": [ "https://example.com/image1.jpg", "https://example.com/image2.jpg" ], "overall_rating": 4.5, "reviews": 1234, "ratings": [], "location_rating": 4.7, "reviews_breakdown": [], "amenities": [ "Free Wi-Fi", "Air-conditioned", "Fitness center" ], "eco_certified": false, "address": "123 Rue de la Paix, 75001 Paris, France", "phone": "+33 1 23 45 67 89", "phone_link": "tel:+33123456789", "essential_info": [] } ], "ads": [], "filters": [ { "key": "price", "values": [] } ], "refine_by": [] } ### Property Details Mode When using property_token, the output includes a property_details object with comprehensive information: json { "search_parameters": { "property_token": "ChYIq6y...", "q": null }, "search_metadata": { "hotels_results_state": "Showing results for property details" }, "search_timestamp": "2025-12-13T10:30:00.123456", "page_number": 1, "property_details": { "type": "Hotel", "name": "Luxury Hotel Paris", "description": "Elegant hotel in the heart of Paris...", "link": "https://www.google.com/travel/hotels/entity/...", "address": "123 Rue de la Paix, 75001 Paris, France", "property_token": "ChYIq6y...", "phone": "+33 1 23 45 67 89", "phone_link": "tel:+33123456789", "gps_coordinates": { "latitude": 48.8566, "longitude": 2.3522 }, "check_in_time": "15:00", "check_out_time": "11:00", "rate_per_night": { "extracted": 250, "currency": "USD" }, "total_rate": { "extracted": 250, "currency": "USD" }, "images": [ "https://example.com/image1.jpg" ], "overall_rating": 4.5, "reviews": 1234, "location_rating": 4.7, "amenities": [ "Free Wi-Fi", "Air-conditioned" ], "excluded_amenities": [], "essential_info": [] }, "properties": [], "ads": [], "filters": [], "refine_by": [] } ### Output Fields - search_parameters: Complete search configuration used for the query - search_metadata: Summary statistics about the search results including total results available, pages processed, and pagination status - search_timestamp: ISO timestamp when the search was performed - page_number: Current page number (1-indexed) - properties: Array of hotel property listings with comprehensive details - ads: Array of advertisement listings (if any) - filters: Available filter options for the search query (typically on first page only) - refine_by: Available refinement options (typically on first page only) - property_details: Detailed information about a specific property (only present when property_token is used) ### Property Fields Each item in properties contains: - type: Property type (e.g., "Hotel", "Vacation rental") - name: Property name - description: Property description - link: Direct link to the property page on Google Hotels - property_token: Unique token for fetching detailed property information - gps_coordinates: Latitude and longitude - check_in_time / check_out_time: Check-in and check-out times - rate_per_night: Rate per night with currency - total_rate: Total rate for the stay with currency - deal / deal_description: Special deals or offers - hotel_class: Hotel class/star rating (string) - extracted_hotel_class: Hotel class as integer (1-5) - images: Array of property image URLs - overall_rating: Overall rating (0.0 to 5.0) - reviews: Number of reviews - location_rating: Location rating (0.0 to 5.0) - amenities: Array of amenity names - eco_certified: Whether the property is eco-certified - address: Full property address - phone / phone_link: Contact phone number --- ## ๐Ÿ’ฐ Pricing This Actor uses a pay-per-event pricing model with transparent pricing: - Setup Fee: $0.02 per Actor run (one-time charge for instance setup and provisioning) - Page Processing: $0.02 per page of hotel search results processed You only pay for the pages you actually process, making it cost-effective for both small and large-scale searches. Each page is billed separately, so you have full control over your costs. Example Cost Calculation: - 1 page search: $0.02 (setup) + $0.02 (1 page) = $0.04 total - 5 page search: $0.02 (setup) + $0.10 (5 pages) = $0.12 total --- ## ๐ŸŽฏ Use Cases - Price Monitoring: Track hotel prices over time for specific locations or properties - Market Research: Analyze hotel availability, pricing trends, and property information - Competitive Analysis: Compare prices, amenities, and ratings across different hotels - Property Discovery: Find hotels matching specific criteria (price, amenities, location, ratings) - Travel Integration: Build hotel search and booking features in travel applications - Data Analytics: Collect hotel data for business intelligence and analysis - Hotel Comparison Tools: Build applications that compare hotels across multiple criteria - Lead Generation: Identify popular hotels and trending properties for business opportunities - Vacation Planning: Research vacation rentals with specific requirements (bedrooms, bathrooms, amenities) --- ## โ“ Frequently Asked Questions ### Q1. How do I get started with Google Hotels Scraper? Simply provide a q (search query) parameter with your search term and check_in_date / check_out_date, then run the Actor. The scraper will automatically extract hotel data and return structured JSON results. ### Q2. Do I need to provide both q and property_token? No, you only need to provide one of them: - Use q for location-based searches (e.g., "hotels in Paris") - Use property_token to fetch detailed information about a specific property ### Q3. Are check-in and check-out dates required? When using a search query (q), check-in and check-out dates are recommended for best results. The API may work without them, but results are typically more accurate with dates. When using property_token, dates are optional. ### Q4. Can I filter results by price range? Yes! Use the min_price and max_price parameters to filter hotels within your desired price range. Both parameters accept strings (e.g., "100" or "299.99"). Set to "0.00" (the default) to remove the price limit. Prices are in the currency specified by the currency parameter. ### Q5. What star ratings can I filter by? You can filter by star ratings 1 through 5. Use the stars parameter with a comma-separated list (e.g., "3,4,5" for 3, 4, or 5 star hotels). ### Q6. How do I search for vacation rentals? Set vacation_rentals to true and optionally use rental_type, bedrooms, and bathrooms to filter vacation rentals. See the Vacation Rental Property Types section for available rental types. ### Q7. What amenities can I filter by? See the Amenity IDs section above for a complete list. Common amenities include Free Wi-Fi (35), Air-conditioned (40), Pool (6), Free parking (1), and Pet-friendly (19). ### Q8. How does pagination work? The scraper automatically handles pagination using next_page_token. Set max_pages to control how many pages to fetch: - max_pages: 1 (default) - Fetch only the first page - max_pages: 5 - Fetch up to 5 pages - max_pages: 0 - Fetch all available pages (no limit) Each page is charged separately. ### Q9. Can I search in different countries and languages? Yes! Use the gl (country code) and hl (language code) parameters for localization. Also set currency to get prices in the local currency. ### Q10. How do I get detailed information about a specific property? Use the property_token parameter with a token obtained from search results. This returns comprehensive property details including all amenities, images, reviews, and essential information. ### Q11. What data format does the scraper return? The scraper returns structured JSON data with hotel details, prices, ratings, amenities, and metadata. Results are automatically cleaned and validated for schema compliance. ### Q12. Can I export the data? Yes! Results are stored in Apify's dataset format and can be exported as JSON, CSV, Excel, or accessed via API. ### Q13. What happens if I specify children but no ages? If children > 0, you must provide children_ages with the same number of ages as children. For example, if children: 2, provide children_ages: "5,8" for two children aged 5 and 8. ### Q14. Can I filter by both hotels and vacation rentals? When vacation_rentals is false (default), only hotels are returned. When vacation_rentals is true, only vacation rentals are returned. You cannot get both in a single search, but you can run two separate searches. --- ## ๐Ÿ“ Technical Notes - Results are sorted by relevance by default (Google Hotels API default) - The check_in_date must be today or in the future (cannot be in the past) - The check_out_date must be after check_in_date - When children > 0, children_ages is required and must have the same number of values as children - Child ages must be integers between 0 and 17 - Price filters (min_price, max_price) must be provided as strings (e.g., "50" or "99.99"). They are validated using regex pattern ^\d+(\.\d+)?$ and converted to integers for the API. Setting to "0.00" (the default) removes that price limit. - Guest rating (guest_rating) must be provided as a string (e.g., "4.0" or "4.5"). Setting to "0.0" (the default) removes the rating filter. - Property type and amenity IDs must match the type of search (hotel vs. vacation rental) - Filters are typically only included on the first page of results - Each page is pushed as a separate dataset item for accurate per-page billing - Results are automatically cleaned and validated to ensure JSON-serializable output - The max_pages parameter controls how many pages to fetch. Set to 0 for no limit (fetch all available pages) - Property tokens can be obtained from the property_token field in search results ### โš ๏ธ Common Validation Errors - Invalid Amenity ID 2: Amenity ID 2 does not exist in the Google Hotels API. The amenity IDs jump from 1 (Free parking) directly to 3 (Parking). Use "amenities": "1,3" instead of "amenities": "1,2,3". - hotel_class with vacation_rentals: The hotel_class parameter is not allowed when vacation_rentals is set to true. Remove hotel_class from your request when searching for vacation rentals, or set vacation_rentals to false when using hotel_class. --- ## ๐Ÿš€ Ready to Collect Google Hotels Data? Start using Google Hotels Search Scraper today and transform public hotel listings into actionable insights. Whether you're building hotel comparison tools, monitoring competitor pricing, conducting market research, or creating travel applications, you'll have clean, structured data in minutes! Made with โค๏ธ Transform your hotel search automation with the most reliable and feature-rich Google Hotels scraper on Apify. --- Last Updated: 2025.12.19

Common Use Cases

Market Research

Gather competitive intelligence and market data

Lead Generation

Extract contact information for sales outreach

Price Monitoring

Track competitor pricing and product changes

Content Aggregation

Collect and organize content from multiple sources

Ready to Get Started?

Try Google Hotels Search Scraper now on Apify. Free tier available with no credit card required.

Start Free Trial

Actor Information

Developer
johnvc
Pricing
Paid
Total Runs
134
Active Users
24
Apify Platform

Apify provides a cloud platform for web scraping, data extraction, and automation. Build and run web scrapers in the cloud.

Learn more about Apify

Need Professional Help?

Couldn't solve your problem? Hire a verified specialist on Fiverr to get it done quickly and professionally.

Find a Specialist

Trusted by millions | Money-back guarantee | 24/7 Support