Scrape Hotels.com hotel reviews at scale — guest ratings, full review text, six category sub‑ratings, stay dates, traveler type, language, and hotel owner responses — plus a per‑review LLM‑ready markdown block. No login, no Hotels.com API key. Runs on Apify.
This repo is the developer entry point for the Hotels.com Reviews Scraper actor: the output shape, copy‑paste API snippets, a full field dictionary, and a short how‑to. The actor itself runs on Apify — no login, no Hotels.com API key, no proxy or anti‑bot setup required.
Paste a Hotels.com /ho<id>/ URL, a bare Hotels.com property ID, or any Expedia Group hotel URL, and get two structured datasets:
- Reviews — one row per guest review: the overall /10 rating, full review text, six category sub‑ratings (cleanliness, service, room comfort, hotel condition, amenities, eco‑friendliness), stay dates, traveler type, language, review photos, any hotel owner response, and an LLM‑ready
markdownContentblock. - Hotels — one summary row per hotel: average rating, recency‑weighted rating, total review count, the full 1–5 rating distribution, and per‑language / per‑traveler‑type counts.
🏨 Native Hotels.com input, plus the whole Expedia Group — paste Hotels.com /ho<id>/ links or bare IDs (resolved automatically), and Expedia, Travelocity, Orbitz, Wotif, CheapTickets & ebookers URLs work too, with the same output schema.
🤖 LLM‑ready markdownContent per review — a self‑contained markdown block, ready for direct vector‑DB / RAG ingestion with zero formatting work.
![]() |
![]() |
| Hotel aggregate — ratings, distribution, counts | LLM‑ready markdownContent field |
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("factden/hotels-com-reviews-scraper").call(run_input={
"hotelUrls": ["https://www.hotels.com/ho119566/", "242128"],
"maxReviewsPerHotel": 100,
"sortBy": "newest",
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["hotelName"], row["overallRating"])Real sample output lives in examples/:
examples/reviews-sample.csv— 100 real review rows — browse it right in GitHub's table viewexamples/reviews-output.sample.json— 3 review rows showing the full field shape (incl.markdownContent)examples/input.json— a ready‑to‑run input
Every field is documented in FIELDS.md. Ratings are shown on the /10 scale to match Hotels.com's public display. From Apify you can download results as JSON, CSV, Excel, or HTML.
- Reputation & sentiment analysis — track guest sentiment for your own or competitor hotels over time.
- Competitor benchmarking — rating distributions, category sub‑scores and review volume per property.
- Market research — traveler types, languages, and what guests praise or complain about across a market.
- AI / RAG pipelines — drop each review's
markdownContentstraight into a vector DB.
Pay‑per‑event on Apify: a per‑review fee with no per‑run start fee — lower Max reviews per hotel to cap cost. New Apify accounts get $5 in free credit. See the actor page for current pricing.
Is scraping Hotels.com reviews legal? The actor collects only publicly available review data. As with any scraping, review Hotels.com's Terms of Service and your local regulations, and use the data responsibly.
Do I need a Hotels.com account or API key? No. Everything runs inside the actor on Apify's infrastructure — no login, no key, no proxy setup.
Can I paste other Expedia Group brands? Yes. Hotels.com /ho<id>/ links and bare IDs resolve automatically, and Expedia, Travelocity, Orbitz, Wotif, CheapTickets and ebookers URLs return the same schema. Use Review sources to keep only certain brands' reviews.
Found a bug or want a field added? Open an issue here, or use the Issues tab on the Apify actor page.
- Expedia Reviews Scraper (docs)
- Trip.com & Ctrip Reviews Scraper (docs)
- G2 Reviews Scraper (docs)
- Indeed Jobs Scraper (docs)
- All FactDen actors →
Docs & guides:
The sample data in this repo is real public Hotels.com review data, collected with the actor and provided for documentation/evaluation. Run the actor on Apify to pull data for any hotel, at any scale.
Found this useful? A star on this repo helps other people find it.


