YouTube Search Scraper - Bulk Keyword Results avatar

YouTube Search Scraper - Bulk Keyword Results

Pricing

from $0.50 / 1,000 search results

Go to Apify Store
YouTube Search Scraper - Bulk Keyword Results

YouTube Search Scraper - Bulk Keyword Results

Run many YouTube searches in one go and get every result as a row: title, video URL, channel, views, duration and approximate age. Sort by views, filter by view count, age or title text before billing. No API key and no Data API quota.

Pricing

from $0.50 / 1,000 search results

Rating

0.0

(0)

Developer

DONGMIN KIM

DONGMIN KIM

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Share

YouTube Search Scraper — Bulk Keyword Results, Filtered Before You Pay

Run a list of search terms through YouTube and get every result as a row: title, URL, channel, views, duration and approximate age, tagged with the query that produced it.

No API key. The YouTube Data API caps at 10,000 quota units a day and a single search costs 100 of them — about 100 searches before you are locked out for the day. This has no such ceiling.

What it does well

  • Many queries per run — each row carries its query, so one dataset covers a whole keyword set.
  • Filters run before billing — minimum views, published-within, or a title fragment. Filtered results cost nothing, which is what makes a broad term safe to run.
  • Sorted output you can trust — see the note below, because this is the part most search scrapers get quietly wrong.
  • Cheap and stable — it reads search pages only, so it stays on datacenter proxies and rarely gets throttled.

Input

{
"queries": ["mechanical keyboard review", "best budget keyboard 2026"],
"maxResultsPerQuery": 200,
"sortBy": "views",
"minViewCount": 10000
}

Every option

The same wording you see in the Apify console, with the JSON key for API and MCP callers.

OptionWhat it doesDefault
Search queriesqueries (required)One or more terms, exactly as you would type them into YouTube. Each becomes its own set of rows.
Max results per querymaxResultsPerQueryResults arrive 20 per request, so this is the main cost control.100
Sort bysortByrelevance is YouTube's own ranking. views biases which videos YouTube returns toward the most-watched, and the rows are then sorted by view count."relevance"
Minimum viewsminViewCountDrop results below this view count. Filtered results are not billed.0
Published within (days)publishedWithinDays0 disables. Search exposes only relative dates, so this is approximate to within a day. Live streams carry no date at all and are dropped while this filter is on — see the note below. Filtered results are not billed.0
Title contains any oftitleContainsCase-insensitive fragments. A result is kept if its title contains any of them.
ConcurrencyconcurrencyQueries run in parallel.3
ProxyproxyConfigurationLeave the default. Reads search pages only, so it stays on cheap datacenter proxies.{"useApifyProxy":true}

Output

One row per result.

{
"query": "mechanical keyboard review",
"rank": 1,
"sortedBy": "views",
"videoId": "8ta4dSQ-P9c",
"url": "https://www.youtube.com/watch?v=8ta4dSQ-P9c",
"title": "The Best Keyboard at Every Price",
"viewCount": 1140040,
"durationSeconds": 743,
"publishedText": "1 year ago",
"approxAgeDays": 365.3,
"thumbnailUrl": "https://i.ytimg.com/vi/8ta4dSQ-P9c/hqdefault.jpg",
"scrapedAt": "2026-08-20T09:14:02.113Z"
}

Every field

You are billed per result delivered, so here is everything a row can contain.

FieldWhat it is
queryWhich of your search terms produced this row.
rankPosition among the rows you were given, after filtering — not YouTube's internal ranking, which it does not publish.
sortedByThe order that was applied, echoed back so a mixed dataset stays readable.
videoIdThe 11-character id.
urlwatch?v= URL.
titleVideo title.
viewCountViews, parsed from the display text.
durationSecondsLength in seconds.
publishedTextYouTube's relative text, e.g. "1 year ago". Empty on live streams — see the note on dates.
approxAgeDaysThat text converted to days, accurate to about a day.
thumbnailUrlLargest available thumbnail.
scrapedAtWhen this run read the search.

Why there is no "sort by upload date"

Because it does not work, and shipping an option that silently does nothing is worse than not shipping it.

YouTube's sort is a base64 filter parameter, and a wrong or stale one does not return an error — it returns relevance-ordered results. A scraper that passes it and reports success looks identical either way. So every option here was checked by asserting the returned order was actually monotonic:

ParameterMeant to doResult
CAMSAhABsort by viewssorted
CAISAhABsort by upload datenot sorted — came back in relevance order
CAI=sort by upload datenot sorted
CAESAhABsort by ratingnot sorted
CAE=sort by ratingnot sorted

Only views survived, so only views is offered. For recency, use Published within (days) — that filters on data actually present in every row.

There is a second half to this. Even with the working parameter, YouTube orders results within each page of 20 and then steps back up on the next continuation — measured over 60 results, descending in blocks with the order resetting at position 20 and again at 56. So the parameter decides which videos come back, and this Actor sorts the rows it received so the top of your dataset is genuinely the top. Reading the first 20 rows of a 100-row run without that would not be reading the 20 most-viewed.

A note on dates

Search results carry relative publish text ("3 weeks ago"), never an exact timestamp — the same limitation the channel listing has. approxAgeDays converts it for filtering and sorting and is accurate to about a day. If you need exact publish dates, feed the video URLs into the transcript Actor, whose per-video call returns publishedAt.

Live streams carry no date at all. A 24/7 radio stream or a running news channel has no publish text to read — measured at 27 of 40 rows on two such queries. So while publishedWithinDays is on, those rows are dropped rather than delivered: a filter that cannot be evaluated has to exclude, or you would be paying for rows nothing checked against the thing you asked for. The run summary counts them separately as undateable, so you can see how many went that way. Turn the filter off and they come back.

Who this is for

  • Video SEO specialists — what already ranks for your terms, how long it is and how old — the gap is what is missing.
  • Content strategists — search a niche, filter to the last 90 days, and see what nobody has covered.
  • Competitor researchers — every channel ranking for your terms, in one pass.
  • Anyone building a pipeline — every result carries a URL, so a keyword set becomes the input to a transcript or comments run.

Common uses

  • Keyword research for video — run a keyword set and see what already ranks, how long it is, and how old.
  • Content gap analysis — search your niche, filter to the last 90 days, and see what nobody has covered.
  • Competitor discovery — find every channel ranking for your terms.
  • Feeding the other Actors — take the video URLs straight into a transcript, comments or sponsorship run.

Pricing

Pay per result delivered — $0.50 per 1,000. Results removed by your filters and failed queries cost nothing.

Starting a run costs $0.00002 — the platform's $0.00001 minimum, charged once per GB of memory, and these Actors run on 2 GB. That is two thousandths of a cent per run.

Other Actors in this family

Same engines, same billing, no account or API key on any of them.

YouTube & video

Search demand

E-commerce

Hiring

FAQ

Will I get blocked, or my account banned? There is no account to ban — no login, no cookies, and no API quota to exhaust. Each query gets its own IP session, and the proxy tier escalates from datacenter to residential only when a query is actually throttled. YouTube signals throttling with an HTTP 200 and an error body rather than an error code, which is the trap that silently halves most scrapers' results; this one detects it by reason and rotates.

Is it legal to scrape YouTube search results? It reads the same public search pages a browser requests, with no login and nothing bypassed, and the fields are facts about videos — titles, view counts, durations — rather than the videos themselves. Public-data scraping is broadly treated as lawful in the US; YouTube's Terms of Service are a separate contract question. Not legal advice.

Does it need a YouTube API key? No, and that is most of the point. The Data API charges 100 quota units per search against a 10,000/day allowance.

How many results can I get per query? As many as YouTube will paginate. Set Max results per query to control cost.

How much does 1,000 results cost? $0.50, plus $0.00002 for the run.

Can I export the results to Excel or Google Sheets? Yes. Every run's dataset downloads as CSV, Excel, JSON, XML or RSS from the Storage tab, or straight from the API if you want a live link a spreadsheet can pull.

Can I connect it to Zapier, Make or n8n? Yes — Apify publishes integrations for all three, plus webhooks that fire when a run finishes.

Do I need to write code? No. Fill the form in the console and press Start. It is also available over MCP so an AI agent can call it directly.

Can I run it on a schedule? Yes, via Apify Schedules, webhooks, or the API.