# Zoover Reviews Scraper ⭐ (`shahidirfan/zoover-reviews-scraper`) Actor

Extract Zoover reviews, ratings, guest feedback, accommodation details, review dates, and traveler experiences from hotels, resorts, and holiday stays. Ideal for travel sentiment analysis, hotel reputation monitoring, competitor research, tourism insights, and AI datasets.

- **URL**: https://apify.com/shahidirfan/zoover-reviews-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Zoover Reviews Scraper do?

Extract Zoover review data, ratings, traveler details, and accommodation metadata from public Zoover.nl accommodation pages. Use this scraper to collect clean guest feedback for hospitality research, competitor tracking, reputation monitoring, and review analysis.

### Why use Zoover Reviews Scraper?

- **Review-ready datasets** - Collect clean, deduplicated review records without manual copy-paste.
- **Accommodation context** - Keep each review connected to its property, source page, and available metadata.
- **Automation-friendly output** - Export results to JSON, CSV, Excel, XML, or downstream integrations.
- **Resilient collection** - Temporary rate limits, server errors, timeouts, malformed records, and unavailable pages are handled with bounded retries or skipped-item warnings.

### Features

- **Review Data Collection** - Collect review titles, full review text, ratings, reviewer names, stay dates, and travel party type.
- **Accommodation Context** - Include accommodation ID, name, title, and source URL with every review record.
- **Category Scores** - Capture rating breakdowns for hygiene, interior, location, price/quality, and space when Zoover provides them.
- **Clean Dataset Output** - Empty, null, and missing values are removed before records are saved.
- **Duplicate Protection** - Review IDs and fallback review fingerprints are used to avoid repeated records in a run.
- **Flexible URL Input** - Start from one direct accommodation URL or a list of accommodation URLs.
- **Automatic Recovery** - Temporary rate limits, server errors, access challenges, timeouts, and malformed records are handled with bounded retries, automatic client rotation, and skipped-item warnings instead of failing the run.

### How to use Zoover Reviews Scraper

1. Open the Actor in Apify Console.
2. Enter a direct Zoover accommodation URL, or provide multiple accommodation URLs.
3. Set `results_wanted` to the maximum number of reviews to save.
4. Keep the Apify Proxy enabled for reliable access.
5. Start the run and download the dataset in the format you need.

***

### Use Cases

#### Hotel Reputation Monitoring

Track what guests say about a hotel, resort, apartment complex, or holiday park. Review titles, text, scores, and travel dates help teams identify service issues, guest satisfaction trends, and recent changes in customer sentiment.

#### Competitive Hospitality Research

Compare guest feedback across competing accommodations in the same region. Use category scores such as hygiene, rooms, service, and location to understand where each property performs well or needs improvement.

#### Guest Experience Analysis

Build datasets for text analysis, sentiment scoring, and recurring topic detection. The scraper keeps reviewer details, travel type, dates, and source metadata together so records are ready for reporting or enrichment.

#### Market Intelligence

Collect structured review data from popular vacation destinations and accommodation pages. Analysts can monitor seasonal changes, family travel feedback, pricing perception, and recurring praise or complaints.

***

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrls` | Array | No | `["https://www.zoover.nl/a/81687/appartementen-bajondillo"]` | Direct Zoover accommodation URLs to collect reviews from. |
| `results_wanted` | Integer | No | `20` | Maximum number of review records to save. |
| `max_pages` | Integer | No | `10` | Safety cap on the number of review pages fetched per accommodation (up to 50 reviews per page). |
| `sort_by` | String | No | `entryDate` | Order in which reviews are returned: `entryDate` (newest first) or `score` (highest score first). |
| `proxyConfiguration` | Object | No | Apify Proxy | Proxy settings for reliable access. A proxy is strongly recommended because Zoover applies access protection. |

***

### Output Data

Each dataset item represents one Zoover review.

| Field | Type | Description |
|-------|------|-------------|
| `accommodation_id` | String | Zoover accommodation identifier. |
| `accommodation_name` | String | Accommodation name. |
| `accommodation_title` | String | Accommodation title when provided. |
| `accommodation_url` | String | Source accommodation URL. |
| `review_id` | String | Unique review identifier. |
| `review_title` | String | Review headline. |
| `review_text` | String | Full review content. |
| `rating` | Number | Overall reviewer score. |
| `author_name` | String | Reviewer display name. |
| `author` | Object | Reviewer details when available. |
| `travel_date` | String | Stay or travel period. |
| `date_posted` | String | Review publication date. |
| `travel_type` | String | Travel party type such as couple, family with children, friends, or single. |
| `category_scores` | Object | Rating breakdown for hygiene, interior, location, price/quality, and space. |
| `source_page` | String | Source page path. |
| `source_build_id` | String | Source version marker, included when Zoover exposes one. |
| `raw_review` | Object | Original structured review object with non-empty values preserved. |

***

### Usage Examples

#### Collect Reviews From One Accommodation

```json
{
    "startUrls": ["https://www.zoover.nl/a/81687/appartementen-bajondillo"],
    "results_wanted": 20
}
```

#### Collect From Multiple Accommodation URLs

```json
{
    "startUrls": [
        "https://www.zoover.nl/a/81687/appartementen-bajondillo",
        "https://www.zoover.nl/a/255702/pickalbatros-jungle-aqua-park-neverland-hurghada"
    ],
    "results_wanted": 50
}
```

#### Sort Reviews By Score

```json
{
    "startUrls": ["https://www.zoover.nl/a/81687/appartementen-bajondillo"],
    "results_wanted": 20,
    "sort_by": "score"
}
```

#### Use Apify Proxy

```json
{
    "startUrls": ["https://www.zoover.nl/a/81687/appartementen-bajondillo"],
    "results_wanted": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
}
```

***

### Sample Output

```json
{
    "accommodation_id": "81687",
    "accommodation_name": "Appartementen Bajondillo",
    "accommodation_title": "Appartementen Bajondillo",
    "accommodation_url": "https://www.zoover.nl/a/81687/appartementen-bajondillo",
    "review_id": "92730",
    "review_title": "Bajondillogangers",
    "review_text": "App. Banondillo is al vele jaren onze vaste stek, schoon ,vriendelijk personeel ,perfecte ligging super fijn strand en strandtent el velero waar je heerlijk kunt eten.",
    "rating": 10,
    "author_name": "Brigitta",
    "author": {
        "name": "Brigitta"
    },
    "travel_date": "2026-09-01",
    "date_posted": "2026-10-11",
    "travel_type": "COUPLE",
    "category_scores": {
        "hygiene": 10,
        "interior": 9,
        "location": 10,
        "priceQuality": 10,
        "space": 9
    },
    "source_page": "/a/81687/appartementen-bajondillo"
}
```

***

### Tips for Best Results

#### Use Direct Accommodation URLs

- Direct Zoover accommodation URLs provide the most reliable results.
- URLs should use the `/a/` accommodation page format.
- Test with `20` results before increasing collection size.

#### Keep Output Focused

- Set `results_wanted` to the number of review records you need.
- Use multiple URLs when comparing accommodations.
- Review category scores are included only when Zoover provides them.

#### Configure Proxies for Production

- Keep the Apify Proxy enabled; it provides reliable access.
- Keep proxy settings enabled when collecting data from many pages.
- Retry later if Zoover temporarily limits access.
- Use clean, complete URLs. Whitespace is trimmed, duplicate URLs are ignored, and invalid entries are skipped with a warning.
- Temporary 429, 5xx, network, challenge, and timeout failures receive bounded retries with short backoff. Successful requests are not delayed.

***

### Integrations

Connect your dataset with:

- **Google Sheets** - Review and filter records in spreadsheets.
- **Airtable** - Build a searchable accommodation review database.
- **Webhooks** - Send new review records to internal systems.
- **Make** - Route review data into dashboards and alerts.
- **Zapier** - Connect review collection with business workflows.

#### Export Formats

- **JSON** - For apps, databases, and enrichment workflows.
- **CSV** - For spreadsheets and BI tools.
- **Excel** - For reporting and stakeholder review.
- **XML** - For system imports that require XML.

***

### Frequently Asked Questions

#### Can I collect reviews from any Zoover accommodation page?

Yes, you can collect reviews from public Zoover accommodation pages by providing a direct accommodation URL.

#### Can I use a keyword or location instead of a URL?

No. Provide one or more direct Zoover accommodation URLs in `startUrls`.

#### Does the scraper remove duplicate reviews?

Yes, duplicate records are filtered during each run using review IDs and fallback review fingerprints.

#### Why are some fields absent in a record?

Some fields are absent because Zoover does not provide them for every review. Empty values are removed before saving to keep the dataset clean.

#### Can I collect data from several accommodations?

Yes, provide multiple entries in `startUrls` and set `results_wanted` to your desired total record count.

#### Is proxy configuration required?

Keeping the Apify Proxy enabled is strongly recommended. Zoover applies access protection, and the proxy provides a reliable connection for consistent runs.

### Related Actors

- [Tiket Hotel Reviews Scraper](https://apify.com/shahidirfan/tiket-hotel-reviews-scraper) - Collect hotel reviews, traveler details, rating breakdowns, and property context from Tiket.
- [Tripadvisor Reviews Scraper](https://apify.com/shahidirfan/tripadvisor-reviews-scraper) - Collect structured hotel reviews, ratings, trip details, and management responses from Tripadvisor.

***

### Support

For issues or feature requests, contact support through the Apify Console.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [API Reference](https://docs.apify.com/api/v2)
- [Scheduling Runs](https://docs.apify.com/schedules)

***

### Legal Notice

This actor is designed for legitimate data collection purposes. Users are responsible for ensuring their use complies with website terms of service, privacy rules, and applicable laws. Use collected data responsibly.

# Actor input Schema

## `startUrls` (type: `array`):

Direct Zoover accommodation URLs to scrape (e.g. https://www.zoover.nl/a/81687/appartementen-bajondillo).

## `results_wanted` (type: `integer`):

Maximum number of review records to save.

## `max_pages` (type: `integer`):

Safety cap on the number of review pages fetched per accommodation (50 reviews per page).

## `sort_by` (type: `string`):

Order in which reviews are returned by Zoover.

## `proxyConfiguration` (type: `object`):

Use Apify Proxy for reliable access.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.zoover.nl/a/81687/appartementen-bajondillo"
  ],
  "results_wanted": 20,
  "max_pages": 10,
  "sort_by": "entryDate",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.zoover.nl/a/81687/appartementen-bajondillo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/zoover-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": ["https://www.zoover.nl/a/81687/appartementen-bajondillo"] }

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/zoover-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.zoover.nl/a/81687/appartementen-bajondillo"
  ]
}' |
apify call shahidirfan/zoover-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shahidirfan/zoover-reviews-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JCSgdxjjOXhxugL3W/builds/9ZIrUVD6hf7WyNDhQ/openapi.json
