HRS Hotel & Reviews Scraper — Hotels, Ratings & Guest Reviews
Pricing
from $2.00 / 1,000 results
HRS Hotel & Reviews Scraper — Hotels, Ratings & Guest Reviews
Scrape hotels and guest reviews from HRS.com. For each hotel get name, star rating, address, coordinates, amenities and the guest score, plus detailed reviews with reviewer type, date, comments, the hotel response and per-category ratings. Export European hotel data as JSON, CSV or Excel.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
HRS Hotel & Reviews Scraper — Hotels, Ratings, Amenities & Guest Reviews
Extract hotels and guest reviews from HRS.com as clean, structured data — no login, no coding. This HRS scraper turns any HRS hotel page into one tidy record: name, star rating, full address, GPS coordinates, amenities, accepted payment methods, photos and the guest rating — plus detailed guest reviews with reviewer type, date, positive/negative comments, the hotel's official response and per-category scores (cleanliness, price/performance, breakfast, beds, service and more). Point it at specific hotels, or leave the list empty and let it scrape HRS hotels automatically from the sitemap.
Export to JSON, CSV, Excel, or API.
Built for travel and hospitality analysts, hotel revenue managers, OTA and market researchers, review-intelligence teams, and data/ML engineers who need European hotel and review data without copying pages by hand.
🔎 Why scrape HRS?
HRS is one of Europe's largest hotel booking and corporate-travel platforms, with hundreds of thousands of hotel profiles across Germany, Austria, Switzerland, France, Italy, Spain, the Netherlands, Poland and beyond. Each hotel page is a goldmine of structured information: a verified star rating, a 1–10 guest rating aggregated from real stays, a review count, amenities, geolocation and — crucially — guest reviews that break every stay down into per-category scores. That per-category detail (tidiness, breakfast, bed quality, reception friendliness, price/performance) is rare and extremely valuable for benchmarking.
Collecting this by hand is slow and error-prone. Hotel pages are server-rendered with embedded JSON, ratings are paginated, amenities are encoded, and the review scores are buried in the page payload. Copy-pasting dozens — let alone thousands — of hotels is simply not realistic. This HRS scraper reads the structured data directly from each page and returns it as clean, typed records ready for spreadsheets, databases and BI tools.
Common reasons people scrape HRS:
- Competitive benchmarking — compare your hotel's rating and per-category scores against rivals in the same city.
- Review intelligence — mine what guests praise and complain about, by category and traveller type.
- Market & travel research — build datasets of European hotels with ratings, amenities and locations.
- Revenue & reputation management — track how a property or hotel group is rated and how it responds.
- Lead and supply mapping — map hotel inventory, star tiers and amenities across a region.
- Data & ML pipelines — feed structured hotel + review data into models, dashboards and recommendation engines.
- Academic & travel-trend analysis — study guest sentiment and service quality across markets and languages.
✨ What this HRS scraper does
- ✅ Hotels + reviews in one record — every result is a complete hotel profile with its embedded guest reviews attached.
- ✅ Target by URL or ID — paste HRS hotel page URLs (e.g.
https://www.hrs.com/en/hotel/393) or plain numeric IDs (393). - ✅ Automatic hotel discovery — leave the hotel list empty and the HRS scraper crawls the public XML sitemaps to collect hotel URLs automatically, up to your Maximum hotels cap.
- ✅ Rich per-category review scores — each review exposes cleanliness, price/performance, ambiance, reception friendliness, breakfast, bed quality, room configuration, room size, sanitary facilities and staff service.
- ✅ Full hotel intelligence — name, HRS stars, 1–10 guest rating, review count, amenities, accepted payment methods, photo URLs, street/city/postal/region/country and latitude/longitude.
- ✅ Reviewer context — reviewer name, traveller type (business/leisure), date, language, whether they recommend the hotel, and the hotel's official response.
- ✅ De-duplicated results — discovered hotel URLs are de-duplicated so you never get the same hotel twice.
- ✅ 7 languages — pull hotel pages and review text in English, German, Spanish, French, Italian, Dutch or Polish.
- ✅ Clean, typed output — numbers as numbers, reviews as arrays — ready for JSON, CSV, Excel or the Apify API.
- ✅ Fast & reliable — HTTP-based extraction (no slow browser), parallel fetching, automatic retries and proxy rotation.
🎯 Use cases
- Hotel revenue managers — benchmark your property's guest rating and per-category scores against competitors in the same city or star tier.
- Review-intelligence teams — analyse thousands of HRS reviews to surface recurring praise and complaints by category and traveller type.
- OTA & travel-tech companies — enrich hotel catalogs with ratings, amenities, geo and sentiment from HRS data.
- Market researchers — build a structured map of European hotel supply, star distribution and amenity coverage.
- Reputation & brand managers — monitor how a hotel group is rated over time and how it responds to guests.
- Data scientists & ML engineers — collect clean hotel + review datasets for sentiment models and recommenders.
- Consultants & agencies — produce competitor and market reports for hospitality clients.
- Academics — study guest satisfaction, service quality and travel trends across regions and languages.
📥 Input
Provide hotel URLs/IDs, or leave them empty to auto-discover. Every field is optional and has a sensible default.
| Field | Type | Description |
|---|---|---|
hotelUrls | array | HRS hotel page URLs (e.g. https://www.hrs.com/en/hotel/393) or plain numeric hotel IDs (393). Leave empty to auto-discover hotels from the HRS sitemap. |
startUrls | array | Alternative way to pass HRS hotel URLs (request-list sources / advanced). |
includeReviews | boolean | Add the detailed guest reviews embedded on each hotel page (reviewer, date, comments, per-category scores). Default true. |
maxReviewsPerHotel | integer | Cap the number of reviews saved per hotel. Empty = all embedded reviews. |
language | select | HRS site language for pages and review text: en, de, es, fr, it, nl, pl. Default en. |
maxItems | integer | Stop after this many hotels (also caps sitemap discovery). |
maxConcurrency | integer | How many hotel pages to fetch in parallel (1–20). Default 10. |
proxyConfiguration | object | Apify Proxy configuration. Recommended (datacenter is enough; residential is used as a fallback). |
Example 1 — specific hotels
{"hotelUrls": ["393", "14311", "https://www.hrs.com/en/hotel/10520"],"includeReviews": true}
Example 2 — auto-discover hotels
{"maxItems": 500,"includeReviews": true,"language": "en","proxyConfiguration": { "useApifyProxy": true }}
Example 3 — German pages, hotels only (no reviews)
{"hotelUrls": ["393"],"language": "de","includeReviews": false}
📤 Output
Each hotel is one dataset item with its reviews embedded. Example (trimmed):
{"hotelId": 393,"name": "Hotel Vignette Collection BRISTOL BERLIN by IHG","stars": 5,"url": "https://www.hrs.com/en/hotel/393","language": "en","street": "Kurfürstendamm 27","city": "Berlin","postalCode": "10719","region": null,"country": "DEU","latitude": 52.50,"longitude": 13.33,"rating": 8.4,"reviewCount": 131,"bestRating": 10,"worstRating": 1,"amenities": ["NOSMOKING", "DESK", "ROOMSAFE", "SPA", "HOTELBAR"],"paymentAccepted": "MASTERCARD, ELECTRONIC_CASH, AMERICAN_EXPRESS, VISA","images": ["https://foto.hrsstatic.com/fotos/..."],"reviewsExtracted": 9,"scrapedAt": "2026-10-25T10:00:00.000Z","reviews": [{"reviewerName": "Alexander B.","travellerType": "BUSINESS","date": "2025-11-02T20:43:45.621Z","locale": "en","overallRating": 5.7,"positiveComment": "Great location and friendly staff …","negativeComment": "Spa area was closed during our stay …","hotelResponse": "Thank you for your constructive feedback …","recommends": false,"categoryRatings": {"hotelTidiness": 10,"pricePerformanceRatio": 8,"hotelAmbiance": 3,"friendlinessOfReception": 5,"breakfastService": 9,"qualityOfBeds": 6,"roomConfiguration": 5,"roomSize": 5,"sanitaryFacilities": 8,"serviceOfHotelEmployees": 5}}]}
Field reference — hotel
| Field | Description |
|---|---|
hotelId | HRS numeric hotel ID. |
name | Hotel name (HRS star suffix stripped). |
stars | HRS star rating (number). |
url | Hotel page URL that was scraped. |
language | Language the page/reviews were fetched in. |
street, city, postalCode, region, country | Address components. region and country are present when HRS exposes them for that hotel. |
latitude, longitude | GPS coordinates. |
rating | Guest rating out of 10. |
reviewCount | Total number of guest ratings/reviews HRS reports for the hotel. |
bestRating, worstRating | Rating scale (typically 10 / 1). |
amenities | Array of amenity codes (e.g. SPA, NOSMOKING, ROOMSAFE, HOTELBAR). |
paymentAccepted | Accepted payment methods reported by the hotel (present when available). |
images | Hotel photo URLs. |
reviewsExtracted | How many reviews were saved on this record (when includeReviews is on). |
scrapedAt | ISO timestamp of the scrape. |
Field reference — review (inside reviews[])
| Field | Description |
|---|---|
reviewerName | Reviewer name (often first name + initial, or anonymous). |
travellerType | BUSINESS, LEISURE, etc. (present when available). |
date, locale | Review date (ISO) and language. |
overallRating | Overall score for the stay (out of 10). |
positiveComment, negativeComment | What the guest liked / disliked (present when the guest left text). |
hotelResponse | The hotel's official reply (present when the hotel responded). |
recommends | Whether the guest recommends the hotel (boolean). |
categoryRatings | Per-category scores: hotelTidiness, pricePerformanceRatio, hotelAmbiance, friendlinessOfReception, breakfastService, qualityOfBeds, roomConfiguration, roomSize, sanitaryFacilities, serviceOfHotelEmployees (the subset the guest scored). |
Note on reviews: HRS shows the most relevant reviews with text on each hotel page (typically up to ~10–20). Many HRS ratings are numeric scores without text; those are still reflected in the hotel-level
ratingandreviewCount. Some fields (region,country,travellerType, comment text,hotelResponse) populate only when that hotel/review actually provides them — this is expected, not a bug.
🔁 Pagination & scale
This HRS scraper works at scale in two ways. When you provide hotel URLs or IDs, it fetches each one in parallel (up to maxConcurrency). When you leave the list empty, it performs automatic pagination over the HRS XML sitemaps: it reads sitemap_index.xml, walks the sitemap-hotels*.xml sub-sitemaps — which together list hundreds of thousands of /hotel/{id} URLs — and collects de-duplicated hotel URLs until it reaches your Maximum hotels (maxItems) cap. Discovery stops cleanly at the cap or when the sitemaps are exhausted, so you can safely request hundreds or thousands of hotels in a single run. Set maxItems to control volume and cost; set maxConcurrency (1–20) to trade speed for gentleness.
⚙️ How to use
- Open the actor on the Apify Console.
- Paste hotel URLs or IDs, or leave the list empty to auto-discover hotels from the HRS sitemap.
- Keep Include guest reviews on (or turn it off for faster hotel-only runs).
- Set Maximum hotels, pick a language, and click Start.
- When the run finishes, export the dataset to JSON, CSV, Excel, HTML, or pull it via the Apify API.
- Automate it: run on a schedule to refresh ratings and reviews, or wire the output into Make, Zapier, Google Sheets, a webhook or S3.
💡 Tips
- Target review-rich hotels — larger city hotels have more text reviews per page; small properties may only have numeric ratings.
- Leave the list empty to discover — great for building a city/country dataset; cap it with Maximum hotels.
- Pick the right language — review text and some hotel fields come back in the language you choose.
- Turn reviews off for speed — set Include guest reviews off when you only need hotel profiles and ratings.
- Cap reviews per hotel — use Max reviews per hotel to keep datasets lean when you only need a sample.
- Filter after export — pull broadly, then slice by
stars,rating,cityorcategoryRatingsin your spreadsheet or database.
❓ FAQ
Is scraping HRS legal? This tool collects publicly available hotel and review information for legitimate business use such as market research, benchmarking and reputation analysis. You are responsible for how you use the data and for complying with applicable laws, the website's terms and data-protection rules (including GDPR where relevant). Do not use the output to publish personal data unlawfully or to infringe intellectual-property rights.
How many hotels can I scrape, and how fast?
As many as you set in Maximum hotels — the sitemaps list hundreds of thousands of hotels, so hundreds-to-thousands per run is routine. Because extraction is HTTP-based (no browser) and runs in parallel, throughput is high; speed scales with maxConcurrency.
Do I need proxies or a login? No login or API key is required. Apify Proxy is recommended for reliability and is enabled by default (datacenter is sufficient; residential is used as an automatic fallback if needed).
What export formats are supported? Structured JSON by default, plus CSV, Excel, HTML, and programmatic access via the Apify API and integrations.
Is there an HRS API? This actor is effectively an unofficial HRS API: it returns clean JSON you can call on demand or on a schedule, without dealing with HRS's page internals yourself.
How fresh is the data? Every run fetches hotel pages live, so ratings, review counts and reviews reflect HRS at scrape time. Schedule the actor to keep a dataset continuously up to date.
Can I filter by city, stars or rating?
Discovery is URL/sitemap-based, so the fastest workflow is to pull broadly and filter the output by city, stars, rating or categoryRatings after export. For specific properties, pass their URLs/IDs directly.
Why do some hotels have fewer (or no) text reviews?
HRS only shows the most relevant reviews with text on each page (often ~10–20). Many stays leave numeric scores only; those are still counted in rating and reviewCount even though they don't appear as individual review objects.
Which languages are supported?
English, German, Spanish, French, Italian, Dutch and Polish — set via the language input.
Can I run it on a schedule or via API? Yes — use the Apify Scheduler, or start runs and pull the dataset through the Apify API and its Make/Zapier/webhook integrations.
🔗 Related scrapers
- Expedia Hotels Scraper — Prices, Ratings & Reviews
- Luma Event Scraper - lu.ma Events, Hosts & Calendars
- Meetup Scraper - Events, Groups & Members Data Extractor
- Eventbrite Scraper — Events, Venues & Organizer Leads
- Furnished Finder Scraper - Monthly Rentals & Landlord Leads
- Boat & Yacht Listings Scraper for Yachtall
👉 Ready to go? Paste a few HRS hotel URLs — or leave the list empty to auto-discover — set your limit, and click Start to scrape HRS hotels, ratings and guest reviews into clean JSON, CSV or Excel.