Hostelworld Hostels Scraper
Pricing
from $0.84 / 1,000 results
Hostelworld Hostels Scraper
Scrapes hostels, guesthouses and budget hotels from Hostelworld by city. Every row carries nightly dorm and private prices, an 8-axis rating breakdown, GPS coordinates, address, district, facilities and images. Optional per-property detail adds policies, house rules and check-in times.
Pricing
from $0.84 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Scrapes hostels, guesthouses and budget hotels from Hostelworld — the world's largest hostel booking platform — city by city.
Public data only. No login, no cookies, no browser. No bot challenge of any kind: 8 of 8 TLS profiles returned clean 200s on every surface, and the API answers a request with no headers at all.
This actor reads Hostelworld's own public JSON API (api.m.hostelworld.com),
not scraped HTML — so rows arrive already structured, and a site redesign
cannot break them.
The one thing you need to know before using this
Hostelworld has no city search endpoint. Names are resolved through their
own continents → countries → cities listing, which means:
| You type | What happens |
|---|---|
Spain/Barcelona | Recommended. One lookup request, unambiguous. |
Barcelona | Works, but the first bare name builds a global city index (one request per country, run concurrently). |
22418 | A raw city id, used as-is with zero lookups. |
That listing is not exhaustive — Barcelona is reachable as city 83 too,
and 83 does not appear in it. If a city you know exists is not found, pass
its numeric id instead. A name matching more than one country is refused with
the candidate list rather than guessed at.
Unlike most targets, this API does not silently widen a bad input: an
unknown city is a clean 404, and an unknown property type or sort value is a
clean 400. What it does do is silently ignore parameter names it does not
recognise — so every filter this actor offers was verified to actually move the
result count.
What you get
Three record types share one dataset, told apart by recordType.
PROPERTY — one row per hostel
Straight from the listing, no detail fetch needed:
- Prices — lowest nightly rate overall, and split by dorm vs private room, with currency
- Ratings — overall score and review count, plus an 8-axis breakdown (security, location, staff, atmosphere, cleanliness, facilities, value, fun)
- Location — street address, district, GPS coordinates, distance
- Everything else — property type, star rating, images, gallery, overview text, free-cancellation status, promoted/featured/new flags
With Fetch full property details on, each row also gets a detail object:
full description, house rules and things to note, cancellation policy, payment
methods, check-in/check-out window, the categorised facility list and a sample
of recent reviews.
detailis kept as a nested object rather than merged into the row on purpose — the detail document reuses several key names with a different type (idis an int in the listing and a string in the detail), so a flat merge would make column types unstable mid-dataset.
SEARCH_SUMMARY — one row per city
Hostelworld's own match total, which city id the name resolved to, the city and
country it actually served, how many requests were spent, and locationApplied.
ERROR — one row per input that could not be processed
Every input maps to at least one row, so nothing disappears silently.
Input
| Field | What it does |
|---|---|
| Cities | One city per entry — Spain/Barcelona, Barcelona, or 22418. |
| Property type | HOSTEL, HOTEL, GUESTHOUSE, APARTMENT, CAMPSITE. Verified to partition a city exactly (Barcelona: 93+5+15+2 = 115). |
| Sort order | Rating, price, distance or name. Values Hostelworld refuses (popularity, recommended) are not offered. |
| Check-in date + Nights | Set together to keep only properties with real availability — on London this narrowed 94 to 80. One without the other is an upstream 400, so they are gated as a pair. |
| Fetch full property details | Adds one request per property. Off by default. |
| Max properties per city | 0 for unlimited. There is no result-window ceiling. |
| Rows per request | Up to 500. No server-side cap was found — a whole city fits in one request. |
| Max concurrent requests / Minimum seconds between requests | Throughput controls. No throttling was observed, so the interval defaults to 0. |
Known limits
- Cities, not regions or countries. The API is organised per city; there is no "all of Spain" query. Pass several cities instead.
- The country city listing is incomplete. See above — numeric ids are the escape hatch.
- Prices are indicative. Listing prices are Hostelworld's "from" rates. For rates tied to specific dates, set check-in and nights.
- Reviews are not included.
/properties/{id}/reviewsis a separate paginated endpoint — one Barcelona hostel alone has 698 reviews at 50 per page. Folding that in would turn a 100-property crawl into thousands of requests, so it belongs in a sibling actor. - Availability is a filter, not a room inventory. Check-in + nights narrows which properties are returned; it does not return per-room availability.
Notes on politeness
The API showed no rate limiting (12 back-to-back detail calls all returned
200), so defaults are modest rather than aggressive: concurrency 4, no forced
delay. Minimum seconds between requests paces request starts without
occupying a concurrency slot, so raising it slows the crawl without wasting
workers.