YouTube Search API and MCP — Find Videos by Keyword with Filters
Send a keyword and this source searches YouTube and returns matching videos, shorts and live streams as data: title, description and its links, views, likes, comment count, duration, hashtags, publish date, optional subtitles, and the channel with its subscriber count.
- You send
- A keyword, with optional date, type, length and feature filters
- You get back
- Matching videos, shorts and streams with stats and channel subscribers
- Coverage
- Public YouTube videos, shorts and live streams.
- Price
- 5 points per returned result, up to 1,000 of each type per request — $5 per 1,000
- Billed per video, short or stream actually returned, capped by your limits. A search that matches nothing costs nothing.
Ways to get this data
Three approaches teams use today, and where each one runs into trouble.
| Approach | What it takes | Cost | Trade-off |
|---|---|---|---|
| Searching by hand | Type a term, scroll, copy titles and numbers | Free, and slow | Fine for a look, not for tracking a set of terms |
| The YouTube Data API | A Google Cloud project, API key and quota | Free within a daily quota | Search calls are expensive against the quota, and results need a second call for stats |
| NeuralVerge | One request per keyword | $5 per 1,000, misses not billed | Results follow YouTube's ranking for an anonymous visitor in one region |
What you get back
Every field in the example response below.
| Field | Type | Description |
|---|---|---|
total_items | number | How many videos came back. |
items[].id | string | YouTube's video ID. |
items[].url | string | Direct link to the video. |
items[].type | string | video, shorts or stream. |
items[].title | string | Video title. |
items[].description | string | Full description text. |
items[].description_links | array | Links in the description, resolved to their real targets. |
items[].hashtags | array | Hashtags on the video. |
items[].date | string | When the video was published (ISO 8601). |
items[].duration | string | Length as HH:MM:SS. |
items[].view_count | number | Views at read time. |
items[].likes | number | Likes at read time. |
items[].comments_count | number | Comment count. |
items[].comments_turned_off | boolean | Whether comments are disabled. |
items[].is_paid_content | boolean | Whether the video declares a paid promotion. |
items[].subtitles | array | Subtitle tracks, when download_subtitles is on. |
items[].channel | object | The channel: name, handle, subscribers, total videos, total views, description, links, joined date, verified. |
Example response
A real response, as returned.
{
"session_id": "6803169b-e36b-47e8-bd1d-f3646797f9d1",
"kind": "youtube_search",
"query": "crm software review",
"max_results": 1,
"max_results_shorts": 0,
"max_results_streams": 0,
"download_subtitles": false,
"partial": false,
"machine": {
"total_items": 1,
"items": [
{
"id": "RIRyuq-AKOU",
"url": "https://www.youtube.com/watch?v=RIRyuq-AKOU",
"type": "video",
"title": "Best CRM Software for Small Business for 2026 (Top 5 Tested & Compared)",
"description": "This videos offers insights into the best crm for small business options, helping you navigate the world of customer relationship management with ease. …",
"hashtags": [],
"date": "2025-10-29T20:37:38.000Z",
"duration": "00:11:21",
"view_count": 50993,
"likes": 537,
"comments_count": 39,
"comments_turned_off": false,
"is_paid_content": false,
"subtitles": [],
"channel": {
"id": "UCSPh1bFTdDalKnZPgQoOYUg",
"name": "LYFE Accounting",
"username": "LYFEAccounting",
"url": "https://www.youtube.com/@LYFEAccounting",
"subscribers": 596000
},
"order": 0,
"found_on_url": "https://www.youtube.com/results?search_query=crm+software+review&sp=EgIQAQ%3D%3D"
}
],
"errors": []
},
"total_points": 5
}How to run it
The same lookup works from the app, the API, or as a tool an agent can call mid-task.
This endpoint is synchronous: the call blocks until the lookup completes and returns the records directly. If a lookup hits its time budget before finishing, the response comes back with partial: true and whatever it collected so far — re-run with smaller limits for a complete result. query is required. Optional: max_results, max_results_shorts, max_results_streams (0-1,000; defaults 10, 0, 0), sorting_order (rating, date or views), date_filter (hour, today, week, month, year), video_type (video or movie), length_filter (under4, between420, plus20), features (e.g. hd, 4k, subtitles, live, creative_commons), download_subtitles, subtitles_language, subtitles_format.
curl -X POST https://api.neuralverge.ai/functions/v1/run-youtube-search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "query": "crm software review", "max_results": 20, "date_filter": "year", "length_filter": "between420", "sorting_order": "views" }'What teams use it for
Where this field shows up in an actual workflow.
See who makes video about your category and how much it gets watched.
Find channels that rank for your terms, with their subscriber counts attached.
Search a competitor's name to find reviews, tutorials and comparisons.
Let an agent find the right videos before it reads their comments or subtitles.
Coverage, freshness and limits
What this source covers, how fresh it is, and where it stops.
Public YouTube videos, shorts and live streams.
Read at request time.
This source returns what a channel published publicly, stamped with the URL it was read from and a session id you can trace.
- —Results follow YouTube's ranking for an anonymous visitor, not a logged-in user's personalised results.
- —Channel details on search results are lighter than on a channel lookup — total videos and total views can be null.
- —Subtitles only come back when the video has them.
Questions, answered
Yes — every Data Source endpoint, including this one, is synchronous: the lookup runs inside the request and the result comes back in the same response, no polling. If a lookup hits its time budget before finishing, the response comes back with partial: true and whatever records it collected so far — re-run with smaller limits to get a complete result instead of a partial one.
Related sources
Try youtube search on your own data
One request format across every source in the catalog.