# Twitch Clips, VODs & Channel Scraper (`myagizm/twitch-clips-vods-scraper`) Actor

Collect public Twitch channel profiles, live status, clips, and VOD metadata in structured dataset rows.

- **URL**: https://apify.com/myagizm/twitch-clips-vods-scraper.md
- **Developed by:** [MYM](https://apify.com/myagizm) (community)
- **Categories:** Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 public records

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Twitch Clips, VODs & Channel Scraper — Public Twitch Metadata (No Twitch API Key, No Login)

<div align="center">

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-00C7B7)](https://apify.com/myagizm/twitch-clips-vods-scraper)
![No Twitch API Key](https://img.shields.io/badge/Twitch_API_key-not_required-9146FF)
![No Twitch Login](https://img.shields.io/badge/Twitch_login-not_required-9146FF)
![No Cookies](https://img.shields.io/badge/Twitch_cookies-not_required-9146FF)
![Export](https://img.shields.io/badge/Export-JSON_%7C_CSV_%7C_Excel-blue)
![MCP](https://img.shields.io/badge/MCP-via_Apify-blue)
![Pay per result](https://img.shields.io/badge/Billing-per_stored_record-green)

</div>

**Collect public Twitch channel profiles, follower counts, live status, current viewer counts, popular clip metadata, and archived VOD metadata in structured dataset rows. Twitch Clips, VODs & Channel Scraper turns channel usernames or channel URLs into analysis-ready records for creator research, esports reporting, content discovery, and scheduled monitoring. Choose `channels`, `clips`, or `videos`; export the results without supplying a Twitch developer key, Twitch login, or Twitch cookies.**

> Start with one public channel and a small result limit. The recorded clip smoke run returned two rows in 3.635 seconds; that is an observed example, not a speed guarantee. Apify credits, if available on your account, may cover a small trial, but results and platform usage are not universally free.

**This is a metadata scraper, not a video downloader.** Returned Twitch URLs point to public channel, clip, or VOD pages. They are not guaranteed direct MP4 files, downloadable streams, complete media, transcripts, or offline archives. An Apify account is needed to run the Actor; API and MCP workflows also require your own Apify authentication.

### Table of contents

- [What can this Twitch scraper do?](#what-can-this-twitch-scraper-do)
- [Who uses Twitch public data?](#who-uses-twitch-public-data)
- [What data can I scrape?](#what-data-can-i-scrape)
- [How to scrape Twitch](#how-to-scrape-twitch)
- [Input examples and field reference](#input-examples-and-field-reference)
- [Real output example](#real-output-example)
- [Limits, coverage, and accuracy](#limits-coverage-and-accuracy)
- [Pricing and billing](#pricing-and-billing)
- [Tips for dependable workflows](#tips-for-dependable-workflows)
- [Want other Twitch or cross-platform data?](#want-other-twitch-or-cross-platform-data)
- [MCP and AI agents](#mcp-and-ai-agents)
- [Integrations and API](#integrations-and-api)
- [Support](#support)
- [FAQ](#faq)
- [Related searches](#related-searches)
- [Disclaimer](#disclaimer)
- [Resources](#resources)
- [中文说明](#中文说明)

### What can this Twitch scraper do?

✅ **Public channel snapshots:** use `channels` to collect available channel details, follower count, live/offline status, and current stream information when present.

✅ **Clip discovery by channel:** use `clips` to collect available top clip metadata within one supported time window. Useful fields include clip ID, title, public page URL, views, duration, creation timestamp, and channel login.

✅ **Public archived VOD metadata:** use `videos` to collect available public archived video records, including their identifier, title, views, duration, creation timestamp, and Twitch page URL when supplied.

✅ **Small multi-channel batches:** submit between 1 and 20 public channel targets and apply one overall result limit from 1 to 100 rows.

✅ **Structured exports:** keep JSON for full records, or export flat fields to CSV and Excel for spreadsheet comparisons. The built-in `overview` table presents selected columns; full JSON may include additional fields.

✅ **Repeatable collection:** save an Apify Task and use Apify Schedules, webhooks, or API calls to build your own periodic snapshots. Scheduling is a platform workflow, not a promise of continuous live tracking.

The Actor does not search the entire Twitch platform by arbitrary keyword. Targets identify channels. It does not collect chat messages, subscriber identities, private dashboards, payouts, private recordings, subscriber-only media, or a complete list of individual followers. A follower count is a public aggregate, not a follower directory.

### Who uses Twitch public data?

- **Creator partnerships teams:** compare public channel audience indicators, current activity, and visible content before building a shortlist. Treat a live viewer count as a momentary observation, not an average audience estimate.
- **Esports and gaming analysts:** gather clip and VOD metadata from known channels, identify public content around an event, and retain links for editorial review.
- **Content researchers and editors:** locate notable public clips, compare titles and views, and follow the original Twitch page to evaluate the content. Permission to collect metadata does not grant permission to reuse the video.
- **Talent managers and agencies:** maintain periodic channel snapshots alongside consent-based business information from creators.
- **Data engineers:** create bounded ingestion jobs, preserve original identifiers, and join Twitch records to a warehouse using explicit record-type and channel mappings.
- **Academic researchers:** examine public creator activity with a documented sampling window, retention policy, and interpretation of missing fields.
- **AI assistants:** request a small, well-defined batch through Apify MCP, inspect the dataset, and summarize only the metadata actually returned.

For a creator report, combine separate channel and clip runs rather than assuming every clip row contains a full channel profile. For a historical project, keep your own collection timestamps and distinguish them from Twitch's content creation timestamps.

### What data can I scrape?

There are three record families: `type=channel`, `type=clip`, and `type=vod`. Channel records use `login` and `channelUrl`; clip and VOD records use `channelLogin` and `url` when returned. A clip row is not a channel row with a few extra properties, and a VOD row need not contain live-stream status. Design downstream tables around `type` and use nullable fields where a property does not apply.

#### Core identifiers — populated in the recorded clip example

The fields below are present in both rows of the real clip smoke dataset. This establishes their observed shape for that example; it does not make every property mandatory across every mode or every future Twitch response.

| Field | Type | Description |
| --- | --- | --- |
| `type` | string | Record family. The recorded clip rows use `clip`; channel and VOD modes return their corresponding record family. Use this discriminator before reading mode-specific columns. |
| `platform` | string | Platform label. Both recorded clip rows contain `twitch`. |
| `url` | string | Public Twitch page URL. In clip mode this is a clip page, not a guaranteed direct video file. |
| `channelLogin` | string | Channel username associated with a clip. The recorded rows contain `xqc`. Do not assume it will be duplicated as `login` in the table view. |
| `clipId` | string | Public clip identifier. Preserve the complete identifier, including punctuation and suffixes. |
| `title` | string | Public clip title as returned at collection time. Titles are user-authored content and may change. |
| `views` | number | Public clip view count at collection time. It is not a unique-viewer count or a complete analytics report. |
| `durationSeconds` | number | Clip duration in seconds. The example contains 44 and 26 seconds. |
| `createdAt` | string | Content creation timestamp. The example uses UTC strings with a `Z` suffix. This is not the time the Actor fetched the record. |

#### Channel fields — populated when present and relevant

These fields are described by the current dataset view and the Actor's documented channel mode. Their presence or completeness is not established by the clip-only example below. A property can be missing or `null`; offline status is not itself an error.

| Field | Type | Description |
| --- | --- | --- |
| `login` | string or null | Channel login shown by the channel-oriented dataset view when supplied. In clip JSON, use `channelLogin` if `login` is absent. |
| `displayName` | string or null | Public display name. Preserve capitalization for presentation; use login identifiers for joins. |
| `followersCount` | number or null | Available public aggregate follower count. Does not provide follower identities. |
| `isLive` | boolean or null | Current live status when resolved. `false` means offline; `null` or absence means unavailable, not necessarily offline. |
| `currentViewers` | number or null | Current viewer count for a live stream when available. Do not convert an unavailable value into zero. |
| `streamTitle` | string or null | Current public stream title when available. An offline channel may have no active title. |
| `gameName` | string or null | Current game/category name when available. This is not a complete history of categories played. |
| `channelUrl` | string or null | Public Twitch channel page for a channel record when returned. Channel rows use `channelUrl`, not a universally shared `url` key. |
| `id` | string or null | Channel identifier when returned; preserve its string representation. |
| `createdAt` | string or null | Channel creation timestamp when returned; distinct from the time this snapshot was collected. |

#### Clip and VOD fields — populated when present and relevant

| Field | Type | Description |
| --- | --- | --- |
| `clipId` | string or null | Identifier for a clip record; not a VOD identifier. |
| `videoId` | string or null | Identifier for a public archived VOD record when supplied. Store as a string rather than coercing it to a number. |
| `title` | string or null | Available public clip or VOD title. |
| `views` | number or null | Available public content view count. Counts can change between runs. |
| `durationSeconds` | number or null | Available content duration in seconds. Does not imply the media itself was downloaded. |
| `createdAt` | string or null | Available content creation timestamp, distinct from your ingestion time. |
| `url` | string or null | Public Twitch clip or video page URL when available. |
| `channelLogin` | string or null | Associated channel login when included in the raw content row. Confirm the raw row before joining. |

#### Dataset links and diagnostic output

The Actor output schema exposes `results`, a link to dataset items using `view=overview`, and `fullJson`, a link to the complete dataset items. These are output links, not columns inside every Twitch row.

For a customer-input problem, inspect the run's key-value-store `OUTPUT` record. It can describe the reason using `ok`, `errorType`, `message`, `hint`, and sanitized `input`. A mixed batch can provide `skipped` information while still saving valid records. Do not expect an `OUTPUT` diagnostic record on every successful run: the supplied successful clip smoke record did not contain one.

The overview view lists selected fields such as `login`, but the real clip rows contain `channelLogin`. A blank table column can therefore mean the selected view does not include the raw key, rather than that the channel is unknown. Inspect full JSON before concluding data is missing.

### How to scrape Twitch

1. Open [Twitch Clips, VODs & Channel Scraper](https://apify.com/myagizm/twitch-clips-vods-scraper) in your Apify account when access is available.
2. Choose one mode: `channels`, `clips`, or `videos`.
3. Enter 1–20 public channel usernames or HTTPS Twitch channel URLs. Use channel pages, not standalone video IDs or clip-page URLs as the target interface.
4. Set `maxItems` to an integer between 1 and 100. This limits total rows for the run, not rows for each channel.
5. If collecting clips, select `LAST_DAY`, `LAST_WEEK`, `LAST_MONTH`, or `ALL_TIME`.
6. Start the run and wait for its terminal status. `SUCCEEDED` can mean records were saved or a recognized input/empty-result outcome was handled; inspect the dataset and `OUTPUT` where applicable.
7. Open the dataset table, then review full JSON if a useful property is absent from the table. Export the format that fits your workflow.
8. Save a Task only after testing your exact input. Add a schedule or webhook if you need repeated collection.

Start with a single known public channel. A small first run makes it easier to verify field names, availability, and costs before adding more targets. Do not submit unsupported options hoping they will enable another mode.

### Input examples and field reference

#### Recommended small clip request

```json
{
  "mode": "clips",
  "targets": ["xqc"],
  "maxItems": 2,
  "clipPeriod": "ALL_TIME"
}
```

This is a valid, illustrative request matching the channel and record family shown in the recorded output. The supplied smoke-run artifact contains the returned rows and run metadata, but not its original `INPUT` record; this example is not presented as a recovered copy of that exact input. `ALL_TIME` is appropriate for illustrating older clips, but it still does not request an exhaustive archive.

#### Public channel snapshot request

```json
{
  "mode": "channels",
  "targets": ["xqc", "https://www.twitch.tv/pokimane"],
  "maxItems": 2
}
```

#### Public archived VOD metadata request

```json
{
  "mode": "videos",
  "targets": ["shroud"],
  "maxItems": 10
}
```

The channel and VOD requests are usage examples, not claims that their exact outputs were measured in the clip smoke run. Channels, their visibility, and available recordings can change.

| Input field | Type | Required / default | Description |
| --- | --- | --- | --- |
| `mode` | string | Optional; default `clips` | Exactly `channels`, `clips`, or `videos`. A run selects one record family. |
| `targets` | array of strings | Required; 1–20 entries | Public Twitch channel usernames or HTTPS channel URLs, such as `xqc` or `https://www.twitch.tv/pokimane`. |
| `maxItems` | integer | Optional; default `20` | Overall dataset-row ceiling for the run. Minimum `1`, maximum `100`. It is not a per-channel allocation. |
| `clipPeriod` | string | Optional; default `LAST_WEEK` | Clip window: `LAST_DAY`, `LAST_WEEK`, `LAST_MONTH`, or `ALL_TIME`. It is a clip filter, not a supported VOD date-range input. |

Channel usernames are normalized to lowercase; a leading `@` is accepted by the current target validator. Prefer a plain username or canonical `https://www.twitch.tv/<channel>` URL. Use HTTPS URLs without embedded credentials or custom ports. Unrelated domains, empty targets, and unsupported modes are not valid requests.

Only the four fields above are advertised in the input schema. There is no supported keyword query, cursor, custom start/end date, video-quality selection, cookie field, OAuth credential, media-download switch, or required proxy setting. Do not add any of these to your request. The form's prefilled channel examples are examples, not a guarantee that those channels will always expose every record family.

### Real output example

The following JSON is the two-row dataset captured by real run `4jgF5HEpIetpdvJfo`, using build `0.1.2`. The run started on **2026-10-09 at 06:12:27.192 UTC**, finished `SUCCEEDED`, and reported **“Pushed 2 Twitch records.”** Its recorded execution duration was **3.635 seconds**. These values document one clip-mode smoke run only, not all modes, maximum-size runs, or stress capacity.

```json
[
  {
    "url": "https://www.twitch.tv/xqc/clip/DeliciousDelightfulPicklesWOOP",
    "type": "clip",
    "title": "xqc makes the wrong choice",
    "views": 956334,
    "clipId": "DeliciousDelightfulPicklesWOOP",
    "platform": "twitch",
    "createdAt": "2020-12-09T19:18:10Z",
    "channelLogin": "xqc",
    "durationSeconds": 44
  },
  {
    "url": "https://www.twitch.tv/xqc/clip/NimbleProductiveAsparagusHeyGuys-s77ZvN10Yr-O2sfo",
    "type": "clip",
    "title": "wow",
    "views": 780956,
    "clipId": "NimbleProductiveAsparagusHeyGuys-s77ZvN10Yr-O2sfo",
    "platform": "twitch",
    "createdAt": "2021-04-04T21:34:33Z",
    "channelLogin": "xqc",
    "durationSeconds": 26
  }
]
```

Notice what this example does **not** contain: downloadable MP4 URLs, a full channel profile, follower identities, live viewer counts, chat, or transcripts. Do not manufacture those values in an integration. Preserve a missing field as missing or nullable according to your own schema.

The captured run response still showed zero accounted result events despite the two saved rows. That capture is not settled billing evidence, so it must not be interpreted as “successful clips are free” or used to promise a zero charge. The configured per-record pricing below is the billing reference; review the completed run's final usage in your own account.

### Limits, coverage, and accuracy

#### Bounded collection, not a full Twitch archive

- **1–20 targets per input:** split a larger channel list into separate tasks or runs.
- **1–100 rows per run:** `maxItems` is the global ceiling across all submitted targets.
- **At most 30 clips or VODs per channel request:** setting the total ceiling to 100 does not establish 100 results from one channel.
- **One mode per run:** collect channel snapshots, clips, and VOD metadata in separate runs when you need all three.
- **No pagination input:** there is no documented cursor or automatic full-history export interface.
- **No exhaustive meaning for `ALL_TIME`:** it changes the clip window, not the bounded request model.
- **No guaranteed distribution:** a small global limit can leave later channels underrepresented. Use one target per run if equal sampling matters.

#### Interpret public fields conservatively

Live status, viewer counts, follower counts, titles, and views can change after collection. `createdAt` refers to the content's creation time, not its last update or the time a researcher discovered it. A clip with an old timestamp can still appear in an all-time collection.

Unavailable fields remain missing or `null`; do not convert missing viewer counts into zero, or missing live status into `false`. A public channel can be offline while still being a valid channel. Record visibility can differ due to deletion, expiration, content restrictions, region, or Twitch changes. Public VOD availability is not a promise that every prior broadcast is retained.

The provided smoke run verifies clip-row delivery. It does not establish channel-mode field completeness, VOD-mode coverage, sustained throughput, simultaneous-run limits, or universal success rates. No speed or accuracy percentage is promised here.

#### Input outcomes versus operational failures

**Input errors finish `SUCCEEDED` with zero results and zero Actor result charge; see `OUTPUT` for the reason.** Recognized cases include invalid input, a confirmed unavailable target, confirmed no-results outcomes, and an applicable free-plan limit. A successful terminal status is therefore not proof that at least one row exists.

For a mixed batch, valid targets may produce rows while invalid or unavailable inputs are listed in `OUTPUT.skipped`. Stored valid rows remain billable. The zero-row/zero-result-charge rule applies to an entirely benign empty outcome, not to a partially successful dataset.

**Upstream errors finish `FAILED`.** Access denials, service rate-limit responses, timeouts, transport problems, and operational bugs are not silently relabeled as no matches. An unexplained empty response is not automatically a verified no-results outcome. The Actor stops on access or rate-limit denial rather than promising identity switching or bypassing restrictions.

Apify can reject malformed JSON or a request that fails its input schema before an Actor run begins. The `SUCCEEDED` input-error contract describes problems handled within a started run; it does not mean every rejected HTTP request creates a successful run. Platform usage, if incurred, is separate from Actor result-event pricing.

### Pricing and billing

Billing uses Apify **pay per event**, with the primary event **Public record** (`apify-default-dataset-item`). One public channel, clip, or VOD metadata row successfully stored in the default dataset is one result event. A row is the unit of billing, not a submitted channel, an HTTP request, or a downloaded video.

These are the exact tier prices in the supplied current Actor snapshot, effective from **2026-09-29**:

| Apify pricing tier | USD per stored row | USD per 1,000 stored rows |
| --- | ---: | ---: |
| FREE | $0.0015 | $1.50 |
| BRONZE | $0.0012 | $1.20 |
| SILVER | $0.0011 | $1.10 |
| GOLD | $0.0009 | $0.90 |
| PLATINUM | $0.0009 | $0.90 |
| DIAMOND | $0.0009 | $0.90 |

The configured paid-tier discounts change the price per row; they do not establish extra input fields, unlimited history, premium downloads, a different 100-row ceiling, or higher media quality. FREE is an Apify pricing-tier label and does **not** mean the Actor's event price is zero. Check the Store pricing panel before starting a run if pricing has changed since this reference.

**Apify platform usage is charged separately.** Compute, storage, transfer, and other applicable platform usage depend on your account and the run. A configured minimum spending-limit setting of $0.50 is a limit configuration, not a $0.50 per-run result fee or a promise that every run consumes that amount.

Entirely empty benign outcomes create no result events. Failed runs are not charged for results under the configured event description. Input errors handled by the Actor finish `SUCCEEDED`, save no result rows, and incur no Actor result charge. “No result charge” is not a claim that any platform work already performed is universally free.

Use a small `maxItems` value and your Apify spending controls to contain a trial. Do not infer billing from an early zero counter, and do not use the smoke capture's transient event count as a price quote. Review final usage after the run's accounting has settled.

### Tips for dependable workflows

1. **Separate collection goals.** Channel snapshots answer who is live and what public audience indicators are visible; clips and VODs answer which content records are available. Keep those jobs distinct.
2. **Validate one real row first.** Compare the raw JSON keys with your destination columns before building a large scheduled workflow. In particular, map `channelLogin` from clip rows rather than expecting `login` everywhere.
3. **Record your ingestion timestamp.** Add it in your own workflow or database. Do not overwrite `createdAt`, which belongs to the Twitch content.
4. **Preserve identifier strings.** Clip IDs contain meaningful mixed case and punctuation; VOD identifiers should not be accidentally rounded by spreadsheet numeric conversion.
5. **Deduplicate downstream.** Repeated schedules may collect the same clip or VOD again. Use record type plus clip/video identifier where available, or a carefully chosen public URL key. Cross-run deduplication is your workflow's responsibility.
6. **Keep nulls meaningful.** Unknown, offline, absent, and zero are different states. Explicit nullable columns make reports less misleading.
7. **Choose the clip window deliberately.** A short window focuses on recent availability; `ALL_TIME` is useful for older top clips but remains bounded.
8. **Avoid unfair batch comparisons.** The global row limit is not divided equally among channels. Separate runs provide clearer sampling when comparing creators.
9. **Check status and row count.** Treat `SUCCEEDED` plus an empty dataset as a reason to inspect `OUTPUT`, not as a reason to invent results or immediately retry forever.
10. **Handle failures with restraint.** Retry a transient problem with a bounded policy. A confirmed unavailable target needs an input correction, not a high-frequency retry loop.
11. **Keep exports intentional.** Use raw JSON for archival fidelity and selected flat columns for dashboards. A table view is a presentation, not necessarily the entire record.
12. **Respect content and privacy rules.** Link to public pages, minimize retained personal data, and obtain appropriate permission before redistributing any creator media.

### Want other Twitch or cross-platform data?

For other Twitch record families, this same Actor already provides `channels`, `clips`, and `videos`. Change `mode` rather than assuming there is a separate owned Twitch downloader, chat scraper, or follower-list Actor. No such sibling is verified by the supplied reference material.

Explore the [myagizm Actor catalog](https://apify.com/myagizm) for available tools. The following owned Actor identities are verified in accompanying snapshots; those snapshots mark them **private**, so these are catalog references, not guarantees of current public access. If a link is unavailable, check the profile for a published listing instead of relying on the draft URL.

| Owned Actor reference | Separate use case | Availability note |
| --- | --- | --- |
| [Audio & Video Subtitles with Speaker Labels](https://apify.com/myagizm/video-subtitle-service) | A separate subtitle/transcript workflow for suitable authorized audio or video inputs. | Private in the supplied snapshot. This Twitch Actor does not produce a media file for it. |
| [Website Sitemap URL Extractor](https://apify.com/myagizm/website-sitemap-extractor) | Extract page URLs and available metadata from public XML sitemaps. | Private in the supplied snapshot; not a Twitch content collector. |
| [Naver Blog Search Scraper](https://apify.com/myagizm/naver-blog-search-scraper) | Discover public blog-post metadata using keyword searches. | Private in the supplied snapshot; separate platform and input contract. |
| [Remote Job Feed Scraper](https://apify.com/myagizm/remote-job-feed-scraper) | Collect structured remote-job listings and original posting links. | Private in the supplied snapshot; separate data domain. |

**Cross-platform research:** Instagram, TikTok, LinkedIn, Reddit, YouTube, and Google data each have their own availability, inputs, permissions, and billing. Browse the owner's catalog for the tools currently listed. This README deliberately does not invent unverified product slugs or promise a bundled cross-platform subscription. Never pass a Twitch page URL into a separate media-processing Actor unless that Actor explicitly supports it and you have the necessary rights.

### MCP and AI agents

Apify's Model Context Protocol integration can connect compatible AI clients to Actors. This Actor is used through Apify's MCP tooling; it does not expose a separately documented custom MCP endpoint or standalone live Twitch server.

A responsible agent workflow is:

1. Authenticate your MCP client with your own Apify account using Apify's setup instructions.
2. Make this Actor available to the client if your account has access to it.
3. Ask for a single mode, explicit channel targets, a supported clip window if relevant, and a small `maxItems` value.
4. Let the client start the run, wait for completion, and inspect its dataset. Check `OUTPUT` when the dataset is empty.
5. Summarize only returned values, retain public source-page links, and state the collection time separately from content creation times.

Example request to an AI assistant: **“Use `myagizm/twitch-clips-vods-scraper` to collect up to two all-time public clips from xqc. Return the titles, view counts, durations, creation times, and Twitch page URLs. If there are no rows, explain the run's diagnostic instead of guessing.”**

MCP does not remove billing, run limits, target validation, or privacy obligations. “No Twitch API key” means no Twitch credential is required for this public-data input; it does not mean Apify API/MCP calls can run without Apify authentication. Restrict agent spending and do not put credentials in prompts or exported datasets.

### Integrations and API

Use the Apify Console for manual collection, a saved Task for repeatable input, and Apify Schedules for periodic runs. Webhooks can trigger downstream processing on completion; inspect the terminal status before fetching or interpreting results. API clients, Make, Zapier, n8n, and your own scripts can consume the returned dataset through their Apify or HTTP capabilities. These are platform integration paths, not built-in destinations configured by extra Actor input fields.

The three curl examples below are documentation only. Set `APIFY_TOKEN` in your own environment; do not paste a real token into shared code, tickets, public READMEs, or AI prompts. They use the verified Actor handle `myagizm~twitch-clips-vods-scraper` in API paths. Private-Actor access requires an account with permission.

#### 1. Run synchronously and receive dataset items

```bash
curl --fail-with-body --request POST \
  "https://api.apify.com/v2/acts/myagizm~twitch-clips-vods-scraper/run-sync-get-dataset-items?format=json&clean=true" \
  --header "Authorization: Bearer ${APIFY_TOKEN}" \
  --header "Content-Type: application/json" \
  --data '{"mode":"clips","targets":["xqc"],"maxItems":2,"clipPeriod":"ALL_TIME"}'
```

This synchronous endpoint is convenient for a bounded test. A returned empty array still needs interpretation: inspect the corresponding run diagnostics to distinguish recognized input/empty outcomes from operational problems. For longer workflows, use asynchronous execution and keep the run ID.

#### 2. Start an asynchronous run

```bash
curl --fail-with-body --request POST \
  "https://api.apify.com/v2/acts/myagizm~twitch-clips-vods-scraper/runs" \
  --header "Authorization: Bearer ${APIFY_TOKEN}" \
  --header "Content-Type: application/json" \
  --data '{"mode":"clips","targets":["xqc"],"maxItems":2,"clipPeriod":"ALL_TIME"}'
```

Save the response's `data.id` and `data.defaultDatasetId`. Poll `GET https://api.apify.com/v2/actor-runs/<RUN_ID>` with your Apify authentication until the run reaches a terminal status. A start response is not proof of completed collection. For an input diagnostic, use the run's `defaultKeyValueStoreId` to retrieve its `OUTPUT` record when present.

#### 3. Fetch the completed dataset

```bash
curl --fail-with-body --request GET \
  "https://api.apify.com/v2/datasets/${DATASET_ID}/items?format=json&clean=true" \
  --header "Authorization: Bearer ${APIFY_TOKEN}"
```

Set `DATASET_ID` to the default dataset ID from **your own** run. Fetching after completion avoids accidentally interpreting a partial dataset as the final result. To export a spreadsheet-friendly format, use Apify's documented dataset export options such as CSV or XLSX. Add `view=overview` only if you intentionally want the selected overview columns rather than full JSON properties.

Use explicit run IDs and dataset IDs in production. Do not copy a signed sample output URL into a permanent integration: access and retention can change. A fresh run may contain different titles, counts, or availability from the sample above.

### Support

Use the Actor's **Issues** tab on Apify for questions, reproducible problems, or field requests when the listing is accessible. Include the run ID, selected mode, sanitized input, approximate collection time, expected behavior, observed status, and whether full JSON differs from the table view.

For an empty `SUCCEEDED` run, include the non-sensitive `OUTPUT.errorType`, message, and hint if available. For `FAILED`, include the relevant sanitized status/log excerpt. Never share Apify tokens, Twitch cookies, passwords, signed dataset links, private exports, or unrelated personal data in a public issue.

A feature request is not a commitment that the feature already exists. In particular, downloading full VOD media, collecting chat, enumerating followers, and accessing restricted content are outside the documented scope. Availability, field completeness, and response time can change when Twitch changes its public surfaces.

### FAQ

#### 1. Do I need a Twitch API key?

No Twitch developer key is required by the documented input. You still need an Apify account to run the Actor and Apify authentication for API or MCP use.

#### 2. Do I need a Twitch login or cookies?

No. The Actor collects public metadata without asking for Twitch login credentials or cookies. It does not use your account to access restricted content.

#### 3. What is the difference between the three modes?

`channels` collects public channel snapshots, `clips` collects available top clip metadata, and `videos` collects public archived VOD metadata. Use separate runs for different modes.

#### 4. Can I submit a channel URL instead of a username?

Yes. Use a supported HTTPS Twitch channel URL such as `https://www.twitch.tv/pokimane`, or a plain channel username. This is a channel-target interface, not an arbitrary URL scraper.

#### 5. Can I submit an individual clip URL or VOD ID?

Individual content identifiers are not a documented target interface. Submit the channel and choose `clips` or `videos`; do not assume a clip or video page path selects that exact item.

#### 6. How many channels and results can I request?

The input supports 1–20 targets and a global `maxItems` from 1 to 100. The documented per-channel request returns at most 30 clips or VODs. These are ceilings, not promises of that many available results.

#### 7. Does `ALL_TIME` retrieve every clip ever created?

No. It selects the clip time window while collection remains bounded. There is no documented exhaustive pagination or full-history export input.

#### 8. Can I choose a custom date range for VODs?

No custom VOD date range is documented. `clipPeriod` applies to clips and has four fixed enum values; it is not a general start/end-date filter.

#### 9. Can I download clips, VODs, or livestreams?

Not with this Actor. Its output contains metadata and public page links, not a guaranteed direct-media download, live recording, or complete archive.

#### 10. Are transcripts, chat, subscriber identities, or follower lists included?

No. Public aggregate follower count may be available in channel mode, but identities and private analytics are not part of this product.

#### 11. Why is a viewer count missing?

The field may not apply to that mode, the channel may be offline, or the public value may be unavailable. Missing is not the same as zero; use nullable handling.

#### 12. Why does the table show a blank channel column when JSON has a channel?

The selected overview columns include `login`, whereas the recorded clip rows contain `channelLogin`. Read full JSON and map the returned raw key explicitly.

#### 13. Are view and follower counts real-time analytics?

They are public snapshots at collection time, not continuous analytics, unique audience measurements, or verified business-performance metrics. Later values can differ.

#### 14. Why can a run be `SUCCEEDED` with zero rows?

Recognized input errors, confirmed unavailable targets, confirmed no-results outcomes, and applicable free-plan limits finish `SUCCEEDED` without result rows or Actor result charges. Inspect `OUTPUT` for the reason.

#### 15. Do upstream errors also count as successful empty runs?

No. Access denials, upstream rate-limit responses, timeouts, and operational failures remain `FAILED`. An unexplained empty response is not automatically a benign no-results outcome.

#### 16. What happens if only one target in a batch is invalid?

Valid inputs may still produce billable rows, while skipped invalid or unavailable inputs can appear in `OUTPUT.skipped`. An entirely invalid batch produces no result rows.

#### 17. Is the Actor free, and do paid tiers unlock extra features?

The FREE tier has a configured per-row price, not a zero price. Paid tiers provide the exact per-row prices in the pricing table; no extra modes, media quality, or unlimited result entitlement is promised. Platform usage is separate.

#### 18. Can I export results to CSV, Excel, or a database?

Yes, use Apify dataset exports or the dataset API, then load the data into your chosen destination. Preserve identifiers as text and check raw JSON for fields omitted by a view.

#### 19. Can I schedule runs, use MCP, or supply a proxy?

Schedules and MCP are Apify platform workflows. No customer proxy configuration is advertised in this Actor's input schema, and no separate custom MCP server or standby endpoint is documented. Use the documented four input fields.

#### 20. Can I access private content, and is metadata collection automatically lawful?

The Actor is limited to available public metadata and does not grant access to private or restricted content. You remain responsible for Twitch terms, applicable privacy laws, copyright, consent where required, and permitted downstream use. Public availability is not blanket permission to redistribute media or personal data.

### Related searches

Twitch clips scraper · Twitch VOD metadata scraper · Twitch channel scraper · public Twitch data extraction · Twitch follower count scraper · Twitch live status checker · Twitch current viewer count · Twitch stream title data · Twitch game category metadata · Twitch clip view counts · Twitch top clips by channel · Twitch last day clips · Twitch last week clips · Twitch last month clips · Twitch all time clip metadata · Twitch archived video metadata · Twitch VOD duration data · Twitch clip creation timestamp · Twitch channel usernames to JSON · Twitch channel URL scraper · Twitch CSV export · Twitch Excel metadata export · Twitch public data API · Twitch Apify Actor · Twitch MCP AI agent · Twitch creator research · Twitch esports content discovery · Twitch metadata without login · Twitch scraping without API key · Twitch scheduled channel snapshots

### Disclaimer

This is an independent tool and is not affiliated with, endorsed by, or operated by Twitch. Twitch names, logos, and other trademarks belong to their respective owners. Apify is the execution and data-export platform; using this Actor does not provide Twitch authorization or transfer any creator's rights.

Collect only data you are entitled to access and use. Follow applicable website terms, privacy rules, and copyright law, including GDPR and CCPA where relevant. Minimize personal data, establish appropriate retention and deletion procedures, and obtain consent or another valid legal basis where necessary. Public-page access is not blanket permission to redistribute content, create harmful profiles, or bypass restrictions.

Public fields, visibility, and availability may change without notice. The output is a metadata snapshot, not an official audit, a guaranteed complete archive, or financial advice. Validate important decisions against appropriate evidence and consult qualified counsel for your particular use case.

### Resources

- [Twitch Actor listing](https://apify.com/myagizm/twitch-clips-vods-scraper) — input form, pricing panel, runs, and Issues when access is available.
- [Apify API reference](https://docs.apify.com/api/v2) — Actor runs, run status, storage access, and dataset endpoints.
- [Apify dataset documentation](https://docs.apify.com/platform/storage/dataset) — dataset records, export formats, and handling stored results.
- [Apify MCP documentation](https://docs.apify.com/platform/integrations/mcp) — connecting compatible AI tools with Apify authentication.
- [Apify schedules](https://docs.apify.com/platform/schedules) — repeat saved workflows at chosen intervals.
- [Apify integrations](https://docs.apify.com/platform/integrations) — automation and downstream workflow options.
- [Apify webhooks](https://docs.apify.com/platform/integrations/webhooks) — react to run events in your own systems.
- [myagizm Actor catalog](https://apify.com/myagizm) — currently accessible owned tools.

***

### 中文说明

#### Twitch 片段、VOD 与频道元数据采集器（无需 Twitch API Key，无需登录）

<div align="center">

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-00C7B7)](https://apify.com/myagizm/twitch-clips-vods-scraper)
![无需 Twitch API Key](https://img.shields.io/badge/Twitch_API_key-not_required-9146FF)
![无需 Twitch 登录](https://img.shields.io/badge/Twitch_login-not_required-9146FF)
![无需 Cookie](https://img.shields.io/badge/Twitch_cookies-not_required-9146FF)
![导出](https://img.shields.io/badge/Export-JSON_%7C_CSV_%7C_Excel-blue)
![MCP](https://img.shields.io/badge/MCP-via_Apify-blue)
![按结果计费](https://img.shields.io/badge/Billing-per_stored_record-green)

</div>

**将 Twitch 公开频道用户名或频道链接转换为结构化数据，采集公开频道资料、粉丝总数、直播状态、当前观众数，以及热门片段和公开归档 VOD 的元数据。这个 Actor 适合主播研究、电竞内容整理、公开内容发现和定期频道观察。选择 `channels`、`clips` 或 `videos` 模式后，即可把返回结果导出为 JSON、CSV 或 Excel；无需提供 Twitch 开发者密钥、Twitch 登录信息或 Cookie。**

> 首次使用建议只输入一个公开频道，并设置较小的结果上限。已记录的片段测试在 3.635 秒内返回了两条记录，但这不是速度承诺。若账户有可用 Apify 额度，可用于小规模试用；不能据此认为所有结果或平台运行都免费。

**本工具采集元数据，不下载视频。** 返回的是 Twitch 频道、片段或 VOD 的公开页面链接，不保证提供直接 MP4 地址、可下载流、完整视频、字幕或离线归档。运行 Actor 需要 Apify 账户，通过 API 或 MCP 使用时也需要自己的 Apify 身份认证。

#### 中文目录

- [可以采集什么](#可以采集什么)
- [适合哪些用户](#适合哪些用户)
- [字段说明](#字段说明)
- [使用步骤](#使用步骤)
- [输入示例与参数](#输入示例与参数)
- [真实输出示例](#真实输出示例)
- [限制、覆盖范围与准确性](#限制覆盖范围与准确性)
- [价格与计费](#价格与计费)
- [可靠使用建议](#可靠使用建议)
- [其他 Twitch 与跨平台工具](#其他-twitch-与跨平台工具)
- [MCP 与 AI 助手](#mcp-与-ai-助手)
- [集成与 API](#集成与-api)
- [支持](#支持)
- [常见问题](#常见问题)
- [相关搜索](#相关搜索)
- [免责声明](#免责声明)
- [参考资源](#参考资源)

#### 可以采集什么

✅ **公开频道快照：** `channels` 模式采集可取得的频道资料、粉丝总数、在线直播状态，以及存在时的当前直播信息。离线频道仍可能是有效频道，不应把离线当作不存在。

✅ **按频道发现片段：** `clips` 模式按指定时间窗口采集可用的热门片段元数据。可能包含片段 ID、标题、页面链接、观看数、时长、创建时间和所属频道用户名。

✅ **公开归档 VOD 元数据：** `videos` 模式采集可访问的公开归档视频记录，包括可取得的视频标识、标题、观看数、时长、创建时间和 Twitch 页面链接。

✅ **小批量多频道输入：** 一次提交 1–20 个频道目标，并设置整个任务最多返回 1–100 条数据。结果上限针对整个任务，而非每个频道。

✅ **结构化导出：** 使用完整 JSON 保留原始字段，或导出 CSV、Excel 做表格分析。内置 `overview` 视图只展示选定列，未显示的字段可能仍存在于完整 JSON。

✅ **可重复执行：** 可在 Apify 保存 Task，再通过平台定时任务、Webhook 或 API 周期性采集。这是平台自动化能力，不代表工具持续实时跟踪每个频道。

本工具不能按任意关键词搜索整个 Twitch，也不提供聊天记录、订阅者身份、私人后台、收入信息、私有录像、仅限订阅者观看的视频或完整粉丝名单。粉丝总数属于公开汇总指标，不是粉丝身份目录。

#### 适合哪些用户

- **品牌合作与主播筛选团队：** 比较公开受众指标、当前活动和可见内容，形成进一步联系的候选名单。当前观众数只是某个时间点的数据，不等于平均观众数。
- **电竞与游戏分析人员：** 从已知频道收集片段和 VOD 信息，整理赛事相关公开内容，并保留原页面链接供编辑核对。
- **内容研究者与编辑：** 查找片段标题、观看数和创建时间，再到 Twitch 原页面评估内容。采集元数据并不自动获得转载视频的许可。
- **经纪公司与人才管理团队：** 建立周期性的频道快照，并与通过授权取得的商业资料分开管理。
- **数据工程师：** 为有限规模的采集任务建立入库流程，保留原始 ID，并显式处理不同记录类型的字段差异。
- **学术研究者：** 在明确的抽样窗口、保存期限和隐私规则下，研究公开主播活动；缺失字段必须保留其“不知道”的含义。
- **AI 助手使用者：** 通过 Apify MCP 请求小批量明确目标，检查真实返回的数据后再进行总结，不补造未返回的指标。

如果需要完整的主播研究报告，应分别执行频道和片段任务，再在自己的系统中关联。不要假设每条片段记录都含有完整频道资料。历史研究应额外记录采集时间，不能用内容创建时间代替观察时间。

#### 字段说明

输出分为 `type=channel`、`type=clip` 和 `type=vod` 三类。频道记录使用 `login` 与 `channelUrl`；片段和 VOD 存在相关字段时使用 `channelLogin` 与 `url`。不要把所有记录都当作同一种固定结构；应先检查 `type`，再读取与该类型相关的字段。字段缺失或为 `null` 时，不能擅自补成零、空字符串或离线状态。

##### 已在真实片段样本中填充的核心字段

下列字段在两条真实片段记录中均出现。这说明该样本的实际结构，并不保证所有模式和未来响应都包含同样字段。

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `type` | string | 记录类型。真实片段样本为 `clip`；读取其他字段前应先判断记录所属类型。 |
| `platform` | string | 平台标记。两条真实记录均为 `twitch`。 |
| `url` | string | Twitch 公开页面链接。片段页面不是保证可直接下载的视频地址。 |
| `channelLogin` | string | 片段所属频道用户名。样本值为 `xqc`，不保证另有同值的 `login` 字段。 |
| `clipId` | string | 公开片段标识，应完整保存大小写、标点和后缀。 |
| `title` | string | 采集时可见的公开片段标题。标题属于用户内容，之后可能变化。 |
| `views` | number | 采集时公开显示的观看次数，不代表独立观众人数或完整后台分析。 |
| `durationSeconds` | number | 片段时长，单位为秒。样本值分别为 44 和 26。 |
| `createdAt` | string | 内容创建时间。样本使用以 `Z` 结尾的 UTC 时间字符串，不是采集时间。 |

##### 频道字段：适用且公开可取得时填充

这些字段来自当前数据集视图和频道模式的说明。下方仅展示片段测试，不能据此证明频道模式的全部字段已实测。字段可能缺失或为 `null`；离线本身不属于采集错误。

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `login` | string 或 null | 频道用户名，可用于频道记录和频道视图；片段原始 JSON 没有它时请读取 `channelLogin`。 |
| `displayName` | string 或 null | 公开显示名称。展示时保留大小写，关联数据时使用稳定的用户名或标识。 |
| `followersCount` | number 或 null | 可取得的公开粉丝总数，不包含粉丝身份列表。 |
| `isLive` | boolean 或 null | 可解析时的直播状态。`false` 表示离线，缺失或 `null` 表示未知，不能直接视为离线。 |
| `currentViewers` | number 或 null | 正在直播且可取得时的当前观众数。未知值不能替换为零。 |
| `streamTitle` | string 或 null | 当前公开直播标题。离线频道可能没有当前直播标题。 |
| `gameName` | string 或 null | 当前游戏或分类名称，不是频道过去所有游戏分类的历史。 |
| `channelUrl` | string 或 null | 频道记录中可取得的 Twitch 公开频道页面。频道使用 `channelUrl`，不能假设所有类型都共用 `url`。 |
| `id` | string 或 null | 返回时的频道标识，建议保留字符串形式。 |
| `createdAt` | string 或 null | 返回时的频道创建时间，不是这次快照的采集时间。 |

##### 片段和 VOD 字段：适用且存在时填充

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `clipId` | string 或 null | 片段标识，不是 VOD 标识。 |
| `videoId` | string 或 null | 可取得的公开归档 VOD 标识。建议作为字符串保存，避免表格软件转成数值。 |
| `title` | string 或 null | 可取得的公开片段或 VOD 标题。 |
| `views` | number 或 null | 可取得的公开观看数，两次采集之间可能变化。 |
| `durationSeconds` | number 或 null | 内容时长，单位为秒；存在时长不代表已下载媒体。 |
| `createdAt` | string 或 null | 内容创建时间，与采集入库时间不同。 |
| `url` | string 或 null | 可取得的 Twitch 片段或视频公开页面。 |
| `channelLogin` | string 或 null | 原始内容记录中包含时的所属频道用户名。关联前检查真实返回键名。 |

##### 输出链接与诊断记录

Actor 输出结构提供 `results` 链接，用 `view=overview` 查看选定字段；`fullJson` 链接用于读取完整数据集。这两个值是输出入口，不是每条 Twitch 数据行的列。

发生用户输入问题时，请读取该次运行键值存储中的 `OUTPUT` 记录。诊断可包含 `ok`、`errorType`、`message`、`hint` 和经过处理的 `input`。混合批次中，`skipped` 可说明被跳过的目标，同时有效目标仍可能产生结果。不是每个正常成功任务都存在诊断 `OUTPUT`；提供的片段测试没有该记录。

特别注意：当前 `overview` 视图包含 `login`，但真实片段行使用 `channelLogin`。表格中的频道列为空，不一定意味着 JSON 没有频道信息。先查看完整 JSON，再判断是否缺失。

#### 使用步骤

1. 有访问权限时，在 Apify 打开 [Twitch Clips, VODs & Channel Scraper](https://apify.com/myagizm/twitch-clips-vods-scraper)。
2. 选择 `channels`、`clips` 或 `videos` 中的一种模式。
3. 输入 1–20 个公开频道用户名或 HTTPS Twitch 频道链接。目标接口以频道为单位，不是单独的片段 ID 或视频 ID。
4. 将 `maxItems` 设置为 1–100 的整数。它限制整个任务的数据行总数，不是每个频道的条数。
5. 片段模式可选择 `LAST_DAY`、`LAST_WEEK`、`LAST_MONTH` 或 `ALL_TIME`。
6. 启动任务并等待终态。`SUCCEEDED` 可能表示保存了数据，也可能表示识别到输入或正常空结果情况；应结合数据集与 `OUTPUT` 判断。
7. 查看数据集表格，需要时再检查完整 JSON，并导出适合自己流程的格式。
8. 确认实际输入可用后再保存 Task，按需要添加定时任务或 Webhook。

先测试一个已知公开频道，能更容易核对字段、可用性和费用。不要提交未支持的参数，期待它们自动开启其他采集功能。

#### 输入示例与参数

##### 小规模片段请求

```json
{
  "mode": "clips",
  "targets": ["xqc"],
  "maxItems": 2,
  "clipPeriod": "ALL_TIME"
}
```

这个示例是与真实输出的频道和记录类型相符的有效用法。提供的运行文件包含数据行和运行信息，但没有原始 `INPUT` 记录，因此这里不宣称它是该次测试输入的逐字副本。使用 `ALL_TIME` 可说明为何可能返回较早创建的片段，但不代表会完整扫描历史。

##### 公开频道快照

```json
{
  "mode": "channels",
  "targets": ["xqc", "https://www.twitch.tv/pokimane"],
  "maxItems": 2
}
```

##### 公开归档 VOD 元数据

```json
{
  "mode": "videos",
  "targets": ["shroud"],
  "maxItems": 10
}
```

频道和 VOD 请求属于使用示例，不是下方片段测试中已验证的其他模式输出。频道状态、可见性和公开录像随时可能变化。

| 输入字段 | 类型 | 必填 / 默认值 | 说明 |
| --- | --- | --- | --- |
| `mode` | string | 可选；默认 `clips` | 只能使用 `channels`、`clips` 或 `videos`。一次运行选择一种记录类型。 |
| `targets` | string 数组 | 必填；1–20 项 | 公开 Twitch 频道用户名或 HTTPS 频道链接，如 `xqc` 或 `https://www.twitch.tv/pokimane`。 |
| `maxItems` | integer | 可选；默认 `20` | 全任务最多保存的数据行数，最小 `1`，最大 `100`，不是每频道配额。 |
| `clipPeriod` | string | 可选；默认 `LAST_WEEK` | 片段窗口：`LAST_DAY`、`LAST_WEEK`、`LAST_MONTH`、`ALL_TIME`；不是 VOD 自定义日期筛选。 |

当前目标校验会把用户名转为小写，也接受开头的 `@`。建议使用纯用户名或标准 `https://www.twitch.tv/<channel>` 链接。HTTPS URL 不应包含用户名密码或自定义端口。其他网站域名、空目标和不支持的模式都不是有效请求。

公开输入结构只宣传上述四个字段。没有关键词搜索、分页游标、自定义起止日期、清晰度选择、Cookie、OAuth、媒体下载开关或必需代理配置。不要把这些参数加入请求。表单预填的频道只是示例，不保证它们始终公开所有类型的数据。

#### 真实输出示例

以下 JSON 来自真实运行 `4jgF5HEpIetpdvJfo` 的两条数据，使用构建版本 `0.1.2`。任务于 **2026-10-09 06:12:27.192 UTC** 开始，以 `SUCCEEDED` 结束，状态说明为 **“Pushed 2 Twitch records.”** 记录中的执行时长为 **3.635 秒**。这些信息仅验证一次片段模式测试，不代表全部模式、最大批次或并发压力能力。

```json
[
  {
    "url": "https://www.twitch.tv/xqc/clip/DeliciousDelightfulPicklesWOOP",
    "type": "clip",
    "title": "xqc makes the wrong choice",
    "views": 956334,
    "clipId": "DeliciousDelightfulPicklesWOOP",
    "platform": "twitch",
    "createdAt": "2020-12-09T19:18:10Z",
    "channelLogin": "xqc",
    "durationSeconds": 44
  },
  {
    "url": "https://www.twitch.tv/xqc/clip/NimbleProductiveAsparagusHeyGuys-s77ZvN10Yr-O2sfo",
    "type": "clip",
    "title": "wow",
    "views": 780956,
    "clipId": "NimbleProductiveAsparagusHeyGuys-s77ZvN10Yr-O2sfo",
    "platform": "twitch",
    "createdAt": "2021-04-04T21:34:33Z",
    "channelLogin": "xqc",
    "durationSeconds": 26
  }
]
```

这个样本没有直接 MP4 下载链接、完整频道资料、粉丝身份、直播观众数、聊天记录或字幕。不要在下游流程中补造这些内容。不存在的字段应按自己的数据结构保留为缺失或可空值。

虽然数据集已经保存两条记录，抓取到的运行响应仍显示已记账结果事件数为零。这不是最终结算证明，不能理解为“成功采集的片段免费”。计费依据是下方配置价格；实际使用时请查看自己账户中该任务的最终费用。

#### 限制、覆盖范围与准确性

##### 有界采集，不是完整 Twitch 档案

- **每次输入 1–20 个目标：** 更大的频道名单需要拆成多个任务或运行。
- **每次最多 1–100 条：** `maxItems` 是整个运行的总上限。
- **每频道请求最多 30 条片段或 VOD：** 把总上限设为 100，不代表一个频道就能返回 100 条。
- **一次只选一个模式：** 需要频道、片段和 VOD 时分别执行，再在自己的流程中关联。
- **没有公开分页输入：** 未提供分页游标或自动导出全部历史的接口。
- **`ALL_TIME` 不等于全量：** 它改变片段时间窗口，不取消数量边界。
- **不保证均匀分配：** 小的全局上限可能使后面的频道返回较少数据。比较主播时可每次只输入一个频道。

##### 保守理解公开指标

直播状态、观众数、粉丝数、标题和观看次数可能在采集后改变。`createdAt` 是内容创建时间，不是最后更新时间，也不是研究者首次看到它的时间。历史片段仍可能在全部时间范围的结果中出现。

无法取得的字段可能缺失或为 `null`。不要将未知观众数变成零，也不要把未知直播状态变成 `false`。公开频道离线时仍然有效。删除、录像过期、内容限制、地域差异以及 Twitch 页面变化，都可能影响可见性。公开 VOD 元数据不保证涵盖频道过去的每一次直播。

提供的真实测试证明片段数据行已返回，但没有证明频道字段完整性、VOD 覆盖率、长期吞吐量、并发上限或统一成功率。本文不承诺固定速度，也不宣传未经测量的准确率百分比。

##### 输入结果与运行故障的区别

**输入错误以 `SUCCEEDED` 结束，返回零条结果，Actor 结果费用为零；请查看 `OUTPUT` 了解原因。** 可识别情况包括无效输入、已确认不可用的目标、已确认没有匹配结果，以及适用的免费计划限制。成功终态本身不等于一定存在数据行。

混合批次中，有效目标仍可能产生数据，无效或不可用目标可出现在 `OUTPUT.skipped`。已保存的有效结果正常计费。零行、零结果费用适用于全部为正常空结果的情况，不适用于已有有效结果的部分成功批次。

**上游错误以 `FAILED` 结束。** 访问拒绝、服务端限流、超时、传输故障和运行错误不会被悄悄写成正常空结果。未解释的空响应也不自动等于已确认无匹配。遇到访问或限流拒绝时，工具停止，而不是承诺通过切换身份绕过限制。

Apify 可能在 Actor 启动前拒绝非法 JSON 或不符合输入结构的请求。`SUCCEEDED` 输入错误约定描述的是已启动运行内处理的问题，不表示每个被拒绝的 HTTP 请求都会建立成功任务。已经发生的平台运行费用与 Actor 结果事件费用分开计算。

#### 价格与计费

本 Actor 使用 Apify **按事件计费**。主要事件名为 **Public record**，事件键为 `apify-default-dataset-item`。每一条成功保存到默认数据集的公开频道、片段或 VOD 元数据计为一个结果事件。计费单位是保存的数据行，不是提交的频道数、HTTP 请求数或下载的视频数。

提供的当前 Actor 快照中，价格自 **2026-09-29** 起生效，准确金额如下：

| Apify 价格档位 | 每条数据 USD | 每 1,000 条数据 USD |
| --- | ---: | ---: |
| FREE | $0.0015 | $1.50 |
| BRONZE | $0.0012 | $1.20 |
| SILVER | $0.0011 | $1.10 |
| GOLD | $0.0009 | $0.90 |
| PLATINUM | $0.0009 | $0.90 |
| DIAMOND | $0.0009 | $0.90 |

付费档位的区别是已配置的每条价格，不表示新增输入字段、无限历史、优质视频下载、更高画质或取消 100 条输入上限。FREE 是 Apify 档位标签，不等于事件价格为零。如果价格在本参考之后发生变化，启动前请以商店价格面板为准。

**Apify 平台费用另计。** 计算、存储、传输和其他适用用量取决于账户与运行。配置中的 $0.50 最小消费上限设置属于消费控制参数，不是每次运行必须收取 $0.50 的结果费，也不表示每次一定花费该金额。

完全正常的空结果不产生结果事件。按事件说明，失败任务不收结果费用。Actor 处理的输入错误以 `SUCCEEDED` 结束，不保存结果数据，Actor 结果费为零。“无结果费”不代表已经完成的平台工作一定免费。

试用时设置较小的 `maxItems`，并配置自己的 Apify 消费控制。不要根据刚结束时的零计数推断最终收费，也不要把测试抓取中的临时事件数当作报价。应在记账完成后查看最终用量。

#### 可靠使用建议

1. **区分采集目的。** 频道快照用于当前直播和公开受众指标，片段与 VOD 用于内容记录；不同目标应分开运行。
2. **先核对真实字段。** 建立定时流程前查看完整 JSON，尤其不要假设片段的 `channelLogin` 会自动出现在 `login` 列。
3. **自行保存采集时间。** 在流程或数据库增加入库时间，保留 Twitch 内容的 `createdAt` 原值。
4. **将 ID 当字符串保存。** 片段大小写和标点有意义；VOD 标识不应被表格软件改成科学计数法或四舍五入。
5. **在下游去重。** 周期任务可能重复返回相同片段或 VOD。可按记录类型加内容 ID 建键；跨运行去重由自己的流程负责。
6. **保留空值语义。** 未知、离线、不适用和零是不同状态，明确的可空字段有助于减少误导。
7. **有目的地选时间窗口。** 短窗口便于近期研究，`ALL_TIME` 适合历史热门片段，但仍然是有限采样。
8. **避免不公平的批次比较。** 全局条数上限并不平均分给各频道，分开运行能更清楚地比较样本。
9. **同时检查终态与条数。** `SUCCEEDED` 加空数据集时，应读取 `OUTPUT`，而不是补造数据或无休止重试。
10. **有限重试真实故障。** 临时问题可按受控策略重试；已确认不可用的目标需要修改输入。
11. **明确选择导出形式。** 原始 JSON 适合保留完整结构，精选平面字段适合报表；表格视图不是全部原始数据。
12. **尊重隐私与版权。** 保留公开页面链接，减少个人数据保存，在转载创作者媒体前取得适当授权。

#### 其他 Twitch 与跨平台工具

若需要其他 Twitch 记录类型，本 Actor 已提供 `channels`、`clips` 和 `videos`。切换模式即可，不要假设存在另外一个已验证的自有 Twitch 下载器、聊天采集器或粉丝身份采集器；提供的参考材料未验证这些产品。

可浏览 [myagizm 工具目录](https://apify.com/myagizm) 查找可访问的工具。以下自有 Actor 身份已在配套快照中核对，但快照均标记为**私有**。链接属于目录参考，不保证目前公开可用；若无法访问，请以作者目录中实际发布的列表为准。

| 自有 Actor 参考 | 独立用途 | 可用性说明 |
| --- | --- | --- |
| [Audio & Video Subtitles with Speaker Labels](https://apify.com/myagizm/video-subtitle-service) | 对符合其要求、获得授权的音频或视频进行独立字幕与转录处理。 | 快照中为私有。本 Twitch Actor 不为它生成媒体文件。 |
| [Website Sitemap URL Extractor](https://apify.com/myagizm/website-sitemap-extractor) | 从公开 XML 站点地图提取页面 URL 和可取得的元数据。 | 快照中为私有，不是 Twitch 内容采集工具。 |
| [Naver Blog Search Scraper](https://apify.com/myagizm/naver-blog-search-scraper) | 按关键词发现公开博客文章元数据。 | 快照中为私有，属于不同平台和输入约定。 |
| [Remote Job Feed Scraper](https://apify.com/myagizm/remote-job-feed-scraper) | 采集结构化远程职位信息和原始招聘链接。 | 快照中为私有，属于独立数据领域。 |

**跨平台研究：** Instagram、TikTok、LinkedIn、Reddit、YouTube 和 Google 数据分别有自己的输入、访问条件、权限和计费。请查看作者目录中目前列出的工具。本文不编造未核实的产品链接，也不承诺跨平台捆绑订阅。除非另一个媒体处理 Actor 明确支持且你有必要权利，不要把 Twitch 页面链接直接当作其视频输入。

#### MCP 与 AI 助手

Apify 的 Model Context Protocol 集成可让兼容 AI 客户端调用 Actor。本工具通过 Apify MCP 使用，没有另外公开的自定义 MCP 端点或独立实时 Twitch 服务接口。

建议流程：

1. 按 Apify 文档配置 MCP 客户端，并使用自己的 Apify 账户认证。
2. 在账户具有权限的前提下，将此 Actor 提供给客户端。
3. 指定一种模式、明确频道、适用的片段窗口和较小的 `maxItems`。
4. 等待运行完成，读取数据集；没有结果时检查 `OUTPUT`。
5. 只总结返回的数据，保留 Twitch 页面链接，并区分采集时间和内容创建时间。

示例提示：**“使用 `myagizm/twitch-clips-vods-scraper` 采集 xqc 的公开全部时间范围片段，最多两条。返回标题、观看数、时长、创建时间和 Twitch 页面链接。如果没有数据，请解释运行诊断，不要猜测。”**

MCP 不取消计费、运行上限、输入校验或隐私责任。“无需 Twitch API Key”指不需要 Twitch 凭据，不代表 Apify API/MCP 无需认证。为 AI 助手设置消费限制，不把密钥放入提示词或输出数据集。

#### 集成与 API

手动采集可用 Apify Console；重复输入可保存 Task；周期采集可用 Apify Schedules。Webhook 可在运行结束后触发下游流程，但仍需检查终态。API 客户端、Make、Zapier、n8n 和自己的脚本可通过 Apify 或 HTTP 能力读取数据集。这些属于平台集成方式，不是通过额外 Actor 输入字段配置的内置输出目的地。

以下三条 curl 仅为文档示例。请在自己的环境设置 `APIFY_TOKEN`，不要在共享代码、公开工单、README 或 AI 提示中粘贴真实密钥。API 路径使用已核实的 `myagizm~twitch-clips-vods-scraper`；私有 Actor 需要有权限的账户才能运行。

##### 1. 同步运行并取得数据行

```bash
curl --fail-with-body --request POST \
  "https://api.apify.com/v2/acts/myagizm~twitch-clips-vods-scraper/run-sync-get-dataset-items?format=json&clean=true" \
  --header "Authorization: Bearer ${APIFY_TOKEN}" \
  --header "Content-Type: application/json" \
  --data '{"mode":"clips","targets":["xqc"],"maxItems":2,"clipPeriod":"ALL_TIME"}'
```

同步接口适合小规模测试。返回空数组时仍需结合运行诊断判断，不应将所有空结果都理解为正常无匹配。更长的流程宜使用异步运行，并保存运行 ID。

##### 2. 启动异步运行

```bash
curl --fail-with-body --request POST \
  "https://api.apify.com/v2/acts/myagizm~twitch-clips-vods-scraper/runs" \
  --header "Authorization: Bearer ${APIFY_TOKEN}" \
  --header "Content-Type: application/json" \
  --data '{"mode":"clips","targets":["xqc"],"maxItems":2,"clipPeriod":"ALL_TIME"}'
```

保存响应中的 `data.id` 和 `data.defaultDatasetId`。通过认证访问 `GET https://api.apify.com/v2/actor-runs/<RUN_ID>` 并轮询，直到进入终态。启动响应不等于采集完成。需要输入诊断时，使用该运行的 `defaultKeyValueStoreId` 读取存在时的 `OUTPUT` 记录。

##### 3. 读取已完成的数据集

```bash
curl --fail-with-body --request GET \
  "https://api.apify.com/v2/datasets/${DATASET_ID}/items?format=json&clean=true" \
  --header "Authorization: Bearer ${APIFY_TOKEN}"
```

把 `DATASET_ID` 设置为**自己运行**返回的默认数据集 ID。等待完成再读取，可避免把未完成数据误当最终结果。表格导出可使用 Apify 文档说明的 CSV 或 XLSX 参数；只有确实需要精选列时才加 `view=overview`，否则读取完整 JSON。

生产流程应使用明确的运行和数据集标识，不要把签名样本 URL 复制成永久接口。权限和保留时间可能变化，新运行的标题、数值和可见内容也可能与示例不同。

#### 支持

列表可访问时，请通过 Apify 的 **Issues** 标签反馈问题或提出字段请求。提供运行 ID、模式、去敏输入、大致采集时间、预期行为、实际状态，以及完整 JSON 是否与表格表现不同。

空结果且 `SUCCEEDED` 时，可提供非敏感的 `OUTPUT.errorType`、message 和 hint。`FAILED` 时提供必要的去敏状态或日志片段。不要在公开问题中分享 Apify 密钥、Twitch Cookie、密码、签名数据集地址、私人导出或无关个人资料。

功能请求不代表功能已存在。完整视频下载、聊天采集、粉丝身份枚举和受限制内容不在本文范围内。Twitch 公开页面发生变化时，工具可用性、字段完整程度和响应时间也可能变化。

#### 常见问题

##### 1. 需要 Twitch API Key 吗？

不需要 Twitch 开发者密钥。运行需要 Apify 账户，通过 API 或 MCP 使用时需要自己的 Apify 认证。

##### 2. 需要 Twitch 登录或 Cookie 吗？

不需要。工具读取公开元数据，不要求提供 Twitch 账户凭据，也不会借用你的账户访问受限制内容。

##### 3. 三种模式有什么区别？

`channels` 采集频道快照，`clips` 采集可用热门片段信息，`videos` 采集公开归档 VOD 元数据。不同模式应分开运行。

##### 4. 可以输入频道链接而不是用户名吗？

可以，使用 HTTPS Twitch 频道 URL 或纯用户名。这里是频道目标接口，不是任意网页抓取器。

##### 5. 能直接输入单个片段链接或 VOD ID 吗？

没有公开支持这种目标接口。请提交频道并选择模式，不要假设内容页面路径会选中某一条指定记录。

##### 6. 一次最多多少频道和结果？

输入支持 1–20 个目标，全局 `maxItems` 为 1–100。每频道请求最多 30 条片段或 VOD。这是上限，不是实际返回数量保证。

##### 7. `ALL_TIME` 会返回所有历史片段吗？

不会。它选择时间窗口，但采集仍受数量限制，没有公开的完整历史分页输入。

##### 8. 可以自定义 VOD 起止日期吗？

没有此参数。`clipPeriod` 仅是四种固定的片段窗口，不是通用日期范围过滤器。

##### 9. 能下载片段、VOD 或正在直播的视频吗？

不能。此 Actor 返回元数据和公开页面链接，不保证直接下载、直播录制或完整离线档案。

##### 10. 包含字幕、聊天、订阅者身份或粉丝名单吗？

不包含。频道模式可能提供公开粉丝总数，但不提供身份目录或私有后台分析。

##### 11. 为什么缺少观众数？

可能该模式不适用、频道离线，或公开值不可取得。未知不等于零，应使用可空字段。

##### 12. 为什么表格频道列为空，JSON 却有频道？

视图选择了 `login`，而真实片段记录使用 `channelLogin`。请检查完整 JSON，并显式映射真实键名。

##### 13. 观看数和粉丝数是实时分析吗？

它们是采集时的公开快照，不是持续分析、独立受众人数或经过审核的商业指标。后续数值可能不同。

##### 14. 为什么零条数据也可能显示 `SUCCEEDED`？

已识别的输入问题、确认不可用目标、确认无结果和适用免费限制会正常结束，不保存结果也不收 Actor 结果费。请读取 `OUTPUT`。

##### 15. 上游故障也会显示成功空结果吗？

不会。访问拒绝、上游限流、超时和运行故障保留 `FAILED`；无法解释的空响应不自动归类为正常无结果。

##### 16. 批次只有一个无效目标会怎样？

有效目标可能继续返回正常计费数据，被跳过的目标可记录于 `OUTPUT.skipped`。全部无效时没有结果行。

##### 17. FREE 档位免费吗？付费档位有更多功能吗？

FREE 有配置的每条价格，不是零价。付费档位使用价格表中的每条金额，不承诺额外模式、清晰度或无限条数。平台费用另计。

##### 18. 可以导出 CSV、Excel 或数据库吗？

可以通过 Apify 数据集导出或 API 再写入自己的系统。请将标识作为文本保存，并核对视图未展示的原始字段。

##### 19. 可以定时、用 MCP 或设置代理吗？

定时与 MCP 属于 Apify 平台流程。公开输入结构没有宣传客户代理配置，也没有独立自定义 MCP 服务或 standby 接口。使用文档中的四个输入字段。

##### 20. 可以访问私有内容吗？采集公开元数据是否一定合法？

工具只处理可访问的公开元数据，不授予私有或受限制内容访问权。使用者负责遵守网站条款、隐私法律、版权、必要同意和下游使用规则。公开可见不是任意转载或处理个人数据的许可。

#### 相关搜索

Twitch 片段采集 · Twitch VOD 元数据抓取 · Twitch 频道资料采集 · Twitch 公开数据提取 · Twitch 粉丝总数查询 · Twitch 直播状态检查 · Twitch 当前观众数 · Twitch 直播标题数据 · Twitch 游戏分类元数据 · Twitch 片段观看次数 · 按频道查询热门片段 · Twitch 最近一天片段 · Twitch 最近一周片段 · Twitch 最近一月片段 · Twitch 全部时间片段元数据 · Twitch 归档视频信息 · Twitch VOD 时长 · Twitch 片段创建时间 · Twitch 用户名转 JSON · Twitch 频道链接采集 · Twitch CSV 导出 · Twitch Excel 元数据导出 · Twitch 公开数据 API · Twitch Apify Actor · Twitch MCP AI 助手 · Twitch 主播研究 · Twitch 电竞内容发现 · 无登录 Twitch 元数据 · 无 API Key Twitch 采集 · Twitch 定时频道快照

#### 免责声明

这是独立工具，与 Twitch 无隶属关系，不由 Twitch 运营，也未获得 Twitch 背书。Twitch 名称、标志和相关商标归各自权利人所有。Apify 提供运行及数据导出平台；使用本 Actor 不会授予 Twitch 授权，也不会转移创作者内容权利。

仅采集和使用你有权访问的数据。遵守适用的网站条款、隐私规则和版权法规，包括适用时的 GDPR 与 CCPA。减少个人数据收集，制定保留和删除规则，必要时取得同意或其他合法依据。公开页面可访问不意味着可以随意转载内容、建立有害画像或绕过访问限制。

字段、可见性和公开内容可能随时变化。结果属于元数据快照，不是官方审计、保证完整的历史档案或财务建议。涉及重要决策时应自行核实证据，具体法律问题请咨询合格专业人士。

#### 参考资源

- [Twitch Actor 页面](https://apify.com/myagizm/twitch-clips-vods-scraper)：有权限时查看输入、价格、运行和 Issues。
- [Apify API 文档](https://docs.apify.com/api/v2)：运行创建、状态、存储与数据集接口。
- [Apify 数据集文档](https://docs.apify.com/platform/storage/dataset)：记录处理、导出格式与结果保存。
- [Apify MCP 文档](https://docs.apify.com/platform/integrations/mcp)：使用 Apify 认证连接兼容 AI 工具。
- [Apify 定时任务](https://docs.apify.com/platform/schedules)：按计划执行保存的流程。
- [Apify 集成](https://docs.apify.com/platform/integrations)：自动化与下游连接方式。
- [Apify Webhook](https://docs.apify.com/platform/integrations/webhooks)：在自己的系统中响应运行事件。
- [myagizm 工具目录](https://apify.com/myagizm)：查看目前可访问的自有 Actor。

# Actor input Schema

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

Choose public channel snapshots, top clips, or archived VOD metadata.

## `targets` (type: `array`):

Twitch usernames or channel URLs, such as xqc or https://www.twitch.tv/pokimane.

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

Maximum dataset rows for the run. Twitch returns at most 30 clips or VODs per channel request.

## `clipPeriod` (type: `string`):

Time window for clip results.

## Actor input object example

```json
{
  "mode": "clips",
  "targets": [
    "xqc",
    "pokimane",
    "shroud"
  ],
  "maxItems": 20,
  "clipPeriod": "LAST_WEEK"
}
```

# Actor output Schema

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

Dataset table of public Twitch channel, clip, and VOD records.

## `fullJson` (type: `string`):

Complete records, including fields not displayed in the table.

# 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 = {
    "mode": "clips",
    "targets": [
        "xqc",
        "pokimane",
        "shroud"
    ],
    "maxItems": 20,
    "clipPeriod": "LAST_WEEK"
};

// Run the Actor and wait for it to finish
const run = await client.actor("myagizm/twitch-clips-vods-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 = {
    "mode": "clips",
    "targets": [
        "xqc",
        "pokimane",
        "shroud",
    ],
    "maxItems": 20,
    "clipPeriod": "LAST_WEEK",
}

# Run the Actor and wait for it to finish
run = client.actor("myagizm/twitch-clips-vods-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "mode": "clips",
  "targets": [
    "xqc",
    "pokimane",
    "shroud"
  ],
  "maxItems": 20,
  "clipPeriod": "LAST_WEEK"
}' |
apify call myagizm/twitch-clips-vods-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,myagizm/twitch-clips-vods-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eISkyT5OjWmO4qA4Q/builds/mu6xONy12cei4o0B5/openapi.json
