# Headout Scraper (`aboo.script/headout-scraper`) Actor

⚡ Fast Headout scraper. No login, no API key. Scrape tours, attraction tickets and experiences in any city by city, category, collection or experience URL or keyword. Get every ticket option with price, discounts, ratings, reviews, cancellation policy, GPS location and 56 currencies.

- **URL**: https://apify.com/aboo.script/headout-scraper.md
- **Developed by:** [Aboo Script](https://apify.com/aboo.script) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 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

## Headout Scraper

![Headout Scraper](https://i.ibb.co/N2XH1VGn/headout-banner.png)

**Headout Scraper** extracts tours, attraction tickets, and experiences from [Headout](https://www.headout.com/) into clean, structured data you can download as JSON, CSV, Excel, or HTML. Paste a Headout city, category, collection, or experience URL, or type a city or attraction name, and get the name, price, discount, rating, review breakdown, duration, cancellation policy, ticket options, location, and images for every experience. No account or login required.

### Introduction

[Headout](https://www.headout.com/) is an online marketplace for tours, attraction tickets, shows, and activities in cities around the world, from Burj Khalifa tickets in Dubai to museum passes in Paris. Travelers use it to compare and book experiences, so its listings are a rich source of prices, ratings, and product details for the travel industry.

This actor collects the same public information you see in your browser and turns it into a ready-to-use dataset. You can run it once, schedule it to run daily, or connect it to your own tools.

### What data can you extract from Headout?

- 🏷️ Experience name, short description, full description, highlights, inclusions, and exclusions
- 💲 Price, original price, discount percentage, currency, and price type (for example per person)
- 🎟️ Every ticket variant with its own price, description, and options (duration, guest limits)
- ⭐ Rating, review count, star breakdown, and top reviews with reviewer name, date, and photos
- 🗂️ City, country, category, subcategory, collection, and tour type
- ⏱️ Duration, next available date, and availability
- ✅ Free cancellation, cancellation and reschedule windows, mobile ticket, instant confirmation, skip the line, and hotel pickup
- 📍 Start and end location with address, city, country, and coordinates
- 📝 Know before you go and ticket delivery information
- 🖼️ Images, video link, and listing date
- 🔗 Direct URL and ID of each experience

### Use Cases

- 📈 **Market research**: compare prices, ratings, and discounts of tours and attractions across cities and categories.
- 🕵️ **Competitor monitoring**: track how experiences are priced and packaged, and how their reviews change over time.
- 🤝 **Lead generation**: build lists of popular attractions and activities to approach as a tour operator, agency, or partner.
- 🗂️ **Database building**: create your own catalog of things to do in any city, with prices and ticket options.
- 🤖 **AI and automation**: feed clean, structured data into spreadsheets, dashboards, or AI workflows.

### How to scrape Headout step by step

1. Paste one or more Headout URLs into **Start URLs**, or type city or attraction names into **Search queries**.
2. Optionally choose a **Currency** and a **Sort by** order.
3. Set **Max results** to how many experiences you want per URL or per query.
4. Click **Start** and wait for the run to finish.
5. Download your data in JSON, CSV, Excel, or HTML from the **Output** tab.

### Input

- **Start URLs**: Headout URLs to scrape. Supported pages:
  - City pages, for example `https://www.headout.com/things-to-do-city-dubai/`
  - Category pages, for example `https://www.headout.com/tickets-dubai-ca-1~6/`
  - Subcategory pages, for example `https://www.headout.com/landmarks-dubai-sc-1007~6/`
  - Collection pages, for example `https://www.headout.com/burj-khalifa-tickets-c-158/`
  - Search pages, for example `https://www.headout.com/search/?q=paris`
  - Experience pages, for example `https://www.headout.com/burj-khalifa-tickets/burj-khalifa-at-the-top-tickets-level-124-125-e-1866/`
  - URLs in other site languages (such as `/es/` or `/fr/`) are accepted too.
- **Search queries**: city, attraction, or activity names, one per line. A city name (for example Dubai) returns that city's experiences, an attraction name (for example Burj Khalifa or Louvre) returns its collection, and any other keyword returns matching experiences. Each query is scraped separately.
- **Currency**: show every price in one of 56 currencies, such as USD, EUR, GBP, or AED. Leave it empty to keep each city's local currency.
- **Sort by**: order of the experiences on list pages and search results: Popularity, Price: low to high, Price: high to low, or Biggest discount.
- **Max results**: how many experiences to collect for each start URL or search query. Use 0 for no limit.

You can use start URLs, search queries, or both in the same run.

### Input Examples

Scrape a city page from Headout:

```json
{
  "startUrls": [{ "url": "https://www.headout.com/things-to-do-city-dubai/" }],
  "sortBy": "popularity",
  "maxResults": 5
}
```

Search by city or attraction name:

```json
{
  "searchQueries": ["Paris", "Burj Khalifa"],
  "sortBy": "popularity",
  "maxResults": 5
}
```

### Output

Each experience is saved as one item in the dataset. Here is an example of a single item (long texts and lists are shortened):

```json
{
  "url": "https://www.headout.com/atlantis-waterpark-tickets/aquaventure-waterpark-tickets-with-sea-lion-encounter-e-14388/",
  "id": 14388,
  "name": "Aquaventure Waterpark Tickets with Sea Lion Experiences",
  "city": "Dubai",
  "cityCode": "DUBAI",
  "country": "United Arab Emirates",
  "countryCode": "AE",
  "neighbourhood": null,
  "category": "Tickets",
  "subCategory": "Zoos",
  "collection": "Atlantis Waterpark Tickets",
  "tourType": "Tour",
  "price": 575,
  "originalPrice": 575,
  "discountPercent": 0,
  "currency": "AED",
  "priceType": "Per Person",
  "rating": 4.5,
  "reviewCount": 680,
  "ratingBreakdown": [
    { "stars": 5, "count": 503 },
    { "stars": 4, "count": 96 },
    { "stars": 3, "count": 20 },
    { "stars": 2, "count": 7 },
    { "stars": 1, "count": 54 }
  ],
  "nextAvailableDate": "2026-10-23",
  "availability": "Limited",
  "minDurationMinutes": null,
  "maxDurationMinutes": null,
  "freeCancellation": true,
  "cancellable": true,
  "cancellableUpToHours": 24,
  "reschedulable": true,
  "reschedulableUpToHours": 24,
  "mobileTicket": true,
  "instantConfirmation": false,
  "skipTheLine": false,
  "hotelPickup": false,
  "features": [
    "Explore at your pace",
    "Free cancellation",
    "Book now, pay later",
    "Instant confirmation",
    "Mobile ticket"
  ],
  "startLocation": {
    "address": "Dubai",
    "city": "Dubai",
    "postalCode": null,
    "country": "United Arab Emirates",
    "latitude": 25.204849243164062,
    "longitude": 55.270782470703125
  },
  "endLocation": {
    "address": "Dubai",
    "city": "Dubai",
    "postalCode": null,
    "country": "United Arab Emirates",
    "latitude": 25.204849243164062,
    "longitude": 55.270782470703125
  },
  "shortDescription": null,
  "description": "Your experience\n\nMeet the charming sea lions\n\nGet ready to meet some of the most lovable sea lions you'll ever encounter. Choose between the dry meet & greet...",
  "highlights": [
    "Dive into double the fun at Aquaventure Waterpark, pairing record-breaking rides with an up-close encounter with playful, charming sea lions.",
    "Discover the quirks and charm of sea lions as expert guides share fascinating facts about their personalities, habitats, and conservation efforts."
  ],
  "inclusions": [
    "Poolside Sea Lion Meet & Greet",
    "15-minute poolside interaction with sea lions",
    "One complimentary printed photo"
  ],
  "exclusions": [],
  "knowBeforeYouGo": "Know before you go\n\nWhat to bring\n\nHave your passport or ID ready for a seamless experience.\n\nWhat's not allowed\n\nKeep in mind cameras, jewellery, hair acces...",
  "ticketDelivery": "Your voucher will be emailed to you shortly.\n\nDisplay the voucher on your mobile phone with a valid photo ID at the starting point.\n\nPlease check your final ...",
  "variants": [
    {
      "id": 27157,
      "name": "Aquaventure Waterpark Entry Tickets + 30 Min In-Water Sea Lion Encounter",
      "description": "Get up close and personal with sea lions in the water\nIdeal for those seeking adventure and marine interaction\n30-minute in-water interaction with sea lions\n...",
      "price": 675,
      "originalPrice": 675,
      "discountPercent": 0,
      "currency": "AED",
      "priceType": "Per Person",
      "openDated": false,
      "options": [
        {
          "id": 27232,
          "name": "Aquaventure Waterpark Entry Tickets + Inwater Sea Lion Encounter",
          "durationMinutes": 70,
          "inventoryType": "Fixed Start Fixed Duration",
          "minGuests": 1,
          "maxGuests": 8
        }
      ]
    }
  ],
  "topReviews": [
    {
      "id": 1938079,
      "rating": 5,
      "text": null,
      "reviewerName": "Headout Guest",
      "reviewerCountry": null,
      "date": "2024-08-20T06:45:16.000Z",
      "images": []
    }
  ],
  "images": [
    "https://cdn-imgix.headout.com/media/images/9dbcc84e5cc2c9dc170ec606c8d182a9-14388-dubai-aquaventure-waterpark-tickets-with-sea-lion-encounter-01.jpg",
    "https://cdn-imgix.headout.com/media/images/d5edb30468b21fb9e135b130225f39ee-14388-dubai-aquaventure-waterpark-tickets-with-sea-lion-encounter-05.jpg"
  ],
  "videoUrl": "https://youtu.be/gkptl8E7vZU",
  "listedDate": "2024-12-10"
}
```

You can download the dataset in JSON, CSV, Excel, XML, or HTML, or access it through the Apify API.

### Notes

- Only Headout city, category, subcategory, collection, search, and experience pages are supported. Other URLs are skipped and the run continues with the rest.
- All text is returned in English, even when you paste a URL in another site language.
- Without a **Currency**, prices are shown in the local currency of each city (for example AED for Dubai and EUR for Paris).
- **Max results** applies to each start URL or search query separately. The same experience found from two inputs is saved only once, so the second input may return one item fewer.
- A search query that is neither a city nor an attraction returns the matching experiences from the first page of search results only.
- Top reviews include only the few reviews Headout highlights on the experience page, not every review.
- Some fields are often empty: duration is `null` for flexible entry tickets, and neighbourhood, short description, review text, or reviewer country are `null` when Headout does not show them.

### Why use the Headout Scraper?

- ✅ **No login needed**: works with public data only, so there is no account to manage.
- 🎯 **Many ways to start**: scrape a whole city, a category, a collection, a search, or a single experience.
- 💱 **Prices in your currency**: choose from 56 currencies, or keep each city's local one.
- 🎟️ **Every ticket option**: get each variant with its own price and options, not just the lowest price.
- 🧹 **Clean data**: numbers are real numbers, dates use one standard format, and text is free of HTML.
- 💸 **Pay for what you need**: set a result limit per URL or query and keep every run small and cheap.
- 🔄 **Ready for automation**: schedule runs, export to Google Sheets, or connect to Make, Zapier, and n8n.

### FAQ

#### How many results can I scrape?

You can set any number in **Max results**, or use 0 for no limit. The actor keeps going until it reaches your limit or runs out of experiences on the page.

#### Do I need a Headout account?

No. The actor only collects publicly available data. You do not need to log in or provide any account details.

#### Can I scrape data on a schedule?

Yes. Use Apify Schedules to run the actor every hour, day, or week, and get fresh prices and ratings automatically.

#### Why are some fields empty?

Some experiences simply do not show every piece of information. When a field is not available on the website, it is returned as `null`.

#### Can I request a new feature or filter?

Yes. Right now the actor supports start URLs, search queries, currency, and sort order. If you need other filters or inputs, such as date or price range, get in touch and they can be added.

#### Can I get a custom or private version?

Yes. The actor can be customized for your workflow, delivered as a private version, or a new scraper can be built for a different website. Use the contact details below.

### Need to scrape other tour and activity platforms?

- [GetYourGuide Scraper - Activities & Attractions](https://apify.com/aboo.script/getyourguide-scraper): tours, tickets, and activities by city, category, or keyword.
- [Viator Scraper](https://apify.com/aboo.script/viator-scraper): tours and activities by destination, category, attraction, or search.
- [Tiqets Scraper - Attractions & Tours](https://apify.com/aboo.script/tiqets-scraper): attractions, tours, and tickets by city, category, venue, or keyword.
- [Agoda Activities Scraper](https://apify.com/aboo.script/agoda-scraper): tours, attractions, tickets, and transfers by city, keyword, or URL.
- [Rayna Tours Scraper](https://apify.com/aboo.script/raynatours-scraper): tours, attractions, and events in 50+ cities with every option price.

***

**Need help or want a custom solution?**

- 📧 Email: aboo.script@gmail.com
- 🧩 More scrapers: [Apify profile](https://apify.com/aboo.script)

### Image Credit

Image credit: [Headout](https://www.headout.com/)

# Actor input Schema

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

Headout URLs: a city page (https://www.headout.com/things-to-do-city-dubai/), a category page (https://www.headout.com/tickets-dubai-ca-1~6/), a subcategory page (https://www.headout.com/landmarks-dubai-sc-1007~6/), a collection page (https://www.headout.com/burj-khalifa-tickets-c-158/), a search page (https://www.headout.com/search/?q=paris) or an experience page (https://www.headout.com/burj-khalifa-tickets/burj-khalifa-at-the-top-tickets-level-124-125-e-1866/).

## `searchQueries` (type: `array`):

City, attraction or activity names (for example Dubai, Burj Khalifa, Louvre). A city name returns the city's experiences, an attraction name returns its collection. Each query is scraped separately.

## `currency` (type: `string`):

Show every price in this currency. Leave empty to keep each city's local currency.

## `sortBy` (type: `string`):

Order of the experiences on list pages and search results.

## `maxResults` (type: `integer`):

Maximum number of experiences per start URL or search query. Use 0 for no limit.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.headout.com/things-to-do-city-dubai/"
    }
  ],
  "sortBy": "popularity",
  "maxResults": 5
}
```

# 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": [
        {
            "url": "https://www.headout.com/things-to-do-city-dubai/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("aboo.script/headout-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": [{ "url": "https://www.headout.com/things-to-do-city-dubai/" }] }

# Run the Actor and wait for it to finish
run = client.actor("aboo.script/headout-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": [
    {
      "url": "https://www.headout.com/things-to-do-city-dubai/"
    }
  ]
}' |
apify call aboo.script/headout-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aboo.script/headout-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/UtiNvIXdWFffMrE5B/builds/rB6wejaVV2ReIVpOD/openapi.json
