HRS Hotel Scraper avatar

HRS Hotel Scraper

Pricing

from $1.50 / 1,000 hotels

Go to Apify Store
HRS Hotel Scraper

HRS Hotel Scraper

HRS (hrs.com) hotel listings by location and travel dates: prices, ratings, amenities, and optional pictures, hotel details, and guest reviews. Structured JSON per hotel.

Pricing

from $1.50 / 1,000 hotels

Rating

0.0

(0)

Developer

Farhan Ali

Farhan Ali

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

HRS Hotel Scraper creates a structured dataset of hotel records collected from hrs.com. Each dataset item represents one hotel and includes its name, location, star rating, guest rating, price (total and per night), currency, amenities, and availability; when enabled, it also attaches additional pictures, full hotel details, and guest reviews. Query the source by city or region (locations), optionally by HRS location IDs (locationIds), specify check-in/check-out dates and occupancy, cap the result with maxItems, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, XML, or another supported format.

Dataset at a glance

PropertyValue
SourceHRS — hrs.com
Record unitOne hotel
Input methodslocations, locationIds (+ dates, room type, occupancy)
Main identifiershotelId, url
DeliveryApify Dataset and API
Export formatsJSON, CSV, Excel, HTML, XML
Update modelFresh records per Actor run
PricingPay-per-event: $3 / 1,000 hotels; optional pictures, details, and reviews billed separately

Coverage and available records

The Actor searches HRS by city or region name (locations), resolved through the HRS location autocomplete, or directly by HRS location ID (locationIds). Location names and IDs can be combined in one run. Search parameters include:

  • Dates — checkInDate and checkOutDate in YYYY-MM-DD format. If a past check-in is provided, it is automatically moved to today and check-out is set to six nights later. Check-out defaults to six nights after check-in.
  • Occupancy — roomType (SINGLEROOM, DOUBLEROOM, THREEBEDROOM, FOURBEDROOM), plus rooms (1–8), adults (1–6), and children (0–6) per room.
  • Language and currency — language (English, German, French, Spanish, Italian, Dutch, Polish) and an informational currency field (prices come from the API).

Conditional enrichment is controlled by three toggles:

  • includePictures (default true) — fetches additional hotel pictures beyond the search thumbnail.
  • includeHotelDetails (default false) — fetches the full detail page (description, amenities, room offers, contact information, all pictures).
  • includeReviews (default false) — fetches guest reviews and extended rating breakdowns, capped per hotel by maxReviewsPerHotel (0 = all available).

maxItems caps the total hotels collected (0 = unlimited).

Data dictionary

FieldTypeNullableDescriptionExample
hotelIdintegerNoHRS hotel identifier875998
hotelNamestringNoHotel name"Capri by Fraser Berlin"
urlstringNoHRS hotel page URL"https://www.hrs.com/en/hotel/..."
searchLocationstringYesLocation used for the search"Berlin"
locationIdintegerYesHRS location ID55133
checkInDatestringYesCheck-in date"2026-08-03"
checkOutDatestringYesCheck-out date"2026-08-09"
streetstringYesStreet address"Scharrenstraße 22"
zipCodestringYesPostal code"10178"
cityNamestringYesCity"Berlin"
districtNamestringYesDistrict"Berlin"
countrystringYesCountry code"DEU"
addressstringYesFormatted address"Scharrenstraße 22, 10178, Berlin, DEU"
latitudenumberYesLatitude52.513894
longitudenumberYesLongitude13.405057
starsintegerYesStar rating4
ratingnumberYesGuest rating9.1
ratingCountintegerYesNumber of ratings15
recommendationRatenumberYesRecommendation percentage80
totalPricenumberYesTotal price for the stay850
pricePerNightnumberYesPrice per night141.67
currencystringYesPrice currency"EUR"
totalAvailCountintegerYesAvailability count47
chainNamestringYesHotel chain"Frasers Hospitality"
brandNamestringYesBrand"Frasers Hospitality"
roomCategoriesarrayYesRoom categories["SUPERIOR"]
featureTypesarrayYesAmenity/feature codes["PARKING", "RESTAURANT"]
hotelTypesarrayYesHotel type codes["CITY_HOTEL"]
crsTypestringYesReservation system type"HRS"
thumbnailUrlstringYesThumbnail image URL"https://foto.hrsstatic.com/..."
pictureUrlsarrayYesGallery image URLs; extended when includePictures is on["https://foto.hrsstatic.com/..."]
detailUrlstringYesDetail page URL"https://www.hrs.com/en/detail?hn=875998"
hotelDetailsobjectYesFull detail-page data when includeHotelDetails is onsee below
reviewSummaryobjectYesAggregated review scores when includeReviews is onsee below
reviewsarrayYesGuest reviews when includeReviews is onsee below

The optional hotelDetails object carries phone, email, homepage, description comments, room offers, and all pictures. reviewSummary carries aggregate category scores, and each reviews item carries the review text, rating, traveler group, and dates. The best stable field for deduplication is hotelId, with url as a fallback.

Example dataset record

The following record was produced for a Berlin search with includePictures and includeHotelDetails enabled. Long arrays are truncated for readability.

{
"hotelId": 875998,
"hotelName": "Capri by Fraser Berlin",
"url": "https://www.hrs.com/en/hotel/capri-by-fraser-berlin-875998",
"searchLocation": "Berlin",
"locationId": 55133,
"checkInDate": "2026-08-03",
"checkOutDate": "2026-08-09",
"street": "Scharrenstraße 22",
"zipCode": "10178",
"cityName": "Berlin",
"districtName": "Berlin",
"country": "DEU",
"address": "Scharrenstraße 22, 10178, Berlin, DEU",
"latitude": 52.513894,
"longitude": 13.405057,
"stars": 4,
"rating": 9.1,
"ratingCount": 15,
"recommendationRate": 80,
"chainName": "Frasers Hospitality",
"brandName": "Frasers Hospitality",
"hotelTypes": ["CITY_HOTEL", "BUSINESS_HOTEL"],
"featureTypes": ["PARKING", "RESTAURANT", "AIRCONDITION"],
"totalPrice": 850,
"currency": "EUR",
"pricePerNight": 141.67,
"totalAvailCount": 47,
"roomCategories": ["SUPERIOR"],
"crsType": "HRS",
"thumbnailUrl": "https://foto.hrsstatic.com/fotos/...",
"pictureUrls": ["https://foto.hrsstatic.com/fotos/..."],
"hotelDetails": {
"detailUrl": "https://www.hrs.com/en/detail?hn=875998",
"displayName": "Capri by Fraser Berlin",
"status": "OPEN",
"stars": 4,
"phone": "+49 302007701800",
"email": "reservations.berlin@capribyfraser.com",
"homepage": "berlin.capribyfraser.com",
"latitude": 52.513894,
"longitude": 13.405057
}
}

Query and input reference

InputTypeRequiredDefaultAccepted valuesDescription
locationsarrayNo["Berlin"]city/region namesLocations to search.
locationIdsarrayNo[]HRS location IDsSkip autocomplete by using IDs.
checkInDatestringNotodayYYYY-MM-DDCheck-in date; past dates are moved to today.
checkOutDatestringNocheck-in + 6 nightsYYYY-MM-DDCheck-out date.
languagestringNoenen, de, fr, es, it, nl, plLanguage for search and URLs.
roomTypestringNoSINGLEROOMSINGLEROOM, DOUBLEROOM, THREEBEDROOM, FOURBEDROOMRoom type.
roomsintegerNo11–8Number of rooms.
adultsintegerNo11–6Adults per room.
childrenintegerNo00–6Children per room.
currencystringNoEUREUR, USD, GBP, CHFInformational currency field.
includePicturesbooleanNotruetrue / falseFetch additional pictures.
includeHotelDetailsbooleanNofalsetrue / falseFetch full detail page data.
includeReviewsbooleanNofalsetrue / falseFetch guest reviews.
maxReviewsPerHotelintegerNo00 = all availableMax reviews per hotel.
maxItemsintegerNo00 = unlimitedMaximum hotels to collect.
proxyConfigurationobjectNoApify RESIDENTIALproxy configProxy settings; residential recommended.

A minimal request and an advanced request:

{ "locations": ["Berlin"], "maxItems": 10 }
{
"locations": ["Berlin"],
"checkInDate": "2026-08-03",
"checkOutDate": "2026-08-09",
"language": "en",
"roomType": "SINGLEROOM",
"rooms": 1,
"adults": 1,
"currency": "EUR",
"includePictures": true,
"includeHotelDetails": true,
"includeReviews": true,
"maxReviewsPerHotel": 5,
"maxItems": 20,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Retrieve the data through the API

  1. Start the Actor with a JSON input.
  2. Wait for the run to finish, or use the synchronous ?waitForFinish= endpoint when appropriate.
  3. Read items from the run's default dataset.
  4. Paginate or export the dataset.

A Python example using the Apify client:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("datascrapers/hrs-scraper").call(
run_input={"locations": ["Berlin"], "maxItems": 10}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["hotelName"], item["pricePerNight"], item["currency"])

For other languages, use the generated API tab on the Actor page. Never place a real token in a URL or example.

Data quality and record handling

  • Conditional fields — hotelDetails, reviewSummary, and reviews are present only when their toggles are enabled; pictureUrls contains more images when includePictures is on.
  • Completeness — some hotels omit optional fields (chain, brand, ratings) when the source does not provide them.
  • Deduplication — deduplicate on hotelId (or url). Re-runs can repeat the same hotel for different date ranges.
  • Retries — requests are retried with backoff; a residential proxy is recommended for reliable access.
  • Normalization — dates are YYYY-MM-DD; prices are numeric with a currency field; coordinates are numeric.
  • Raw versus derived — all fields are source values; the Actor does not derive pricing across dates.

Export and pipeline examples

DestinationRecommended methodTypical use
PostgreSQL / SupabaseDataset API or webhook consumerHotel price history storage
Google SheetsApify integrationRate comparison sheets
S3 / cloud storageScheduled export or integrationDaily rate snapshots
BI / dashboardScheduled run + exportOccupancy and pricing dashboards

Pricing and cost examples

Billing is pay-per-event, with optional add-on events:

EventWhat countsRate (per 1,000)
Hotel (dataset-item)Each hotel written to the dataset$3.00
Pictures (pictures)Additional hotel pictures (when includePictures is on)$1.00
Hotel Details (hotel-details)Full detail page (when includeHotelDetails is on)$4.00
Reviews (hotel-reviews)Guest reviews (when includeReviews is on)$2.00

A one-time Actor Start event ($0.00005) is also applied per run.

RecordsEstimated base cost
1,000 hotels (base only)$3.00
10,000 hotels (base only)$30.00
1,000 hotels + details + reviews$9.00

Estimates assume the standard tier. Pictures, details, and reviews are only charged when their toggle is enabled.

Limitations and responsible data use

  • The Actor collects publicly accessible HRS hotel data only.
  • Prices and availability are valid for the requested dates and can change.
  • Some fields are conditional or empty (see Data quality).
  • No historical snapshots are guaranteed unless you store the exported datasets yourself.
  • You are responsible for complying with applicable privacy, contractual, and legal requirements when using the data.

Dataset questions

What does one dataset item represent?

One hotel, optionally enriched with additional pictures, full detail-page data, and guest reviews when those toggles are enabled.

Which field should I use as a unique identifier?

Use hotelId; fall back to url.

Are fields nullable or conditional?

Yes. hotelDetails, reviewSummary, reviews, and extended pictureUrls are conditional on the toggles; several optional fields depend on what the source lists for a hotel.

Can I retrieve the records as CSV or JSON?

Yes. Export from the run's dataset in JSON, CSV, Excel, HTML, or XML, or read the dataset through the API.

What counts as a billable result?

Each hotel is a Hotel charge; pictures, details, and reviews are separate add-on events when their toggles are enabled.

Does the Actor return historical data?

No. Each run returns the records available for the requested dates. Schedule recurring runs to build your own history.

  • Booking.com Scraper — hotel listings with optional details and pricing calendars, for cross-platform rate comparison.
  • TripAdvisor Reviews Scraper — hotel review records for reputation and sentiment analysis.
  • OpenTable Scraper — restaurant listings and availability, adjacent to hospitality research.
  • Skyscanner Scraper — flight and travel search data for broader travel intelligence.

Data Scrapers support

Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, the required fields, the expected record volume, and your preferred delivery format.