YouTube Metadata Scraper By Duration, Date & Video Type avatar

YouTube Metadata Scraper By Duration, Date & Video Type

Pricing

from $2.99 / 1,000 results

Go to Apify Store
YouTube Metadata Scraper By Duration, Date & Video Type

YouTube Metadata Scraper By Duration, Date & Video Type

YouTube Metadata Scraper extracts detailed metadata from YouTube videos, including titles, descriptions, tags, thumbnails, durations, upload dates, and engagement stats. Ideal for SEO research, content analysis, trend tracking, and automating structured YouTube data collection

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

1

Monthly active users

10 days ago

Last modified

Share

YouTube Search Scraper โ€” Duration, Date Range, Shorts & Metadata

YouTube Search Scraper runs a keyword through YouTube's own search โ€” filtered by video length band, upload-date bucket, an exact after:/before: date range and Videos/Shorts/Movies type, the same way YouTube's live filter bar does โ€” then loads every matching video's own watch page for a full record: title, description, tags, category, thumbnails, exact view and like counts, the real channel @handle, top-level comments and caption transcripts. It's built for content researchers, video-trend analysts, licensing/footage teams and AI pipelines that need a precisely filtered, structured slice of YouTube rather than a raw keyword dump. Specific video URLs can also be enriched directly, bypassing search entirely.


What is YouTube Search Scraper?

YouTube Search Scraper searches YouTube the way a logged-out visitor would, then opens each matched video's own watch page to pull its full metadata, comments and transcript. No YouTube account, cookie or Data API key is required anywhere in the actor โ€” every request runs against YouTube's public search and watch pages through Apify Proxy. Output is one structured JSON row per video, ready for the Apify dataset's JSON, CSV, Excel, HTML table or XML export.

  • ๐ŸŽฏ Keyword or direct-URL discovery โ€” search phrases run through YouTube search with your filters attached, or supply watch links, youtu.be links, /shorts/, /live/, /embed/ links or bare 11-character video IDs to skip search and enrich known videos directly.
  • ๐ŸŽš๏ธ Server-side YouTube filters โ€” video length band, upload-date bucket, Videos/Shorts/Movies type, and nine feature flags (HD, 4K, Subtitles/CC, Creative Commons, Live, 360ยฐ, 3D, HDR, VR180) are encoded into YouTube's own sp= filter token, so YouTube filters the result set before anything is downloaded.
  • ๐Ÿ“… Exact date range โ€” publishedAfter/publishedBefore are sent as real after:/before: search operators, giving a precise window the upload-date bucket alone cannot reach.
  • ๐Ÿงฎ Post-download filters โ€” minimum views, minimum likes, an exact second-level duration window, and title include/exclude run against the finished record; rejected videos are never saved.
  • ๐Ÿ“บ Full video and channel metadata โ€” exact view/like counts, channel ID, URL, real @handle, display name, subscriber text, verification badge, category, tags, thumbnails and outbound description links.
  • ๐Ÿ’ฌ๐Ÿ“ Comments and transcripts โ€” top-level comments up to your limit, plus caption text (plain or timed segments), with duplicate tracks removed and a language cap.

What data can I extract with YouTube Search Scraper?

Every video row carries identity, engagement, channel, filter-receipt and enrichment fields, all read from the video's own watch page (or the search result card, for the filter-receipt group).

FieldExample ValueUse Case
id"kX8XKlNRVYY"YouTube's 11-character video ID, a stable join key
url"https://www.youtube.com/watch?v=kX8XKlNRVYY"Canonical watch link
title"8 Hours of Relaxing 4K Drone Footage"Headline text for reports and dedupe
description"Filmed across three continents..."Full video description text
lengthInSeconds28800Exact duration, straight from the video page
uploadDatetime"2024-02-11T14:00:09-08:00"ISO-8601 publish date with offset
publish_date_since"1 year ago"Relative publish text as YouTube displays it
category"Travel & Events"YouTube's assigned category
tags["drone", "4k", "nature"]Creator keyword tags
thumbnail"https://i.ytimg.com/vi/kX8XKlNRVYY/hqdefault.jpg"Standard thumbnail URL, built from the video ID
thumbnails_urls["https://i.ytimg.com/vi/.../default.jpg", "..."]Every signed thumbnail size YouTube served
channelID"UCxxxxxxxxxxxxxxxxxxxxxx"Channel's stable UCโ€ฆ ID
channelURL"https://www.youtube.com/channel/UCxxxx"Canonical /channel/UCโ€ฆ URL
channelUsername"@RelaxationFilm"Real @handle, read from the page's owner profile URL
channelDisplayName"Relaxation Film"Channel display name
channelSubscribers"1.2M"Abbreviated subscriber text as YouTube publishes it
author_avatar_url"https://yt3.ggpht.com/..."Largest available channel avatar URL
is_verifiedtrueChannel carries a verified or official-artist badge
viewCount1842991Exact view count
likeCount21044Exact like count
commentCount1200Comment total as displayed on the page
is_live_nowfalseCurrently broadcasting live
description_links["https://instagram.com/relaxationfilm"]Outbound description links, redirect-unwrapped
is_comments_offfalseComments disabled on this video (null if undetermined)
is_members_onlyfalseMembers-only video
is_paid_contentfalsePaid or purchase-gated content
transcripts[{"language": "EN", "content": "..."}]Caption tracks, duplicates removed
comments[{"id": "Ugz...", "text": "..."}]Top-level comments, up to max_comments
isShortfalseServed as a Short in the search results (null for direct URLs)
searchResultBadges["4K"]Badges YouTube printed on the search card
foundViaKeyword"drone footage"The search phrase that surfaced this video
searchResultRank31-based position in that phrase's filtered result set
searchResultPage1Which search page the video came from
searchFilterToken"EgYQARgCcAE="The literal sp= token used for this row
searchQuerySent"drone footage after:2024-01-01 before:2024-12-31"Exact query string sent, including date operators
appliedFilters["Videos", "Over 20 minutes", "4K", "Relevance"]Filter chips YouTube echoed back as selected
channelHandleUrl"https://www.youtube.com/@RelaxationFilm"/@handle URL built from the real handle
playabilityStatus"OK"YouTube's playability status for the fetched page โ€” always OK on saved rows
scrapedAt"2026-07-30T09:14:02Z"UTC timestamp of the fetch

๐Ÿ’ฌ Engagement, comments and transcripts

viewCount and likeCount are exact numbers read directly from the video page, not abbreviated text. comments[] (id, text, author, authorChannelId, likeCount, publishedTime, replyCount) carries up to max_comments top-level comments per video. transcripts[] (language, content) carries caption text โ€” plain text or {start, dur, text} timed segments depending on transcript_format โ€” with byte-identical creator/auto-generated duplicates removed before the language cap is applied. Analysts use this pair to build engagement-plus-content datasets โ€” for example, ranking commentCount against transcript content for a topic without opening a single video by hand.

๐ŸŽš๏ธ Filter-receipt and targeting fields

foundViaKeyword, searchResultRank, searchResultPage, searchFilterToken, searchQuerySent and appliedFilters document exactly how each row was found and which filters YouTube actually applied โ€” useful for auditing a run or re-issuing the identical search later. isShort and searchResultBadges (4K, CC, LIVE, New, etc.) come straight off the search card. All six are empty, null or "" for videos supplied through urls, since those bypass search entirely.


How does YouTube Search Scraper differ from the official YouTube Data API v3?

YouTube's own YouTube Data API v3 is a real, self-serve public API, but its per-project quota is the hardest limit on bulk work: Google's published quota documentation sets a default of 10,000 units per day, and a single search.list call โ€” the endpoint that filters by keyword โ€” costs 100 units regardless of how many fields you request, so a default project caps out at roughly 100 search calls a day before every subsequent request fails with a quota error. This actor runs on Apify's infrastructure instead, so a run is bounded by your max_results_per_keyword and maxSearchPages settings, not a shared daily unit budget.

FeatureYouTube Data API v3This Actor
Daily request budget10,000 units/day by default; search.list costs 100 units per callNo shared daily quota โ€” bounded by your own max_results_per_keyword / maxSearchPages
Duration filteringvideoDuration enum: short / medium / long onlySix bands matching YouTube's current UI (under_3, 3_20, over_20) plus two legacy bands (under_4, 4_20), and an exact second-level minDurationSeconds/maxDurationSeconds window
Exact date rangepublishedAfter/publishedBefore supported on search.listSame operators, applied identically as after:/before: query terms
Caption/transcript accesscaptions.download requires OAuth authorization from the video's own channel owner โ€” third-party video transcripts cannot be downloaded through the API at allDownloads public caption tracks for any video, creator-uploaded and/or auto-generated, no OAuth
CommentscommentThreads.list returns top-level comments without OAuthComments attached automatically per matched video, no separate call
Channel handlechannels.list with the forHandle parameterchannelUsername/channelHandleUrl included on every row automatically
AuthenticationRequires a Google Cloud project and API keyRuns on your existing Apify account

Why can't the official API fetch a video's transcript?

captions.download, the only endpoint that returns actual caption text, requires the request to be authorized via OAuth by the channel that owns the video โ€” Google's API reference documents this as a requirement, not an option. In practice that means the official API can only download captions for videos on channels you personally control; it cannot pull a transcript for someone else's video no matter how public that video is. This actor sidesteps the restriction entirely by reading the public caption track URLs the same way a browser does when captions are switched on, which works for any video that exposes them, regardless of who owns the channel.

The official API is the right tool when you already run a small number of your own channels and want OAuth-scoped analytics or caption management. This actor is the fit when you need filtered discovery across other people's videos, or transcripts you don't have upload rights to.


How to use data extracted from YouTube?

๐Ÿ”ฌ Content researchers and video-trend analysts

Set keywords to your topic, a videoDuration band (over_20 for long-form, under_3 for short-form), and rankBy: "view_count" to surface the highest-viewed matches first. Export title, viewCount, likeCount, channelDisplayName and tags to map which channels and formats dominate a topic, without opening a single search page by hand.

๐ŸŽฌ Licensing and footage-sourcing teams

Combine videoFeatures: ["creative_commons", "4k"] with a videoDuration band to surface only reusable, high-resolution footage. description_links and channelHandleUrl give a direct path back to the uploader for licensing outreach, and is_paid_content flags videos that are commercially gated rather than free to reuse.

๐Ÿ“Š Market research and content intelligence

Run several related phrases in one job and export foundViaKeyword, viewCount, commentCount and appliedFilters to compare how a niche is covered across upload-date buckets or exact date windows โ€” for example, pulling every video published in one launch month above a view floor to gauge coverage of a product announcement.

๐Ÿค– AI agents and automated pipelines

transcripts[].content and description are ready to feed straight into an LLM for summarization or a RAG index, keyed on the stable id field. Because the actor runs through the standard Apify API, a scheduled pipeline can call it, wait for the run to finish, and pull filtered, transcript-attached rows with no manual step in between.


๐Ÿ”ผ Input sample

Configure the run from the Actor's input form in Apify Console, or send the same fields as JSON through the Apify API. Nothing is individually required โ€” every field has a working default โ€” except that at least one of keywords or urls must be set, or the run fails immediately.

ParameterRequiredTypeDescriptionExample Value
keywordsNoarray of stringsOne search phrase per line. Each phrase is run through YouTube search with your filter token attached.["drone footage"]
urlsNoarray of stringsWatch links, youtu.be links, /shorts/, /live/, /embed/ links or bare 11-character video IDs. Bypasses every search filter and is always scraped.["https://youtu.be/kX8XKlNRVYY"]
max_results_per_keywordNointeger (1โ€“100000)Filtered videos to enrich per phrase. Default 20. A filtered phrase realistically yields 130โ€“480 results before YouTube runs out of pages, so a higher value simply stops early.20
videoDurationNoenumany, under_3, under_4, 3_20, 4_20, over_20. Default any. under_3/3_20/over_20 match YouTube's live filter menu; under_4/4_20 are legacy bands still enforced server-side but light no filter chip."over_20"
uploadDateNoenumany, hour, today, week, month, year. Default any. Ignored by YouTube's ranker when an exact date range is also set. hour is enforced but lights no chip."month"
resultTypeNoenumvideo, shorts, movie. Default video. Channels and playlists are not offered โ€” those filters return zero video rows."shorts"
videoFeaturesNoarray of stringshd, 4k, subtitles, creative_commons, live, 360, 3d, hdr, vr180. Default []. All selected features are required simultaneously.["4k"]
rankByNoenumrelevance, view_count, upload_date, rating. Default relevance. Only relevance and view_count re-order YouTube's live results; upload_date/rating are sent correctly but ignored by YouTube's current ranker."view_count"
publishedAfterNodate (absolute or relative)2024-03-01 or 3 months. Sent as a real after: search operator; wins over uploadDate when both are set."2024-01-01"
publishedBeforeNodate (absolute or relative)2024-03-31 or 1 week. Sent as a real before: search operator."2024-12-31"
minViewsNointeger (min 0)Drop videos below this exact view count. 0 = off.10000
minLikesNointeger (min 0)Drop videos below this exact like count. Videos with no published like count are kept, not dropped. 0 = off.0
minDurationSecondsNointeger (min 0)Exact second-level floor, tighter than videoDuration. 0 = off.0
maxDurationSecondsNointeger (min 0)Exact second-level ceiling. 0 = off.0
titleContainsNoarray of stringsCase-insensitive; kept if the title contains at least one term. Checked on the search card first, before a page fetch is spent.[]
titleExcludesNoarray of stringsCase-insensitive; dropped if the title contains any term. Also checked on the search card first.["reaction", "shorts compilation"]
max_commentsNointeger (0โ€“5000)Top-level comments to attach per video. Default 2. 0 skips comments.5
include_transcriptsNobooleanFetch caption text when the video exposes it. Default true.true
transcript_formatNoenumtext or timestamps. Default text."text"
include_english_autoNobooleanInclude YouTube's machine-generated English captions alongside creator-uploaded ones. Default false.false
include_non_englishNobooleanInclude caption tracks in other languages. Default false.false
maxTranscriptLanguagesNointeger (1โ€“50)Maximum caption tracks kept per video after duplicate removal. Default 5.5
transcriptTimeoutSecondsNointeger (10โ€“600)Per-video ceiling for caption downloading. Default 120. The video is still saved without transcripts if it's hit.120
maxSearchPagesNointeger (1โ€“100)Hard stop on YouTube search paging per phrase. Default 30. Each page yields roughly 7โ€“20 filtered results.30
sort_orderNoenumrelevance, upload_date, view_count, rating. Default relevance. Legacy compatibility field; rankBy takes precedence when set."relevance"
proxyConfigurationNoobjectApify Proxy configuration. Default {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"}.see below
{
"keywords": ["drone footage", "cinematic b roll"],
"videoDuration": "over_20",
"resultType": "video",
"videoFeatures": ["4k"],
"publishedAfter": "2024-01-01",
"publishedBefore": "2024-12-31",
"rankBy": "view_count",
"minViews": 10000,
"titleExcludes": ["reaction", "shorts compilation"],
"max_results_per_keyword": 25,
"max_comments": 5,
"include_transcripts": true,
"transcript_format": "text",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

Common pitfall: setting rankBy to upload_date or rating does not actually reorder results โ€” both values are still sent to YouTube correctly, but YouTube's live Prioritise menu only honours relevance and view_count today, so the response order won't change. Use uploadDate or an exact publishedAfter/publishedBefore range to control recency instead of expecting the sort to do it. Separately, under_4 and 4_20 are legacy bands that still filter server-side but never appear in the output's appliedFilters array, since YouTube lights no chip for them โ€” don't read a missing chip as proof the filter didn't apply.


๐Ÿ”ฝ Output sample

Output is typed, normalized JSON with one consistent row per video. Export from the Storage tab as JSON, CSV, Excel, HTML table or XML. Every field below is pushed on every saved row โ€” the dataset's default view (titled "Filtered videos") renders all 39 keys as table columns, so nothing here is hidden behind the default view.

Each pushed row triggers one row_result pay-per-event charge. A video is only pushed โ€” and only charged โ€” once it clears two gates: your post-download filters (minViews, minLikes, minDurationSeconds, maxDurationSeconds, titleContains/titleExcludes) must pass, and the extracted row must carry a title, a channel identity, and either a view count or a healthy page with a real upload date. Videos rejected by your filters or by that health check are never written to the dataset and never billed โ€” their video IDs and reasons are recorded instead in the run's key-value store, under the SUMMARY record's warnings and failures lists, alongside saved, filteredOut and skipped counts for the run.

{
"id": "kX8XKlNRVYY",
"url": "https://www.youtube.com/watch?v=kX8XKlNRVYY",
"title": "8 Hours of Relaxing 4K Drone Footage",
"description": "Filmed across three continents over two years...",
"lengthInSeconds": 28800,
"uploadDatetime": "2024-02-11T14:00:09-08:00",
"publish_date_since": "1 year ago",
"category": "Travel & Events",
"tags": ["drone", "4k", "nature"],
"thumbnail": "https://i.ytimg.com/vi/kX8XKlNRVYY/hqdefault.jpg",
"thumbnails_urls": [
"https://i.ytimg.com/vi/kX8XKlNRVYY/default.jpg",
"https://i.ytimg.com/vi/kX8XKlNRVYY/hqdefault.jpg"
],
"channelID": "UCxxxxxxxxxxxxxxxxxxxxxx",
"channelURL": "https://www.youtube.com/channel/UCxxxxxxxxxxxxxxxxxxxxxx",
"channelUsername": "@RelaxationFilm",
"channelDisplayName": "Relaxation Film",
"channelSubscribers": "1.2M",
"author_avatar_url": "https://yt3.ggpht.com/abcXYZ=s176-c-k-c0x00ffffff-no-rj",
"is_verified": false,
"viewCount": 1842991,
"likeCount": 21044,
"commentCount": 1200,
"is_live_now": false,
"description_links": ["https://instagram.com/relaxationfilm"],
"is_comments_off": false,
"is_members_only": false,
"is_paid_content": false,
"transcripts": [
{ "language": "EN", "content": "welcome to eight hours of relaxing drone footage..." }
],
"comments": [
{
"id": "UgzAbCdEfGhIjKlMnOp",
"text": "This is exactly what I needed for background footage.",
"author": "creativeStudioUser",
"authorChannelId": "UCyyyyyyyyyyyyyyyyyyyyyy",
"likeCount": 12,
"publishedTime": "3 months ago",
"replyCount": 1
}
],
"isShort": false,
"searchResultBadges": ["4K"],
"foundViaKeyword": "drone footage",
"searchResultRank": 3,
"searchResultPage": 1,
"searchFilterToken": "EgYQARgCcAE=",
"searchQuerySent": "drone footage after:2024-01-01 before:2024-12-31",
"appliedFilters": ["Videos", "Over 20 minutes", "4K", "Relevance"],
"channelHandleUrl": "https://www.youtube.com/@RelaxationFilm",
"playabilityStatus": "OK",
"scrapedAt": "2026-07-30T09:14:02Z"
}

How do you filter and target specific videos?

Three controls narrow a run from a broad keyword to exactly the videos you want. Search versus direct URL: keywords triggers the full YouTube-search pipeline with every filter attached, while urls bypasses search entirely โ€” use it when you already know the videos and just want enrichment. Scope precision: stack a videoDuration band with an exact publishedAfter/publishedBefore window for the tightest server-side narrowing YouTube allows โ€” the exact date range always wins over the coarser uploadDate bucket when both are set โ€” and add resultType to split Videos, Shorts or Movies, plus videoFeatures for quality signals like 4k or creative_commons. Quality thresholds: minViews, minLikes, minDurationSeconds/maxDurationSeconds and titleContains/titleExcludes run against the finished record, so a video can pass every YouTube-side filter and still be dropped before it's saved or charged. Volume controls: max_results_per_keyword caps rows per phrase, and maxSearchPages is a hard stop on paging so a rare filter combination can't page forever.

{ "keywords": ["documentary"], "videoDuration": "over_20", "publishedAfter": "2024-01-01", "publishedBefore": "2024-06-30", "rankBy": "view_count" }

Long-form documentaries published in one exact half-year window, highest-viewed first.

{ "keywords": ["product launch"], "resultType": "shorts", "uploadDate": "week", "minViews": 5000, "titleExcludes": ["ad", "sponsored"] }

Organic Shorts from the last week above a view floor, excluding obvious ad copy.

{ "keywords": ["drone footage"], "videoFeatures": ["creative_commons", "4k"], "minDurationSeconds": 60, "max_results_per_keyword": 50 }

Reusable, high-resolution footage over a minute long, up to 50 results per phrase.


โ–ถ๏ธ Want to try other SimpleAPI scrapers?

ScraperWhat it extracts
../tiktok-discover-scraper-by-account-name-bioTikTok accounts and their videos, discovered by keyword or handle
../tiktok-hashtag-scraper-hashtag-reach-co-tag-statsHashtag reach, view counts and co-occurring tag statistics
../tiktok-profile-videos-api-scraper-reposted-videosA known TikTok account's own video and repost history
../Tiktok%20Ads%20ScraperTikTok Creative Center ad performance and insights
../instagram-profile-reels-scraper-with-creator-profilesInstagram reels joined with the creator's own profile data
../Instagram%20Followers%20ScraperFollower lists for a given Instagram account

How to extract YouTube data programmatically

This actor runs like any other Apify Actor: one API call starts the run, and results land in a standard Apify dataset you pull with the Apify API or an official client library โ€” no separate signup, credential or webhook surface beyond your Apify API token.

๐Ÿ Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("SimpleAPI/youtube-metadata-scraper-by-duration-date-video-type").call(
run_input={
"keywords": ["drone footage"],
"videoDuration": "over_20",
"videoFeatures": ["4k"],
"minViews": 10000,
}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["title"], row["viewCount"], row["channelUsername"])

๐Ÿ“Š Export to spreadsheets or CRM

Export the dataset as CSV directly from the Storage tab, or connect it through an Apify integration to Google Sheets or your CRM. Map title and url to identity columns, viewCount/likeCount/commentCount to engagement fields, and channelDisplayName/channelHandleUrl to an outreach or attribution column.


Scraping publicly visible YouTube pages is generally lawful: this actor reads only what YouTube already serves to any logged-out visitor โ€” search results and watch pages that require no login to view. That said, several fields identify individuals rather than the platform itself: channelUsername, channelDisplayName and author_avatar_url identify the uploader, and comments[].author/comments[].authorChannelId identify commenters. Where the data you collect is tied to an identifiable person, the personal-data regime applies โ€” GDPR in the EU/UK and CCPA/CPRA in California govern how you may store and reuse it, and you need a lawful basis for retention at scale. Nothing behind a login, age-gate or members-only wall is accessed; those pages are detected and skipped rather than saved. Consult legal counsel for commercial applications involving bulk storage of personal data.


โ“ Frequently asked questions

What happens if a video is private, deleted, or age/region-restricted?

Its watch page comes back with an empty title or a playabilityStatus other than OK. The actor retries on a fresh proxy exit, and if the page still won't resolve, the video is skipped โ€” not saved, not charged โ€” and its ID and reason are listed in the run's SUMMARY record in the key-value store.

Can I get comments along with the video metadata?

Yes. Set max_comments (0โ€“5000, default 2) to attach top-level comments to every matched video automatically โ€” no separate run or field is required. Set it to 0 to skip comments and run faster.

How accurate are the view, like and subscriber numbers?

viewCount and likeCount are exact integers read straight from the video page. channelSubscribers is the abbreviated text YouTube itself publishes to logged-out visitors ("1.2M"), because YouTube does not expose an exact subscriber count without a login. commentCount is parsed from the same abbreviated K/M/B display text the page shows, so it carries the same rounding YouTube's own page display does above roughly a thousand.

How many videos can I get per run?

max_results_per_keyword accepts 1โ€“100,000 per search phrase, but a filtered phrase realistically yields 130โ€“480 results before YouTube's own search paging runs out โ€” set higher, the run simply stops early. maxSearchPages (1โ€“100, default 30) is a separate hard stop on paging per phrase, and each page yields roughly 7โ€“20 filtered results. Videos supplied through urls are not subject to either limit.

How do the duration band and the exact duration filters interact?

videoDuration is YouTube's own server-side band (under_3, 3_20, over_20, plus the legacy under_4/4_20), applied before any video is downloaded. minDurationSeconds/maxDurationSeconds are a second, exact second-level window applied after download, so you can combine a coarse band with a precise cutoff โ€” for example videoDuration: "over_20" with minDurationSeconds: 1800 to keep only videos both server-flagged as long-form and confirmed to be at least 30 minutes.

Does YouTube Search Scraper work with Claude, ChatGPT, and AI agent frameworks?

There is no dedicated MCP server for this actor. Any agent framework that can call the Apify API โ€” including custom tool wrappers around apify-client โ€” can start a run, poll for completion, and read the resulting dataset as a standard HTTP call.

How does this compare to other YouTube scrapers?

As observed on their public Apify listings on 2026-07-30: apidojo/youtube-playlist-scraper is built around playlist and channel-series extraction with pay-per-event pricing, not filtered keyword search. beyondops/youtube-metadata-scraper-pro-v2 enriches a list of video URLs you supply and recommends pasting browser cookies for age-restricted or blocked content, but documents no server-side search filtering by duration, date or type. trisecode/yt-transcript takes one video_url at a time for metadata and transcript, with no keyword search or filter parameters documented at all. This actor's search path is the only one of the three that filters by duration band, upload date, exact date range and Videos/Shorts/Movies type before a single video is downloaded.

Can I use YouTube Search Scraper without a YouTube API key or developer account?

Yes. No YouTube Data API key, Google Cloud project, YouTube account, cookie or login is required anywhere in this actor โ€” you only need an Apify account to run it.


Conclusion

YouTube Search Scraper turns a keyword and a set of real YouTube filters into a structured dataset of fully enriched videos โ€” exact engagement numbers, real channel handles, comments and transcripts, with the literal search filters and result rank recorded on every row. It's built for researchers, footage and licensing teams, market-intelligence analysts and AI pipelines that need YouTube's own search filtering without a Data API key or its daily quota. Open the actor in Apify Console, drop your first search phrase into Search phrases, and click Start to see your first filtered set of videos.