# Theme Park Wait Times History - Disney, Universal, 100+ Parks (`that_red_bird/theme-park-wait-times-history`) Actor

Live ride waits only show now. Snapshot Disney, Universal, SeaWorld, Six Flags and 100+ parks into a growing history, with a best-hour-to-ride summary per ride. Schedule it every 15-30 minutes. Powered by ThemeParks.wiki and Queue-Times.com.

- **URL**: https://apify.com/that_red_bird/theme-park-wait-times-history.md
- **Developed by:** [mohamed alaya](https://apify.com/that_red_bird) (community)
- **Categories:** Travel, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.30 / 1,000 wait snapshots

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Wait Times History - Disney, Universal, 100+ Parks

Takes a snapshot of live ride wait times for Disney, Universal, SeaWorld, Six Flags, Cedar Fair, Merlin and 100+ more parks, and builds the history the sources do not keep. After a few runs it tells you the best hour of the day to ride each attraction.

For trip planners, fan sites, bloggers and data journalists.

**Data credit:** wait times come from [ThemeParks.wiki](https://themeparks.wiki) and [Queue-Times.com](https://queue-times.com). Queue-Times requires a credit: every row carries an `attribution` field ("Powered by Queue-Times.com") and the run summary lists the credit lines. Please keep them if you publish the data.

### Input examples

**1. Default (`{}`)** - Magic Kingdom, now:

```json
{}
```

**2. Several parks from both sources, kept in your own history store**

```json
{ "source": "both", "parks": ["Epcot", "Universal Studios Florida", "Alton Towers"], "maxParks": 5, "historyStoreName": "my-park-waits" }
```

**3. Every park of ThemeParks.wiki (capped)**

```json
{ "source": "themeparks.wiki", "parks": ["all"], "maxParks": 20 }
```

### Input guide

- **Parks** are matched by part of the name (case-insensitive). `all` takes every park, limited by `maxParks`.
- **History store** is a named key-value store that accumulates readings between runs (per ride, per weekday and hour, newest 12 readings each, kept for `historyDays`). Use the same name every time.
- **Schedule it** every 15-30 minutes during park hours for a useful best-hour summary.

### Output

| Field | Meaning |
|---|---|
| type | `wait-snapshot`, `best-hour`, `run-summary`, `error` |
| parkName, rideName, land | Park and attraction |
| status, isOpen, waitMinutes | Current state and standby wait |
| localDay, localHour, timezone | Park-local time of the reading |
| bestHourLocal, bestHourMedianWait | Quietest hour of the day (median wait), from stored history |
| busiestHourLocal, busiestHourMedianWait | Busiest hour |
| samples, hoursCovered | How much history the summary rests on |
| attribution | Required data credit |

Sample row:

```json
{"type":"wait-snapshot","source":"themeparks.wiki","parkName":"EPCOT","rideName":"Spaceship Earth","status":"OPERATING","isOpen":true,"waitMinutes":5,"localDay":"Sun","localHour":17,"attribution":"Live data via ThemeParks.wiki (https://themeparks.wiki)"}
```

### Use it with

Google Sheets / Looker Studio from the dataset; a Telegram or Slack bot that posts "best time to ride" for your trip park; pair with a weather Actor to study rain vs crowds.

### FAQ

**Why are there no `best-hour` rows?** They need readings in at least two different hours of the day (two readings each by default). Schedule the Actor and they appear.
**Does it cover ride closures?** Closed rides show `isOpen: false` when `includeClosed` is on; they are not charged.

### Limits (honest)

- Waits are the standby queue only (no Lightning Lane / virtual queue prices). Sources may lag by several minutes.
- History is only as good as your schedule; the Actor cannot invent past waits.
- Park time-zone handling uses the source's time zone; a few small parks may lack one (UTC is used then).

### Price

Pay per event: **$0.0003 per ride wait recorded**. Example: a park with 40 open rides, scheduled every 30 minutes for 12 hours = 24 runs x 40 x $0.0003 = **$0.29 per park-day**. Best-hour and summary rows are free.

# Actor input Schema

## `source` (type: `string`):

ThemeParks.wiki (Disney, Universal, SeaWorld, Six Flags and more), Queue-Times.com (Cedar Fair, Merlin, Europe, Asia and more) or both. Queue-Times rows carry its required 'Powered by Queue-Times.com' credit.

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

Park names or parts of names, for example 'Magic Kingdom', 'Epcot', 'Universal Studios Florida', 'Alton Towers'. Use 'all' for every park (limited by Max parks).

## `maxParks` (type: `integer`):

Upper limit of parks snapshotted per source per run.

## `includeClosed` (type: `boolean`):

Also output rides that are closed or have no wait reading. They are never charged.

## `historyStoreName` (type: `string`):

Named key-value store where wait readings accumulate between runs (this is what makes 'best hour to ride' possible). Use the same name on every scheduled run. Empty = remember nothing.

## `historyDays` (type: `integer`):

Rides not seen with a wait for this many days are dropped from the stored history.

## `bestHourMinSamples` (type: `integer`):

An hour of the day needs at least this many stored readings to count in the best-hour summary.

## Actor input object example

```json
{
  "source": "themeparks.wiki",
  "parks": [
    "Magic Kingdom"
  ],
  "maxParks": 3,
  "includeClosed": false,
  "historyStoreName": "theme-park-wait-history",
  "historyDays": 90,
  "bestHourMinSamples": 2
}
```

# Actor output Schema

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

No description

## `downloadCsv` (type: `string`):

No description

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

No description

## `count` (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 = {
    "source": "themeparks.wiki",
    "parks": [
        "Magic Kingdom"
    ],
    "maxParks": 3,
    "includeClosed": false,
    "historyStoreName": "theme-park-wait-history",
    "historyDays": 90,
    "bestHourMinSamples": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("that_red_bird/theme-park-wait-times-history").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 = {
    "source": "themeparks.wiki",
    "parks": ["Magic Kingdom"],
    "maxParks": 3,
    "includeClosed": False,
    "historyStoreName": "theme-park-wait-history",
    "historyDays": 90,
    "bestHourMinSamples": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("that_red_bird/theme-park-wait-times-history").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 '{
  "source": "themeparks.wiki",
  "parks": [
    "Magic Kingdom"
  ],
  "maxParks": 3,
  "includeClosed": false,
  "historyStoreName": "theme-park-wait-history",
  "historyDays": 90,
  "bestHourMinSamples": 2
}' |
apify call that_red_bird/theme-park-wait-times-history --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,that_red_bird/theme-park-wait-times-history"
        }
    }
}
```

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/gISaphh0aAuTgVDMc/builds/4mdeAGItFZ8VROGQ5/openapi.json
