How to Scrape YouTube Search Results by Keyword in 2026
Run bulk keyword searches on YouTube and export every matching video, channel and playlist with views, dates and durations — with real upload-date and duration filters.
YouTube is the second-largest search engine on the planet, which makes its search results a primary data source for video SEO, trend research and content strategy. But the public search box gives you a scroll-and-squint UI, and the Data API’s search.list endpoint is the most quota-expensive call it offers — 100 units per query, which burns your daily 10,000-unit budget in 100 searches and returns rounded, incomplete data. This guide covers how to harvest YouTube search results at scale in 2026, which filters actually work, and how to turn keyword lists into structured datasets.
What’s worth extracting
A search results page mixes content types, and a good scraper keeps them distinct. Per result:
- Result type — video, channel or playlist, so you can split them downstream.
- Identity — title, unique ID, watch/channel URL.
- Performance — exact view count normalized to an integer (not the rounded “1.2M” the UI shows).
- Duration — formatted and in seconds.
- Recency — relative publish timestamp.
- Channel — channel name and identifiers for each video result.
- Context — a description snippet, and crucially the original search query the result came from, so multi-keyword runs stay attributable.
That query tag is what makes bulk runs usable. Search 200 keywords in one run and every row knows which keyword surfaced it — so you can rank, compare and pivot by term.
How the data is exposed (internal search endpoint, no API key)
The actor calls YouTube’s internal search endpoint — the same one the website’s search box hits — and paginates with continuation tokens. Login-free, key-free:
- Deep pagination. The first response is a page of results plus a token; the actor follows tokens for hundreds to thousands of results per query, far past what the UI scroll comfortably loads.
- Real filters, encoded properly. YouTube’s search filters are packed into an obfuscated parameter, not simple query strings. The actor encodes the actual filters the website uses — upload date, duration category, result type and sort order — so your scraped results match what a human would see with those filters applied.
- Bulk multi-keyword. Feed a list of queries and the actor runs them in one job, tagging each result with its source query.
- Fresh access key per run with retries, so large harvests complete.
The advantage over the Data API is twofold: no 100-unit-per-query quota tax, and exact view counts instead of the API’s coarser numbers — plus filters that mirror the real site rather than the API’s limited subset.
▶ Run the YouTube Search Scraper — bulk keyword queries with real upload-date, duration, type and sort filters; every result tagged with its source query. No login, no API key.
Schema design for downstream use
For keyword research and SEO work, a flat per-result row:
{
"query": "best espresso machine 2026",
"result_type": "video",
"id": "dQw4w9WgXcQ",
"title": "Best Espresso Machines of 2026 (Tested)",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"views": 412889,
"duration_seconds": 1043,
"duration_text": "17:23",
"published_text": "1 month ago",
"channel_name": "Coffee Lab",
"channel_id": "UCxxxxxxxxxxxx",
"description_snippet": "We tested 14 machines under $1000...",
"rank": 3,
"scraped_at": "2026-05-29T08:00:00Z"
}
Schema choices worth making:
- Store the result
rank(its position in the result set). For SEO, where a video ranks for a keyword is half the analysis. - Keep
result_typefor filtering. A “channels” result has no view count or duration; don’t blow up your numeric aggregates by mixing types. - Tag every row with
query. This is the pivot dimension for multi-keyword runs — group by it to compare keyword landscapes. - Use exact
views, not the UI rounding. The whole point of scraping over screenshotting is precise, sortable numbers.
Typical use cases
What this powers:
- Trend and market research — pull the top videos for a topic by views to see what’s actually performing.
- Content strategy and video SEO — analyze title patterns, durations and recency for your target keywords to reverse-engineer what ranks.
- Creator/influencer discovery — surface channels appearing for a niche keyword (for engagement scoring and contact data, hand them to the influencer-discovery actor).
- Competitive monitoring — use the upload-date filter to track the newest uploads for a keyword on a schedule.
- Dataset building — assemble keyword-tagged collections of videos, channels and playlists for analytics or AI pipelines.
- Pipeline integration — generate keyword-tagged ID lists to feed the video-details or comments actors.
How this differs from the channel scraper
A common mix-up: the channel scraper answers “what has this creator uploaded?” — one channel’s full catalog. The search scraper answers “what does YouTube return for this keyword?” — results across many channels, ranked by relevance/recency. SEO and trend work needs the search angle; competitor catalog analysis needs the channel angle.
Cost math for the managed approach
Pricing is pay-per-event — a small per-run start fee with no per-result charge. A run sweeping 200 keywords and pulling a few hundred results each is dominated by pagination compute, landing in single-digit dollars. The Data API contrast is the headline: 200 search.list calls is 20,000 quota units — double your entire daily allowance — and you’d still get rounded numbers and fewer filters. Here there’s no quota at all.
Versus building it yourself, you skip:
- Encoding YouTube’s filter parameter — the packed protobuf-style filter blob is the genuinely hard part, and it changes.
- Continuation pagination for deep result sets.
- The retry harness for large multi-keyword sweeps.
Common pitfalls
Before you wire search into a pipeline:
- YouTube search is personalized and fluid. Two runs minutes apart can reorder results. Capture
rankandscraped_atso you’re comparing apples to apples over time. - Filters narrow the universe. A duration or upload-date filter changes which results exist, not just their order — make filter choices intentional per query.
- Channel/playlist results lack video fields. Filter by
result_typebefore computing view averages. - Relative dates are approximate. Use them for recency buckets, not exact time-series; hydrate exact ISO dates via the video-details actor if needed.
- Broad keywords return noise. Specific, intent-rich queries give cleaner, more actionable result sets.
Wrapping up
If you need one keyword’s top results once, the search box works. If you need structured, filtered, query-tagged result sets across hundreds of keywords — with exact view counts and no quota ceiling — let a maintained actor hit YouTube’s internal search the way the site does and hand you clean rows.
▶ Open the YouTube Search Scraper on Apify — bulk multi-query search with real filters, exported to JSON, CSV or Excel. Start with Apify’s free monthly credit.
Related guides
How to Bulk Check URL Status Codes & Redirects in 2026
Check thousands of URLs for 200/301/404/500 status, trace full redirect chains, resolve final URLs and measure response time — a practical bulk link-audit guide for SEO and migrations.
How to Crawl a Site's Internal Link Graph in 2026
A practical guide to mapping every internal and outbound link on a website as graph edges — source, target, anchor text and rel flags — for internal-linking SEO audits.
How to Extract All URLs from a Sitemap in 2026
A practical guide to recursively crawling sitemap.xml and nested sitemap indexes to build clean, deduplicated URL lists for RAG pipelines, SEO audits and content inventories.