Apify scrape hotel prices
Skill johnisanerd/claude-skill-scrape-hotel-prices/apify-scrape-hotel-prices
Scrape hotel prices from Google Hotels into structured JSON with the Apify Google Hotels Search Scraper Actor (johnvc/google-hotels-search-scraper). Give a destination query plus check-in and check-out dates, and get one page object per results page whose properties array carries name, rate_per_night and total_rate (display string plus extracted numeric value), overall_rating, reviews count, amenities, gps_coordinates, images, and a property_token for chaining into reviews or photos. Use when the user wants to scrape hotel prices, export Google Hotels results to JSON or CSV, build a hotel prices or hotel rates dataset, compare rates across a city for a stay date, or asks for a hotel prices scraper, hotel data scraper, or hotel prices API. Pay-per-page billing plus a small per-run setup fee, MCP-ready for Claude and other AI agents.From its SKILL.md
npx -y skills add johnisanerd/claude-skill-scrape-hotel-prices --skill apify-scrape-hotel-pricesAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- 29 days oldThe repository was created 29 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
8.4 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it
Scrape Hotel Prices: Google Hotels to Structured JSON
Scrape hotel prices from Google Hotels into clean JSON with the Apify Google Hotels Search Scraper. Give it a destination query and stay dates, and get every listed property with its nightly rate, total rate, rating, review count, amenities, coordinates, and a token you can chain into reviews or photo pulls.
When to use this skill
- The user wants to scrape hotel prices from Google Hotels (to JSON, CSV, a sheet, or a database).
- They want nightly and total rates for a destination and stay date as a dataset.
- They want rates, ratings, and amenities for hotel market research or a travel app.
- They ask for a "hotel prices scraper", "hotel data scraper", or "hotel prices API".
Not for: making reservations (the Actor reads data, it does not book), flight prices (use the Google Flights Data Scraper), or restaurant and attraction listings (use the Google Local API).
What you get (one object per results page)
Each dataset item is one page of results: search_parameters (your echoed input), search_metadata (total_results, properties_count, ads_count, pages_processed, pagination_limit_reached), a properties array of organic listings, and an ads array of sponsored listings. Each property carries name, type (hotel or vacation rental), rate_per_night and total_rate (display string lowest plus numeric extracted_lowest, with before-tax variants), overall_rating, reviews count, amenities, gps_coordinates, images, check_in_time, check_out_time, property_token, and usually link. When present: hotel_class and extracted_hotel_class, location_rating, a ratings star histogram, a reviews_breakdown by topic, description, deal plus deal_description, eco_certified, nearby_places, and a per-vendor prices array with cancellation flags.
Prerequisites
- Apify account (sign up at https://apify.com?fpr=9n7kx3&fp_sid=skillrepo).
- Authentication via
apify login, or anAPIFY_TOKENenvironment variable (Apify Console, Settings, Integrations).
The Actor
- Store page: https://apify.com/johnvc/google-hotels-search-scraper?fpr=9n7kx3&fp_sid=skillrepo
- Actor ID:
johnvc/google-hotels-search-scraper - Pricing: pay per page of results processed plus a small per-run setup fee (see
references/gotchas.md).
Run it with the Apify CLI
Scrape one page of hotel prices for a city and stay date:
apify actors call "johnvc/google-hotels-search-scraper" -i '{"search_type":"search","q":"hotels in Austin","check_in_date":"2026-09-10","check_out_date":"2026-09-12","max_pages":1}' \
--json \
--user-agent apify-awesome-skills/apify-scrape-hotel-prices \
2>/dev/null
Filtered scrape: 4-star class and up, guest rating at least 4.0, under 250 USD a night, two pages:
apify actors call "johnvc/google-hotels-search-scraper" -i '{"search_type":"search","q":"hotels in Miami","check_in_date":"2026-09-10","check_out_date":"2026-09-12","hotel_class":"4,5","guest_rating":"4.0","max_price":"250","currency":"USD","max_pages":2}' \
--json \
--user-agent apify-awesome-skills/apify-scrape-hotel-prices \
2>/dev/null
Every call carries the three flags this repo expects: --json, --user-agent apify-awesome-skills/apify-scrape-hotel-prices, and 2>/dev/null.
Run it from Claude or another AI agent (MCP)
The Actor is MCP-ready. Add the hosted server URL:
https://mcp.apify.com/?tools=actors,docs,johnvc/google-hotels-search-scraper
Then ask, for example: "Scrape hotel prices in Lisbon for the first weekend of October and give me the ten cheapest four-star options as JSON." MCP setup docs: https://docs.apify.com/platform/integrations/mcp
Workflow
- Build the search.
qis the destination query ("hotels in Paris", "Bali resorts", "vacation rentals in Miami").check_in_date(YYYY-MM-DD) is required when searching by query; addcheck_out_dateafter it. Party size viaadults,children, andchildren_ages(required whenchildrenis above 0). - Bound the volume.
max_pagesdefaults to 1, about 20 properties plus a handful of sponsored ads per page. Do not setmax_pagesto 0 (fetch all pages) on a broad city query without estimating cost first; big cities report thousands of results. - Filter server-side where you can.
min_priceandmax_pricewithcurrency,starsorhotel_class,guest_rating,amenitiesIDs,property_typeIDs, andvacation_rentalswithbedroomsandbathrooms. - Localize when needed with
gl(country),hl(language), andcurrency. - Run, then flatten. Each dataset item is a page object; expand its
propertiesarray into one row per hotel. Compute on the numericextracted_lowestfields, not the display strings. Dedupe across runs onproperty_token. - Chain deeper when asked. Feed a
property_tokenback into the Actor withsearch_typeset toreviewsorphotosfor guest reviews or the photo gallery of one property.
Inputs
search_type(enum:search,autocomplete,photos,reviews; defaultsearch)q(string): destination or hotel query, required for search unlessproperty_tokenis givencheck_in_date/check_out_date(YYYY-MM-DD): required with a query searchadults(default 2),children(default 0),children_ages(comma-separated, required if children above 0)min_price,max_price,currency: price windowstars,hotel_class(2 to 5),guest_rating,amenities,property_type: filtersvacation_rentals(boolean) plusrental_type,bedrooms,bathroomsgl,hl: country and language codesmax_pages(default 1, 0 = all pages): the cost boundproperty_token(string): single-property mode, also required for photos and reviews
Cost
Billing is pay per event: a per-run setup fee plus a fee for each page of results processed, with tiny per-result and per-start charges on top. A one-page scrape lands around $0.04 at the time of writing. Estimate first and confirm large runs; live prices and thresholds are in references/gotchas.md.
Honest limits
- Read-only extraction. The Actor does not make reservations and is not a booking API.
- Rates are quoted for the exact stay dates, party, and currency you pass; change the dates and the prices change.
- One dataset item per page, not per hotel. Flatten the
propertiesarray yourself. - Field coverage varies by property:
description,hotel_class,deal, the per-vendorpricesarray, andreviews_breakdownshow up only on some listings. - The
adsarray is sponsored placement, not organic ranking; keep it separate in analysis.
Troubleshooting
- Empty
properties: broaden the query, drop filters, and check the dates are in the future withcheck_out_dateaftercheck_in_date. - Input validation error about children:
childrenabove 0 requireschildren_ages. hotel_classfilter withvacation_rentalstrue: not compatible, pick one.pagination_limit_reachedis true: more pages exist; raisemax_pagesif you want them.
See references/gotchas.md for cost guardrails and error recovery, and references/actor-index.md for the Actor routing table.
Related travel-data Actors
- Google Flights Data Scraper: https://apify.com/johnvc/Google-Flights-Data-Scraper-Flight-and-Price-Search?fpr=9n7kx3&fp_sid=skillrepo
- Google Travel Explore API: https://apify.com/johnvc/google-travel-explore-api?fpr=9n7kx3&fp_sid=skillrepo
- Google Local API: https://apify.com/johnvc/google-local-api?fpr=9n7kx3&fp_sid=skillrepo
What ships with it: 2 files
5.0 KB alongside SKILL.md
references/
- actor-index.md1.7 KB
- gotchas.md3.3 KB