Hostelworld Reviews Scraper — Hostel Guest Reviews avatar

Hostelworld Reviews Scraper — Hostel Guest Reviews

Pricing

$3.00 / 1,000 review rows

Go to Apify Store
Hostelworld Reviews Scraper — Hostel Guest Reviews

Hostelworld Reviews Scraper — Hostel Guest Reviews

Every Hostelworld review of any hostel: the 0-100 overall score with its seven sub-ratings, the guest's text, the owner's reply, group type, age band, trip type and nationality. Give Hostelworld URLs or property ids. No key, no browser, no login — Hostelworld's own public JSON API. Pay per review.

Pricing

$3.00 / 1,000 review rows

Rating

0.0

(0)

Developer

Tedj MEABIOU

Tedj MEABIOU

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 days ago

Last modified

Share

This hostelworld reviews scraper turns any hostel on Hostelworld into structured hostel guest reviews: the 0-100 overall score with its seven sub-ratings, the guest's own words, the hostel's public reply, who was travelling and where they came from. Point it at Hostelworld URLs or property ids and it returns every review the site lists, newest first — hostel reviews as rows you can filter, chart and diff, not a page you have to read. Because it reads Hostelworld's own public JSON API there is no browser, no login and no key, so budget travel reviews arrive at a few hundred rows a second and review monitoring on a daily schedule costs cents.

Last verified working: 2026-08-29.

What does the Hostelworld reviews scraper do?

It reads one endpoint that Hostelworld's own property pages call, walks its pagination for you and flattens each record into a row:

  • The 0-100 score every Hostelworld guest gives, plus the seven sub-scores behind it — value, safety, location, staff, atmosphere, cleanliness, facilities — and the same overall score converted to the 0-5 star scale everyone else uses.
  • The review text, its language and whether Hostelworld machine-translated it.
  • The owner reply, when the hostel answered.
  • Who was travelling: solo male or female, couple, all-female group, all-male group, mixed group; the age band (18-24, 25-30, 31-40, 41+); and the trip type (a gap year, a weekend away, a round-the-world trip, a college break, a regular vacation).
  • The reviewer's nickname, nationality and how many reviews they have written.
  • A free per-hostel context row: name, type, city, country, coordinates, aggregate hostel ratings, facilities, and the share of reviewers who came solo, as a couple or in a group.

Every filter runs before billing, so a run that keeps only the complaints pays only for the complaints.

Hostelworld reviews by URL or property id

Two ways in, and neither costs a lookup request:

  • startUrls — any Hostelworld property page. The modern form is https://www.hostelworld.com/hostels/p/15529/home-lisbon-hostel/; the older https://www.hostelworld.com/pwa/hosteldetails.php/Home-Lisbon-Hostel/Lisbon/15529 works too. Every URL form Hostelworld serves carries the numeric id, so the actor never has to load a page to find it. A Hostelworld URL that somehow has no id is read once for the id its page carries.
  • propertyIds — the bare number, e.g. 15529. This is what an earlier run's property_id column gives you, so a saved list of hostels re-runs with no resolution at all.

A URL, its older URL form and its bare id are recognised as the same hostel: one of them is scraped and the rest come back as free duplicate status rows.

Hostelworld negative reviews without paying for the happy ones

Hostels live and die on a handful of recurring complaints — the 4 a.m. door, the shower queue, the locker that will not close. Set reviewsSort to Lowest rated first and maxRating to 70 and the worst reviews arrive on page one and nothing else is charged. minRating is the other end of the same 0-100 scale if you want to study what a hostel is loved for. Both filters run in the actor before the charge, so hostelworld negative reviews cost exactly what they weigh.

Hostel review data for operators, OTAs and analysts

  • Hostel operators: read the reviews your competitors get, by sub-score. sub_ratings tells you whether you are losing on cleanliness or on atmosphere, which are very different fixes.
  • Hostel reputation management: watch the last 30 days across a portfolio with sinceDate: "30 days" and alert on anything under 70.
  • OTAs and metasearch: hostel review data for supply pages, with a rating you can normalise (rating_5) against Booking's 1-10 or TripAdvisor's 1-5.
  • Researchers and analysts: backpacker reviews carry a group type, an age band and a nationality, which almost no other review source publishes. That is a demand-side dataset, not just sentiment.
  • AI teams: a clean, dated, per-property corpus for hostel sentiment analysis and RAG over hostel guest feedback.

Input

FieldTypeDefaultWhat it does
startUrlsarray[]Hostelworld property URLs. Any form; the id is read from the URL.
propertyIdsarray[]Hostelworld's numeric property ids, e.g. 15529.
maxReviewsPerPropertyinteger1000 = every review the hostel has. N = the first N in the chosen order. The main cost control.
reviewsSortstring-date-date newest first, date oldest first, rating lowest rated first, -rating highest rated first.
minRatinginteger0Keep only reviews scoring at or above this on the 0-100 scale. 0 = no floor.
maxRatinginteger0Keep only reviews scoring at or below it. 0 = no ceiling. 70 is a complaints feed.
requireTextbooleanfalseDrop score-only reviews before billing.
groupTypesarray[]Keep only MALE, FEMALE, COUPLE, ALLFEMALEGROUP, ALLMALEGROUP, MIXEDGROUP or FAMILY. Friendly spellings (solo_female, mixed_group) work.
sinceDatestring""YYYY-MM-DD or relative (30 days, 2 weeks, 6 months).
includePropertyRowbooleantrueEmit the free per-hostel context row.
sessionsinteger2Parallel proxy sessions (egress IPs).
perIpnumber1Requests per second per session.
proxyConfigurationobjectApify datacenterDatacenter proxy is enough; residential works and costs more.

Example: a daily complaints feed for one hostel

{
"propertyIds": ["15529"],
"reviewsSort": "rating",
"maxRating": 70,
"requireText": true,
"sinceDate": "30 days",
"maxReviewsPerProperty": 0,
"includePropertyRow": true,
"proxyConfiguration": { "useApifyProxy": true }
}

Lowest-rated first, nothing above 70 charged, nothing older than a month kept. On a quiet month this bills a handful of rows.

Example: the full corpus of a competitor set

{
"startUrls": [
"https://www.hostelworld.com/hostels/p/15529/home-lisbon-hostel/",
"https://www.hostelworld.com/pwa/hosteldetails.php/Yes-Lisbon-Hostel/Lisbon/45010"
],
"maxReviewsPerProperty": 0,
"reviewsSort": "-date",
"includePropertyRow": true,
"sessions": 4,
"perIp": 1
}

Every review both hostels have, newest first, plus a free context row each.

Example: what solo female travellers say

{
"propertyIds": ["15529", "12000"],
"groupTypes": ["solo_female"],
"maxReviewsPerProperty": 500,
"minRating": 0,
"maxRating": 0,
"requireText": true,
"sinceDate": "12 months"
}

groupTypes is applied in the actor — Hostelworld's API has no server-side filter for it — so the pages are still read and the rows you did not want are simply never charged.

Output

Three row types share one dataset, told apart by type, with dataset views for each.

Review rows (type: "review", charged)

FieldMeaning
review_idHostelworld's numeric review id
property_id, property_name, property_urlWhich hostel the review is about
review_datePublication date, YYYY-MM-DD
textThe review itself (Hostelworld's notes); null when the guest scored without writing
language, machine_translatedThe language served and whether it was machine-translated
ratingOverall score, 0-100
rating_5The same score on the 0-5 star scale, e.g. 944.7
sub_ratings{value, safety, location, staff, atmosphere, cleanliness, facilities}, each 0-100
owner_commentThe hostel's public reply, if any
group_typeMALE, FEMALE, COUPLE, ALLFEMALEGROUP, ALLMALEGROUP, MIXEDGROUP, FAMILY
age_group18-24, 25-30, 31-40, 41+
trip_typesREGULARVACATION, WEEKENDAWAY, GAPYEAR, RTWTRIP, COLLEGEBREAK, OTHER
reviewer_id, reviewer_nickname, reviewer_genderWho wrote it (Anonymous when they hid the name)
reviewer_country, reviewer_country_code, reviewer_reviews, reviewer_imageWhere they are from, how many reviews they have written, their avatar
liked, disliked, recommendedLegacy split-review fields; Hostelworld no longer fills them, so they are almost always null
target, fetched_atThe input value this row came from, and when it was read

Hostel rows (type: "property", free)

property_id, property_name, property_type (HOSTEL, GUESTHOUSE, HOTEL, …), star_rating, city, country, region, address, latitude, longitude, rating and rating_5 (the hostel's aggregate), sub_ratings, total_ratings (every score, text or not), currency, lowest_price_per_night, best_for, facilities, description, positive_count, negative_count, solo_percentage, couples_percentage, groups_percentage, reviews_listed, reviews_fetched, property_url.

Status rows (type: "status", free)

One per target: target, property_id, property_name, status (ok, no_reviews, not_found, duplicate, error), reviews delivered, filtered (dropped before billing), pages read, total Hostelworld lists, duplicates, error.

A refusal is always status: "error" with the reason. A hostel with no reviews is no_reviews with total: 0, and an unknown or deactivated property id is not_found. The scraper never reports an empty hostel when it was really blocked — Hostelworld's API has no silent-empty answer, so neither does this actor.

The run also writes a SUMMARY record to the key-value store with the delivered, filtered and charged counts and the HTTP stats.

How much does it cost?

$0.003 per review row. Hostel rows, status rows, duplicate targets, unknown ids and every review a filter dropped are free. A thousand reviews is $3; a daily 30-day watch over ten hostels is usually a few cents a day. Compute is included in the event price.

Hostelworld reviews scraper in Python, JavaScript, curl, n8n, Make or an AI agent

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("kestrel/hostelworld-reviews-scraper").call(run_input={
"propertyIds": ["15529"],
"maxReviewsPerProperty": 200,
"reviewsSort": "-date",
})
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
reviews = [r for r in rows if r["type"] == "review"]
print(len(reviews), "reviews", sum(r["rating"] for r in reviews) / len(reviews))

JavaScript (Node):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('kestrel/hostelworld-reviews-scraper').call({
startUrls: ['https://www.hostelworld.com/hostels/p/15529/home-lisbon-hostel/'],
maxReviewsPerProperty: 0,
maxRating: 70,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((r) => r.type === 'review').length);

curl:

curl -X POST "https://api.apify.com/v2/acts/kestrel~hostelworld-reviews-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"propertyIds":["15529"],"maxReviewsPerProperty":50,"reviewsSort":"-date"}'

Add &format=csv to that URL and you have hostelworld reviews csv without writing any code — the same route to download hostelworld reviews as Excel, JSON or XML.

n8n: the Apify node runs this actor and hands the dataset to the next step. Make: the Apify module does the same, so a low score can raise a Slack message or open a ticket. MCP and AI agents: Apify's MCP server exposes the actor as a tool, so an assistant can fetch hostelworld property reviews on demand and answer questions about a hostel without a scraping pipeline of its own.

This actor reads only what Hostelworld publishes to anyone: the same public JSON its own property pages fetch, with no key, no login and no account. It never touches private data or anything behind a paywall. Public data collection of this kind is generally lawful in the EU, the UK and the US, and the reviews themselves are published statements. What you do afterwards is your responsibility: reviewer nicknames and nationalities are personal data under the GDPR, so treat them accordingly, keep republication within fair use, and check Hostelworld's terms for your own use case. This is not legal advice.

Limits and honest notes

  • One language. Hostelworld serves a single machine-translated English set. It accepts a languages parameter and then ignores it, so this actor deliberately offers no language filter rather than one that does nothing. language and machine_translated are on every row so you can see exactly what you got.
  • liked, disliked and recommended are legacy. Hostelworld's schema still carries them; the data no longer fills them. They are kept so nothing is lost if the site starts writing them again.
  • groupTypes, minRating, maxRating, requireText and sinceDate are actor-side. The API has no server-side filter, so the pages are read and the rows are then dropped before billing.
  • Page size is capped at 50 by the API, which is what the actor asks for.
  • sinceDate only stops paging early on a date sort. With -date a run stops as soon as a whole page predates the cut; with a rating sort the dates are not ordered, so the filter still applies but every page is read.
  • Scores are 0-100, not 1-5. rating_5 is there for joins with other review sources.

FAQ

Does it need a Hostelworld API key or login?

No. This is hostelworld reviews without an api key: the endpoint is public and unauthenticated, and the actor sends no cookie, token or Origin header.

Can I download Hostelworld reviews as CSV or Excel?

Yes. Every Apify dataset exports to CSV, Excel, JSON, XML or JSONL from the run's Storage tab or the API, and the run-sync-get-dataset-items call above takes &format=csv directly.

How do I get only the bad reviews?

Set reviewsSort to rating and maxRating to about 70. The worst arrive first and everything above the ceiling is filtered before it is charged.

Can I get Hostelworld reviews by property id instead of URL?

Yes — that is propertyIds, and it is the fastest path because nothing has to be resolved. Get hostelworld reviews by property id straight from an earlier run's property_id column.

How many reviews can one hostel return?

All of them. A busy city hostel carries one to three thousand; the actor pages through the lot at 50 per request and stops on its own at the end of the list.

Does it include the hostel's reply?

Yes — owner_comment. Hostelworld owner replies are common on hostels that manage their reputation and absent on the ones that do not, which is itself a signal.

Can I scrape Hostelworld reviews without an API of my own?

Yes. That is what this actor is: no infrastructure, no proxies to buy, no browser to keep alive. Run it from the Console, the API, a schedule or an agent.

Is the reviewer data really that detailed?

Yes. Group type, age band, trip type and nationality come from Hostelworld itself, which is why backpacker reviews here support demand analysis and not only sentiment.

What do bulk hostel reviews cost?

$0.003 each, filters applied first. Bulk hostel reviews across a fifty-hostel city at 200 reviews per hostel is 10,000 rows, or $30.

Can I use it for hostel sentiment analysis?

Yes. text is clean, review_date is exact and rating gives you a numeric label to train or evaluate against, per hostel and per group type.

Review monitoring across a portfolio: hostel guest feedback every morning

Schedule the actor daily with sinceDate: "2 days" and every hostel you care about in propertyIds. Newest-first order means it reads one page per hostel and stops, so the run is quick and cheap. Push the dataset into a warehouse and you have hostel guest feedback as a time series: score by week, sub-score by week, complaint volume by group type. A hostel review scraper that returns nothing new on a quiet day costs nothing on a quiet day.

Guest feedback data that keeps its structure

Every row carries every key, so a run with no owner replies still has an owner_comment column and your loader never sees a shifting schema. Rows are typed, dates are ISO, scores are integers.

What this does not do

It does not book, price or check availability, and it does not read a city listing page — give it hostels, not searches. A Hostelworld scraper for rates and availability is a different job; pair this one with a prices actor.

Choosing an order

-date for monitoring, rating for complaint triage, -rating for marketing copy, date when you want the oldest reviews a hostel ever received.

Hostelworld is one window on a property's reputation. These read the others, with the same row discipline:

  • Booking.com Reviews Scraper — the same job on Booking's 1-10 scale, with liked/disliked split out.
  • TripAdvisor Reviews Scraper — 1-5 bubbles, six sub-ratings and up to 30 site languages.
  • Airbnb Reviews Scraper — the short-let side of the same market.
  • Agoda Reviews Scraper — the Asia-heavy OTA, with separate positives and negatives and the hotel's reply, by hotel name, URL or id.
  • Free Hotel Review Checker — the Hostelworld score next to Booking.com, Agoda, Tripadvisor, Google and Despegar for the same property, one row per site, free — run it first to see which site's text is worth reading.
  • Google Hotels Prices Scraper — what the same properties charge: every booking site's rate for a stay as its own row, for the price behind the score.

Together they cover the budget-travel stack: run the review scrapers over one city and you can compare what the same traveller says about a hostel bed, a hotel room and a spare room.