How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
apify tutorialin Search queries. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Search public YouTube videos, channels and Shorts by keyword. Get a row for each result, with its query, rank, title and visible metadata. No login or YouTube API key is needed.
Data you get
- The query and a rank for each delivered result.
- Video or channel ID, title and public URL.
- Visible channel name, view label, duration and publish label when available.
- A thumbnail, description excerpt and fetch time when available.
Who uses it
YouTube creators
See which videos rank for the keywords you plan to use.
Influencer marketers
Find channels that make videos about your topic.
Short video teams
Study which Shorts show up for a topic.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.002 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Search result | $0.00022 (from $0.00019 on paid Apify plans) | One unique supported search card saved for one query. Duplicate IDs within a query are not charged again. |
Examples
- One video: about $0.0022.
- 1,000 videos: about $0.22.
- Every day 100 videos, for 30 days: about $0.72 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 22,000 videos.
Prices checked on 24 October 2026. See the current price on Apify.
Questions
How many keywords can I search at once?
Up to 5 queries per run.
Can I get every video for a keyword?
No. YouTube controls how many pages it shows.
Do I get exact publish dates?
Not always. YouTube shows labels like 2 weeks ago, and missing dates stay empty.
Do I need a proxy?
No. No proxy setting is needed.
Do I need to sign in or provide a YouTube API key?
No. The Actor reads public anonymous search responses.
Does video search exclude Shorts?
No. Video search follows YouTube's video filter, which can include Shorts. Use type: "short" for the dedicated Shorts search.
Are channels and exact publish dates available for every Short?
No. Missing search metadata stays null. Exact dates are not inferred from relative labels.
Will the same input return the same order later?
It may change. Search is dynamic and session-dependent. Keep the fetch time with your results.
Do empty searches cost money?
The start fee applies. No result fee is charged when no rows are saved.
Details
Step by step on Apify
- Open Input.
- Keep
queriesas["apify tutorial"]andmaxResultsPerQueryas20. - Keep the default video search.
- Click Start.
- Open Search results to see the rows. Open Run summary to check each query.
Use cases
| Task | Input | Key fields | Next step |
|---|---|---|---|
| Plan content around keywords | Several queries, type: "video" | query, rank, title, viewsText | Compare rows in a spreadsheet. |
| Find public channels | type: "channel" | channel.id, channel.name, url | Review the channel pages. |
| Study short-form topics | type: "short" | title, url, viewsText | Group titles by topic. |
Tips for better results
- Pick the Shorts type for Shorts only; video search may mix them in.
- Use upload date and duration filters to narrow results.
- Keep the fetch time; search order changes over time.
Limits and good to know
- Search results vary by time, region, interface language and anonymous session. They may differ from a signed-in browser
- The source can change or stop search pages. The Actor is limited to 10 pages per query, 60 requests including retries, 32 MiB of response data and 150 seconds of source work. Reaching an internal page/request/byte limit is a failed partial run, not a promise of full coverage
- Rank excludes unsupported cards, ads, playlists and duplicate IDs. It is not a universal YouTube SEO rank
- Shorts cards may omit channel, publish date and duration. These values stay null. No watch-page enrichment is performed
- Text labels and snippets are capped at 1,024 UTF-8 bytes. Thumbnail URLs longer than 2,048 bytes are omitted
- Visible counts may be rounded or localized.
viewsTextpreserves them. Relative dates remain relative labels - The Actor uses public search metadata. It is not affiliated with or endorsed by YouTube. Use the data in line with YouTube terms and the rights of content owners
Troubleshooting
| Symptom | Possible reason | Check | Action |
|---|---|---|---|
| Empty Dataset with successful run | No matching cards | Query status in Run summary | Try a broader query or remove filters. |
INVALID_INPUT or INVALID_FILTER_COMBINATION | Invalid field or unsupported combination | Query list, ranges, type and filters | Use an example above and change one field at a time. |
CHARGE_LIMIT | Maximum run charge reached | Summary rows and your budget | Increase the cap if you need more results. |
SOURCE_ERROR / SOURCE_SCHEMA_CHANGED | Source unavailable or its card format changed | Run reason and saved rows | Retry a small example later; report the run if it repeats. |
SOURCE_DEADLINE / PAGE_LIMIT / BYTE_LIMIT | Source work exceeded a bound | Requests and responseBytes | Reduce queries or results per query. |
| Null numeric views | Rounded/localized/missing count | viewsText | Use the original label; do not replace null with zero. |
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. Some values are changed for privacy. In Excel or CSV each field is a column.
{
"query": "apify tutorial",
"rank": 1,
"type": "video",
"videoId": "3rrpfW0bEdc",
"url": "https://www.youtube.com/watch?v=3rrpfW0bEdc",
"title": "Apify Tutorial For Beginners | How To Use Apify",
"channel": {
"id": "UCqD-h6ucBDUntfoapPyhp0Q",
"name": "Example Channel",
"url": "https://www.youtube.com/channel/UCqD-h6ucBDUntfoapPyhp0Q"
},
"views": 43453,
"viewsText": "43,453 views",
"publishedText": "3 years ago",
"duration": "10:41",
"isShort": false,
"isLive": false,
"thumbnail": "https://i.ytimg.com/vi/3rrpfW0bEdc/hq720.jpg?sqp=-oaymwEgCOgCEMoBSFXyq4qpAxIIARUAAIhCGAFwAcABBrgC8xg=&rs=AOn4CLABmbVCBBN5n5_SrWoZ0xIiumH7wQ",
"descriptionSnippet": "Apify review: https://example.com/review/ Apify Tutorial For Beginners | How To Use Apify This is my video tutorial\u00a0...",
"source": "YouTube",
"fetchedAt": "2026-10-14T10:58:02.998Z"
}Use it from code
Actor ID: cliqtomedia/youtube-search-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/youtube-search-scraper").call(run_input={
"queries": [
"apify tutorial"
],
"maxResultsPerQuery": 20
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~youtube-search-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries": ["apify tutorial"], "maxResultsPerQuery": 20}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/youtube-search-scraper")
result = tool.invoke({"run_input": {"queries": ["apify tutorial"], "maxResultsPerQuery": 20}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (17)
| Field | Type | Meaning |
|---|---|---|
query | string | Normalized query that produced this card. |
rank | integer | One-based position among delivered unique supported cards for this query. |
type | string | video, channel or short card type. |
videoId | string | YouTube video ID, null for a channel card. |
url | string | Canonical public video, Shorts or channel URL. |
title | string | Title shown by the search card. |
views | integer | Exact visible English view count; null for rounded, localized or unavailable values. |
viewsText | string | Original visible view-count label, including rounded counts. |
publishedText | string | Relative publish label from the card; no invented exact date. |
duration | string | Visible MM:SS or HH:MM:SS label; null when unavailable. |
isShort | boolean | Whether the card identifies a Short. |
isLive | boolean | True for a live-now video badge; null for channels and Shorts. |
thumbnail | string | Public thumbnail URL from the card, if available. |
descriptionSnippet | string | Visible description excerpt, not the full video description. |
source | string | YouTube source identifier. |
fetchedAt | string | UTC ISO timestamp when this page was received. |
channel | object | Channel metadata exposed by this card. Shorts often omit this object’s values. |
Input settings (8)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Search queries required | queries | array | ["apify tutorial"] |
| Results per query | maxResultsPerQuery | integer | 20 |
| Country | country | string | "US" |
| Language | language | string | "en" |
| Result type | type | string | "video" |
| Upload date | uploadDate | string | "all" |
| Video duration | duration | string | "all" |
| Sort order | sortBy | string | "relevance" |
Use cases with this tool
Each guide shows all the steps and the other tools.