Hostelworld Scraper at a glance
Hostelworld Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its output documents 97 fields, including type, propertyid, property, type and url, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.10 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Web data
- Pricing
- $1.80 per 1,000 results (Free plan), from $1.10 on paid plans
- Output
- 97 documented fields · JSON, CSV, Excel
- Inputs
- 29 options
What Hostelworld Scraper can do
- Three ways in. Search a city by name (in any property type), paste property or city-search URLs, or give numeric property IDs. No URL building needed.
- One row, everything inside. Each property carries its card data plus optional full details, the room board with per-night prices, its guest reviews and its Linkups events.
- Reviews-only mode. Flip reviewsOnly and the dataset holds nothing but review rows, full text, per-category ratings, traveller details and owner replies.
- Linkups events. Pub crawls, city walks and meetups hosted at each property, inside a date window you control.
- Who's going. The traveller nationality mix heading to each property, as shown on the site.
- Sorted output. Re-order listings by price, rating, review count or name, the website's own order is preserved on request.
Choose what to collect
These inputs let you configure Hostelworld Scraper - Hostels, Hotels, Prices, Reviews & Events. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Search mode finds hostels, hotels and other stays in the cities you name. URL mode accepts pasted property pages, or city search pages which the actor walks page by page. |
locationsarray | Cities to search, one per line. Examples: Berlin, Lisbon Portugal, Bangkok. |
propertyTypestring | What to search for in the chosen cities. |
districtstring | Narrow the search to one district, e.g. kreuzberg in Berlin. Leave empty for the whole city. |
sortBystring | Order in which properties from the search are returned. |
startUrlsarray | Property pages (…/hostels/p/703/circus-hostel/), the mobile share form (…/st/hostel/703/…), or city search pages for any property type (…/hostels/europe/germany/berlin/, …/hotels/…, with or without ?page=N). Search pages walk forward page by page. |
propertyIdsarray | Optionally add numeric Hostelworld property IDs directly (the number in /p/703/). Works in both modes. |
Show 22 more inputs
| Input | What it controls |
|---|---|
maxItemsinteger | Maximum rows to save across the whole run (property rows, or review rows in reviews-only output). The run can return fewer when the site has fewer matches. |
maxPagesinteger | Advanced safety bound for search-page walking, 1-500 (leave empty for the internal bound; listings always stop at Max items first). |
includeDetailsboolean | Fetch the full detail page for every listing: description, facilities, room board with prices, policies, check-in, payment methods, address and directions, photos, business registration. Charged per property. |
includeReviewsboolean | Collect guest reviews with full text, per-category ratings, traveller details and owner replies. Charged per review. |
maxReviewsPerPropertyinteger | Cap on reviews collected from each property. |
reviewSortstring | Order of reviews returned for each property. |
allLanguagesboolean | Include machine-translated reviews written in other languages, not just English. |
includeEventsboolean | Collect Linkups events (hostel gatherings: pub crawls, city walks, meetups) hosted at each property, inside Events window. Charged per event. |
eventsDaysAheadinteger | How many days ahead to look for Linkups events. |
eventsPageSizeinteger | Cap on Linkups events collected from each property. |
includePeopleboolean | Add the travellers heading to each property in the events window (nationality mix and avatars, as shown on the site). |
reviewsOnlyboolean | When ON, the dataset holds ONLY review rows (one row per review with property fields denormalized) and property rows are not emitted. Max items then counts review rows. |
currencystring | ISO code prices are returned in. |
resumeFromRunIdstring | Optional run or dataset ID from a previous run: rows already collected there are skipped, so this run returns only the delta. Cannot be combined with an existing Incremental mode baseline for the same scope. |
incrementalModeboolean | Remember the last run for this exact scope (state key below) and return only NEW/UPDATED rows next time: changes to prices, ratings, reviews counts, details text, rooms, facilities, events or people drive UPDATED; the availability flag, booked-today counter, rotating image URLs and scrape timestamps never do (see Ignore fields below). UNCHANGED rows are neither saved nor charged. |
stateKeystring | Optional name for the incremental baseline. Leave empty to key it automatically on this run's scope. |
emitUnchangedboolean | Incremental mode only: also save rows that did not change since the last run (classified UNCHANGED). |
emitExpiredboolean | Incremental mode only: also save rows from the last run that this run could not find anymore (classified EXPIRED). Only when the full scope was scanned. |
ignoreFieldsForChangesarray | Advanced. Field names that must never mark a row UPDATED in incremental mode (telemetry you do not care about). Availability flag, booked-today counter and scraped-at timestamp are already ignored by default. |
mcpConnectorsarray | Optionally send scraped rows into connected apps via Model Context Protocol connectors. Authorize a connector under Apify > Settings > API & Integrations, then select it here. Supported: Notion, Linear, Airtable, and Apify. |
notionParentPageUrlstring | URL or id of the Notion page under which result pages are created. Required for Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on how many rows are written to each selected connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
typetypepropertyIdpropertyIdpropertyNameProperty (text)propertyTypeType (text)propertyUrlURL (link)addressaddressaddressFullAddress (text)cityCity (text)countryCountry (text)avgRatingRating (number)numberReviewsReviews (number)cityCenterDistanceKmcityCenterDistanceKmShow 85 more fields
latitudelatitudelongitudelongitudesharedMinPriceDorm from (number)privateMinPricePrivate from (number)lowestPricePerNightlowestPricePerNightlowestDormPricePerNightlowestDormPricePerNightlowestPrivatePricePerNightlowestPrivatePricePerNightfreeCancellationAvailablefreeCancellationAvailablepromotionspromotionsvatIncludedvatIncludedcancellationPoliciesListcancellationPoliciesListcurrencyCurrency (text)hasAvailabilityhasAvailabilitycheckInFromCheck-in from (number)checkInUntilcheckInUntillatestCheckOutCheckout (text)depositPercentagedepositPercentagefreeCancellationfreeCancellationcancellationPolicycancellationPolicypaymentMethodspaymentMethodsfacilitiesFacilities (text)roomsRooms (text)maxNumberOfGuestsPerBookingmaxNumberOfGuestsPerBookingstarRatingstarRatingtimesBookedTodaytimesBookedTodaybusinessRegNumberbusinessRegNumberbestForbestFordescriptiondescriptionhostelworldSayshostelworldSaysdirectionsdirectionsthingsToNotethingsToNotepeopleGoingCountPeople going (number)peopleGoingpeopleGoingeventsCountEvents (number)eventseventsreviewsCountReviews saved (number)reviewsSummaryreviewsSummarybadgesbadgesimageUrlsimageUrlsheroImageUrlsheroImageUrlsintrointrosustainabilitysustainabilitysourceModeSource mode (text)sourceQuerysourceQuerysourceUrlsourceUrlscrapedAtScraped at (date)changeTypechangeTypechangedFieldschangedFieldsfirstSeenAtfirstSeenAtlastSeenAtlastSeenAtreviews.reviewIdReview ID (text)reviews.reviewDateDate (date)reviews.ratingOverallOverall (number)reviews.ratingValuereviews.ratingValuereviews.ratingSafetyreviews.ratingSafetyreviews.ratingLocationreviews.ratingLocationreviews.ratingStaffreviews.ratingStaffreviews.ratingAtmospherereviews.ratingAtmospherereviews.ratingCleanlinessreviews.ratingCleanlinessreviews.ratingFacilitiesreviews.ratingFacilitiesreviews.reviewTextReview (text)reviews.likedreviews.likedreviews.dislikedreviews.dislikedreviews.ownerReplyOwner reply (text)reviews.recommendedreviews.recommendedreviews.languageCodereviews.languageCodereviews.isMachineTranslatedreviews.isMachineTranslatedreviews.reviewerNicknameReviewer (text)reviews.reviewerNumberOfReviewsreviews.reviewerNumberOfReviewsreviews.reviewerNationalityNationality (text)reviews.travellerGroupTypeGroup (text)reviews.travellerAgeRangereviews.travellerAgeRangeevents.eventIdEvent ID (text)events.kindKind (text)events.nameEvent (text)events.descriptionevents.descriptionevents.categoryevents.categoryevents.startTimeStarts (text)events.endTimeevents.endTimeevents.locationLocation (text)events.priceevents.priceevents.totalParticipantsParticipants (number)events.isRecurringevents.isRecurringevents.imageUrlevents.imageUrlreviewIdReview ID (text)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"type": "property",
"propertyId": 703,
"propertyName": "Circus Hostel",
"propertyType": "HOSTEL",
"propertyUrl": "https://www.hostelworld.com/hostels/p/703/circus-hostel/",
"city": "Berlin",
"country": "Germany",
"addressFull": "Weinbergsweg 1a, 10119",
"latitude": 52.530147,
"longitude": 13.401918,
"avgRating": 9.26,
"numberReviews": 8087,
"sharedMinPrice": 21.24,
"privateMinPrice": 149.44,
"currency": "EUR",
"checkInFrom": 0,
"latestCheckOut": "12:00",
"facilities": [
"Free WiFi",
"Luggage Storage",
"Self-Catering Kitchen"
],
"rooms": [
{
"roomType": "4 Bed Mixed Dorm",
"category": "dorms",
"capacity": 4,
"pricePerNight": 36.11
}
],
"reviewsCount": 20,
"reviews": [
{
"review_reviewId": "16686493",
"review_ratingOverall": 5.1,
"review_reviewText": "…",
"review_ownerReply": null
}
],
"eventsCount": 6,
"events": [
{
"eventId": 5487030,
"name": "BVG Crawl",
"totalParticipants": 12
}
],
"peopleGoingCount": 30,
"reviewsSummary": {
"positiveCount": 251,
"negativeCount": 5,
"soloPercentage": 91.24
},
"scrapedAt": "2026-10-07T12:00:00+00:00"
}Ways to use this data
- Hostel and hotel market research: track dorm and private prices, ratings and review volumes across cities and property types.
- Revenue and competitor monitoring: watch room boards, promotions and free-cancellation terms for a set of properties on a schedule.
- Guest-experience analysis: collect full review text with per-category ratings (staff, security, location, atmosphere, cleanliness, facilities, value) and owner replies.
- Event-led travel tools: surface Linkups events at hostels in the coming days, with participant counts.
- Travel apps and AI agents: feed clean JSON into your booking assistant, map app or MCP-connected workspace.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Hostelworld Scraper return?
Hostelworld Scraper returns 97 documented fields, including type, propertyid, property, type, url, address, address and city. Availability of each field depends on the source page and the selected mode.
How much does Hostelworld Scraper cost?
It costs $1.80 per 1,000 results on the Apify Free plan and from $1.10 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only the reviews of a property?
Yes. Turn on Output reviews only (reviewsOnly) and the dataset contains nothing but review rows, each with the property's name, city and ratings denormalized onto it. Use it together with reviewSort and maxReviewsPerProperty.
Can I get only new or changed properties on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated properties, and unchanged ones are not billed.
Why did my run fail instead of returning an empty dataset?
If the site refuses every request, the run stops with a clear message so "no matches" is never confused with "nothing could be read". Run it again in a few minutes. If only some sources could be read, you still get what was found.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
