agentsclimarketplace

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

Install
npx -y skills add johnisanerd/claude-skill-scrape-hotel-prices --skill apify-scrape-hotel-prices

Assembled 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

The Actor

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

  1. Build the search. q is the destination query ("hotels in Paris", "Bali resorts", "vacation rentals in Miami"). check_in_date (YYYY-MM-DD) is required when searching by query; add check_out_date after it. Party size via adults, children, and children_ages (required when children is above 0).
  2. Bound the volume. max_pages defaults to 1, about 20 properties plus a handful of sponsored ads per page. Do not set max_pages to 0 (fetch all pages) on a broad city query without estimating cost first; big cities report thousands of results.
  3. Filter server-side where you can. min_price and max_price with currency, stars or hotel_class, guest_rating, amenities IDs, property_type IDs, and vacation_rentals with bedrooms and bathrooms.
  4. Localize when needed with gl (country), hl (language), and currency.
  5. Run, then flatten. Each dataset item is a page object; expand its properties array into one row per hotel. Compute on the numeric extracted_lowest fields, not the display strings. Dedupe across runs on property_token.
  6. Chain deeper when asked. Feed a property_token back into the Actor with search_type set to reviews or photos for guest reviews or the photo gallery of one property.

Inputs

  • search_type (enum: search, autocomplete, photos, reviews; default search)
  • q (string): destination or hotel query, required for search unless property_token is given
  • check_in_date / check_out_date (YYYY-MM-DD): required with a query search
  • adults (default 2), children (default 0), children_ages (comma-separated, required if children above 0)
  • min_price, max_price, currency: price window
  • stars, hotel_class (2 to 5), guest_rating, amenities, property_type: filters
  • vacation_rentals (boolean) plus rental_type, bedrooms, bathrooms
  • gl, hl: country and language codes
  • max_pages (default 1, 0 = all pages): the cost bound
  • property_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 properties array yourself.
  • Field coverage varies by property: description, hotel_class, deal, the per-vendor prices array, and reviews_breakdown show up only on some listings.
  • The ads array 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 with check_out_date after check_in_date.
  • Input validation error about children: children above 0 requires children_ages.
  • hotel_class filter with vacation_rentals true: not compatible, pick one.
  • pagination_limit_reached is true: more pages exist; raise max_pages if 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

What ships with it: 2 files

5.0 KB alongside SKILL.md

references/

Keep looking

Skills are one crate of 326,452. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.