Zoover Listings Extractor
Pricing
from $2.99 / 1,000 results
Zoover Listings Extractor
Zoover listings extractor that scrapes hotel and holiday listings by country, region, or city, returning review scores, star ratings, awards, and package prices as clean rows so travel SEO and pricing teams can track the Benelux market without copying data by hand.
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
Kawsar
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Zoover Listings Extractor: scrape hotel and holiday listings from Zoover
The Zoover listings extractor scrapes hotel and holiday package listings from Zoover with review scores, star ratings, award history, package prices, and flight details on every record. Point it at a country, a region, a city, or a shortlist of properties, and it returns structured JSON you can drop straight into a spreadsheet or a database. It reads the same search that powers zoover.nl and zoover.be, so prices and review counts match what a visitor sees on the site.
Zoover is one of the biggest travel review sites in the Netherlands and Belgium, so it is a solid source for hotel review data and package holiday pricing in the Benelux market.
Use cases
- Travel SEO research: pull review scores, star ratings, and award rankings for every hotel in a destination to see which properties dominate the results you are trying to rank against
- Package holiday price monitoring: track price per person for the same hotel and trip length on a schedule, and catch price drops before your competitors do
- Hotel benchmarking: compare your property's Zoover score, review count, and aspect ratings against every other hotel in the same city
- Affiliate and content sites: build "best hotels in Antalya" style pages from real ratings and prices instead of hand-collected data
- Market sizing: use the facet counts to see how many hotels in a country have a pool, a kids club, or a 5 star rating
- Revenue management: watch which tour operators, board types, and departure airports are being sold for a destination, and at what price
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
brand | string | ZVRNL | Which storefront to search. ZVRNL for zoover.nl, ZVRBE for zoover.be. |
transportType | string | INCLUDING_FLIGHT | INCLUDING_FLIGHT returns flight and hotel packages. OWN returns accommodation-only stays. |
countryIds | array | ["933"] | Zoover country IDs, one per line. 933 is Turkey, 919 is Spain, 922 is Greece. |
regionIds | array | empty | Zoover region IDs, for example 4828 for the Turkish Riviera. |
cityIds | array | empty | Zoover city IDs, for example 99048 for Belek. The tightest geographic filter. |
entityIds | array | empty | Specific property IDs, for tracking a fixed shortlist of hotels. |
durationNights | array | ["5","6","7","8","9"] | Trip lengths in nights, one number per line. |
adults | integer | 2 | Adults travelling. Prices are quoted for this party size. |
children | integer | 0 | Children aged 2 to 17. |
babies | integer | 0 | Infants under 2. |
starRatings | array | empty | Keep only these star ratings. Values 0 to 5. |
minReviewScore | string | empty | Minimum review score out of 10. One of >=6, >=7, >=8, >=9. |
accommodationTypes | array | empty | hotel, aparthotel, resort, appartement, villa, bungalow, chalet, camping, and more. |
themes | array | empty | sun_holiday, city_trip, child_friendly, luxe, all_inclusive, wellness, golf, and more. |
attributes | array | empty | winter_sun, ski_holiday, package_holiday, adult_only, has_family_rooms, and more. |
facilities | array | empty | wifi, pool, kids_club, restaurant, jacuzzi, waterpark, pets_allowed, and more. |
awards | array | empty | gold or silver, to keep only Zoover award winners. |
departureAirports | array | empty | IATA codes such as AMS, RTM, EIN, BRU, DUS. Packages with flight only. |
tourOperators | array | empty | Restrict results to specific operator codes. |
sortingOrder | string | popularity_desc | popularity_desc, price, price_desc, hotel_review_rating, or price_quality. |
maxItems | integer | 100 | Stop after this many listings. |
pageSize | integer | 50 | Listings per API call, up to 500. |
startPage | integer | 1 | Page to begin from, for resuming a run. |
includeOffers | boolean | true | Attach the raw offer array with rooms, board, flights, and surcharges. |
includeAggregations | boolean | false | Save search facet counts to the key value store under AGGREGATIONS. |
requestTimeoutSecs | integer | 30 | Timeout for a single API response. |
timeoutSecs | integer | 300 | Overall time budget for the run. |
proxyConfiguration | object | Datacenter (Anywhere) | Proxy type and location for requests. Supports Datacenter, Residential, Special, and custom proxies. Optional. |
Example input
{"brand": "ZVRNL","transportType": "INCLUDING_FLIGHT","countryIds": ["933"],"durationNights": ["7"],"adults": 2,"starRatings": ["4", "5"],"minReviewScore": ">=8","facilities": ["pool", "kids_club"],"sortingOrder": "popularity_desc","maxItems": 100,"includeOffers": false,"proxyConfiguration": { "useApifyProxy": true }}
What data does this actor extract?
Each dataset record is one property with its cheapest matching offer flattened onto it.
{"giataId": 1400605,"accommodationId": "1163cee7-775e-4736-8bea-fc23fdcc26fd","entityId": 130137,"accoName": "Long Beach","accoType": "hotel","listingUrl": "https://www.zoover.nl/turkije/turkse-riviera/alanya/long-beach-resort","starRating": 5,"reviewScore": 9.2,"reviewCount": 605,"lastReviewDate": "2026-08-10T08:35:27.356000+00:00","aspectRatings": {"childFriendly": { "rating": 9.49, "count": 605 },"hygiene": { "rating": 9.24, "count": 605 },"location": { "rating": 9.18, "count": 605 },"priceQuality": { "rating": 9.07, "count": 605 },"room": { "rating": 9.07, "count": 605 },"service": { "rating": 9.19, "count": 605 }},"latestAwardYear": "2025","latestAwardType": "gold","latestAwardRank": 200,"country": "Turkije","countryCode": "TR","regionName": "Turkse Rivièra","cityName": "Alanya","cityId": 52799,"currency": "EUR","bestPricePerPerson": 777.25,"bestPriceTotal": 1554.5,"mealPlan": "AI","boardName": "all inclusief","roomDescription": "Tweepersoonskamer - voordeel","durationNights": 5,"departureDate": "2026-11-01","returnDate": "2026-11-06","departureAirport": "AMS","arrivalAirport": "AYT","airline": "Corendon Dutch Airlines B.V.","flightNumber": "CD 5099","tourOperator": "VAKNLB2C","searchRank": 1,"resultsTotal": 34,"scrapedAt": "2026-08-10T10:51:50.254715+00:00"}
| Field | Type | Description |
|---|---|---|
giataId | integer | GIATA property ID, stable across travel suppliers, useful for joining with other hotel datasets |
accommodationId | string | Zoover internal UUID for the property |
entityId | integer | Zoover entity ID, reusable as an entityIds input value |
accoName | string | Property name |
accoType | string | hotel, aparthotel, resort, villa, camping, and so on |
listingUrl | string | Direct link to the property page on Zoover |
slug / fullSlug | string | URL slug and full destination path |
previewImage | string | Main listing photo |
starRating | integer | Official star rating, 0 to 5 |
reviewScore | number | Average Zoover review score out of 10 |
reviewCount | integer | Number of reviews behind the score |
lastReviewDate | string | Timestamp of the most recent review |
aspectRatings | object | Sub-scores for hygiene, location, room, service, price quality, and child friendliness |
travellerRatings | object | Scores split by couples, families, friends, solo travellers, and business |
awardHistory | object | Every Zoover award year with tier and rank |
latestAwardYear / latestAwardType / latestAwardRank | string, string, integer | Most recent award, flattened for easy sorting |
country / countryCode / countryEntityId | string, string, integer | Country name, ISO code, and reusable filter ID |
regionName / regionId | string, integer | Region and its reusable filter ID |
cityName / cityId | string, integer | City and its reusable filter ID |
isBookable | boolean | Whether the property is bookable on Zoover right now |
offerCount | integer | How many offers the search returned for this property |
currency | string | Currency of all price fields |
bestPricePerPerson | number | Cheapest price per person for the searched party and trip length |
bestPriceTotal | number | Cheapest total package price |
priceBeforeDiscount | number | Total before discounts, so you can spot real markdowns |
mealPlan / boardName | string | Board code and its description, for example AI and all inclusief |
roomDescription | string | Room or unit type sold with the cheapest offer |
durationNights / durationDays | integer | Length of the cheapest offer |
departureDate / returnDate | string | Travel dates, or check-in and check-out for accommodation-only stays |
departureAirport / arrivalAirport | string | IATA codes for the outbound flight |
airline / flightNumber / stopOver | string, string, integer | Outbound flight details |
luggageIncluded | boolean | Whether checked luggage is in the package price |
tourOperator / supplier / productCode | string | Who sells the package and under which code |
offers | array | Raw offers with rooms, board, flight segments, surcharges, and funds |
searchRank | integer | Position in the sorted search results, starting at 1 |
pageNumber | integer | Search page the listing came from |
resultsTotal | integer | How many listings matched the search |
scrapedAt | string | When the record was collected |
How it works
- Your filters are turned into a single search query against the Zoover search backend, the same one the website calls.
- The actor pages through the sorted results, pulling up to 500 listings per request.
- Each result is flattened: property details, review breakdown, award history, and the cheapest offer become one record.
- Prices arrive in cents and are converted to normal euro amounts.
- Records are pushed to the dataset in batches while a running time budget keeps the run from overshooting.
- If facet counts are enabled, they are saved once to the key value store under
AGGREGATIONS.
FAQ
How many listings can I get in one run?
The Zoover search backend returns at most 500 matches for any single query, no matter how many exist. To go past that, split the run by region or city and merge the datasets. Each record carries resultsTotal so you can tell when you have hit the ceiling.
Where do I find the country, region, and city IDs?
Every record includes countryEntityId, regionId, and cityId. Run one broad search, read the IDs off the results, then feed them back in to drill down. The IDs also appear as heliosId values on Zoover destination pages.
Can I scrape accommodation-only stays without flights?
Yes. Set transportType to OWN. You get campsites, apartments, and holiday parks with a nightly package price and no flight fields.
Do the prices include everything?
bestPriceTotal is the package total for the party you searched. Some surcharges and local taxes are paid on arrival and appear inside the raw offers array rather than in the headline price.
Why is my dataset so large?
includeOffers is on by default and the raw offers contain full flight segments and supplier text. Turn it off for a flat, compact dataset.
Can I run this on a schedule? Yes. Schedule the actor daily or weekly and the same query returns fresh prices and review counts each time, which is how you build a price history.
Integrations
Connect Zoover Listings Extractor with other apps and services using Apify integrations. You can integrate with Make, Zapier, Slack, Airbyte, GitHub, Google Sheets, Google Drive, and many more. You can also use webhooks to trigger actions whenever results are available.
Start scraping Zoover listings
Set a country ID, pick a trip length, and run it. You get a clean table of Zoover hotel listings with review scores, award rankings, and package prices, ready for an SEO audit or a price tracker.