YouTube Search Scraper — Videos by Keyword + Transcripts
Pricing
from $0.50 / 1,000 videos
YouTube Search Scraper — Videos by Keyword + Transcripts
YouTube search scraper, priced per video, no login, no cookies, no API key: type a search phrase and get one row per video — title, link, channel, handle, views, published, length, thumbnail and rank. Turn on transcripts to add each video's captions as text.
Pricing
from $0.50 / 1,000 videos
Rating
0.0
(0)
Developer
Steadyfetch Team
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
a day ago
Last modified
Categories
Features
Share
Type a search phrase and get one row per YouTube video: title, link, channel, handle, views, when it was published, length and thumbnail — and, if you want it, each video's transcript as plain text. No login, no cookies, no API key, no start fee — from $0.50 per 1,000 videos.
Put one or more search phrases in the list ("sourdough bread", "how to start a podcast") and the actor returns the videos YouTube shows for each, in YouTube's own order, about 20 at a time. Built for researchers, content and SEO teams who want YouTube's results as data — and, with one switch, what is said in each video.
Using an AI agent? Pin this actor in Apify's MCP server with one link: https://mcp.apify.com?tools=steadyfetch/youtube-search-scraper
- Actor id:
steadyfetch/youtube-search-scraper - Input:
{ "searchQueries": ["sourdough bread"], "maxResults": 20, "transcripts": false } - Cap the bill: set
maxTotalChargeUsdon the run (a run option, not Actor input), e.g.1.00— the run stops when it reaches it. - Price: from $0.0005 per video ($0.001 on the Apify free plan); a transcript, when you turn them on, from $0.00225 each, only when real text lands. A page that brings fewer videos than $0.0055 is worth is billed one $0.0055 page check instead. Full table below.
- How often it changes: YouTube's results for a phrase move daily (new uploads, rising views). Re-run daily or weekly on the same searches; turn on "Only videos I don't have yet" to get just the new ones.
Unofficial, not affiliated with YouTube.
What you get
One row per video:
| Column | What it holds |
|---|---|
videoId · videoUrl | the video's id and its YouTube link |
title | the video's title |
channelTitle · channelHandle · channelId · channelUrl | the channel that published it |
views | the view count YouTube shows, as a number |
publishedText | when it was published, in YouTube's own words ("2 months ago") — YouTube's search shows no exact date, so none is made up |
durationSeconds · isShort | its length in seconds, and whether it is a Short |
thumbnailUrl | the video's thumbnail |
transcript · transcriptLanguage · transcriptSource | with transcripts on: the transcript as plain text, its language, and whether it came from the uploader's captions or YouTube's automatic ones |
transcriptStatus | delivered, or why there is none: no_captions, no_speech, unavailable (private, age-restricted, removed or region-blocked), try_again, skipped_budget, skipped_deadline, not_requested |
query · rank · searchPage | what you searched, and the video's place in YouTube's list |
seenBefore | true when your account received this video for this search before |
Every row also carries charged, chargedEvents, status, retryable and statusReason, so you can reconcile your bill from the dataset itself. The last row (run_summary) is the receipt.
How to use it
- Put search phrases in Search phrases, one per line, exactly as you would type them into YouTube — or paste a YouTube search results address (
youtube.com/results?search_query=…) and its phrase is read for you. Up to 50 searches per run. - Set Max videos per search. Optionally limit by Uploaded within (today, this week, this month, this year).
- Turn on Add each video's transcript if you want what is said in each video, and press Start.
Refused before anything is read, and never charged: a single video's link, a channel's link, any other address, and a value with no letters or numbers. Have video links already? Use YouTube Transcript Scraper. Want every video of a channel? Use YouTube Channel Transcripts.
One search is read to at most 500 videos (25 pages) per run; most lists end sooner.
Pricing
Pay per result, all-inclusive (no platform usage on top), no start fee:
| Event | Apify Free plan | Bronze | Silver | Gold and up |
|---|---|---|---|---|
| Video (one delivered video) | $0.001 | $0.0008 | $0.0006 | $0.0005 |
| Transcript (only with transcripts on, only when text lands) | $0.005 | $0.003 | $0.0025 | $0.00225 |
| Page check | $0.0055 | $0.0055 | $0.0055 | $0.0055 |
That is $0.50 per 1,000 videos at Gold, and $2.75 per 1,000 videos with their transcripts.
The page check. Each page of about 20 videos is read whole, whatever it returns. A page bills either its videos or one check — whichever is more — never both. A full page of 20 videos at $0.0005 is $0.01 and pays no check. A page with fewer videos than one check is worth is billed one $0.0055 check on its own row, and its videos are not charged one by one (their transcripts still are). That includes the page that ends a list, a short page in the middle (YouTube sometimes shows only 10), and a search YouTube finds nothing matching: YouTube then shows unrelated videos instead, which are delivered as found, marked so, and billed only that one check — the next page of them is never read.
Examples at Gold: 20 videos of one search = $0.01. The same 20 with transcripts, 19 of which have captions = $0.01 + 19 × $0.00225 = $0.053. A search with 42 videos asked for 100 = its full pages per video, its short and last pages one check each.
Good to know
- Transcripts are captions. The transcript is the video's captions — the uploader's own, or YouTube's automatic ones (most videos have them). A video with no captions, or one YouTube will not play without a signed-in account, gets no transcript and no transcript charge, and its row says why. "Preferred transcript language" picks a caption language when the video has it.
- Transcripts take time: 1–3 seconds a video on top of 2–3 seconds a page.
- Re-runs return the list again, charged. By default a re-run delivers every video with today's views, and charges it. A video your account had before is marked
seenBefore: true. - Only new videos. Turn "Only videos I don't have yet" on to skip, without charge, videos this actor delivered to your account for the same search in the last 90 days. A re-run then stops after 3 pages in a row with nothing new (
maxEmptyPages, up to 25), so it costs at most 3 page checks ($0.0165). - Your memory lives in your account: the list of videos delivered to you sits in a key-value store in your own Apify account (
youtube-search-account). If the run's API token cannot open stores, the run still works, every video reads as new, and a row says so. - Shorts: YouTube shows Shorts on their own shelf beside the results; this version delivers the videos list, and the receipt counts the Shorts it did not deliver.
- A time limit ends the collecting, never the delivering: rows already read are delivered, and the receipt says which limit stopped the run.
- Paused for now: if collection on this actor is paused, the rest of a search ships as one uncharged
try_againrow — run the same search again later. - Free plan: on the Apify free plan a run reads up to 25 pages (about 500 videos) per 24 hours; the row says when it resets. Paid plans have no daily allowance.
- Standby endpoint: one search is also available as one HTTP request (
GET /?query=sourdough%20bread), up to 40 videos a request (20 on the free plan), at the same prices. The endpoint answers the search only (transcripts come from a run) and does not use your account memory, soseenBeforeis always empty there. - A bare Start (nothing named) returns 10 dated sample videos for "sourdough bread" and charges nothing.
Support
Questions, a search that returns something odd, or a column you need: open an issue on the Issues tab and it will be looked at.
If it earned its keep, a rating helps other buyers find it, and saving the actor keeps it one click away.