HasData
Scraper API

Google Hotels API

with rates, ratings, and review breakdowns

Search Google Hotels and get every property as clean JSON. One request returns nightly and total rates, ratings, a review sentiment breakdown, and nearby places, for any destination and dates, with proxies handled for you.

SUCCESS
99.9%

of requests succeed

P50
2.3s

median response

P95
3.6s

95% finish faster

PRICE
$0.83

per 1k hotel searches at volume

Stop maintaining scrapers

Google reshuffles Hotels constantly. Your parser shouldn't care.

  • Rates split into nightly and total, before and after fees
  • Review sentiment buried in the layout
  • Filters and property types shifting
  • Proxy rotation and retries per search
  • Re-parse the results after each redesign
One integration commit replaces a backlog you’ll never finish.
scraper | git log
✗ hotfix: markup changed, nulls in rate
✗ fix: taxes double-counted in total rate
✗ fix: review breakdown lost its counts
✗ chore: rotate proxies for hotel runs again
✗ fix: property token changed shape
✗ hotfix: rate-limit loop on date changes
✗ fix: vacation rentals mixed into hotels
✗ chore: refresh residential IPs by region
✗ fix: pagination token stopped working
✗ fix: retry storm on rate limits
✗ hotfix: markup changed, nulls in rate
✗ fix: taxes double-counted in total rate
✗ fix: review breakdown lost its counts
✗ chore: rotate proxies for hotel runs again
✗ fix: property token changed shape
✗ hotfix: rate-limit loop on date changes
✗ fix: vacation rentals mixed into hotels
✗ chore: refresh residential IPs by region
✗ fix: pagination token stopped working
✗ fix: retry storm on rate limits
✗ hotfix: markup changed, nulls in rate
✗ fix: taxes double-counted in total rate
✗ fix: review breakdown lost its counts
✗ chore: rotate proxies for hotel runs again
✗ fix: property token changed shape
✗ hotfix: rate-limit loop on date changes
✗ fix: vacation rentals mixed into hotels
✗ chore: refresh residential IPs by region
✗ fix: pagination token stopped working
✗ fix: retry storm on rate limits
✗ hotfix: markup changed, nulls in rate
✗ fix: taxes double-counted in total rate
✗ fix: review breakdown lost its counts
✗ chore: rotate proxies for hotel runs again
✗ fix: property token changed shape
✗ hotfix: rate-limit loop on date changes
✗ fix: vacation rentals mixed into hotels
✗ chore: refresh residential IPs by region
✗ fix: pagination token stopped working
✗ fix: retry storm on rate limits
✓ feat: integrate HasData API
Code Examples

One GET Request. That's the whole integration.

Start with just a query. Add more parameters when your use case needs them.

request example
curl -G 'https://api.hasdata.com/scrape/google/hotels' \
	--data-urlencode 'q=Hotels in New York' \
	--data-urlencode 'checkInDate=2026-10-19' \
	--data-urlencode 'checkOutDate=2026-10-23' \
	--header 'x-api-key: <YOUR_API_KEY>' \
	--header 'Content-Type: application/json'
q * Search Query
The search query for Google Hotels (e.g., a city, neighborhood, or hotel name).
checkInDate * Check-in Date
The check-in date in 'yyyy-MM-dd' format.
checkOutDate * Check-out Date
The check-out date in 'yyyy-MM-dd' format.
gl Country
The two-letter country code for the country you want to limit the search to.
hl Language
The two-letter language code for the language you want to use for the search.
currency Currency
Parameter defines the currency of the returned prices
adults Adults
Number of adult guests (1-6).
children Children
Number of child guests (1-5). Total guests (adults + children) cannot exceed 6.
childrenAges Children Ages
Comma-separated list of children ages (e.g., `5,8,12`). Must match the number of children.
sortBy Sort By
Sort hotel results. Options: - `lowestPrice` — lowest price - `highestRating` — highest rating - `mostReviewed` — most reviewed
minPrice Minimum Price
Minimum price per night, in the selected currency.
maxPrice Maximum Price
Maximum price per night, in the selected currency.
propertyType[] Property Type
List of property types to filter by (e.g., `hotelResort,hotelMotel`). Values prefixed `hotel*` apply when searching hotels (the default mode). Values prefixed `rental*` apply when `vacationRentals=true`. The two sets are disjoint because Google Hotels exposes different property-type catalogs for each mode — pass values matching the mode you're querying.
amenity[] Amenity
List of amenities to filter by (e.g., `hotelFreeWifi,hotelPool`). Values prefixed `hotel*` apply when searching hotels (the default mode). Values prefixed `rental*` apply when `vacationRentals=true`. The two sets are disjoint because Google Hotels exposes different amenity catalogs for each mode — pass values matching the mode you're querying.
rating Minimum Rating
Filter by minimum overall guest rating. Options: - `threePointFivePlus` — 3.5 stars or higher - `fourPlus` — 4.0 stars or higher - `fourPointFivePlus` — 4.5 stars or higher
brands Brands
Comma-separated list of brand IDs to filter by. Brand IDs are returned in the response under `brands` for the same query.
hotelClass Hotel Class
Comma-separated list of hotel star classes to include (e.g., `2,3,4,5`).
freeCancellation Free Cancellation
Show only properties offering free cancellation.
specialOffers Special Offers
Show only properties with special offers.
ecoCertified Eco-certified
Show only eco-certified properties.
vacationRentals Vacation Rentals
Search vacation rentals instead of hotels.
bedrooms Bedrooms
Minimum number of bedrooms (vacation rentals only).
bathrooms Bathrooms
Minimum number of bathrooms (vacation rentals only).
nextPageToken Next Page Token
Token to fetch the next page of hotel results. Returned in the `pagination` field of a previous response.
propertyToken Property Token
Token used to retrieve details for a specific property. Returned in each property in the results.
TRY ALL 25 PARAMETERS FREE
AI Integration

Add Google Hotels API with your AI agent

Paste a ready-to-use integration prompt into your coding agent. It includes API references, setup requirements, and testing instructions.

google-hotels-integration.md
# Integrate HasData Google Hotels API

## Task

Add the requested hotel-search or property-data workflow to this project using HasData Google Hotels API.
Inspect project instructions, the server-side runtime, existing HTTP client, and tests first.
Follow the project's conventions and preserve unrelated code. No new SDK is required.
Implement only the requested workflow. If it is unclear, ask whether the user needs destination searches, a specific property's details, or both.
Do not replace the REST integration with an MCP connection or a custom Google Hotels scraper.

## References

Read the endpoint documentation before implementing:

- Hotel search, property details, parameters, and response: https://docs.hasdata.com/apis/google-travel/hotels.md
- Error handling: https://docs.hasdata.com/api-codes.md
- Documentation index: https://docs.hasdata.com/llms.txt
- Full documentation (fallback): https://docs.hasdata.com/llms-full.txt

Start with the endpoint reference. Use `llms.txt` to find additional pages.
Use `llms-full.txt` only when needed; extract relevant sections instead of loading everything into context.
If a `.md` reference is unavailable, try its HTML URL without `.md`.
If it is still unavailable, ask for the missing documentation rather than guessing.

## Optional agent skill

If the official `hasdata` skill is already available, use its relevant guidance.
Otherwise, if this agent supports skills, ask before installing it in this project:

```sh
npx skills add hasdata/agent-skills --skill hasdata
```

Run from the project directory and select the coding agent in use.
The `hasdata-cli` skill is not required. If installation is declined or unsupported, continue with the docs.
Flag conflicts between skill guidance and current API docs rather than guessing.

## Implementation

- Use `GET https://api.hasdata.com/scrape/google/hotels` with required `q`, `checkInDate`, and `checkOutDate`.
- Accept a destination or hotel query and future `YYYY-MM-DD` dates, with checkout after check-in. Do not hardcode the documentation's sample dates.
- Keep `currency`, `adults`, `children`, and `childrenAges` explicit when the workflow requires them. Validate guest counts and one documented age per child against current docs. Do not silently choose dates or guest counts for the user.
- Add only the filters the task needs. Use the documented names and serialization, including `amenity[]` and `propertyType[]` if applicable. Hotel and vacation-rental filter values use different catalogs; do not mix them.
- Encode query parameters correctly. Preserve `properties`, `ads`, and `pagination` separately when present. Do not merge sponsored properties into organic search results without a label.
- For a requested property-details workflow, reuse the returned `propertyToken` with the same endpoint and applicable search context. Read the documented detail response shape; do not assume it is identical to the search list.
- If pagination is needed, expose `nextPageToken` from the response. Do not automatically fetch every page or every property detail.
- Preserve nightly prices separately from full-stay totals, including before-tax values and selected currency. Do not multiply rounded nightly prices to replace returned totals.
- Keep hotel star class separate from guest rating. Missing amenities or review topics are unknown, not verified absences. Review-topic counts are mentions, not percentages of all guests.
- Save query, dates, currency, guest context, and observation time alongside data used for comparisons. Search prices are observations, not reservations or guaranteed availability.
- Handle timeouts, documented errors, empty results, and missing optional fields. Keep requests server-side. If no suitable runtime exists, discuss options before changing the architecture.

## Credentials

- Implement the integration and mocked tests without requiring a live API key.
- Read `HASDATA_API_KEY` from the project's existing environment or secret store and send it as `x-api-key`.
- If the key is missing before live verification, ask the user to configure it from https://app.hasdata.com/api-keys.
- Never ask the user to paste the key into chat. Check only that it is configured, without printing its value.
- Never put the key in browser code, logs, or version control. Add only a placeholder to the project's example configuration.
- If using a local `.env` file, make sure it is gitignored.
- Send the key only to `https://api.hasdata.com`. Never forward it to documentation, hotel links, or redirects to another origin.

## Verification

- Add mocked tests for dates and guest validation, query encoding, success, empty results, missing fields, and errors. Cover tax/total distinctions and the chosen search or detail response shape. Include a usage example and run local checks.
- Only after explicit user approval and with a configured key, make one live verification request with agreed inputs and valid dates. A successful Google Hotels request consumes 10 credits.
- Validate the HTTP status, documented API status, and response structure. An empty result set can be valid.
- Do not automatically repeat paid requests to obtain a nonempty response.
- Report changed files, setup commands, and test results. State separately whether live verification passed, failed, or was skipped.
- Ask before deploying.

Use Cases

What you can build with Google Hotels API

Build hotel price comparisons, travel shortlists, and hospitality research tools with structured rates, amenities, reviews, and location data.

Compare hotel rates for the same stay

Compare nightly and full-stay prices from Google Hotels to build accommodation search tools with clear tax and fee distinctions.

  • Hotels in New York
  • September 20–24, 2026
  • USD
Four-night hotel prices Captured hotel rates
Four-night hotel prices — Captured hotel rates
PropertyPer nightStay before taxes and feesFull stay
The One Boutique Hotel$151$515$605
Hotel Executive Suites$97$341$390
Hilton Garden Inn New York/Staten Island$144$496$578
API data
properties[].nameproperties[].ratePerNightproperties[].totalRate
Your app
Compare matching dates, guest counts, and currency; preserve returned totals instead of multiplying rounded nightly prices.
Explore response fields

Captured September 16, 2026. Guest count was not explicitly recorded; these prices are observations, not guaranteed offers.

Match hotels to guest requirements

Use hotel amenities to shortlist stays with Wi-Fi, parking, or airport shuttles for business travelers and family trips.

  • Hilton Garden Inn New York/Staten Island
Amenities for a travel shortlist Reported amenities
Amenities for a travel shortlist — Reported amenities
ServiceListing label
Wi-FiFree Wi-Fi
BreakfastBreakfast ($)
Airport transferAirport shuttle
ParkingParking
API data
properties[].nameproperties[].amenities[]
Your app
Apply your amenity requirements to each property and keep free, paid, and unspecified services distinct.
Explore response fields

An omitted amenity is unknown, not confirmed unavailable. Paid-service labels are preserved from the response.

Analyze hotel reviews by topic

Turn Google Hotels review breakdowns into topic-level comparisons of service, dining, and breakfast for hospitality research dashboards.

  • Hilton Garden Inn New York/Staten Island
Review mentions by sentiment Reported review topics
Review mentions by sentiment — Reported review topics
TopicPositiveNegativeNeutral
Service47011627
Dining154389
Breakfast953314
API data
properties[].reviewsBreakdown[].nameproperties[].reviewsBreakdown[].positiveproperties[].reviewsBreakdown[].negativeproperties[].reviewsBreakdown[].neutral
Your app
Compare the reported sentiment counts by topic, retaining mention totals instead of treating them as percentages of all guests.

Compare hotels by airport access

Combine nearby places and transport times with hotel results to build location-aware shortlists for airport transfers and travel itineraries.

  • John F. Kennedy International Airport
  • New York area
Airport access by transport mode Reported travel times
Airport access by transport mode — Reported travel times
PropertyTaxiPublic transport
The One Boutique Hotel25 min53 min
Hotel Executive Suites48 min1 hr 52 min
Hilton Garden Inn New York/Staten Island41 min2 hr 2 min
API data
properties[].nearbyPlaces[].nameproperties[].nearbyPlaces[].transportations[].typeproperties[].nearbyPlaces[].transportations[].duration
Your app
Match the same airport across properties, then compare each transport mode separately in your travel planner.

Track sponsored hotel visibility

Record sponsored Google Hotels placements by destination and stay dates to see which properties appear in your market.

  • Hotels in New York
  • September 20–24, 2026
  • USD
Sponsored properties Captured sponsored placements
Sponsored properties — Captured sponsored placements
PropertySource
The New York EDITIONThe New York EDITION
Hotel NH Collection New York Madison AvenueNH Collection New York Madison Avenue
Best Western Plus Soho HotelBest Western Plus Soho Hotel
API data
ads[].nameads[].sourceads[].propertyToken
Your app
Save dated ads observations for your selected searches; calculate appearance frequency across those snapshots.
Response

Every property, one predictable schema

Compare room rates, review breakdowns, and nearby transport, then continue through the hotel results.

properties.json
[
  {
    "name": "The Manhattan at Times Square Hotel",
    "type": "hotel",
    "link": "https://www.ihg.com/spnd/hotels/us/en/new-york/nycat/",
    "gpsCoordinates": { "latitude": 40.7622856, "longitude": -73.9826404 },
    "checkInTime": "4:00 PM",
    "checkOutTime": "12:00 PM",
    "ratePerNight": { "lowest": "$168", "extractedLowest": 168, "beforeTaxesFees": "$144", "extractedBeforeTaxesFees": 144 },
    "totalRate": { "lowest": "$839", "extractedLowest": 839 },
    "overallRating": 4.1,
    "reviews": 10163,
    "locationRating": "4.9",
    "reviewsBreakdown": [
      { "name": "Bathroom", "totalMentioned": 1407, "positive": 1180, "negative": 160, "neutral": 67 }
    ]
  }
]
Fields in properties
name / type string

Property name and hotel | vacation rental

ratePerNight object

Nightly price, before and after taxes and fees

totalRate object

Full-stay price, display and numeric

overallRating / reviews number

Star rating and total review count

locationRating string

How guests rate the location

reviewsBreakdown[] object[]

Per-topic sentiment: positive, negative, neutral counts

gpsCoordinates / checkInTime / checkOutTime object / string

Location and stay times

What We Offer

An all-in-one scraping service

Every feature you need to collect data from thousands to millions of requests.

Loved by developers

Teams that deleted their scraper

Now it's the part of the pipeline they don't think about

4.8 ★★★★★
across 100+ reviews on 5 platforms
Trustpilot Trustpilot ★★★★★

HasData delivers exactly what we need: speed and comprehensive search features. It's the fastest API we've used in this space. Plus, their customer support is fantastic.

Denver Sinclair
Denver Sinclair
Capterra Capterra ★★★★★

We rely on HasData for search performance data and broader scraping needs. Their APIs deliver highly structured data that integrates directly into our platforms.

JN
Jacob N.
Trustpilot Trustpilot ★★★★★

Great web scraping API which is incredibly easy to use. It requires minimal effort to get up and running, and the documentation is very clear and helpful.

Arnold Foster
Arnold Foster
Trustpilot Trustpilot ★★★★★

I needed to scrape some information they didn't already support, and they wrote the code for me right away, which was super nice of them.

Hussein Ali
Hussein Ali
Clutch Clutch ★★★★★

We were particularly impressed with how easily we could integrate HasData into our existing workflow.

TB
Taras Bazyshyn
CEO at BAZTDL Sp. z o.o
Pricing

Plans that get cheaper at scale

Fixed price, fixed volume, no surprises at the end of the month. Upgrade when you need more.

Free
$0 /mo
Free forever
100 hotel searches / month
1,000 credits / month
1 concurrent request
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Community support
Start free
Startup
$49 /mo
$2.46 / 1k hotel searches
20K hotel searches / month
200K credits / month
5 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Email support
Get started
Basic
Recommended
$99 /mo
$0.99 / 1k hotel searches
100K hotel searches / month
1M credits / month
15 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Priority email support
Get started
Growth
$208 /mo
$0.69 / 1k hotel searches
3M credits / month
50 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Dedicated account manager
Get started
Monthly hotel search volume
Free 100K 500K 2M
Best fit
Basic
hotel searches / mo
100K
Concurrency
15
$ / 1k hotel searches
$0.99
$99 /mo
Get Started
Enterprise
Custom price based on required volume

Past 20M credits a month, or terms the self-serve plans do not cover. We shape the contract around your workload.

Credits rollover
Unused credits carry into the next billing period.
Concurrency 2000+
Parallel request limits set to your peak load.
#1 request priority
Highest speed, always first in the queue.
Personal manager
A direct line to the founding team.
SSO
SAML single sign-on for the whole team.
Security review
Security questionnaire, DPA, and controls overview.
Talk to sales Quote within one business day
FAQ

Questions, answered

1 Grab your API key 2 Send a GET request 3 Get structured JSON

Your first hotel search
is minutes away

100 hotel searches free · no credit card