# YouTube Channel Videos Scraper (`sfoln/youtube-channel-videos`)

List the videos of YouTube channels by URL, @handle or channel ID: title, URL, publish date, duration, views and thumbnail, newest or most popular first, up to 300 per channel. $0.50 per 1,000 videos. No YouTube API key or login needed; failed requests are free.

- Family: Social media data
- Categories: Social media, Videos, Automation
- Availability: on request (private on Apify). Email contact@sfoln.com with subject "Access request: YouTube Channel Videos Scraper (sfoln/youtube-channel-videos)" before calling; calls fail until it is public.
- JSON: https://www.sfoln.com/actors/youtube-channel-videos.json
- MCP: https://mcp.apify.com?tools=sfoln/youtube-channel-videos
- REST (sync): POST https://api.apify.com/v2/actors/sfoln~youtube-channel-videos/run-sync-get-dataset-items
- REST (async): POST https://api.apify.com/v2/actors/sfoln~youtube-channel-videos/runs

YouTube Channel Videos Scraper lists the videos of one or many YouTube channels (by channel URL, @handle or UC… channel ID) and returns one dataset record per video: video ID, URL, title, description snippet, publish date (absolute and relative), duration, view count and thumbnail. Choose newest-first or most-popular-first and how many videos per channel (up to 300). Built for channel monitoring, competitor research, content pipelines and AI agents.

## Price per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| YouTube channel video (`youtube-channel-video-listed`) | $0.0005 | $0.50 / 1,000 | Charged once per video record delivered from a channel's video list. Channel summary records, missing channels and failed requests are not charged, unless the provider billed the lookup of a channel without videos (one event). |

Pay-per-event, USD, billed by Apify; no platform usage charge. Only records with status `ok` are charged. Cap a run with `maxTotalChargeUsd`. Apify free plan: up to 10 per run.

## Run

```bash
curl -X POST "https://api.apify.com/v2/actors/sfoln~youtube-channel-videos/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"channels":["https://www.youtube.com/@YouTube"],"maxVideos":10}'
```

MCP client configuration:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/youtube-channel-videos"
    }
  }
}
```

Example prompt: List the 20 most popular videos of the YouTube channel @YouTube with their view counts and publish dates.

## Input

Paste YouTube channel URLs, @handles or channel IDs. The Actor lists each channel's videos and writes one dataset record per video, plus one summary record per channel.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `channels` (required) | array | — | YouTube channels: Channel URLs (youtube.com/@handle, /channel/UC…, /c/…, /user/…), @handles or UC… channel IDs. Duplicates are removed. Accounts on the Apify free plan can process up to 10 channels per run. |
| `maxVideos` | integer | `30` | Max videos per channel: How many videos to list per channel (newest first, or most popular). Each listed video is one charged event. |
| `sort` | string | `"latest"` | Sort order: latest = newest uploads first; popular = most viewed first. One of `"latest"`, `"popular"`. |
| `maxChannels` | integer | `100` | Max channels: Safety cap on the number of channels processed in this run. |
| `concurrency` | integer | `3` | Concurrency: How many channels are listed in parallel (1–8). |
| `includeRaw` | boolean | `false` | Include raw upstream response: Attach the unmodified provider video object to each video record. |

Example input:

```json
{
  "channels": [
    "https://www.youtube.com/@YouTube"
  ],
  "maxVideos": 10
}
```

## Output

One record per input item with `status` (`ok` is charged; `not_found`, `error`, `skipped_*` are free) and `charged`. The run stores an `OUTPUT` summary record.

| Field | Type | Meaning |
| --- | --- | --- |
| `input` | string | object | Input: The channel URL, @handle or ID as provided. |
| `recordType` | string | Record type: video (one per listed video, charged) \| channel (one summary per input channel; not charged, except a not_found channel whose empty listing the provider billed) |
| `position` | integer | Position: 1-based position of the video in the channel listing. |
| `videoId` | string | null | Video ID |
| `url` | string | null | URL |
| `type` | string | null | Type: video / short / live as reported upstream. |
| `title` | string | null | Title |
| `description` | string | null | Description snippet |
| `publishedAt` | string | null | Published at: ISO 8601, approximate (derived by the upstream from YouTube's relative time). |
| `publishedTimeText` | string | null | Published (relative): e.g. "9 days ago". |
| `durationSecs` | number | null | Duration (s) |
| `durationText` | string | null | Duration |
| `viewCount` | number | null | Views |
| `thumbnailUrl` | string | null | Thumbnail URL |
| `channelId` | string | null | Channel ID |
| `channelName` | string | null | Channel name |
| `channelHandle` | string | null | Channel handle |
| `videosDelivered` | integer | Videos delivered: channel records only. |
| `pagesFetched` | integer | Pages fetched: channel records only. |
| `reachedEnd` | boolean | Reached end: channel records only: true when the channel has no more videos. |
| `stoppedByBudget` | boolean | Stopped by budget: channel records only. |
| `status` | string | Status: ok \| not_found \| error \| skipped_invalid \| skipped_budget \| skipped_free_plan |
| `charged` | boolean | Charged |
| `chargedEvent` | string | Charged event |
| `error` | object | Error |
| `warnings` | array | Warnings |
| `source` | string | Source |
| `fetchedAt` | string | Fetched at |

Example record:

```json
{
  "input": "@ThePatMcAfeeShow",
  "recordType": "video",
  "position": 1,
  "videoId": "5EWaxmWgQMI",
  "url": "https://www.youtube.com/watch?v=5EWaxmWgQMI",
  "type": "video",
  "title": "Russell Wilson Hopes To Finish Career As A Steeler, Reflects On NFL Career With Pat McAfee",
  "description": "Welcome to The Pat McAfee Show LIVE from Noon-3PM EST Mon-Fri...",
  "publishedAt": "2025-01-23T22:48:53.914Z",
  "publishedTimeText": "9 days ago",
  "durationSecs": 2245,
  "durationText": "37:25",
  "viewCount": 110447,
  "thumbnailUrl": "https://i.ytimg.com/vi/5EWaxmWgQMI/hqdefault.jpg",
  "channelId": null,
  "channelName": null,
  "channelHandle": "ThePatMcAfeeShow",
  "status": "ok",
  "charged": true,
  "chargedEvent": "youtube-channel-video-listed",
  "source": "scrapecreators",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}
```

## Related

- [YouTube Video Details Scraper](https://www.sfoln.com/actors/youtube-video-lookup.md) (`sfoln/youtube-video-lookup`)
- [YouTube Video Summarizer – AI + Transcript](https://www.sfoln.com/actors/youtube-transcript-summary.md) (`sfoln/youtube-transcript-summary`)
- [YouTube Comments Scraper](https://www.sfoln.com/actors/youtube-video-comments.md) (`sfoln/youtube-video-comments`)
- [YouTube Channel Analytics & Audit](https://www.sfoln.com/actors/youtube-channel-audit.md) (`sfoln/youtube-channel-audit`)

Publisher: SFOLN LLC, contact@sfoln.com. Catalogue: https://www.sfoln.com/catalog.json. Agent guide: https://www.sfoln.com/agents.md.
