# YouTube Video Scraper API | Keyword, Channels, Playlists (`aurelix/youtube-video-scraper`) Actor

Extract videos with this YouTube keyword scraper: search results, channels and playlists at $0.25 per 1,000 videos on the free plan, each with full watch-page details: exact views, likes, comment count, publish time, tags, category, subscribers. YouTube's filters, a date range, only-new mode.

- **URL**: https://apify.com/aurelix/youtube-video-scraper.md
- **Developed by:** [Aurelix](https://apify.com/aurelix) (community)
- **Categories:** Videos, Social media, Marketing
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.23 / 1,000 video results

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/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

### What is YouTube Video Scraper?

**Search YouTube by keyword, or give channels and playlists, and get every video's full details for $0.25 per 1,000 videos, no login.**

For marketers, researchers and AI builders. Each video's own watch page is read, so views, likes and publish times are exact and current, not a copy of the search card. Skipped and unavailable videos are never charged. Your first run with the example input costs about $0.0111 (10 videos in our test run).

[![YouTube Video Scraper: example output from a real run](https://api.apify.com/v2/key-value-stores/twkCCtTWzsi8fVbx5/records/youtube-video-scraper-card-v1.png)](https://console.apify.com/actors/LL4cuf98Rmzn5wVcv?addFromActorId=LL4cuf98Rmzn5wVcv)

[![YouTube Video Scraper: 75-second demo video](https://api.apify.com/v2/key-value-stores/twkCCtTWzsi8fVbx5/records/youtube-video-scraper-demo-thumb-v1.png)](https://api.apify.com/v2/key-value-stores/twkCCtTWzsi8fVbx5/records/youtube-video-scraper-demo-v1.mp4)

**[▶ Watch the 75-second demo](https://api.apify.com/v2/key-value-stores/twkCCtTWzsi8fVbx5/records/youtube-video-scraper-demo-v1.mp4)**

| | |
|---|---|
| **Input** | Search terms with YouTube's filters, video URLs, channels (Videos, Shorts or Live tab), playlists |
| **Output** | 38 fields per video from its watch page; JSON, CSV, Excel, API |
| **Filters** | Upload date, type, duration, features, relevance or popularity, country, published-after/before range |
| **Automate** | Only-new mode, schedules, Slack or webhook digest, Zapier, Make, n8n, MCP for AI agents |
| **Price** | $0.25 per 1,000 videos ($0.23 per 1,000 videos on paid Apify plans) |
| **Free to try** | Runs on Apify's free plan: the $5 monthly credit covers about 19,000 videos |
| **Login needed** | No |

### Daily monitor: only what's new, every morning

Set it once, get only the new videos every morning. With **Only new videos since last run** on, the first run returns everything that matches; each later run skips videos that earlier runs already returned, so you pay only for new ones.

```json
{
  "channels": [
    "@mkbhd",
    "@veritasium",
    "@LinusTechTips"
  ],
  "maxResults": 20,
  "incremental": true,
  "stateKey": "competitor-channels"
}
```

1. Paste this input into the **Input** tab (JSON view) and click **Save as a new task**; it appears under **Saved tasks**.
2. Open the task from **Saved tasks** and click **Schedule**.
3. Choose **Daily**, pick the hour, and save.

**Cost example:** 3 channels, about 3 new videos a day ≈ $0.28/month on the free plan ($0.28 on paid plans): one run a day for 30 days, start fee included. The first run returns everything that matches, so it costs more.

Add a Slack incoming-webhook URL in `slackWebhookUrl` (or any URL in `webhookUrl`) to get a short digest of each run's new videos; nothing is sent when a run finds nothing.

### Why YouTube Video Scraper users pick this one

- **Exact numbers, read live.** Each video's watch page is read during your run; no cached copies.
- **Every input in one run.** Search terms, video links, channels and playlists together, deduplicated.
- **A from-to date range.** publishedAfter and publishedBefore on exact publish times, no extra fee.
- **A daily channel feed.** Only-new mode stops at the last video already returned.
- **No charge for misses.** Unavailable, duplicate and out-of-range videos are skipped and not charged.

### Get started in 3 steps

1. Type search terms (and pick YouTube's filters), or paste video, channel or playlist links, and set how many videos to read from each.
2. Optionally add a publish date range, or switch on only-new mode and a Slack webhook for a scheduled feed.
3. Click Start, then download JSON, CSV or Excel, or send the rows to Google Sheets, Zapier, Make, n8n or your own code through the API.

**[▶ Try it with the example input](https://console.apify.com/actors/LL4cuf98Rmzn5wVcv?addFromActorId=LL4cuf98Rmzn5wVcv)**

The form opens with an example input already filled in: that run costs about $0.0111 on the free plan.

### How much does it cost to scrape YouTube?

Pay per event: you pay only for what the run returns, plus a small start fee. Bronze, Silver, Gold and higher Apify plans pay less per result.

| Videos | Free plan | Paid plans (Bronze, Silver, Gold) |
|---|---|---|
| 100 | $0.0336 | $0.0316 |
| 1,000 | $0.26 | $0.24 |
| 10,000 | $2.51 | $2.31 |

Totals include the $0.0086 start fee per run, rounded to the cent (amounts under $0.10 to four decimals). Apify's free plan includes $5 of credit a month, enough for about 19,000 videos.

$0.25 per 1,000 videos ($0.23 on paid Apify plans), plus a $0.0086 start fee per run. Filters, the date range and only-new mode cost nothing extra. Duplicates, unavailable videos and videos outside your date range are never charged.

#### Billing events

| Event | Free plan | Paid plans (Bronze, Silver, Gold) |
|---|---|---|
| `video-result` | $0.25 per 1,000 videos | $0.23 per 1,000 videos |
| `apify-actor-start` | $0.0086 per run | $0.0086 per run |

### Benchmarks: how we compare

| Test | Input | Result | Run time | Peak memory |
|---|---|---|---|---|
| Default input | 1 search term, 10 videos | 10 of 10, full details | 71 s | 104 MB |
| Mixed batch | 2 search terms, a channel and a playlist, 40 each | 152 of 152 read in a 600 s test window, all complete | 519 s | 192 MB |
| Long playlist | a 246-video playlist | 200 in a 600 s test window, all complete (all 246 listed) | 580 s | 196 MB |
| Date range on a search | electric cars, published 90 to 30 days ago, 20 | 20, full details; 75 others skipped by date, not charged | 87 s | 109 MB |
| Old videos of a channel | @veritasium, published before 2015, 10 | 10, full details; 286 newer skipped from their listing dates | 119 s | 128 MB |

Apify cloud runs, one run per row, each on a fresh container and Apify's datacenter proxy. YouTube withheld the player data from part of the IPs in every run; the run found working IPs each time. Run times include the container start.

### What data you get

**YouTube Video Scraper** searches YouTube with YouTube's own filters (upload date, type, duration, features, relevance or popularity), or reads channels, playlists and video links, then opens each video's public watch page and returns one row per video: title, full description, exact view and like counts, the comment count as YouTube shows it, exact publish time in ISO 8601 UTC, duration, tags, hashtags, category, chapters, caption languages, live and Short flags, thumbnails, and the channel's name, ID, handle, verified badge and subscriber count. AI agents can call it through Apify's MCP server.

- video_id, url, title, description, description_links, published_at (ISO 8601 UTC), published_date, duration_seconds
- view_count, like_count, comment_count, comment_count_text
- channel_name, channel_id, channel_url, channel_handle, channel_subscribers, channel_subscribers_text, channel_verified
- tags, hashtags, category, chapters \[{title, start, end}], has_captions, caption_languages
- thumbnail_url, thumbnails, is_short, is_live, is_upcoming, is_live_content, is_unlisted, is_family_safe
- source, source_type, source_position, details_complete, source_url, scraped_at

| title | channel_name | published_at | view_count | like_count | comment_count_text | channel_subscribers |
|---|---|---|---|---|---|---|
| Best Espresso Machines (Beginner to Advanced) | Gear Heads | America's Test Kitchen | 2025-11-08T19:59:47Z | 298680 |  | 181 | 3070000 |
| 5 Tips To Make BETTER Espresso At Home | Morgan Eckroth | 2026-10-16T16:00:31Z | 62733 | 1082 | 53 | 1460000 |
| Your Guide to Perfect Home Espresso | Clive Coffee | 2021-06-22T21:06:24Z | 241931 | 5204 | 206 | 93100 |
| Let’s Talk About The Breville Bambino Espresso Machine | Morgan Eckroth | 2020-12-08T17:00:12Z | 3159587 | 48968 | 1.5K | 1460000 |

One full video record, exactly as a real run returned it (long text and lists shortened here). From a real run:

```json
{
  "video_id": "1HKrqlZmYwM",
  "url": "https://www.youtube.com/watch?v=1HKrqlZmYwM",
  "title": "Your Guide to Perfect Home Espresso",
  "description": "Finally, your all-in-one guide to mastering that perfect shot of espresso at home. We lay it all out there in this easy,... [1005 more characters]",
  "description_links": [
    "https://clivecoffee.com/blogs/learn/how-to-make-great-espresso",
    "https://clivecoffee.com/products/eureka-mignon-xl-espresso-grinder",
    "https://clivecoffee.com/products/lucca-m58-espresso-machine-by-quick-mill",
    "... [6 more]"
  ],
  "published_at": "2021-06-22T21:06:24Z",
  "published_date": "2021-06-22",
  "duration_seconds": 365,
  "view_count": 241931,
  "like_count": 5204,
  "comment_count": 206,
  "comment_count_text": "206",
  "channel_name": "Clive Coffee",
  "channel_id": "UCsT0nN2bLAiOYM504irz6QA",
  "channel_url": "https://www.youtube.com/channel/UCsT0nN2bLAiOYM504irz6QA",
  "channel_handle": "@clivecoffee",
  "channel_subscribers": 93100,
  "channel_subscribers_text": "93.1K subscribers",
  "channel_verified": false,
  "tags": [
    "espresso",
    "coffee",
    "espresso machine",
    "... [25 more]"
  ],
  "hashtags": [],
  "category": "Howto & Style",
  "thumbnail_url": "https://i.ytimg.com/vi/1HKrqlZmYwM/maxresdefault.jpg",
  "thumbnails": [
    {
      "url": "https://i.ytimg.com/vi/1HKrqlZmYwM/hqdefault.jpg",
      "width": 168,
      "height": 94
    },
    {
      "url": "https://i.ytimg.com/vi/1HKrqlZmYwM/hqdefault.jpg",
      "width": 196,
      "height": 110
    },
    {
      "url": "https://i.ytimg.com/vi/1HKrqlZmYwM/hqdefault.jpg",
      "width": 246,
      "height": 138
    },
    "... [2 more]"
  ],
  "is_short": false,
  "is_live": false,
  "is_upcoming": false,
  "is_live_content": false,
  "is_unlisted": false,
  "is_family_safe": true,
  "has_captions": null,
  "caption_languages": null,
  "chapters": [],
  "details_complete": true,
  "source": "home espresso",
  "source_type": "search",
  "source_position": 2,
  "source_url": "https://www.youtube.com/watch?v=1HKrqlZmYwM",
  "scraped_at": "2026-11-05T09:14:03Z"
}
```

### Use cases

- Marketers and agencies sizing a niche: who ranks for a keyword, how many views and likes, how big the channels are
- Influencer and partnership research: channels with their subscriber counts, verified badge and recent videos
- Content strategists tracking competitors' channels daily with only-new mode
- Researchers and data teams building YouTube datasets with exact counts and publish times
- AI agents that need YouTube search results or video statistics through MCP

### Use-case recipes

#### Size up a niche before you make a video

For creators and agencies. Search the topic with 'popularity' and this month's uploads. Sort the rows by view_count and compare like_count and comment_count to channel_subscribers to see which small channels punch above their size.

```json
{
  "searchTerms": [
    "home espresso"
  ],
  "sort": "popularity",
  "uploadDate": "month",
  "maxResults": 50
}
```

#### Daily competitor feed in Slack

For marketing teams. Add competitors' channels, turn on only-new mode with a state name, paste a Slack webhook URL and schedule the task daily. Each run posts only the new videos with links.

```json
{
  "channels": [
    "@mkbhd",
    "@veritasium"
  ],
  "maxResults": 10,
  "incremental": true,
  "stateKey": "competitor-feed",
  "slackWebhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX"
}
```

#### Find creators to partner with

For influencer marketers. Search several niche terms, then group the rows by channel_id: channel_subscribers, channel_verified and the views of their recent videos show who is growing.

```json
{
  "searchTerms": [
    "budget travel tips",
    "solo travel vlog"
  ],
  "maxResults": 100,
  "uploadDate": "year"
}
```

#### A dataset with a date range

For researchers. Combine a search with publishedAfter and publishedBefore; videos outside the range are skipped and not charged.

```json
{
  "searchTerms": [
    "electric cars"
  ],
  "publishedAfter": "90 days",
  "publishedBefore": "30 days",
  "maxResults": 200
}
```

### Input

| Field | Type | What it does | Default |
|---|---|---|---|
| `searchTerms` (Search terms) | array | Keywords to search on YouTube, e.g. \['coffee roasting', 'home espresso']. |  |
| `maxResults` (Max videos per search, channel or playlist) | integer | How many videos to return from each search term, channel and playlist, e.g. 50. | 20 |
| `sort` (Search: prioritize) | string | YouTube's 'Prioritize' option for search results: relevance (default) or popularity. | "relevance" |
| `uploadDate` (Search: upload date) | string | YouTube's upload-date filter for search results. | "any" |
| `videoType` (Search: type) | string | Videos (default) uses YouTube's 'Videos' filter; Shorts uses its 'Shorts' filter; 'Videos and Shorts' applies no type filter and also... | "videos" |
| `duration` (Search: duration) | string | YouTube's duration filter for search results. | "any" |

All 19 fields, with examples: see the **Input** tab.

### Use with AI agents (MCP)

MCP (Model Context Protocol) is the open standard that lets AI assistants such as Claude, ChatGPT and Cursor call outside tools. Apify's hosted MCP server at `https://mcp.apify.com/?tools=aurelix/youtube-video-scraper` gives your assistant this Actor only: it fills in the input from your request, runs it and reads the videos back, at the same per-result price as a run started by hand.

#### Example prompts

- "Search YouTube for 'home espresso' videos uploaded this month, sorted by popularity, and give me a table of title, channel, views, likes and subscribers"
- "Get the 20 latest videos from https://www.youtube.com/@veritasium with their views, likes, comment counts and publish times"
- "Find the most-viewed YouTube videos about 'sourdough bread' from the last 30 days and list their tags"

#### Claude Desktop and claude.ai

**Settings > Connectors > Add custom connector**, name it Apify, paste `https://mcp.apify.com/?tools=aurelix/youtube-video-scraper`, keep the detected OAuth settings, select **Add** and sign in to Apify.

#### Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=aurelix/youtube-video-scraper"
```

#### Cursor and VS Code

Add this to `~/.cursor/mcp.json` (Cursor); in VS Code's `.vscode/mcp.json` put the same entry under `"servers"` with `"type": "http"`. Sign in to Apify when asked.

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=aurelix/youtube-video-scraper"
    }
  }
}
```

#### ChatGPT

Turn on **Developer mode**, open **Settings > Apps & Connectors > Create**, paste the URL above as the MCP server URL, choose **OAuth** and authorize Apify.

Clients without sign-in send `Authorization: Bearer <YOUR_APIFY_TOKEN>` instead. No Apify account? This Actor supports Apify's agentic payments: an agent can pay per run with a prepaid, spend-capped token, bought with x402 stablecoin payments.

#### n8n AI agent

Give an **AI Agent** node an **MCP Client Tool** with the endpoint `https://mcp.apify.com/?tools=aurelix/youtube-video-scraper` and a Bearer credential holding your Apify token.

### Use it from AI agents (MCP), the API or no-code

#### Copy this to your AI assistant

```text
Use the Apify Actor aurelix/youtube-video-scraper (YouTube Video Scraper) through Apify's MCP server or API. Main input: searchTerms (Search terms); maxResults (Max videos per search, channel or playlist). Example input: {"searchTerms": ["home espresso"], "maxResults": 50, "uploadDate": "month", "sort": "popularity"}. Each result is one video with fields such as video_id, url, title, description, description_links, published_at, published_date, duration_seconds. It costs $0.25 per 1,000 videos on Apify's free plan plus a $0.0086 start fee per run, and needs no login.
```

MCP server URL for this Actor: `https://mcp.apify.com/?tools=aurelix/youtube-video-scraper` (setup for each client in the section above).

#### API

Start a run and read the dataset with Apify's REST API or the Python and JavaScript clients:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("aurelix/youtube-video-scraper").call(run_input={'searchTerms': ['home espresso'], 'maxResults': 50, 'uploadDate': 'month', 'sort': 'popularity'})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

#### No-code: schedule it in 3 clicks

Send the results to Google Sheets, Zapier, Make, n8n, Slack or any webhook URL.

1. Fill in the input, then click **Save as a new task**.
2. In the task, click **Schedule** and pick daily or weekly (Apify Schedules).
3. Turn on **Only new videos since last run** so each run returns only what is new, and paste a Slack or webhook URL into **Slack webhook URL** / **Webhook URL** to get a digest of the new items (count plus the top 10) after every run.

Prefer n8n or Make? Ask in the **Issues** tab and we will share a ready-made workflow for it.

### FAQ

#### Can I scrape YouTube without login?

Yes. It never logs in, so you need no YouTube or Google account, password or cookies; only a free Apify account to run it.

#### Is there a YouTube API?

You can use this Actor as one. Start it with Apify's REST API or the Python and JavaScript clients and read the results as JSON (see the code above), or call it from an AI agent through MCP.

#### How much does it cost to scrape YouTube?

About $0.26 for 1,000 videos on Apify's free plan and $0.24 on paid plans, start fee included. The free $5 monthly credit covers about 19,000 videos.

#### Can I export YouTube search results and video data to Excel or Google Sheets?

Yes. Download the results as Excel, CSV, JSON, XML or HTML from the run's **Storage** tab, or send them to Google Sheets with Apify's Google Sheets integration or the API.

#### Is it legal to scrape YouTube?

It reads only public data any logged-out visitor can see: YouTube's search results, channel and playlist pages and video watch pages. It never logs in, never solves CAPTCHAs and goes at a polite pace. It returns video and channel details as shown publicly on YouTube, and no comments, commenter names or other viewer data. People can ask for removal of their data by opening an issue on this Actor's Issues tab; if YouTube formally asks us to stop, this Actor will stop. You are responsible for using the data lawfully, incl. copyright, anti-spam and privacy laws; this is not legal advice.

#### Can I scrape all videos from a YouTube channel?

Yes. Put the channel in 'Channels', pick the Videos, Shorts or Live tab and latest, popular or oldest order, and set 'Max videos' as high as you need (up to 5,000 per channel).

#### Is there a cheaper YouTube scraper on Apify?

Yes: $0.25 per 1,000 videos ($0.23 on paid plans), cheaper than the leading tools, plus a $0.0086 start fee per run. Every row comes from the video's own watch page (exact views, likes, publish time, tags), and a date range costs nothing extra. It has no transcripts or AI summaries; for transcripts use YouTube Transcript Scraper.

#### How do I export YouTube search results to Google Sheets without logging in?

Run this Actor with your search terms; it never logs in, so no Google account is needed. Then add Apify's Google Sheets integration on the Actor's **Integrations** tab, or download CSV or Excel from the run's **Storage** tab. Schedule it with 'Only new videos since last run' on to add only new videos each time.

#### How do I get YouTube video data into n8n or an AI agent?

Two ways. For a fixed workflow, add Apify's n8n or Make node, choose **Run Actor**, enter `aurelix/youtube-video-scraper` and map the dataset to the next step. For an AI agent (Claude, ChatGPT, Cursor or an n8n AI Agent node), add `https://mcp.apify.com/?tools=aurelix/youtube-video-scraper` as an MCP server and ask for videos in plain words; setup for each client is in the section above. Runs bill your own Apify account at the same per-video price.

#### Which numbers are exact?

Views and likes come from the video's own watch page and are exact at the time of the run. Comment and subscriber counts are what YouTube shows visitors: exact below 1,000 and rounded above (2.4K becomes 2400); the text form is in comment_count_text and channel_subscribers_text. like_count is null when the creator hides likes.

#### Why is details_complete false on some rows?

YouTube keeps the exact publish time, tags, category and caption list from some cloud IPs. The run tries fresh IPs until one gets them; if none does, the row still has title, views, likes, comments, channel, subscribers and the publish date, with those fields null. In our cloud tests every video came back complete.

#### Can I sort search results by upload date?

YouTube's search now offers only relevance and popularity. For the newest videos, use the 'Upload date' filter (e.g. this week) or 'Published after', which checks each video's exact publish time.

#### Does it return Shorts and live streams?

Yes. Set 'Search: type' to Shorts or Videos and Shorts, read a channel's Shorts or Live tab, or paste the links. is_short, is_live, is_upcoming and is_live_content tell them apart. For Shorts by hashtag with their sound, use YouTube Shorts Scraper.

#### How many results can one search return?

YouTube shows a few hundred results per search at most, fewer with filters. The run reads page after page until it has your maximum or YouTube has no more, and the status message says how many each input returned.

#### Can I get transcripts too?

Not from this Actor. Our YouTube Transcript Scraper takes the same video links, channels, playlists and search terms and returns the full transcript, timed segments and AI-ready chunks for each video with captions.

#### Will I get duplicates?

No. A video found by two search terms, or by a search and a channel, is returned once, for the input that found it first. With only-new mode, videos returned by an earlier run with the same inputs are skipped too. Neither is charged.

#### What happens if YouTube blocks the run?

Pages that fail are retried on fresh IPs, and an IP that answers slowly is swapped for a fresh one. If the first page loads all fail, the run stops within about a minute with a BLOCKED status and only the start fee is charged. If YouTube later refuses 10 videos in a row, or 3 inputs in a row cannot be read, the run stops the same way and keeps every video it already saved.

#### How does only-new mode work?

It remembers every video a run with the same inputs returned. On a channel read in latest order, the next run stops at the first video it already returned, so a daily schedule gets just the new uploads, or nothing when there are none. On a search term, results are not ordered by date, so it returns videos it has not returned before, which can include older ones that newly appear in the results; it stops reading that input after 3 result pages in a row with nothing new. Nothing already returned is returned or charged again.

### Limits (stated honestly)

- YouTube's search shows at most a few hundred results per term; more terms or filters reach further.
- Search can be ordered by relevance or popularity only; YouTube removed its upload-date sort.
- Comment and subscriber counts are YouTube's displayed (rounded) figures above 1,000.
- No comment text, commenter names or viewer data, by design.
- Private, removed and age-restricted videos cannot be read logged out; they are skipped and not charged.
- When YouTube withholds a video's player data from every IP tried, the row has details_complete false and null publish time, tags and category (none in our cloud tests).
- A run reads several videos at a time but each video is a full page, so expect roughly 1 to 2 seconds per video in a long run.
- No transcripts in this Actor; YouTube Transcript Scraper does that with the same inputs.
- has_captions and caption_languages are null when YouTube's answer to the run did not include the caption list.

### Works great with

- **Then: [YouTube Transcript Scraper](https://apify.com/aurelix/youtube-transcript-scraper)**: full transcripts with timestamps and AI-ready chunks for the videos you found

### Related Aurelix tools

Public Aurelix Actors, grouped by the data they collect. All are pay-per-result and need no login.

#### AI, content and SEO

- **[Google Trends by Region](https://apify.com/aurelix/google-trends-scraper)**: Google Trends interest over time, by region and rising queries for any number of keywords, plus trending searches.
- **[Google Autocomplete API](https://apify.com/aurelix/google-autocomplete-scraper)**: Expands seed keywords into hundreds of real Google and YouTube autocomplete phrases, tagged by search intent.
- **[PDF Table Extraction & PDF to Markdown OCR](https://apify.com/aurelix/pdf-to-markdown)**: Turns linked PDF and Word files into Markdown per page, with tables as JSON rows, RAG chunks and OCR.
- **[Broken Link Crawler & SEO Audit](https://apify.com/aurelix/seo-audit-crawler)**: Audits a whole site: one row per page with SEO checks and broken links, plus a ranked issues summary.
- **[Bulk TikTok Transcripts Scraper](https://apify.com/aurelix/tiktok-transcript-scraper)**: Returns TikTok video transcripts as text, timed segments and SRT, from video links or @profiles' latest videos.
- **[Website to Markdown API](https://apify.com/aurelix/website-to-markdown)**: Crawls a site and returns one row of clean main-content Markdown per page, with title, headings and links.
- **[YouTube Transcript Scraper](https://apify.com/aurelix/youtube-transcript-scraper)**: Returns YouTube video transcripts as text, timed segments and AI chunks, from videos, channels, playlists or searches.

#### Jobs and hiring data

- **[Job Bank Canada Scraper API](https://apify.com/aurelix/job-bank-canada-scraper)**: Official Job Bank Canada postings by month: NOC and NAICS codes, wages, hours and location.
- **[Greenhouse Jobs Scraper](https://apify.com/aurelix/greenhouse-jobs-scraper)**: Live jobs from a company's Greenhouse, Lever, Ashby or SmartRecruiters board, with salary and Canadian province tags.
- **[Career Page Monitor](https://apify.com/aurelix/hiring-signal-monitor)**: New, removed and reposted roles plus hiring velocity per company, from seven job-board systems including Workday.
- **[LinkedIn Jobs Country Filter Scraper](https://apify.com/aurelix/linkedin-jobs)**: Public LinkedIn job postings by keyword and country: title, company, location, seniority, job type, salary text, description.
- **[Multiple Job Boards Scraper](https://apify.com/aurelix/multi-job-board-scraper)**: LinkedIn, about 50 company career sites, Remote OK and We Work Remotely jobs in one deduplicated list.
- **[Remote Job Board Scraper API](https://apify.com/aurelix/remote-jobs-scraper)**: Remote OK and We Work Remotely jobs in one deduplicated list with salary, regions and tags.
- **[Wellfound Jobs API & Scraper](https://apify.com/aurelix/wellfound-jobs-scraper)**: Wellfound startup jobs with salary and equity ranges, company stage and size, $0.50 per 1,000.
- **[Workday Job Postings Scraper](https://apify.com/aurelix/workday-jobs-scraper)**: Jobs from any Workday career site by link or company name, with full descriptions and Canadian province tags.

#### E-commerce and product data

- **[AliExpress Scraper API](https://apify.com/aurelix/aliexpress-product-search)**: AliExpress search results by keyword: price, discount, rating, units sold, ship-from country and sponsored flag.
- **[Amazon Best Sellers & Amazon New Releases](https://apify.com/aurelix/amazon-best-sellers)**: Amazon Best Sellers and New Releases top 100 on 10 marketplaces: rank, ASIN, price, rating, rank change.
- **[Best Buy Canada Scraper API](https://apify.com/aurelix/best-buy-canada-scraper)**: Best Buy Canada search results: CAD price, sale savings, rating, reviews and seller, plus optional UPC and specs.
- **[Shopify Product Export Scraper](https://apify.com/aurelix/shopify-products-scraper)**: Every public product of any Shopify store with variants, SKUs, prices, barcodes, stock counts and collections.
- **[Shopify Best Sellers Tracker](https://apify.com/aurelix/shopify-best-sellers-tracker)**: Competitor Shopify stores' best-sellers, new products, price changes, stock-outs and restocks since your last run, plus catalogue summary.

#### Leads and company data

- **[Companies House Scraper](https://apify.com/aurelix/companies-house-scraper)**: Newly incorporated UK companies from Companies House: SIC codes, region, registered office, directors with roles.
- **[Contact Page Scraper](https://apify.com/aurelix/contact-details-scraper)**: Published company emails, phones, addresses, social pages and team members from a list of company websites.
- **[Decision Maker Finder](https://apify.com/aurelix/decision-maker-finder)**: Founders, CEOs, VPs and department heads from company team pages, with title, seniority and function.
- **[Newly Funded Companies Hiring](https://apify.com/aurelix/funded-companies-hiring)**: Companies that just raised money (SEC Form D), with their open roles and business contacts, as a new-only monitor.
- **[Google Maps Phone Scraper](https://apify.com/aurelix/google-maps-scraper)**: Local business lists from Google Maps: phones, websites, ratings, hours, coordinates; optional website emails and socials.
- **[Recently Funded Companies API](https://apify.com/aurelix/recently-funded-companies)**: US companies that just filed an SEC Form D: amount raised, industry, state, executives, confirmed website.
- **[Tech Stack API](https://apify.com/aurelix/tech-stack-detector)**: CMS, e-commerce platform, analytics, ad pixels, chat, CDN and email provider for each domain you enter.
- **[Yellow Pages Canada Scraper](https://apify.com/aurelix/yellow-pages-canada-scraper)**: YellowPages.ca businesses by search term and city: phone, website, address, postal code, hours and rating.

#### Ad intelligence

- **[Competitor Watch](https://apify.com/aurelix/competitor-watch)**: One report per competitor with only what is new: Meta and TikTok ads, page changes, Shopify products and prices, jobs.
- **[Facebook Ad Library Search & API](https://apify.com/aurelix/facebook-ad-library-scraper)**: Facebook and Instagram business ads from the Meta Ad Library: copy, creatives, landing pages, dates, optional EU reach.
- **[TikTok Ads Library API](https://apify.com/aurelix/tiktok-ads-library-scraper)**: TikTok Ads Library ads for Europe, UK, Switzerland and Turkey with targeting, reach, ad text and landing pages.

#### Canada and government data

- **[Canada Building Permits](https://apify.com/aurelix/canada-building-permits-scraper)**: Building permits and development applications from 7 Canadian cities: address, type, status, dates, value, applicant, contractor and Toronto planner contact.
- **[Government Tenders Scraper](https://apify.com/aurelix/government-tenders-scraper)**: Open tenders from SAM.gov, CanadaBuys and EU TED in one table: buyer, codes, value, deadline, contact and link.
- **[USPTO Trademark API](https://apify.com/aurelix/uspto-trademark-search)**: US trademark search and watch from USPTO: mark, owner or number lookups, new filings, owner, attorney, goods.

#### More data tools

- **[Agoda API (Unofficial)](https://apify.com/aurelix/agoda-reviews-scraper)**: Scrape Agoda guest reviews at $0.50 per 1,000 with this unofficial Agoda API, cheaper than the leading tools: Agoda and...
- **[Tennis Betting Odds Scraper](https://apify.com/aurelix/tennis-odds-scraper)**: Tennis results and upcoming matches with opening and closing odds per bookmaker and implied probabilities.

### Recent changes

- **0.1**: Descriptions are returned as written on YouTube (no masking), with a new description_links list of every web link in the description.

The full history is on the **Changelog** tab.

### Tested daily

An automated health check runs this Actor every day on a fixed input and checks that at least 4 videos come back with `video_id`, `url`, `title`, `view_count`, `channel_id`, `published_date` filled in; a failed check alerts the maintainer straight away.

### Your feedback

Missing a field, found a bug or need another filter? Open an issue on the **Issues** tab; we aim to answer within a day. If this Actor saved you time, a short review helps other people find it.

# Changelog

This Actor's version history is a separate document: https://apify.com/aurelix/youtube-video-scraper/changelog.md

# Actor input Schema

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

Keywords to search on YouTube, e.g. \['coffee roasting', 'home espresso']. Results come in YouTube's own order, with the filters below. A pasted YouTube search-results URL keeps its own filters.

## `maxResults` (type: `integer`):

How many videos to return from each search term, channel and playlist, e.g. 50. Videos given directly are always read. YouTube shows at most a few hundred results for one search.

## `sort` (type: `string`):

YouTube's 'Prioritize' option for search results: relevance (default) or popularity. YouTube no longer offers an upload-date sort; use 'Upload date' or 'Published after' to get recent videos.

## `uploadDate` (type: `string`):

YouTube's upload-date filter for search results.

## `videoType` (type: `string`):

Videos (default) uses YouTube's 'Videos' filter; Shorts uses its 'Shorts' filter; 'Videos and Shorts' applies no type filter and also keeps the Shorts shelves inside the results.

## `duration` (type: `string`):

YouTube's duration filter for search results.

## `features` (type: `array`):

YouTube's feature filters for search results, e.g. \['hd', 'subtitles']. Several can be combined.

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

Two-letter country code for search results as people in that country see them, e.g. 'GB' or 'DE'. Leave empty for the default (United States).

## `videos` (type: `array`):

Video URLs or 11-character IDs, e.g. \['https://www.youtube.com/watch?v=dQw4w9WgXcQ', 'https://youtu.be/jNQXAC9IVRw']. Shorts and live links work too. Channel, playlist, search-results and hashtag URLs pasted here are read as such.

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

Channel URLs, @handles or UC… channel IDs, e.g. \['https://www.youtube.com/@veritasium', '@mkbhd']. Videos are read from the tab below, in the order below.

## `channelTab` (type: `string`):

Which tab of each channel to read. A channel URL that names a tab (e.g. …/@mkbhd/shorts) keeps its own tab.

## `channelSort` (type: `string`):

The channel tab's own sort buttons: latest (default), popular or oldest.

## `playlists` (type: `array`):

Playlist URLs or IDs, e.g. \['https://www.youtube.com/playlist?list=PLFs4vir_WsTwEd-nJgVJCZPNL3HALHHpF'], read in playlist order.

## `publishedAfter` (type: `string`):

Return only videos published after this point: a date (YYYY-MM-DD) or an age such as '7 days', '12 hours' or '3 months'. Checked against the exact publish time on each watch page; older videos are skipped and not charged. On a channel sorted by latest, reading stops once 3 older videos in a row are seen.

## `publishedBefore` (type: `string`):

Return only videos published before this point: a date (YYYY-MM-DD) or an age such as '30 days'. Use with 'Published after' for a from-to range. Newer videos are skipped and not charged.

## `incremental` (type: `boolean`):

Return only videos that a previous run with the same inputs did not return. On a channel in latest order the run stops at the first one already returned, so a daily schedule gets just the new uploads (or nothing). On a search term the results are not ordered by date, so 'new' means not returned before, and reading stops after 3 result pages in a row with nothing new. Already-returned videos are never returned or charged again.

## `stateKey` (type: `string`):

Name for the 'new since last run' memory, e.g. 'my-niche-feed'. Leave empty to derive it from the inputs.

## `slackWebhookUrl` (type: `string`):

After each run, post a short digest to Slack: how many results were saved (new ones only when 'Only new videos since last run' is on) and the top 10 with links, e.g. https://hooks.slack.com/services/T000/B000/XXXX. Nothing is posted when the run saved nothing. Leave empty to skip.

## `webhookUrl` (type: `string`):

After each run, POST the same digest as JSON (actor, newOnly, count, items = top 10 results, runUrl, text) to any URL, e.g. a Zapier, Make or n8n webhook. Nothing is sent when the run saved nothing. Leave empty to skip.

## Actor input object example

```json
{
  "searchTerms": [
    "coffee roasting"
  ],
  "maxResults": 10,
  "sort": "relevance",
  "uploadDate": "any",
  "videoType": "videos",
  "duration": "any",
  "features": [],
  "videos": [],
  "channels": [],
  "channelTab": "videos",
  "channelSort": "latest",
  "playlists": [],
  "incremental": false
}
```

# Actor output Schema

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

One item per video: full details from its watch page.

# 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 = {
    "searchTerms": [
        "coffee roasting"
    ],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("aurelix/youtube-video-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 = {
    "searchTerms": ["coffee roasting"],
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("aurelix/youtube-video-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 '{
  "searchTerms": [
    "coffee roasting"
  ],
  "maxResults": 10
}' |
apify call aurelix/youtube-video-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aurelix/youtube-video-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/LL4cuf98Rmzn5wVcv/builds/rJydEb0ZgN9dAuAjQ/openapi.json
