# YouTube Search Scraper (Fast & Cheap) (`juliob.rangel/youtube-search-fast`) Actor

Search YouTube by keyword and get every result: title, channel, views, publish date, duration and URL. Filter by upload date. No API key, no quota. Ideal for SEO, trend and competitor research.

- **URL**: https://apify.com/juliob.rangel/youtube-search-fast.md
- **Developed by:** [Julio Barcellos Rangel](https://apify.com/juliob.rangel) (community)
- **Categories:** Videos, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 search 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

## YouTube Search Scraper (Fast & Cheap)

YouTube Search Scraper searches YouTube by keyword and returns every video result as clean data: rank, title, channel, views, publish date, duration, snippet and URL. It is built for YouTube SEO, keyword research, trend spotting and competitor research, and lets you export YouTube search results to Excel, CSV or JSON without a YouTube API key or quota.

### What does YouTube Search Scraper do?

You type one or more search terms, the same way you would in the YouTube search box. For each term, the robot runs the search with YouTube's **Videos** filter, reads the result pages one after another and saves each video with its position in the results. It stops when it reaches your limit or when YouTube has no more results.

You can narrow the search to videos uploaded in the last hour, today, this week, this month or this year, and choose the interface language of the results.

What you send:

- Search terms, one per line, for example `ai agents tutorial`, `best budget phone 2026` or `sourdough bread recipe`.

What comes out:

- One row per video: the search term, the position, video ID, title, URL, channel name and ID, views (as a number and as YouTube's text), publish date as shown by YouTube, duration, the description snippet shown under the result, a live flag and a thumbnail URL.

No login, no cookies and no YouTube Data API key are needed.

### What data can you extract?

| Field | What it means | Example |
|---|---|---|
| `query` | The search term that produced this result | `ai agents tutorial` |
| `position` | Rank of the video in the results for that term (1 = first) | `1` |
| `videoId` | 11-character video ID | `Bm84BAtOfQw` |
| `title` | Video title | `You’re Not Behind (Yet): How to Build Your First AI Agent (Full Guide)` |
| `url` | Link to the video | `https://www.youtube.com/watch?v=Bm84BAtOfQw` |
| `channelName` | Channel that published the video | `Dan Martell` |
| `channelId` | Channel ID (can be `null`, see Tips) | `UCA-mWX9CvCTVFWRMb9bKc9w` |
| `views` | View count as a number | `758340` |
| `viewsText` | View count as YouTube shows it | `758,340 views` |
| `published` | Publish date as YouTube shows it (relative) | `2 months ago` |
| `duration` | Video length | `22:25` |
| `description` | Description snippet shown in the search results (short, not the full description) | `Get Your FREE AI Company Operating System here…` |
| `isLive` | `true` if the result has a LIVE badge | `false` |
| `thumbnail` | Thumbnail image URL | `https://i.ytimg.com/vi/Bm84BAtOfQw/hqdefault.jpg` |
| `scrapedAt` | When the row was collected (ISO 8601, UTC) | `2026-10-08T20:09:05.390Z` |
| `error` | Only on error items: why a search gave nothing | `No results` |

The default table view shows `query`, `position`, `title`, `channelName`, `views`, `published`, `duration` and `url`. All fields are in the full JSON, CSV and Excel exports.

### How to use YouTube Search Scraper

1. Open the robot in Apify Console and go to the **Input** tab.
2. In **Search terms**, add one search per line.
3. Set **Max results per search** (default 50).
4. Optionally choose an **Upload date** filter (`any`, `hour`, `today`, `week`, `month`, `year`).
5. Optionally change the **Interface language** (default `en`).
6. Click **Start**. Results appear in the **Output** tab while the robot works.
7. Click **Export** to download JSON, CSV, Excel, HTML or XML, or read the dataset through the API.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `queries` | array of strings | `["ai agents tutorial"]` | Search terms, one per line. Empty lines are ignored. |
| `maxResults` | integer, minimum 1 | `50` | Stop after this many videos for each search term. |
| `uploadDate` | `any`, `hour`, `today`, `week`, `month` or `year` | `any` | Only videos uploaded in this period. |
| `language` | string | `en` | Interface language code for the results, such as `en` or `pt`. |
| `proxy` | object | `{ "useApifyProxy": true }` | Apify Proxy settings. |

Example input:

```json
{
  "queries": ["ai agents tutorial", "n8n automation", "claude code tutorial"],
  "maxResults": 100,
  "uploadDate": "month",
  "language": "en",
  "proxy": { "useApifyProxy": true }
}
```

### Output example

One real item from a recent run for the search `ai agents tutorial`:

```json
{
  "query": "ai agents tutorial",
  "position": 1,
  "videoId": "Bm84BAtOfQw",
  "title": "You’re Not Behind (Yet): How to Build Your First AI Agent (Full Guide)",
  "url": "https://www.youtube.com/watch?v=Bm84BAtOfQw",
  "channelName": "Dan Martell",
  "channelId": "UCA-mWX9CvCTVFWRMb9bKc9w",
  "views": 758340,
  "viewsText": "758,340 views",
  "published": "2 months ago",
  "duration": "22:25",
  "description": "Get Your FREE AI Company Operating System here: https://go.danmartell.com/3SXCfgk Are you building an AI software ...",
  "isLive": false,
  "thumbnail": "https://i.ytimg.com/vi/Bm84BAtOfQw/hqdefault.jpg",
  "scrapedAt": "2026-10-08T20:09:05.390Z"
}
```

If a search returns nothing, you get one error item for it:

```json
{
  "query": "some very rare search term",
  "error": "No results"
}
```

### How much does it cost?

The robot uses pay per event pricing. You pay only for the search results you get, and Apify platform usage is already included in the price.

| Event | Price (Free plan) |
|---|---|
| Search result | $0.001 per video, which is **$1.00 per 1,000 results** |

Paid Apify plans get a discount:

| Plan | Price per 1,000 results |
|---|---|
| Free | $1.00 |
| Bronze (-10%) | $0.90 |
| Silver (-20%) | $0.80 |
| Gold and higher (-30%) | $0.70 |

Worked examples on the Free plan:

- One search with the default 50 results: **$0.05**.
- 100 keywords × 50 results = 5,000 results: **$5.00** ($3.50 on Gold).
- 20 keywords × 500 results = 10,000 results: **$10.00** ($9.00 on Bronze, $8.00 on Silver, $7.00 on Gold).

What is NOT charged:

- `No results` error items.
- The same video seen twice in the results for one term (it is saved once).
- Empty lines in `queries`.

### Use cases

- **YouTube SEO and rank tracking**: see which videos rank for your keywords, at which position and with how many views. Run it on a schedule to follow rank changes.
- **Keyword and content research**: compare how many views the top videos get for different keyword ideas before you make a video.
- **Trend spotting**: use `uploadDate` = `week` or `today` to see what is being published on a topic right now.
- **Competitor research**: find which channels dominate a topic and how often they appear in the top results.
- **Influencer discovery**: collect the channels that rank for your niche keywords and build a list of creators to contact.
- **Build video lists for other tools**: pass the URLs to a transcript, comments or video details scraper for deeper analysis.
- **Market research**: track how much video content exists around a product, brand or category.

### Tips and limits

- **Videos only.** The robot always applies YouTube's Videos type filter, so channels and playlists are not returned. Only the upload date filter can be changed.
- **No hard cap on results.** `maxResults` has no upper limit in the input. The robot stops when YouTube serves no more result pages, so you may get fewer than `maxResults`.
- **Keep `language` = `en` for exact numbers.** The number in `views` is read from YouTube's English formatting (`758,340 views`, `1.2M views`). With other languages, YouTube writes numbers differently (for example `758.340`) and `views` can be wrong. In that case use `viewsText`, which is always the text YouTube shows.
- **The language changes the text, not the filter.** `language` sets YouTube's interface language, which changes words such as `views` and `ago` in `viewsText` and `published`.
- **Dates are relative.** `published` is text such as `5 days ago` or `1 year ago`, not an exact date. For exact dates, likes and comment counts, send the URLs to the YouTube Video Details Scraper.
- **`description` is a snippet**, the short text YouTube shows under the result (often cut with `...`), not the full video description.
- **`channelId` can be `null`** when YouTube shows a video under several channels at once (for example `Futurepedia and AI Agent Lab`). `channelName` then holds all the names.
- **Searches run one after another**, and each page of results is saved as soon as it is read.
- **Proxy.** Requests go through Apify Proxy, with retries on new IPs and a last try on the Residential proxy group when your account has access to it.

### Use it from the API, Python or JavaScript

JavaScript (Node.js):

```javascript
const { ApifyClient } = require('apify-client');

const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const input = {
  queries: ['ai agents tutorial', 'n8n automation'],
  maxResults: 100,
  uploadDate: 'month',
};
const run = await client.actor('juliob.rangel/youtube-search-fast').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'results');
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_TOKEN')
run_input = {
    'queries': ['ai agents tutorial', 'n8n automation'],
    'maxResults': 100,
    'uploadDate': 'month',
}
run = client.actor('juliob.rangel/youtube-search-fast').call(run_input=run_input)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(len(items), 'results')
```

You can also call it over plain HTTP with the Apify API (for example the `run-sync-get-dataset-items` endpoint of `juliob.rangel~youtube-search-fast`).

It works with Make, Zapier, n8n, Google Sheets export, webhooks and AI agents through the Apify MCP server.

### FAQ

**Do I need a login, cookies or a YouTube API key?**
No. The robot reads public search results the way a logged-out visitor sees them, so there is no daily API quota.

**Can I export YouTube search results to Excel or CSV?**
Yes. Click **Export** in the Output tab and choose Excel, CSV, JSON, HTML or XML.

**How many results can I get per search?**
Up to your `maxResults` value, as long as YouTube keeps serving result pages. Add more related keywords to collect more videos on a topic.

**Can I filter by upload date?**
Yes, with `uploadDate`: last `hour`, `today`, this `week`, `month` or `year`, or `any`.

**Can I search for channels or playlists?**
No. The robot returns video results only.

**Why did I get an error item?**
YouTube returned no video results for that term (with the chosen upload date filter), or the search could not be loaded after several retries. The item says `No results` and is not charged. Try a wider upload date or a shorter term.

**Is scraping YouTube search results legal?**
The robot only collects publicly available data. You are responsible for complying with YouTube's terms and with privacy laws such as GDPR and LGPD. If you store personal data, you need a legitimate reason.

### Related scrapers

- [YouTube Video Details Scraper (Views, Likes, Comments)](https://apify.com/juliob.rangel/youtube-video-details)
- [YouTube Transcript Scraper (Fast & Cheap)](https://apify.com/juliob.rangel/youtube-transcript-fast)
- [YouTube Comments Scraper (Fast & Cheap)](https://apify.com/juliob.rangel/youtube-comments-fast)
- [YouTube Channel Info Scraper (Subscribers, Views, Links)](https://apify.com/juliob.rangel/youtube-channel-info)
- [YouTube Shorts Scraper (Channels & Hashtags)](https://apify.com/juliob.rangel/youtube-shorts-scraper)
- [YouTube Channel Videos Scraper (Fast & Cheap)](https://apify.com/juliob.rangel/youtube-channel-videos)

***

## Busca do YouTube

Resultados da busca do YouTube por palavra-chave, com título, canal, visualizações, data e duração, e filtro por data de envio. Para SEO no YouTube, tendências e busca de criadores. Sem chave de API; você paga só por resultado retornado.

# Actor input Schema

## `queries` (type: `array`):

One search per line, e.g. 'ai agents tutorial'.

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

Stop after this many videos for each search.

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

Only videos uploaded in this period.

## `language` (type: `string`):

Language code for results, e.g. 'en', 'pt'.

## `proxy` (type: `object`):

Apify Proxy settings.

## Actor input object example

```json
{
  "queries": [
    "ai agents tutorial"
  ],
  "maxResults": 50,
  "uploadDate": "any",
  "language": "en",
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "ai agents tutorial"
    ],
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("juliob.rangel/youtube-search-fast").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 = {
    "queries": ["ai agents tutorial"],
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("juliob.rangel/youtube-search-fast").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 '{
  "queries": [
    "ai agents tutorial"
  ],
  "maxResults": 50
}' |
apify call juliob.rangel/youtube-search-fast --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,juliob.rangel/youtube-search-fast"
        }
    }
}
```

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/MUcApgfIBx4KlvCDh/builds/8tQpz1H9FUcFw8E3B/openapi.json
