# TVmaze TV Schedule Scraper (`parseforge/tvmaze-schedule-scraper`) Actor

Export daily TV schedules and people records from the TVmaze database. Pick a country and date to pull airing episodes with show, network, runtime, summary, and cast. Search people by name to get bios, birthdays, and image URLs.

- **URL**: https://apify.com/parseforge/tvmaze-schedule-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Videos, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $11.00 / 1,000 result items

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 📺 TVmaze TV Schedule Scraper

> 🚀 **Export daily TV schedules, show catalogs, and people records in seconds.** Pull airing episodes, full show metadata, and cast across **55+ countries**. No API key, no registration, no login walls.

> 🕒 **Last updated:** 2026-05-22 · **📊 40+ fields** per record · **🌍 55 countries** · **📺 5 data modes** · **🎬 every airing episode**

The **TVmaze TV Schedule Scraper** exports the community-maintained global TV catalog and returns up to **40+ structured fields per record**, including episode metadata, full show details, network, premiere and finale dates, ratings, IMDb cross-references, and cast bios. The underlying dataset is one of the most widely cited open television references and has been maintained since 2008.

Coverage spans **daily TV schedules across 55+ countries**, the complete show catalog with seasons and episodes, single-show drill-downs by ID, and a global people search for actors, hosts, and crew. Records are returned as CSV, Excel, JSON, or XML in under a minute. All filters run on the source side, so you skip the parser engineering entirely.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| EPG and streaming dashboards, TV app developers, recommendation engines, content licensing teams, entertainment journalists, fan sites | Daily airing grids, "what's on tonight" widgets, show metadata enrichment, cast lookups, recommendation engine training, IMDb cross-referencing |

---

### 📋 What the TVmaze Scraper does

Five data modes in a single Actor:

- 📅 **Daily Schedule.** Every episode airing on a given date in a chosen country.
- 🔍 **Show Search.** Keyword search across the global show catalog.
- 🎬 **Show Details.** Full show metadata, episodes, seasons by numeric show ID.
- 📚 **Show Catalog Page.** Page through the full show index (250 shows per page).
- 🧑 **People Search.** Look up actors, hosts, and crew by name with bios and image URLs.

Each record carries cross-mode keys (`showId`, `personId`, `episodeId`) plus external IDs (`imdb`, `thetvdb`, `tvrage`) so you can JOIN against any other entertainment dataset.

> 💡 **Why it matters:** TV schedule and show metadata powers EPG grids, streaming app guides, recommendation systems, and editorial coverage. Building your own pipeline means scraping multiple network sites, normalizing timezones, and rebuilding when each broadcaster changes layout. This Actor skips all of that.

---

### 🎬 Full Demo

_🚧 Coming soon: a 3-minute walkthrough showing how to go from sign-up to a downloaded TV dataset._

---

### ⚙️ Input

<table>
<thead>
<tr><th>Input</th><th>Type</th><th>Default</th><th>Behavior</th></tr>
</thead>
<tbody>
<tr><td>maxItems</td><td>integer</td><td>10</td><td>Records to return. Free plan caps at 10, paid plan at 1,000,000.</td></tr>
<tr><td>mode</td><td>string</td><td>"schedule"</td><td>One of 5 modes: schedule, shows, showDetail, showsIndex, people.</td></tr>
<tr><td>country</td><td>string</td><td>"US"</td><td>ISO 3166-1 alpha-2 country code for the daily schedule. 55 countries supported.</td></tr>
<tr><td>date</td><td>string</td><td>today</td><td>YYYY-MM-DD. Used with schedule mode only.</td></tr>
<tr><td>showQuery</td><td>string</td><td>null</td><td>Search term for show search mode (e.g. "breaking bad").</td></tr>
<tr><td>showId</td><td>integer</td><td>null</td><td>Numeric show ID for showDetail mode (169 = Breaking Bad).</td></tr>
<tr><td>showsPage</td><td>integer</td><td>0</td><td>Page index for showsIndex mode (250 shows per page).</td></tr>
<tr><td>peopleQuery</td><td>string</td><td>null</td><td>Search term for people search mode.</td></tr>
</tbody>
</table>

**Example: tonight's UK TV schedule.**

```json
{
    "maxItems": 100,
    "mode": "schedule",
    "country": "GB"
}
````

**Example: full show metadata for Breaking Bad.**

```json
{
    "mode": "showDetail",
    "showId": 169
}
```

> ⚠️ **Good to Know:** schedule records can carry timezones distinct from your local clock. Use the `airstamp` field (UTC) when you need a normalized timestamp; `airtime` and `airdate` reflect the broadcaster's local schedule. People records may have `birthday` or `deathday` set to null when the source has no public data.

***

### 📊 Output

Each record is tagged with a `recordType` and carries the relevant subset of **40+ fields**. Download the dataset as CSV, Excel, JSON, or XML.

#### 🧾 Schema

| Field | Type | Example |
|---|---|---|
| 🖼️ `imageUrl` | string | null | `"https://static.tvmaze.com/uploads/.../jpg"` |
| 🏷️ `recordType` | string | `"episode"` |
| 🎞️ `episodeId` | number | `3621165` |
| 🏷️ `episodeName` | string | `"Episode 98"` |
| 🎯 `episodeType` | string | `"regular"` |
| 🔢 `season`, `number` | number | `2026, 98` |
| 📆 `airdate`, `airtime`, `airstamp` | string | `"2026-05-20", "00:00", "2026-05-21T04:00:00+00:00"` |
| ⏱️ `runtime` | number | null | `120` |
| ⭐ `episodeRating` | number | null | `8.4` |
| 🔗 `episodeUrl` | string | null | `"https://www.tvmaze.com/episodes/.../episode-98"` |
| 📝 `summary` | string | null | HTML snippet |
| 🎬 `showId`, `showName`, `showType` | number, string | `82, "Game of Thrones", "Scripted"` |
| 🌐 `language` | string | null | `"English"` |
| 🏷️ `genres` | array | `["Drama", "Action"]` |
| 📡 `showStatus` | string | `"Running"` |
| ⏱️ `showRuntime`, `showAverageRuntime` | number | `60, 56` |
| ⭐ `showRating`, `showWeight` | number | `9.3, 100` |
| 📆 `premiered`, `ended` | date | null | `"2011-04-17", "2019-05-19"` |
| 🕒 `scheduleTime` | string | `"21:00"` |
| 📅 `scheduleDays` | array | `["Sunday"]` |
| 📺 `networkName`, `networkCountry`, `networkTimezone` | string | `"HBO", "US", "America/New_York"` |
| 🎫 `imdb`, `thetvdb`, `tvrage` | string, number | `"tt0944947", 121361, 24493` |
| 🔗 `officialSite`, `showUrl` | string | null | `"https://hbo.com/..."` |
| 🧑 `personId`, `personName` | number, string | `27, "Hugh Laurie"` |
| 🌍 `country`, `birthday`, `deathday`, `gender` | string | null | `"GB", "1959-06-11", null, "Male"` |
| 🔗 `personUrl` | string | null | `"https://www.tvmaze.com/people/.../hugh-laurie"` |
| 🕒 `scrapedAt` | ISO 8601 | `"2026-05-22T00:00:00.000Z"` |

#### 📦 Sample records

<details>
<summary><strong>📅 Daily schedule: airing episode</strong></summary>

```json
{
    "imageUrl": "https://static.tvmaze.com/uploads/images/original_untouched/614/1536142.jpg",
    "recordType": "episode",
    "episodeId": 3621165,
    "episodeName": "Episode 98",
    "episodeType": "regular",
    "season": 2026,
    "number": 98,
    "airdate": "2026-05-20",
    "airtime": "00:00",
    "airstamp": "2026-05-21T04:00:00+00:00",
    "runtime": 120,
    "episodeUrl": "https://www.tvmaze.com/episodes/3621165/the-story-is-with-elex-michaelson-2026-05-20-episode-98",
    "scrapedAt": "2026-05-22T00:00:00.000Z"
}
```

</details>

<details>
<summary><strong>🎬 Show detail: Breaking Bad</strong></summary>

```json
{
    "recordType": "show",
    "showId": 169,
    "showName": "Breaking Bad",
    "showType": "Scripted",
    "language": "English",
    "genres": ["Drama", "Crime", "Thriller"],
    "showStatus": "Ended",
    "showRuntime": 60,
    "showRating": 9.3,
    "premiered": "2008-01-20",
    "ended": "2013-09-29",
    "networkName": "AMC",
    "networkCountry": "US",
    "imdb": "tt0903747",
    "officialSite": "http://www.amctv.com/shows/breaking-bad",
    "scrapedAt": "2026-05-22T00:00:00.000Z"
}
```

</details>

<details>
<summary><strong>🧑 People search: Hugh Laurie</strong></summary>

```json
{
    "recordType": "person",
    "personId": 27,
    "personName": "Hugh Laurie",
    "country": "GB",
    "birthday": "1959-06-11",
    "deathday": null,
    "gender": "Male",
    "personUrl": "https://www.tvmaze.com/people/27/hugh-laurie",
    "scrapedAt": "2026-05-22T00:00:00.000Z"
}
```

</details>

***

### ✨ Why choose this Actor

| | Capability |
|---|---|
| 📺 | **5 data modes.** Schedule, show search, show detail, show catalog index, people search. |
| 🌍 | **55 country schedules.** Daily airing grids for every major broadcast market. |
| 🔑 | **Cross-system IDs.** IMDb, TheTVDB, and TVRage codes ready for JOINs. |
| ⚡ | **Fast.** 10 records in under 5 seconds, 1,000 episodes in under a minute. |
| 🎬 | **Cast and crew.** People search returns bios, country, and image URLs. |
| 🚫 | **No authentication.** Works with the public TV catalog. No login, no API key. |
| 🔁 | **Always fresh.** Every run fetches the latest schedule data, so the dataset reflects today's grid. |

> 📊 Accurate TV schedule data is the foundation of every electronic program guide, streaming app, recommendation engine, and editorial coverage site in modern entertainment.

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Filters | Setup |
|---|---|---|---|---|---|
| **⭐ TVmaze Schedule Scraper** *(this Actor)* | $5 free credit, then pay-per-use | **55 countries, all genres** | **Live per run** | country, date, search, ID, mode | ⚡ 2 min |
| Gracenote / Nielsen EPG feeds | $$$$ enterprise | Global | Streaming | Many | ⏳ Weeks |
| IMDb scraping | Free | Show metadata only | Manual | None | 🐢 Days |
| Per-network scraping | Free | Single network | Manual | None | 🕒 Variable |

Pick this Actor when you want broad multi-country schedule coverage, server-side filtering, and zero parser maintenance.

***

### 🚀 How to use

1. 📝 **Sign up.** [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp) (takes 2 minutes).
2. 🌐 **Open the Actor.** Go to the TVmaze TV Schedule Scraper page on the Apify Store.
3. 🎯 **Set input.** Pick a mode (start with `schedule`), choose a country and date, and set `maxItems`.
4. 🚀 **Run it.** Click **Start** and let the Actor collect your data.
5. 📥 **Download.** Grab your results in the **Dataset** tab as CSV, Excel, JSON, or XML.

> ⏱️ Total time from signup to downloaded dataset: **3-5 minutes.** No coding required.

***

### 💼 Business use cases

<table>
<tr>
<td width="50%" valign="top">

#### 📺 EPG & Streaming Apps

- "What's on tonight" grids for streaming UIs
- Localized program guides for set-top boxes
- Calendar reminders for upcoming premieres
- Country-specific airing schedules for travel apps

</td>
<td width="50%" valign="top">

#### 🎬 Content Licensing & Distribution

- Catalog enrichment with cross-system IDs
- Network and country availability mapping
- Title metadata for licensing deals
- Cast and crew lookups for clearance

</td>
</tr>
<tr>
<td width="50%" valign="top">

#### 🤖 Recommendation Engines

- Genre, runtime, and rating features for ranking
- People co-occurrence graphs from cast
- Show similarity from network and language
- Daily fresh training data for recall

</td>
<td width="50%" valign="top">

#### 📰 Entertainment Editorial & Fansites

- Daily "what aired today" recap pages
- Show-page SEO with structured metadata
- Cast and bio pages with images
- IMDb cross-link enrichment for SEO

</td>
</tr>
</table>

***

### 🔌 Automating TVmaze Schedule Scraper

Control the scraper programmatically for scheduled runs and pipeline integrations:

- 🟢 **Node.js.** Install the `apify-client` NPM package.
- 🐍 **Python.** Use the `apify-client` PyPI package.
- 📚 See the [Apify API documentation](https://docs.apify.com/api/v2) for full details.

The [Apify Schedules feature](https://docs.apify.com/platform/schedules) lets you trigger this Actor on any cron interval. Run daily at midnight for next-day grids, or hourly for catalog updates as new shows are added.

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- TV consumption and trend analyses
- Media studies coursework on network programming
- Cultural and language studies across markets
- Reproducible TV datasets for sociology papers

</td>
<td width="50%">

#### 🎨 Personal and creative

- Side projects, indie EPG apps, portfolio demos
- Personal watch trackers and recommendation tools
- Show-discovery dashboards and visualizations
- Fan wiki content sourcing

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Accessibility-focused TV guides for screen readers
- Public-service broadcaster coverage maps
- Media literacy education resources
- Open culture data contributions

</td>
<td width="50%">

#### 🧪 Experimentation

- Train show-recommendation ML models
- Prototype voice assistants for TV
- Test EPG layouts with real data
- Build agent pipelines that summarize tonight's grid

</td>
</tr>
</table>

***

### 🤖 Ask an AI assistant about this scraper

Open a ready-to-send prompt about this ParseForge actor in the AI of your choice:

- 💬 [**ChatGPT**](https://chat.openai.com/?q=How%20do%20I%20use%20the%20TVmaze%20TV%20Schedule%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🧠 [**Claude**](https://claude.ai/new?q=How%20do%20I%20use%20the%20TVmaze%20TV%20Schedule%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🔍 [**Perplexity**](https://perplexity.ai/search?q=How%20do%20I%20use%20the%20TVmaze%20TV%20Schedule%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🅒 [**Copilot**](https://copilot.microsoft.com/?q=How%20do%20I%20use%20the%20TVmaze%20TV%20Schedule%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)

***

### ❓ Frequently Asked Questions

#### 🧩 How does it work?

Pick a mode, set filters like country and date or a search query, click Start, and the Actor pulls one clean record per episode, show, or person. No browser automation, no captchas, no setup.

#### 🌍 How many countries are supported for the daily schedule?

55 countries across every major broadcast market: US, GB, CA, AU, DE, FR, ES, IT, JP, KR, BR, MX, IN, ZA, plus 41 more.

#### 📅 Can I get tomorrow's or last week's schedule?

Yes. Set the `date` field to any YYYY-MM-DD value. The source covers past, present, and announced future air dates.

#### 🎬 Can I get full show metadata including episodes?

Yes. Run with `mode: "showDetail"` and pass the numeric `showId` (e.g. 169 for Breaking Bad). You get show summary, genres, network, premiered and ended dates, ratings, IMDb cross-references, and the full episode list.

#### 🧑 Can I look up actors and crew?

Yes. Run with `mode: "people"` and pass a `peopleQuery` (e.g. "Hugh Laurie"). You get person ID, country, birthday, gender, and image URL.

#### ⏰ Can I schedule regular runs?

Yes. Use Apify Schedules to trigger this Actor on any cron interval. Common patterns: daily at midnight for next-day grids, or hourly for show catalog updates.

#### 🔗 Are external IDs included for cross-system joins?

Yes. Every show record carries `imdb`, `thetvdb`, and `tvrage` IDs where available, so you can join against IMDb, TheTVDB, or any other entertainment dataset.

#### 💳 Do I need a paid Apify plan to use this Actor?

No. The free Apify plan is enough for testing and small runs (10 records per run). A paid plan lifts the limit and gives you access to scheduling, higher concurrency, and full schedule pulls.

#### 🔁 What happens if a run fails or gets interrupted?

Apify automatically retries transient errors. If a run still fails, inspect the log in the Runs tab, fix the input, and re-run. Partial datasets from failed runs are preserved so you never lose progress.

#### ⚖️ Is this data legal to use?

The source publishes TV schedule data under a permissive open license. Commercial use is generally allowed for analytics, editorial, and product workflows. Review the downstream terms of your specific use case.

#### 🆘 What if I need help?

Our support team is here to help. Contact us through the Apify platform or use the Tally form linked below.

***

### 🔌 Integrate with any app

TVmaze Schedule Scraper connects to any cloud service via [Apify integrations](https://apify.com/integrations):

- [**Make**](https://docs.apify.com/platform/integrations/make) - Automate multi-step workflows
- [**Zapier**](https://docs.apify.com/platform/integrations/zapier) - Connect with 5,000+ apps
- [**Slack**](https://docs.apify.com/platform/integrations/slack) - Get premiere notifications in your channels
- [**Airbyte**](https://docs.apify.com/platform/integrations/airbyte) - Pipe TV grids into your warehouse
- [**GitHub**](https://docs.apify.com/platform/integrations/github) - Trigger runs from commits and releases
- [**Google Drive**](https://docs.apify.com/platform/integrations/drive) - Export datasets straight to Sheets

You can also use webhooks to trigger downstream actions when a run finishes. Push fresh grids into your EPG backend, or alert your team in Slack when a tracked show airs.

***

### 🔗 Recommended Actors

- [**🎥 PR Newswire Scraper**](https://apify.com/parseforge/pr-newswire-scraper) - Press releases for entertainment industry monitoring
- [**🤗 Hugging Face Model Scraper**](https://apify.com/parseforge/hugging-face-model-scraper) - Discover open ML models for recommendation systems
- [**✈️ OurAirports Global Airport Database Scraper**](https://apify.com/parseforge/ourairports-scraper) - Worldwide airport reference data
- [**📈 Indexmundi Scraper**](https://apify.com/parseforge/indexmundi-scraper) - Global demographic and economic indicators
- [**🏨 Agoda Scraper**](https://apify.com/parseforge/agoda-scraper) - Hotel availability, pricing, and reviews

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more reference-data scrapers.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA) to request a new scraper, propose a custom data project, or report an issue.

***

> **⚠️ Disclaimer:** this Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by TVmaze, any TV network, or any production studio. All trademarks mentioned are the property of their respective owners. Only publicly available open TV schedule data is collected.

# Actor input Schema

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `mode` (type: `string`):

What to pull: daily TV schedule, show search, single show detail, the full show catalog page, or a people search.

## `country` (type: `string`):

Country code for the daily TV schedule. Applies to schedule mode only.

## `date` (type: `string`):

Date in YYYY-MM-DD format. Defaults to today if blank. Applies to schedule mode only.

## `showQuery` (type: `string`):

Search term for shows (e.g. 'breaking bad', 'office'). Used when mode is 'shows'.

## `showId` (type: `integer`):

Numeric show ID for the 'showDetail' mode (e.g. 169 = Breaking Bad).

## `showsPage` (type: `integer`):

Page index for the 'showsIndex' mode (0-based, 250 shows per page).

## `peopleQuery` (type: `string`):

Search term for people. Used when mode is 'people'.

## Actor input object example

```json
{
  "maxItems": 10,
  "mode": "schedule",
  "country": "US"
}
```

# 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 = {
    "maxItems": 10,
    "mode": "schedule",
    "country": "US",
    "showsPage": 0
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/tvmaze-schedule-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 = {
    "maxItems": 10,
    "mode": "schedule",
    "country": "US",
    "showsPage": 0,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/tvmaze-schedule-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "maxItems": 10,
  "mode": "schedule",
  "country": "US",
  "showsPage": 0
}' |
apify call parseforge/tvmaze-schedule-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/tvmaze-schedule-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TVmaze TV Schedule Scraper",
        "description": "Export daily TV schedules and people records from the TVmaze database. Pick a country and date to pull airing episodes with show, network, runtime, summary, and cast. Search people by name to get bios, birthdays, and image URLs.",
        "version": "1.0",
        "x-build-id": "XCLtyGA8IRc2KPfi4"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~tvmaze-schedule-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-tvmaze-schedule-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/parseforge~tvmaze-schedule-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-tvmaze-schedule-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/parseforge~tvmaze-schedule-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-tvmaze-schedule-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
                    },
                    "mode": {
                        "title": "Data Mode",
                        "enum": [
                            "schedule",
                            "shows",
                            "showDetail",
                            "showsIndex",
                            "people"
                        ],
                        "type": "string",
                        "description": "What to pull: daily TV schedule, show search, single show detail, the full show catalog page, or a people search."
                    },
                    "country": {
                        "title": "Country (ISO-2)",
                        "enum": [
                            "US",
                            "GB",
                            "CA",
                            "AU",
                            "DE",
                            "FR",
                            "ES",
                            "IT",
                            "NL",
                            "SE",
                            "NO",
                            "DK",
                            "FI",
                            "BE",
                            "IE",
                            "NZ",
                            "JP",
                            "KR",
                            "BR",
                            "MX",
                            "AR",
                            "PT",
                            "PL",
                            "CZ",
                            "AT",
                            "CH",
                            "RU",
                            "TR",
                            "IN",
                            "ZA",
                            "HK",
                            "SG",
                            "MY",
                            "TH",
                            "PH",
                            "HU",
                            "GR",
                            "RO",
                            "BG",
                            "HR",
                            "SK",
                            "SI",
                            "UA",
                            "IL",
                            "AE",
                            "SA",
                            "EG",
                            "CL",
                            "CO",
                            "PE",
                            "VE",
                            "ID",
                            "VN",
                            "TW",
                            "IS"
                        ],
                        "type": "string",
                        "description": "Country code for the daily TV schedule. Applies to schedule mode only."
                    },
                    "date": {
                        "title": "Date",
                        "type": "string",
                        "description": "Date in YYYY-MM-DD format. Defaults to today if blank. Applies to schedule mode only."
                    },
                    "showQuery": {
                        "title": "Show Search Query",
                        "type": "string",
                        "description": "Search term for shows (e.g. 'breaking bad', 'office'). Used when mode is 'shows'."
                    },
                    "showId": {
                        "title": "Show ID",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Numeric show ID for the 'showDetail' mode (e.g. 169 = Breaking Bad)."
                    },
                    "showsPage": {
                        "title": "Show Catalog Page",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Page index for the 'showsIndex' mode (0-based, 250 shows per page)."
                    },
                    "peopleQuery": {
                        "title": "People Search Query",
                        "type": "string",
                        "description": "Search term for people. Used when mode is 'people'."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
