# Twitch Stream Schedules (`maximedupre/twitch-stream-schedules`) Actor

Get public Twitch channel details, live status, and upcoming broadcasts from channel names or search terms. Choose a future window and receive titles, times, categories, IDs, and public channel links. No Twitch login or API key is needed.

- **URL**: https://apify.com/maximedupre/twitch-stream-schedules.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 upcoming broadcasts

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

### 📺 Plan Twitch streams before they start

For streamers, esports teams, creator researchers, and developers, Twitch Stream Schedules collects public Twitch channel details, live status, and upcoming broadcasts. Choose channel names or search terms, set a future window, and get schedule data with public links and the time it was observed.

Use it to:

- Check [**Twitch Channel Details**](https://apify.com/maximedupre/twitch-stream-schedules/examples/twitch-channel-details) for public profile fields, follower counts, tags, and the channel link.
- Find public channels with [**Twitch Channel Search**](https://apify.com/maximedupre/twitch-stream-schedules/examples/twitch-channel-search) and see the submitted value that led to each saved row.
- Check [**Twitch Live Status**](https://apify.com/maximedupre/twitch-stream-schedules/examples/twitch-live-status) to see whether a channel was live when its public data was observed.
- Plan [**Upcoming Twitch Streams**](https://apify.com/maximedupre/twitch-stream-schedules/examples/upcoming-twitch-streams) with broadcast times, titles, categories, and public Twitch links.
- Review a [**Twitch Channel Schedule**](https://apify.com/maximedupre/twitch-stream-schedules/examples/twitch-channel-schedule) for a chosen channel and future planning window.

#### 📊 Twitch channel profiles and schedules

Each saved row describes one public Twitch channel. It includes channel identity and profile details, live status, current broadcast data when live, upcoming broadcasts, the schedule status, the submitted value that led to the row when known, and the time the data was observed.

Schedule entries include a source ID and public Twitch schedule link when Twitch provides them. A `noUpcomingBroadcasts` status means the selected window had no public upcoming broadcasts. It is a valid result, not a failed collection.

#### ▶️ Check live status and plan broadcasts

**Choose one target**

Set `target` to `channels` to inspect named public channels, or set it to `search` to find public channels with search terms. Use one target type in a run.

**Add targets**

Enter one or more Twitch channel login names for `channels`, or one or more words or phrases for `search`. The saved `discoveredBy` object shows which submitted value led to a row when that value is known.

**Set a window**

Use `scheduleWindowDays` to choose how many days ahead to include upcoming broadcasts. The value must be at least 1. Live status and public channel details are included with the result.

#### ⚙️ Input

Choose a target type and fill in only the fields for that type. No Twitch login or API key is needed.

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `target` | choice | Select `channels` to inspect named channels or `search` to find public channels. |
| `channels` | list of strings | Public Twitch channel login names to inspect when `target` is `channels`. Each name may contain 1 to 25 letters, numbers, or underscores. |
| `searchTerms` | list of strings | Words or phrases used to find public Twitch channels when `target` is `search`. |
| `scheduleWindowDays` | integer | Number of days ahead to include upcoming broadcasts. It must be 1 or more. Live status and public channel details are always included. |

**Example default input**

A successful default run used this input:

```json
{
  "target": "channels",
  "channels": [
    "twitchdev"
  ],
  "scheduleWindowDays": 7
}
```

**Input notes**

Use `channels` for a list of known public channel login names. Use `searchTerms` when you want to discover public channels from words or phrases. The two lists are separate target modes, so fill in only the list that matches `target`.

#### 🧾 Output

The `results` output field links to the default dataset in Apify. Each dataset row uses one channel shape, with optional fields for a current stream, language, discovery details, and schedule values that Twitch may not provide.

**Dataset row fields**

| Field | Type | What it does |
|---|---|---|
| `channel` | object | Public Twitch channel details. |
| `channel.id` | string | Stable public Twitch ID for the channel. |
| `channel.login` | string | Channel login name used by Twitch. |
| `channel.displayName` | string | Name shown on Twitch. |
| `channel.url` | URL | Public Twitch page for the channel. |
| `channel.description` | string | Public channel description, when provided. |
| `channel.followerCount` | integer | Number of public channel followers, when provided. |
| `channel.isPartner` | boolean | Whether Twitch marks the channel as a Partner, when provided. |
| `channel.language` | string | Main language reported for the channel, when provided. |
| `channel.tags` | array of strings | Public tags assigned to the channel. |
| `isLive` | boolean | Whether the channel was live when the data was observed. |
| `currentStream` | object, when live | Details about the current broadcast when the channel is live. |
| `currentStream.id` | string | Stable public Twitch ID for the current broadcast. |
| `currentStream.title` | string | Title of the current broadcast. |
| `currentStream.category` | string | Twitch category for the current broadcast. |
| `currentStream.startedAt` | date-time | Time when the current broadcast started. |
| `currentStream.viewerCount` | integer | Public viewer count for the current broadcast. |
| `schedules` | array of objects | Upcoming public broadcasts within the requested window. |
| `schedules[].id` | string | Stable public Twitch ID for a scheduled broadcast. |
| `schedules[].title` | string | Title of the scheduled broadcast. |
| `schedules[].category` | string | Twitch category for the scheduled broadcast. |
| `schedules[].startTime` | date-time | Planned start time for the broadcast. |
| `schedules[].endTime` | date-time | Planned end time when Twitch provides it. |
| `schedules[].url` | URL | Public Twitch location for the scheduled broadcast when provided. |
| `scheduleStatus` | choice | `available` when upcoming broadcasts were found, or `noUpcomingBroadcasts` when none were found in the window. |
| `discoveredBy` | object, when known | Submitted channel name or search term that led to the row. |
| `discoveredBy.type` | choice | `channel` for a channel name or `searchTerm` for a search term. |
| `discoveredBy.value` | string | The single submitted value that led to the row. |
| `observedAt` | date-time | Time when the public Twitch information was observed. |

**Example scheduled channel row**

This complete row shows a channel with two upcoming broadcasts:

```json
{
  "channel": {
    "id": "137512364",
    "login": "ow_esports",
    "displayName": "ow_esports",
    "url": "https://www.twitch.tv/ow_esports",
    "description": "The official home of Overwatch Esports on Twitch.",
    "followerCount": 2461085,
    "isPartner": true,
    "tags": []
  },
  "isLive": false,
  "schedules": [
    {
      "id": "eyJzZWdtZW50SUQiOiI0ZTE5MTEzYS1jNzVhLTQyNzItOTkwMS1kMWRmYzNhNzVhMWUiLCJpc29ZZWFyIjoyMDI2LCJpc29XZWVrIjozNH0=",
      "title": "[DROPS][REBROADCAST] OWWC 2026 Group Stage Day 3",
      "category": "Overwatch",
      "startTime": "2026-08-22T16:00:00Z",
      "url": "https://www.twitch.tv/ow_esports/schedule?segmentID=eyJzZWdtZW50SUQiOiI0ZTE5MTEzYS1jNzVhLTQyNzItOTkwMS1kMWRmYzNhNzVhMWUiLCJpc29ZZWFyIjoyMDI2LCJpc29XZWVrIjozNH0%3D"
    },
    {
      "id": "eyJzZWdtZW50SUQiOiJjMGM5YWU4Zi1jNTllLTQ2YjEtOTc5NS1lNmE5MDk0YzdjZjUiLCJpc29ZZWFyIjoyMDI2LCJpc29XZWVrIjozNH0=",
      "title": "[DROPS] Overwatch World Cup 2026 | Group Stage Day 4",
      "category": "Overwatch",
      "startTime": "2026-08-23T01:30:00Z",
      "url": "https://www.twitch.tv/ow_esports/schedule?segmentID=eyJzZWdtZW50SUQiOiJjMGM5YWU4Zi1jNTllLTQ2YjEtOTc5NS1lNmE5MDk0YzdjZjUiLCJpc29ZZWFyIjoyMDI2LCJpc29XZWVrIjozNH0%3D"
    }
  ],
  "scheduleStatus": "available",
  "discoveredBy": {
    "type": "channel",
    "value": "ow_esports"
  },
  "observedAt": "2026-08-22T15:42:30.206Z"
}
```

**Example live channel row**

This complete row shows live status and current broadcast data:

```json
{
  "channel": {
    "id": "69031635",
    "login": "speedrun",
    "displayName": "Speedrun",
    "url": "https://www.twitch.tv/speedrun",
    "description": "Home of Speedrun Summits & 24/7 World Records!",
    "followerCount": 141289,
    "isPartner": true,
    "language": "EN",
    "tags": []
  },
  "isLive": true,
  "schedules": [],
  "scheduleStatus": "noUpcomingBroadcasts",
  "discoveredBy": {
    "type": "searchTerm",
    "value": "speedrunning"
  },
  "observedAt": "2026-08-22T15:42:26.044Z",
  "currentStream": {
    "title": "World Record Speedruns 24/7 | 120 Star in 1:36:48 by @Karinpune",
    "id": "317945673688",
    "category": "Super Mario 64",
    "startedAt": "2026-08-22T04:14:23Z",
    "viewerCount": 44
  }
}
```

**Example no-upcoming row**

This complete row shows a valid channel result with no upcoming broadcasts in the selected window:

```json
{
  "channel": {
    "id": "141981764",
    "login": "twitchdev",
    "displayName": "TwitchDev",
    "url": "https://www.twitch.tv/twitchdev",
    "description": "Supporting third-party developers building Twitch integrations from chatbots to game integrations.",
    "followerCount": 33591,
    "isPartner": true,
    "tags": []
  },
  "isLive": false,
  "schedules": [],
  "scheduleStatus": "noUpcomingBroadcasts",
  "discoveredBy": {
    "type": "channel",
    "value": "twitchdev"
  },
  "observedAt": "2026-08-22T15:41:11.975Z"
}
```

#### 💳 Pricing

**Charged event**

The `twitch-scheduled-broadcast` event costs $0.005 for each public upcoming broadcast saved to the dataset. Channel details and live status are returned with a channel row and are not separate charged events. If no upcoming broadcasts are found for the selected window, `schedules` is empty and no broadcast is saved.

#### 🔌 Integrations

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

Open the dataset from the `results` link in Apify Console, or fetch its items with the Apify API. Export the saved rows for your own planner, report, or data workflow.

#### ❓ FAQ

##### What does no upcoming broadcasts mean?

It means Twitch returned no public broadcasts in the selected schedule window for that channel. The row can still include channel details and live status.

##### Does the Actor send alerts when a channel goes live?

No. It reports live status at the time of collection. Run it again when you need a fresh observation.

##### Can I find channels with a search term?

Yes. Set `target` to `search` and add one or more `searchTerms`. When a channel is saved, `discoveredBy` can show the search term that led to that row.

##### Can I choose how far ahead to look?

Yes. Set `scheduleWindowDays` to the number of days ahead you want to include. The value must be 1 or more.

##### Do I need a Twitch login or API key?

No. The Actor collects the public Twitch information exposed for the selected channels and search terms without a customer-provided login or API key.

##### Does it collect past broadcasts, clips, or chat?

No. It collects public channel details, live status, and upcoming schedules. It does not reconstruct past schedules or collect VODs, clips, or chat.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~twitch-stream-schedules/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Twitch Scraper](https://apify.com/maximedupre/twitch-scraper) - Use it for broader public Twitch profile, live stream, game, clip, and VOD data.
- [Twitch Chat Scraper](https://apify.com/maximedupre/twitch-chat) - Collect public chat messages from live channels or VODs when chat context is the next part of your review.
- [Twitch Channel Scraper](https://apify.com/easyapi/twitch-channel-scraper) - Use it for wider channel details that include live streams, videos, clips, and upcoming schedules.
- [Twitch Search & Streams Scraper](https://apify.com/cirkit/twitch-search-scraper) - Search Twitch channels and live streams when you need broader stream discovery.
- [Twitch Live Streams Scraper](https://apify.com/parseforge/twitch-live-streams-scraper) - Collect live Twitch streams by game category, language, or a global view.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose whether to inspect named public Twitch channels or find public channels with search terms.

## `channels` (type: `array`):

Enter one or more public Twitch channel login names to inspect. Use a name such as `twitchdev`.

## `searchTerms` (type: `array`):

Enter one or more words or phrases to find public Twitch channels. Use this when Target is set to Search channels.

## `scheduleWindowDays` (type: `integer`):

Set how many days ahead to check for upcoming broadcasts. Live status and public channel details are always included.

## Actor input object example

```json
{
  "target": "channels",
  "channels": [
    "twitchdev",
    "twitchgaming"
  ],
  "searchTerms": [
    "speedrunning"
  ],
  "scheduleWindowDays": 7
}
```

# Actor output Schema

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

Link to the dataset with public channel details, live status, and upcoming broadcasts.

# 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 = {
    "target": "channels",
    "channels": [
        "twitchdev"
    ],
    "scheduleWindowDays": 7
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/twitch-stream-schedules").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 = {
    "target": "channels",
    "channels": ["twitchdev"],
    "scheduleWindowDays": 7,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/twitch-stream-schedules").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 '{
  "target": "channels",
  "channels": [
    "twitchdev"
  ],
  "scheduleWindowDays": 7
}' |
apify call maximedupre/twitch-stream-schedules --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/twitch-stream-schedules"
        }
    }
}

```

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/yxjZUZaI05529oDWW/builds/evlBMDLekIjmG5KyZ/openapi.json
