# Theme Park Ticket Prices - Daily Price Calendar, 119 Parks (`scrapercompany/theme-park-ticket-prices`) Actor

Scrape theme park ticket prices for every visit date: daily price, open, closed or sold-out status and ticket types for 119 parks (Disney, Universal, Six Flags, Cedar Fair, SeaWorld, Efteling, Europa-Park...), up to 92 days ahead, with capacity where published. Made by ScraperCompany.

- **URL**: https://apify.com/scrapercompany/theme-park-ticket-prices.md
- **Developed by:** [ScraperCompany](https://apify.com/scrapercompany) (community)
- **Categories:** Travel, E-commerce
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.16 / 1,000 park calendar months

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

## Theme Park Ticket Prices - Daily Price Calendar, 119 Parks

**Theme Park Ticket Prices** by ScraperCompany reads each park's own ticket calendar and returns **the price and status for every visit date**: open, closed, sold out or unavailable, the ticket types on sale, and a summary with the **cheapest dates**, minimum and maximum price and counts of open, closed and sold-out days. It covers **119 parks** in the US, Europe, Japan and Australia, up to **92 days** ahead, and adds **crowd and capacity numbers** for the 55 parks that publish them. Pricing is pay-per-event: **$0.007 per park per 31 days**; empty calendars and failed requests are free.

**Nothing to set up:** no code, no login and no keys. Start a run, then export JSON, CSV or Excel, or pull the results through the Apify API. You pay only for results; failed and empty requests are free.

### What can this theme park ticket scraper do?

- **119 parks**: Disney, Universal, Six Flags, Cedar Fair, SeaWorld and Busch Gardens, Merlin (LEGOLAND, Alton Towers), Efteling, Europa-Park, PortAventura, Tokyo Disney Resort and more.
- **Daily price and status** for each visit date, with the ticket types on sale.
- **Summary**: cheapest dates, lowest and highest price, open, closed and sold-out days.
- **Capacity add-on**: crowd and capacity numbers for the 55 parks that publish them.
- Up to 92 days per request; batch many parks per run.

### What makes it different?

| | **Theme Park Ticket Prices** | Many alternatives |
| --- | --- | --- |
| Setup | Nothing to configure: no login, no keys | Often your own accounts, cookies or network setup |
| You pay for | Successful results; failed and empty requests are free | Often run time, or every attempt |
| When a site pushes back | Retried and handled for you | Often an empty or failed run |

### Who uses theme park ticket data?

- **Parks and attractions**: Watch competitors' date-based ticket pricing and sell-outs across a season.
- **Travel sellers and hotels near parks**: Show guests the cheapest days to visit and plan packages around closed or sold-out dates.
- **Analysts**: Study dynamic ticket pricing, demand peaks and crowd levels by park and date.

### What theme park ticket data can you extract?

| Field | Description |
| --- | --- |
| `park.name / id / operator / country / currency` | Park identity |
| `calendar[].date / price / currency` | Ticket price for each visit date |
| `calendar[].status` | open, closed, sold_out or unavailable |
| `calendar[].tickets[]` | Ticket types on sale that day |
| `calendar[].availability` | Capacity or crowd level (with Include capacity) |
| `summary.cheapest_dates / min_price / max_price` | Best days and price range |
| `summary.open_days / closed_days / sold_out_days` | Status counts |

Every dataset item also carries `input` (the options used for that request), `request_id` (quote it to support), `billed` and `scraped_at`.

### How to scrape theme park ticket prices

1. Open Theme Park Ticket Prices in Apify Console and go to the **Input** tab.
2. Enter park ids from the list below (one per line), how many **days** to cover (1-92) and optionally a **start date**. Turn on **Include capacity** for crowd numbers.
3. Adjust the options if needed. Dates accept an exact date (`2026-12-01`) or a relative one (`30 days` from today), so saved tasks and schedules never go stale.
4. Click **Start** and wait for the run to finish.
5. Download the results from the **Output** tab as JSON, CSV, Excel or HTML, or fetch them with the Apify API.

### Input

| Input | Name | What it does |
| --- | --- | --- |
| `parks` | Parks | .g. `dollywood`, `cedar-point`, `europa-park`, `efteling`, `tokyo-disneyland`), or the park's ticket-page URL. |
| `days` | Days | How many visit dates from the start date (1-92). Each started 31 days is one charge. |
| `start_date` | Start date | First visit date (`YYYY-MM-DD`). Leave empty for today. |
| `include_capacity` | Include capacity | .004 per 31 days). |

### Input example

This is the default input; running the Actor without changes uses it.

```json
{
  "parks": [
    "dollywood"
  ],
  "days": 31,
  "include_capacity": false,
  "includeErrors": true,
  "maxConcurrency": 3,
  "maxRetries": 2
}
```

### Output example

One dataset item per request (trimmed here; real items contain all the fields):

```json
{
  "input": {
    "park": "dollywood",
    "days": 31
  },
  "calendar": [
    {
      "availability": null,
      "currency": "EUR",
      "date": "2026-11-01",
      "price": 49,
      "status": "open",
      "tickets": [
        {
          "currency": "EUR",
          "list_price": null,
          "name": "Single tariff",
          "price": 49,
          "price_before_tax": null,
          "product_id": "TPAD1BIN0391",
          "tax": null,
          "tax_included": null,
          "visitor_type": "any"
        }
      ]
    },
    {
      "availability": null,
      "currency": null,
      "date": "2026-11-02",
      "price": null,
      "status": "unavailable",
      "tickets": []
    }
  ],
  "meta": {
    "price_basis": "online_price_as_listed",
    "source": "official_site"
  },
  "park": {
    "capacity": false,
    "country": "FR",
    "currency": "EUR",
    "id": "parc-asterix",
    "name": "Parc Astérix",
    "operator": "Compagnie des Alpes",
    "timezone": "Europe/Paris",
    "website": "https://www.parcasterix.fr"
  },
  "search_parameters": {
    "end_date": "2026-11-07",
    "park": "parc-asterix",
    "start_date": "2026-11-01"
  },
  "summary": {
    "cheapest_dates": [
      "2026-11-01",
      "2026-11-07"
    ],
    "closed_days": 0,
    "max_price": 59,
    "min_price": 49,
    "open_days": 2,
    "sold_out_days": 0,
    "unavailable_days": 5
  },
  "request_id": "req_3f9c0d6e2b8a4c1f9e7d5b3a1c0e8f6d",
  "billed": true,
  "scraped_at": "2026-10-01T14:03:27.512Z"
}
```

A request that fails is saved with an `error` message instead (turn off **Include failed requests** to skip those). Failed requests are never charged.

### How much does it cost to scrape theme park ticket prices?

This Actor uses **pay-per-event** pricing: you pay for successful requests, not for compute time.

| Event | Charged when | Price | Per 1,000 |
| --- | --- | --- | --- |
| `park-month` | Up to 31 days of one park's ticket calendar: price and status for each date. A 92-day calendar is 3 events. Empty calendars are free. | $0.007 | $7.00 |
| `capacity-month` | Crowd and capacity numbers for up to 31 days, when Include capacity is on (parks that publish them). | $0.004 | $4.00 |

Paid Apify plans pay less: `park-month` up to 12% off, `capacity-month` up to 5% off (Bronze 5%, more on higher plans). The Pricing tab shows the price on your plan.

**What a real run costs:**

- 100 requests: **$0.70**
- 1,000 requests: **$7.00**
- 10,000 requests: **$70.00**

Apify's $5 of free monthly usage covers about **714** `park-month` events.

- Failed requests (errors, invalid input, a site refusing after retries) are **free**.
- Requests where the source returns nothing at all (no results, nothing priced) are saved but **not charged**.
- Set **Maximum cost per run** when you start a run and the Actor stops cleanly before going over it.

### Run it on a schedule

Use Apify **Schedules** to repeat a run hourly, daily or weekly and compare results over time, and **webhooks** or the **Integrations** tab to push new results to Make, Zapier, n8n, Google Sheets, Slack or your own warehouse.

### Use it with AI agents

Results are structured JSON, so they are easy to feed to a model. AI agents such as Claude can run this Actor and read its results through the [Apify MCP server](https://mcp.apify.com).

### FAQ

#### Do I need an account on the site, or an API key?

No. The Actor is ready to run as is, and you only pay the per-event prices above.

#### Which parks are covered?

**United States**: Adventure Island (`adventure-island`), Adventureland (`adventureland-iowa`), Aquatica Orlando (`aquatica-orlando`), Aquatica San Antonio (`aquatica-san-antonio`), Busch Gardens Tampa Bay (`busch-gardens-tampa-bay`), Busch Gardens Williamsburg (`busch-gardens-williamsburg`), California's Great America (`californias-great-america`), Carowinds (`carowinds`), Cedar Point (`cedar-point`), Disney's Animal Kingdom (`animal-kingdom`), Disney's Hollywood Studios (`hollywood-studios`), Disneyland Resort (1 park a day: Disneyland Park or Disney California Adventure) (`disneyland-resort`), Dollywood (`dollywood`), Dorney Park (`dorney-park`), Dutch Wonderland (`dutch-wonderland`), EPCOT (Walt Disney World) (`epcot`), Epic Universe (`epic-universe`), Holiday World & Splashin' Safari (`holiday-world`), Hurricane Harbor Arlington (`hurricane-harbor-arlington`), Hurricane Harbor Concord (`hurricane-harbor-concord`), Hurricane Harbor Oklahoma City (`hurricane-harbor-oklahoma-city`), Hurricane Harbor Rockford (`hurricane-harbor-rockford`), Idlewild & SoakZone (`idlewild`), Indianapolis Zoo (`indianapolis-zoo`), Kennywood (`kennywood`), Kentucky Kingdom (`kentucky-kingdom`), Kings Dominion (`kings-dominion`), Kings Island (`kings-island`), Knott's Berry Farm (`knotts-berry-farm`), LEGOLAND California (`legoland-california`), LEGOLAND Florida (`legoland-florida`), LEGOLAND New York (`legoland-new-york`), Lake Compounce (`lake-compounce`), Magic Kingdom (Walt Disney World) (`magic-kingdom`), Mt. Olympus Water & Theme Park (`mt-olympus`), Noah's Ark Waterpark (`noahs-ark`), Schlitterbahn New Braunfels (`schlitterbahn-new-braunfels`), SeaWorld Orlando (`seaworld-orlando`), SeaWorld San Antonio (`seaworld-san-antonio`), SeaWorld San Diego (`seaworld-san-diego`), Sesame Place Philadelphia (`sesame-place-philadelphia`), Sesame Place San Diego (`sesame-place-san-diego`), Silver Dollar City (`silver-dollar-city`), Six Flags Darien Lake (`six-flags-darien-lake`), Six Flags Discovery Kingdom (`six-flags-discovery-kingdom`), Six Flags Fiesta Texas (`six-flags-fiesta-texas`), Six Flags Frontier City (`six-flags-frontier-city`), Six Flags Great Adventure (`six-flags-great-adventure`), Six Flags Great America (`six-flags-great-america`), Six Flags Magic Mountain (`six-flags-magic-mountain`), Six Flags New England (`six-flags-new-england`), Six Flags Over Georgia (`six-flags-over-georgia`), Six Flags Over Texas (`six-flags-over-texas`), Six Flags White Water (`six-flags-white-water`), Story Land (`story-land`), Universal Orlando (1 park a day: Universal Studios Florida or Islands of Adventure) (`universal-orlando`), Universal Studios Hollywood (`universal-studios-hollywood`), Universal's Volcano Bay (`volcano-bay`), Water Country USA (`water-country-usa`), Wild Adventures (`wild-adventures`). **Australia**: Adventure World (`adventure-world-perth`), Dreamworld (`dreamworld`), Warner Bros. Movie World (`movie-world-gold-coast`). **Belgium**: Aqualibi (`aqualibi`), Bellewaerde (`bellewaerde`), Bobbejaanland (`bobbejaanland`), Pairi Daiza (`pairi-daiza`), Walibi Belgium (`walibi-belgium`). **Canada**: Canada's Wonderland (`canadas-wonderland`), La Ronde (`la-ronde`). **Germany**: Erlebnispark Tripsdrill (`tripsdrill`), Europa-Park (`europa-park`), Fort Fun Abenteuerland (`fort-fun`), Heide Park (`heide-park`), LEGOLAND Deutschland (`legoland-deutschland`), Movie Park Germany (`movie-park-germany`), Phantasialand (`phantasialand`), Rulantica (`rulantica`), Tropical Islands (`tropical-islands`). **Denmark**: LEGOLAND Billund (`legoland-billund`). **Spain**: Caribe Aquatic Park (`caribe-aquatic-park`), Ferrari Land (`ferrari-land`), Parque Warner Madrid (`parque-warner-madrid`), Parque de Atracciones de Madrid (`parque-de-atracciones-madrid`), PortAventura Park (`portaventura-park`), Puy du Fou España (`puy-du-fou-espana`). **France**: La Ferme aux Crocodiles (`la-ferme-aux-crocodiles`), Parc Astérix (`parc-asterix`), Puy du Fou (`puy-du-fou`), Walibi Rhône-Alpes (`walibi-rhone-alpes`). **United Kingdom**: Alton Towers (`alton-towers`), Chessington World of Adventures (`chessington`), Chester Zoo (`chester-zoo`), Drayton Manor (`drayton-manor`), LEGOLAND Windsor (`legoland-windsor`), Paultons Park (`paultons-park`), Thorpe Park (`thorpe-park`), West Midland Safari Park (`west-midland-safari-park`). **Italy**: Leolandia (`leolandia`), Mirabeach (`mirabeach`), Mirabilandia (`mirabilandia`). **Japan**: Fuji-Q Highland (`fuji-q-highland`), Tokyo DisneySea (`tokyo-disneysea`), Tokyo Disneyland (`tokyo-disneyland`). **Mexico**: Six Flags México (`six-flags-mexico`). **Netherlands**: Apenheul (`apenheul`), Attractiepark Slagharen (`slagharen`), DierenPark Amersfoort (`dierenpark-amersfoort`), Duinrell (`duinrell`), Efteling (`efteling`), Familiepark Drievliet (`drievliet`), Toverland (`toverland`), Walibi Holland (`walibi-holland`). **Norway**: Bø Sommarland (`bo-sommarland`), TusenFryd (`tusenfryd`). **Sweden**: Furuvik (`furuvik`), Gröna Lund (`gronalund`), Kolmården (`kolmarden`), Liseberg (`liseberg`)

#### Which prices are these?

The park's own price for a one-day ticket on each date, as its ticket page shows it (the <code>price_basis</code> in <code>meta</code> says which ticket). Parks without dated pricing show their gate price on each open day.

#### How far ahead can I look?

Up to 92 days per request from any start date the park sells. Each started 31 days is one charge.

#### Can you add a park?

Ask through the Issues tab; many parks share a ticketing platform we already read.

#### Is it legal to scrape theme park ticket prices?

The Actor collects publicly available information that anyone can see without logging in. You are responsible for how you use the results: respect the source site's terms, copyright and privacy law (such as GDPR) and do not collect personal data without a lawful basis. If in doubt, ask a lawyer.

#### What happens when a request is blocked or rate-limited?

Temporary errors are retried automatically. If a request still fails it is saved with the error message and not charged, and the rest of the batch keeps going. A run only fails when every request failed.

#### Why did a request return an error?

Read the `error` field: it says what was wrong with the input, for example a malformed date or an unknown id. Fix it and run again; failed requests cost nothing.

#### How many requests can I run at once?

Any number per run. The Actor sends up to 3 requests in parallel by default (change it under **Run options**); larger batches simply take longer.

### Use it from your code

Call the Actor from any language through the [Apify API](https://docs.apify.com/api/v2). With the JavaScript client (`npm install apify-client`):

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('scrapercompany/theme-park-ticket-prices').call({
    "parks": [
        "dollywood"
    ]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

With Python (`pip install apify-client`):

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("scrapercompany/theme-park-ticket-prices").call(run_input={
    "parks": ["dollywood"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### Related scrapers

- [Google Hotels Price Calendar Scraper](https://apify.com/scrapercompany/google-hotels-calendar-scraper): hotel prices near the park for every night
- [Car Rental Prices Scraper](https://apify.com/scrapercompany/car-rental-prices-scraper): rental cars for the trip

### Support

Questions, a field you need, or a site that stopped working? Open an issue on the **Issues** tab. Include the `request_id` from the dataset item so we can trace the request.

# Changelog

This Actor's version history is a separate document: https://apify.com/scrapercompany/theme-park-ticket-prices/changelog.md

# Actor input Schema

## `parks` (type: `array`):

One park per line, by id from the README's park list (e.g. <code>dollywood</code>, <code>cedar-point</code>, <code>europa-park</code>, <code>efteling</code>, <code>tokyo-disneyland</code>), or the park's ticket-page URL.

## `days` (type: `integer`):

How many visit dates from the start date (1-92). Each started 31 days is one charge.

## `start_date` (type: `string`):

First visit date (<code>YYYY-MM-DD</code>). Leave empty for today.

## `include_capacity` (type: `boolean`):

Add crowd and capacity numbers where the park publishes them (+$0.004 per 31 days).

## `customRequests` (type: `array`):

Optional list of JSON objects, one request each, using the field names shown above. Each object is merged over the options above, so you only need to give what differs. Example: <code>{"park":"europa-park","days":62,"start_date":"2027-05-01"}</code>

## `includeErrors` (type: `boolean`):

When on, a request that fails (for example an unknown property id) is saved as a dataset item with an <code>error</code> message so you can see what went wrong. Failed requests are never charged.

## `maxConcurrency` (type: `integer`):

How many requests run at the same time (1-8). Parallel runs share one limit, so extra requests wait for a free slot instead of failing.

## `maxRetries` (type: `integer`):

How many times a request that failed for a temporary reason is tried again. Invalid input is never retried.

## Actor input object example

```json
{
  "parks": [
    "dollywood"
  ],
  "days": 31,
  "include_capacity": false,
  "includeErrors": true,
  "maxConcurrency": 3,
  "maxRetries": 2
}
```

# Actor output Schema

## `results` (type: `string`):

One dataset item per request.

## `summary` (type: `string`):

Counts of succeeded, failed, skipped and charged requests.

# 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 = {
    "parks": [
        "dollywood"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapercompany/theme-park-ticket-prices").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 = { "parks": ["dollywood"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapercompany/theme-park-ticket-prices").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 '{
  "parks": [
    "dollywood"
  ]
}' |
apify call scrapercompany/theme-park-ticket-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapercompany/theme-park-ticket-prices"
        }
    }
}
```

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/Sbxm0bXWtW1pos1q5/builds/0i8r8Gx6ZELuZg69R/openapi.json
