Hostelworld Scraper – Hostels, Dorm Prices & Reviews avatar

Hostelworld Scraper – Hostels, Dorm Prices & Reviews

Pricing

from $1.50 / 1,000 property rows

Go to Apify Store
Hostelworld Scraper – Hostels, Dorm Prices & Reviews

Hostelworld Scraper – Hostels, Dorm Prices & Reviews

Search Hostelworld by city or look up hostels by ID or URL, and choose what a row is: a hostel, a dorm or private room with its own price, or a guest review. Flat columns only - ratings, dorm and private prices, pre-discount figures, facilities, policies, geo. Billed per hostel.

Pricing

from $1.50 / 1,000 property rows

Rating

0.0

(0)

Developer

R.L.

R.L.

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

9

Monthly active users

2 days ago

Last modified

Categories

Share

Hostelworld Scraper searches Hostelworld by city, or works on hostels you name, and extracts images, facilities, dorm and private room prices, the full ratings breakdown, geo, address, policies and guest reviews — from the app's own mobile API. It reads Hostelworld's API directly, so it's fast, reliable and complete — no flaky HTML parsing, no headless browser. Export to JSON, CSV, Excel, or an API.

Every column is a scalar or a list of text. Pick the mode for the shape you want — a row per hostel, a row per room type, or a row per review — and the export opens as a table, with no nested objects to unpack.


Why use this Hostelworld Scraper?

  • No code required — set your input, click Start, download your data.
  • Fast & accurate — reads Hostelworld's own mobile API and returns structured JSON, not scraped HTML.
  • Rich, structured data — every field below, clean and ready to use. Flat columns only: no nested objects, so a CSV or Excel export opens as a table.
  • You choose the grain — a row per hostel, a row per room type, or a row per review, and the bill is per hostel either way.
  • A whole city in one run — Hostelworld returns a city's entire property list in a single response, so there are no pagination gaps to worry about.
  • Transparent pay-per-result pricing — pay only for the rows you get.
  • Export anywhere — JSON, CSV, Excel, XML, or pull it live via the Apify API.

What can you do with Hostelworld data?

  • Market & competitor research — compare every hostel in a city on price, rating and facilities.
  • Price & availability monitoring — set a check-in date and track dorm and private rates over time, per hostel or per room type.
  • Review mining — every review of every hostel in a city, with its sub-scores and traveller type, one row each.
  • Data science & trend analysis — build clean datasets of hostel pricing and ratings.
  • Lead generation & enrichment — feed hostel names, addresses and geo into your own tools.

What data does the Hostelworld Scraper extract?

A hostel row carries id, name, type, url, overallRating, numberOfRatings, the seven rating sub-scores, pricePerNight, dormPricePerNight, privatePricePerNight, their average and pre-discount counterparts, discountPercent, currency, city, country, district, address1, address2, latitude, longitude, distanceFromCentreKm, overview, images, imagesGallery, facilities, facilitiesFree, facilitiesPaid and promotions — plus the profile columns (description, directions, checkInFrom, policies, taxes, …) when profiles are on. A room row is one dorm or private room with its own price, capacity and rate plan; a review row is one review with its ratings and who wrote it. See the full field table below.


How do I scrape Hostelworld? (3 steps)

  1. Pick a mode — it decides what one row is: a hostel, a room type, or a review.
  2. Say which hostels — a location in q, or IDs and URLs in propertyUrls. Both work in every mode. Everything else has a default.
  3. Run & export — click Start, then download the dataset as JSON/CSV/Excel or fetch it via the API.

Which mode do I want?

The mode decides what one row is. The hostel source is a separate choice, so any mode can run on a whole city (q) or on hostels you name (propertyUrls).

modeOne row isRows per hostelBilled per hostel
searcha hostel, as the search lists it, plus whichever include… extras you switch on1property-row, plus each extra you add
propertiesa hostel with its profile — description, directions, facilities, policies, cancellation terms, fees, check-in times1property-row + detailed-profile
availabilitya hostel's prices for your dates — lowest dorm and private, pre-discount, promotions, beds free1property-row + room-availability
roomsone dorm or private room on offer, with its own price, capacity, rate plan and photosone per room typeproperty-row + room-availability
reviewsone guest review, with its per-category ratings and the traveller who wrote itone per reviewproperty-row + review-item per review

availability and rooms make the same request and cost the same — one gives you a hostel per row, the other a room per row. Pick rooms when you want dorm prices as a table rather than a lowest-price summary.

A mode fetches only its own slice: asking for reviews cannot also bill you for profiles. Measured on live runs — reviews for two hostels at three reviews each charges property-row=2 and review-item=6, and nothing else.

Searching is not a prerequisite. Every slice endpoint is addressed by property ID, so a run on propertyUrls costs one request per hostel per slice with no listing call in front of it.

Finding a hostel's ID

propertyUrls takes a numeric ID or any hostelworld.com property URL:

98483
https://www.hostelworld.com/hostels/p/98483/avenue-hostel-and-suites/

The name in the URL is cosmetic — Hostelworld resolves the page by ID and redirects — so a stale or truncated slug still works. Duplicates are collapsed before anything is billed.


What inputs does it take?

FieldTypeDefaultDescription
modestringsearchWhat one row is: search, properties, availability, rooms or reviews.
qstringLisbonA location to work on: a city, neighbourhood, or property name (e.g. 'Lisbon'). Resolved via Hostelworld's own mobile autocomplete. Works in every mode. Ignored when propertyUrls is also set.
propertyUrlsarray[]Work on these hostels instead of searching, as numeric IDs or hostelworld.com property URLs. Works in every mode, and wins over q.
includeDetailsbooleantrueMode search only. Add each hostel's profile to the row. One extra request per hostel, billed as detailed-profile.
includeAvailabilitybooleanfalseMode search only. Add the dates' prices, promotions and beds-free columns. Billed as room-availability. Setting dateStart switches this on by itself.
reviewsPerPropertyinteger10Mode reviews. How many reviews per hostel, in reviewsSort order — one row and one charge each. Values above 50 are fetched in pages of 50.
reviewsSortstring-date-date newest, date oldest, -rating best, rating worst first. Worst-first is the one for complaint monitoring.
dateStartstring–Check-in date YYYY-MM-DD, not in the past. Defaults to tomorrow when availability is fetched.
daysAheadinteger–Price this many days from the run's start date instead — for scheduled monitoring, where a fixed date goes stale. Setting both is rejected.
numNightsinteger2Number of nights to price, 1-30. Hostelworld refuses 31 even though its own error message says 31 is allowed — measured.
numberOfGuestsinteger2Guests to price for. Changes which beds and rooms are offered at all.
currencystringEURThree-letter ISO currency code for every price on the row. All modes. Case does not matter: usd is sent as USD, because Hostelworld rejects a lower-case code outright.
maxItemsinteger50Maximum hostels to work on (0 = all). It caps hostels, not rows, because the hostel is the billing unit: 20 hostels in rooms mode is 20 charges and perhaps 150 rows.
proxyConfigurationobjectApify ProxyRoute requests through a proxy (Apify Proxy by default).

About q: it's resolved through Hostelworld's own autocomplete. The actor prefers a city match among the suggestions and otherwise takes the first result. A city name (e.g. "Lisbon") returns every property in that city (capped by maxItems); a specific property name (e.g. "Lisbon Calling") returns just that one property.

Hostelworld indexes cities and properties, not districts or regions, and it answers a name it does not know with its best guess rather than with nothing. Measured: Alfama — a Lisbon neighbourhood — resolves to Munich, Germany, and Europe to Andorra la Vella. Gibberish (zzzzqqqq) correctly returns no match and the run says so. Because of that guess, every search run's status message names the place it actually searched, and says so loudly when the match shares no name with your query:

Searched Lisbon, Portugal (Hostelworld's match for 'Lisbon'). Delivered 5 rows from 5 hostels.
Check the location: Hostelworld matched 'Alfama' to 'Munich, Germany', which shares no name
with what you asked for. If that is the place you meant, nothing is wrong.

A native name is not a typo, so lisboa → Lisbon and Roma → Rome pass without a warning. To scrape a neighbourhood, search the city and filter on the district column, or put the hostels' IDs in propertyUrls.

includeReviews is gone. It was a search-mode toggle that nested a list of reviews inside a hostel row. A row now holds only scalars, so reviews have their own grain: use mode: "reviews", with the same q or propertyUrls. A run that still sends includeReviews: true is refused with that message rather than quietly dropping the data.

Example input

Search a city, with dorm prices for a two-night stay:

{
"mode": "search",
"q": "Lisbon",
"maxItems": 50,
"includeAvailability": true,
"daysAhead": 14,
"numNights": 2,
"numberOfGuests": 2,
"currency": "EUR",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}

Track the dorm price of three hostels you already know — no search, no profile charge. With daysAhead the target night moves with the schedule instead of going stale:

{
"mode": "availability",
"propertyUrls": [
"https://www.hostelworld.com/hostels/p/98483/avenue-hostel-and-suites/",
"65432",
"52411"
],
"daysAhead": 21,
"numNights": 2,
"numberOfGuests": 2,
"maxItems": 0
}

Watch for complaints — the five worst reviews of every hostel in a city. One row per review, and maxItems caps the hostels, not the rows:

{
"mode": "reviews",
"q": "Lisbon",
"reviewsPerProperty": 5,
"reviewsSort": "rating",
"maxItems": 25
}

Dorm prices as a table — one row per room type, with its capacity, rate plan and pre-discount price:

{
"mode": "rooms",
"propertyUrls": ["98483", "52411"],
"daysAhead": 14,
"numNights": 2,
"numberOfGuests": 2,
"maxItems": 0
}

What does a Hostelworld row look like?

A hostel row, from mode: "search" with profiles and the dates' prices on (long text truncated here):

{
"id": 98483,
"name": "Avenue Hostel and Suites",
"url": "https://www.hostelworld.com/hostels/p/98483/avenue-hostel-and-suites/",
"city": "Lisbon",
"country": "Portugal",
"currency": "EUR",
"pricePerNight": "17.93",
"dormPricePerNight": "17.93",
"privatePricePerNight": "24.05",
"averagePricePerNight": "17.91",
"averageDormPricePerNight": "17.91",
"averagePrivatePricePerNight": "46.17",
"originalPricePerNight": "24.87",
"originalDormPricePerNight": "24.87",
"originalPrivatePricePerNight": "64.12",
"discountPercent": 28.0,
"type": "HOSTEL",
"overallRating": 91,
"numberOfRatings": "2154",
"ratingValueForMoney": 89, "ratingSecurity": 93, "ratingLocation": 91,
"ratingStaff": 94, "ratingAtmosphere": 86, "ratingCleanliness": 92,
"ratingFacilities": 88,
"district": null,
"address1": "Rua Rodrigues Sampaio nº138",
"address2": null,
"latitude": 38.724085,
"longitude": -9.147335,
"distanceFromCentreKm": 1.35,
"distanceUnits": "km",
"starRating": 0,
"overview": "More than an Hostel, AVENUE is a home for travelers where …",
"isFeatured": true, "isPromoted": false, "isNew": false,
"hostelworldRecommends": false,
"freeCancellationAvailable": false,
"freeCancellationAvailableUntil": "2026-10-14T13:46:09+01:00",
"promotions": ["ALLPLATFORMS -20%", "MOBILEPROMOTION -10%"],
"images": ["https://a.hwstatic.com/propertyimages/9/98483/wmoautdkocyrrcmjhmsc.jpg"],
"imagesGallery": ["https://a.hwstatic.com/image/upload/f_auto,q_auto/v1/propertyimages/9/98483/wmoautdkocyrrcmjhmsc"],
"facilities": ["ATM", "Bar", "Board games", "…"],
"facilitiesFree": ["Free City Maps", "Free WiFi", "Free Internet Access", "Free City Tour"],
"facilitiesPaid": ["Towels for hire"],
// profile columns — `includeDetails`, or mode `properties`
"description": "More than an Hostel, AVENUE is a home for travelers where …",
"directions": "From airport by subway: 1. Take the Metro (Red line) …",
"hostelworldSays": null,
"checkInFrom": "15:00",
"checkInUntil": "23:00",
"checkOutUntil": "12:00",
"maxGuestsPerBooking": 8,
"policies": ["Age Restriction", "Non Smoking", "Taxes Not Included"],
"paymentMethods": ["Electron", "JCB", "Maestro", "Mastercard", "Visa", "VisaDebit"],
"cancellationPolicy": "This property has a 2 day cancellation policy. …",
"cancellationPolicyDays": 2,
"freeCancellationDaysInAdvance": 3,
"thingsToNote": "AVENUE Hostel & Suites Policies and Conditions: …",
"taxesIncluded": false,
"taxes": ["City Tax 4 per person per night"],
"feesIncluded": true,
"depositPercentage": 15,
"videos": [],
// availability columns — `includeAvailability`, or mode `availability`
"checkInDate": "2026-10-30",
"nights": 2,
"guests": 2,
"vat": 0,
"cancellationOptions": ["Free Cancellation rates", "Non-refundable rate"],
"dormTypesAvailable": 3,
"privateTypesAvailable": 4,
"bedsAvailable": 87
}

A room row, from mode: "rooms" — one per dorm or private room on offer:

{
"id": 98483,
"name": "Avenue Hostel and Suites",
"url": "https://www.hostelworld.com/hostels/p/98483/avenue-hostel-and-suites/",
"city": "Lisbon",
"country": "Portugal",
"checkInDate": "2026-10-30", "nights": 2, "guests": 2,
"roomId": 547681,
"roomName": "Basic 4 Bed Mixed Dorm",
"roomLabel": "Bed in 4-Bed Mixed Dormitory Room",
"roomCategory": "dorm",
"roomType": "Mixed Dorm",
"roomGrade": "Basic",
"capacity": 4,
"isEnsuite": false,
"bedsAvailable": 12,
"roomsAvailable": null,
"currency": "EUR",
"pricePerNight": "20.01",
"averagePricePerNight": "20.18",
"originalAveragePricePerNight": "28.03",
"discountPercent": 28.0,
"totalPrice": "40.36",
"originalTotalPrice": "56.06",
"ratePlanCount": 2,
"cheapestPaymentOption": "Non-refundable",
"paymentOptions": ["Deposit only", "Non-refundable"],
"roomDescription": "Dormitory style and range in size from 2 beds upwards. …",
"roomImages": ["https://a.hwstatic.com/image/upload/f_auto,q_auto/v1/propertyimages/9/98483/cgeliftecjhyzzpm1akq"]
}

A review row, from mode: "reviews" — one per review, with the hostel's review mix on each so the export reads on its own:

{
"id": "98483",
"name": "Avenue Hostel and Suites",
"url": "https://www.hostelworld.com/hostels/p/98483/avenue-hostel-and-suites/",
"city": "Lisbon",
"country": "Portugal",
"propertyReviewCount": 348,
"propertyPositiveReviews": 138,
"propertyNegativeReviews": 5,
"propertySoloPercentage": 89.13,
"propertyCouplesPercentage": 8.7,
"propertyGroupsPercentage": 2.17,
"reviewId": "16698211",
"reviewDate": "2026-10-11",
"reviewNotes": "very good for the price. But because shower/toilet are shared …",
"reviewLanguage": "en",
"isMachineTranslated": true,
"ownerComment": null,
"reviewRatingOverall": 91,
"reviewRatingValueForMoney": 100,
"reviewRatingSafety": 100,
"reviewRatingLocation": 100,
"reviewRatingStaff": 100,
"reviewRatingAtmosphere": 80,
"reviewRatingCleanliness": 80,
"reviewRatingFacilities": 80,
"guestType": "MALE",
"guestAge": "25-30",
"tripTypes": ["REGULARVACATION"],
"guestNickname": "aFWFJgaI0yG0ZcCf",
"guestGender": "Female",
"guestNationality": "France",
"guestReviewCount": 1
}

Which fields are in each row?

Every row of a run has the same columns, in the same order. A null means Hostelworld does not offer that value for that hostel; a column that is absent is one the mode could never fill. Each grain has its own view in the dataset tab, so the export has the right headers without being trimmed by hand.

ColumnsModes that have them
identity: id, name, url, city, countryall five
listing, ratings, lowest prices, flags, images, facilitiessearch, properties, and the price columns in availability
profile (description … videos)properties, and search with includeDetails
availability (average and pre-discount prices, discountPercent, promotions, checkInDate … bedsAvailable)availability, and search with includeAvailability
room (roomId … roomImages)rooms
review (reviewId … guestReviewCount)reviews

Hostel columns

FieldTypeDescription
id, name, typetextHostelworld property ID, name, and property type (e.g. HOSTEL)
urllinkProperty page on hostelworld.com. Built from the name's slug when the hostel came from a search; from the ID alone (/hostels/p/98483/hostel/, which redirects to the canonical page) in the modes whose payload carries no name
overallRatingnumberOverall score on Hostelworld's 0-100 scale
numberOfRatingstextHow many guest ratings the score is based on
ratingValueForMoney, ratingSecurity, ratingLocation, ratingStaff, ratingAtmosphere, ratingCleanliness, ratingFacilitiesnumberThe seven sub-scores, same 0-100 scale. Hostelworld sends these under two different sets of names depending on the endpoint; both are mapped onto these columns
currencytextCurrency of every price on the row
pricePerNighttextLowest nightly price across all room types
dormPricePerNight / privatePricePerNighttextLowest dorm bed / private room nightly price
city, country, districttextCity, country, and the neighbourhood name when Hostelworld assigns one (31 of 82 Lisbon properties)
address1, address2textStreet address lines
latitude, longitudenumberCoordinates
distanceFromCentreKm / distanceUnitsnumber / textDistance from the city centre and its unit
starRatingnumberHotel-style star rating (0 for most hostels)
overviewtextShort property blurb, HTML stripped
isFeatured / isPromoted / isNew / hostelworldRecommendsbooleanPlacement and editorial flags
freeCancellationAvailable / freeCancellationAvailableUntilboolean / textFree-cancellation eligibility and deadline
images / imagesGalleryarrayFull-size property photo URLs and the extended gallery
facilitiesarrayEvery facility, as a flat sorted list of names
facilitiesFree / facilitiesPaidarrayThe facilities Hostelworld files under Free and Available for a Fee, so "Towels for hire" does not read as a free towel

Profile columns — includeDetails, or mode properties

FieldTypeDescription
description / directions / hostelworldSaystextThe hostel's own description, how to get there, and Hostelworld's editorial note (set on 2 of 12 sampled hostels)
checkInFrom / checkInUntil / checkOutUntiltextCheck-in window and latest check-out, as HH:MM
maxGuestsPerBookingnumberLargest party Hostelworld will take in one booking
policiesarrayHouse policies, e.g. Age Restriction, Non Smoking
paymentMethodsarrayCards accepted at the property
cancellationPolicy / cancellationPolicyDaystext / numberThe deposit-rate cancellation terms and their notice period in days
freeCancellationDaysInAdvancenumberHow far ahead a free cancellation has to be made
thingsToNotetextThe property's own long-form conditions
taxesIncluded / taxesboolean / arrayWhether tax is in the price, and each tax as City Tax 4 per person per night
feesIncludedbooleanWhether property fees are in the price
depositPercentagenumberDeposit taken at booking, as a percentage
videosarrayProperty video URLs (YouTube), when the hostel has any

Availability columns — includeAvailability, or mode availability

Only the availability request carries these. The search listing has keys of its own for the average, pre-discount and promotion figures and they are empty on every property measured (762 across six cities, dated and undated), so a mode that makes no availability request does not carry the columns at all rather than carrying eight permanent nulls.

FieldTypeDescription
checkInDate / nights / gueststext / numberWhat the prices on this row are for, so an export says so without its input
averagePricePerNight / averageDormPricePerNight / averagePrivatePricePerNighttextAverage nightly price over the stay. Needs availability — the search listing leaves these null even when dates are given (measured on 762 properties across six cities)
originalPricePerNight / originalDormPricePerNight / originalPrivatePricePerNighttextPre-discount price of the average nightly price above, when a promotion applies. Comes from the matching rate plan, so it pairs with average…, not with the lowest price — Hostelworld publishes no pre-discount figure for the lowest single night
discountPercentnumberTotal discount on that rate plan, stacked promotions included (20% + 10% = 28%). Needs availability
promotionsarrayActive promotions as NAME -20%, in the order they stack. Needs availability — the search listing's own promotions field is empty on every property measured
vatnumberVAT percentage applied
cancellationOptionsarrayThe rate-plan families on offer, e.g. Free Cancellation rates
dormTypesAvailable / privateTypesAvailablenumberHow many dorm and private room types are bookable
bedsAvailablenumberBeds free across all of them

Room columns — mode rooms

FieldTypeDescription
roomId, roomName, roomLabeltextHostelworld's room ID, its name, and the label the site shows
roomCategorytextdorm or private
roomType / roomGradetexte.g. Mixed Dorm / Basic, Standard, Deluxe
capacity / isEnsuitenumber / booleanBeds in the room, and whether the bathroom is private
bedsAvailable / roomsAvailablenumberFree beds in this room type, and free rooms where Hostelworld reports it
pricePerNighttextThe room's own lowest nightly price
averagePricePerNight / originalAveragePricePerNighttextAverage per night over the stay on the cheapest rate plan, and its pre-discount price
totalPrice / originalTotalPricetextThe whole stay on that plan, before and after discount
discountPercentnumberThat plan's total discount
ratePlanCount / cheapestPaymentOption / paymentOptionsnumber / text / arrayHow many rate plans the room has, which one the prices above are from, and all of their payment terms — the cheapest is often the non-refundable one, so the price does not travel without it
roomDescription / roomImagestext / arrayThe room's description and photos

Review columns — mode reviews

FieldTypeDescription
reviewId / reviewDatetextReview ID and the date it was left
reviewNotestextWhat the guest wrote
reviewLanguage / isMachineTranslatedtext / booleanOriginal language, and whether Hostelworld translated it
ownerCommenttextThe property's reply (3 of 150 sampled reviews have one)
reviewRatingOverallnumberThe review's own score, 0-100 — the mean of the seven below
reviewRatingValueForMoney, reviewRatingSafety, reviewRatingLocation, reviewRatingStaff, reviewRatingAtmosphere, reviewRatingCleanliness, reviewRatingFacilitiesnumberThe reviewer's sub-scores
guestTypetextThe traveller type Hostelworld records for the booking: MALE or FEMALE (a solo traveller), COUPLE, MIXEDGROUP
guestAge / tripTypestext / arrayAge band and trip purpose, e.g. 25-30, REGULARVACATION
guestNickname / guestGender / guestNationality / guestReviewCounttext / numberThe reviewer's profile. guestGender is self-reported and null on about two thirds of reviews
propertyReviewCountnumberHow many reviews the hostel has in total, so you can tell a sample from the lot
propertyPositiveReviews / propertyNegativeReviewsnumberHostelworld's own positive/negative split for the hostel
propertySoloPercentage / propertyCouplesPercentage / propertyGroupsPercentagenumberWho stays there, as a percentage of its reviewers

Which facility categories does Hostelworld report?

Hostelworld groups facilities into categories. The grouping is organisational — a bar is filed under Food & Drinks and a lift under Accessibility — so facilities flattens it into one sorted list of names you can filter on directly, e.g. "Bar" in facilities.

These are the fifteen categories seen across twelve hostels in three cities:

CategoryCategoryCategory
GeneralBedroomKitchen
ServicesFood & DrinksLaundry
EntertainmentSafety & SecurityOutdoors
Social AreasWellnessAccessibility
FreeAvailable for a FeeHostelworld Policies

Two of them change what a facility costs, which a flat list would lose, so they keep their own columns: facilitiesFree and facilitiesPaid. That is how you can tell free WiFi from Towels for hire.


What do Hostelworld's price and rating terms mean?

  • Dorm vs private — a dorm price is per bed in a shared room; a private price is for the whole room at the party size you asked for. dormPricePerNight and privatePricePerNight are the cheapest of each, and pricePerNight is the cheaper of the two. Measured: a 2-bed private at 2 guests prices 21.55 per person and 43.10 for the room, and the room columns carry the 43.10.
  • Lowest vs average vs original — lowest is the cheapest single night found, average is the mean across the nights of your stay, and original is the pre-discount price shown when a promotion applies. All three are strings with the currency in currency.
  • Rate plans — one room is sold on several plans (deposit-only, non-refundable, free cancellation), each with its own price. The average…, total… and discountPercent columns come from the cheapest plan, which is Hostelworld's own convention for a "lowest" price — and often the non-refundable one, so cheapestPaymentOption says which plan it is.
  • 0-100 rating — Hostelworld scores properties out of 100, not out of 5 or 10. 94 means 9.4/10 in the app's display.
  • starRating — the hotel-style star count, which is 0 for most hostels. Use overallRating for quality, not this.
  • Distance from centre — straight-line distance from the city centre, in the unit given by distanceUnits (km).

Pricing — pay per result

This actor uses pay-per-event pricing: you pay only for the rows it delivers.

Prices below take effect on 26 October 2026. Until then this Actor charges the previous two-event pricing — $1.50 per 1,000 hostels and $1.50 per 1,000 profiles — and room availability and reviews are not billed at all, because those two events do not exist in the current pricing entry yet.

EventPrice (Bronze)When charged
Hostel (listing)$1.50 per 1,000Every hostel returned, in every mode.
Hostel profile+$3.00 per 1,000Only when profiles were asked for and the profile came back.
Room and dorm availability+$3.00 per 1,000Only when availability was asked for and rooms came back.
Guest review+$1.00 per 1,000 reviewsPer review delivered — so the count is yours to set.

Prices are per plan tier; Free pays more and Silver/Gold less. What a run costs per 1,000 hostels, at Bronze:

RunCost per 1,000 hostels
search, profiles off$1.50
search, default (profiles on)$4.50
properties$4.50
availability$4.50
rooms (same request as availability, a row per room type)$4.50
reviews, 10 reviews each$11.50
reviews, 3 reviews each$4.50

Charges are per hostel, not per row. A rooms run over 1,000 hostels delivers several thousand rows and is charged 1,000 listing rows and 1,000 availability requests — the number of room types a hostel happens to have does not change the bill. Reviews are the one exception, priced per review, which is what reviewsPerProperty sets.

Each slice is charged on its own, and only when it arrives. Asking for reviews does not bill you for profiles: a reviews run over two hostels at three reviews each charges two listing rows and six reviews, nothing more. A profile or availability call that fails leaves its slice off the row and is not billed.

Reviews are the one slice priced per item rather than per hostel, so reviewsPerProperty is your cost dial. The default of 10 is one request per hostel; one sampled hostel had 348 reviews available, which on its own would be $0.35 at Bronze.


How do I run it from the API?

Run it programmatically with the Apify API:

curl -X POST "https://api.apify.com/v2/acts/hostelworld-api-scraper/runs?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"mode": "search",
"q": "Lisbon",
"maxItems": 50,
"numberOfGuests": 2,
"numNights": 2,
"currency": "EUR",
"includeDetails": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}'

Or with the Apify CLI: apify call hostelworld-api-scraper -i input.json -o.


FAQ

Do I need a Hostelworld account or API key? No. The actor talks to Hostelworld's mobile API for you — you only need an Apify account.

How do I get dorm and private room prices per room type? Use mode: "rooms" — one row per dorm or private room, with its capacity, rate plan, pre-discount price and photos. mode: "availability" makes the same request for the same price and gives you one row per hostel instead, with the lowest dorm and private prices. Either needs a date: set dateStart, or daysAhead for a scheduled run, and it defaults to tomorrow if you set neither. Without a date you still get the listing's pricePerNight, dormPricePerNight and privatePricePerNight — but not the average-price, pre-discount, discountPercent or promotion columns, which only the availability payload carries.

Can I scrape hostels I already know, without searching? Yes, in every mode. Put numeric IDs or hostelworld.com property URLs in propertyUrls and pick the mode you want. No location search runs, so nothing in the listing is fetched or billed. Note that name, city and country are then null in rooms and reviews rows — neither payload carries the hostel's name — but url is always there to join on, and mode: "properties" gives you the names.

Can I scrape a whole city, not just the first page? Yes. Hostelworld's city endpoint returns the city's entire property list in one response, so a run with maxItems: 0 gets every property in that city. There is no page-by-page crawl to stall halfway.

Does it return guest reviews? Yes — mode: "reviews" returns one row per review, with its per-category ratings and the traveller who wrote it. It takes a location as happily as a list of IDs, so {"mode": "reviews", "q": "Lisbon"} collects reviews across a whole city. Reviews are billed per review and reviewsPerProperty sets how many (10 by default, newest first; reviewsSort: "rating" gives you the worst first). Asking for reviews does not also charge you for profiles.

Can I schedule it? Yes. Use Apify's Schedules to run it hourly or daily and append to the same dataset — the usual setup for tracking hostel prices for a city over time.

How is cost bounded? Set maxItems — it is a hard ceiling on the number of hostels, which is the billing unit, and every charge is per hostel except reviews, which are per review and capped by reviewsPerProperty. In rooms and reviews one hostel is many rows, so the row count can exceed maxItems while the bill cannot. The run also stops as soon as your max total charge is spent, and says so in its status message rather than looking like it ran out of hostels. When you paste a long list of IDs, raise maxItems or set it to 0.

I got a wall of HTTP 400 errors — what now? You should not any more: the four things Hostelworld refuses with a 400 are all checked, fixed or explained before the first request.

What you sendWhat used to happenWhat happens now
currency: "usd"400 on every request (it wants upper case), empty datasetsent as USD
currency: "eurr"samerefused before the run starts, with the reason
numNights: 31400 on every availability requestthe input tops out at 30, the measured ceiling
dateStart in the past400 on every availability requestrefused before the run starts, pointing you at daysAhead
reviewsPerProperty past a hostel's review countthe page after the last one 400s and every review of that hostel was lostread as "no more pages"; you get all it has

And if the upstream refuses something we have not seen, the run stops at the first hostel rather than repeating it for every one, and the status message carries Hostelworld's own words — rather than one log line per hostel and an empty dataset. The same applies when three hostels in a row fail the same way for any other reason. Nothing is delivered or charged in either case. A 400 and a 404 are answers, not blips, so neither is retried; 403, 429, 5xx and Cloudflare's 52x are retried with backoff, and a Retry-After the server sends is obeyed.

What happens if one property fails? Profile, availability and review fetches are best-effort per hostel: a failure leaves that hostel out and the run continues, so one bad ID never kills the run. Nothing is delivered or charged for it, and the run's status message names the IDs that were skipped — a hostel whose request failed and one that simply has no reviews yet are reported differently, because what you do next is different.

Do I need a proxy? A proxy is recommended for reliable runs; set proxyConfiguration (Residential is safest for geo-restricted or bot-protected sites).


How does it work?

The actor impersonates Hostelworld's official Android app and calls the same mobile API endpoints it does: autocomplete to resolve your location, the city properties endpoint to list it, then per-hostel profile, availability and reviews. The three per-hostel endpoints are addressed by property ID alone, which is why a run on propertyUrls can skip the search entirely. Each response is normalised into the flat rows above — the mode decides the grain, nothing is nested, and no column is a column Hostelworld leaves empty on every hostel. No browser, no HTML scraping — just clean, structured data.


Good to know

  • Scrape only public listing data and respect Hostelworld.com's Terms of Service and robots policy.
  • For personal data (reviews carry reviewer details), comply with GDPR/CCPA and applicable law — you are the data controller.
  • Hostels are de-duplicated by property id before anything is charged, so the same hostel is never billed twice — including when a search ranking repeats it or your own list contains it twice.
  • rooms and reviews rows share their hostel's id by design: the row key is id plus roomId or reviewId.

Travel & booking toolkit

Part of the Travel & booking toolkit — search and pricing data across accommodation, transport, and travel-planning sites worldwide:

Did you find this useful?

Rate this actor on Apify! Your feedback helps other users find it and helps us keep improving it.