YouTube Video Scraper [FAST] | Search & Channel Videos avatar

YouTube Video Scraper [FAST] | Search & Channel Videos

Pricing

from $5.00 / 1,000 results

Go to Apify Store
YouTube Video Scraper [FAST] | Search & Channel Videos

YouTube Video Scraper [FAST] | Search & Channel Videos

Search YouTube videos by keyword or scrape channel uploads. Get views, dates, duration, thumbnails, and optional descriptions, likes, comment counts, and tags. Multi-keyword search, title filters, and resumable cursors. Pay per delivered video—no video-result charge for failed results.

Pricing

from $5.00 / 1,000 results

Rating

5.0

(5)

Developer

Apizy

Apizy

Maintained by Community

Actor stats

7

Bookmarked

16

Total users

4

Monthly active users

2 days ago

Last modified

Features

Limited permissions

Share

YouTube Video Scraper [FAST] | Keyword Search & Channel Videos

Find YouTube videos by keyword or turn a public channel into a structured video dataset. Collect titles, views, publish dates, durations, thumbnails, and channel information. Search multiple keywords in one run, filter out irrelevant titles, continue with a cursor, and optionally add video descriptions, likes, comments counts, tags, and categories.

Built for content research, competitor analysis, creator discovery, and automated monitoring. Pay per delivered video: repeated videos are saved once per run, and failed or filtered-out videos have no video-result charge. See Pricing for the current rate.

What does YouTube Video Scraper do?

ModeWhat you provideWhat you get
Search videosOne or more keywordsVideos from across YouTube, with each matching keyword and its position
Channel videosOne public channel URLVideos from that channel's Videos tab, with channel information in the run summary

Both modes return basic video metadata by default. Enable Include video details to fetch additional public metadata for each unique result.

Search mode searches across YouTube. It does not search inside the Channel URL. Only the input section for the selected mode is used. Channel-only fields are ignored in Search mode; search-only fields are ignored in Channel mode.

What can you use it for?

  • Research competitors: Compare video topics, formats, views, durations, and publishing cadence across channels.
  • Discover content ideas: Find videos around a niche, product, or question and study which titles and formats attract views.
  • Find creators for partnerships: Search for videos about your category, then collect the channels behind them for further research.
  • Monitor brand and product mentions: Search titles and video metadata for your brand, product, or competitors. This is metadata search, not a search through every video's spoken transcript.
  • Research before building an app: Find product walkthroughs, comparisons, and tutorials for ideas such as a habit tracker or calorie counter.
  • Give AI tools useful research context: Feed structured titles, links, descriptions, and performance signals into a research assistant or product-planning workflow.
  • Track new uploads: Continue a channel export with a cursor, or repeat searches on a schedule and compare video IDs in your own database.
  • Automate reporting: Export JSON, CSV, or Excel, or connect results to Make, n8n, Zapier, a spreadsheet, or a dashboard.

Ready-to-run examples

How to use

  1. Choose Search videos or Channel videos.
  2. Enter keywords in the Search section or a channel URL in the Channel section. Leave the other section empty.
  3. Set your result limit. Add title filters or enable Include video details if needed.
  4. Click Run. Open the default Dataset for video rows.
  5. Read Full output for status, counts, issues, and continuation cursors. Download the Dataset in your preferred format.

The form groups Channel and Search inputs into separate collapsible sections. These sections do not automatically disappear when the mode changes; their labels identify which fields apply.

Which inputs should you use?

GoalModeMain fields
Find videos about one topicsearchsearchKeywords, maxResults
Compare related keywordssearchSeveral searchKeywords; maxResults applies to each keyword
Find recent videossearchuploadPeriod: today, week, month, or year
Prioritize popular videossearchsortBy: "popularity"
Keep relevant titlesEithertitleInclude, titleMatch, titleExclude
Add descriptions and engagement metadataEitherincludeVideoDetails: true
Export one channel's uploadschannelchannelUrl, maxVideos
Continue one keyword or channelSame as previous runcursor
Continue several keywordssearchsearchCursors, with one keyword/cursor pair per continuing keyword

Input examples

Search for videos about an app category

{
"mode": "search",
"searchKeywords": ["habit tracker app"],
"maxResults": 20
}

This searches across YouTube. No channel URL is needed. The new-form example contains only mode and searchKeywords; omitting the limit uses 20 results per keyword. Details are off, sorting is relevance, and the search context is US/English unless you choose otherwise.

Research multiple keywords in one run

{
"mode": "search",
"searchKeywords": ["habit tracker app", "best habit tracker app"],
"maxResults": 35,
"country": "US",
"language": "en"
}

This requests up to 35 matching videos per keyword, not 35 total. If a video appears in both collected result sets, it is saved once with both entries in searchMatches. Therefore, two keywords requesting 35 results each can return fewer than 70 unique rows.

Find relevant titles and prioritize popularity

{
"mode": "search",
"searchKeywords": ["habit tracker app review"],
"maxResults": 20,
"sortBy": "popularity",
"titleInclude": ["habit", "app"],
"titleMatch": "all",
"titleExclude": ["Notion"]
}

Each saved title must contain both habit and app, and must not contain Notion. Matching is case-insensitive and uses literal substrings, not regex. Use titleMatch: "any" to accept at least one included phrase. Exclusions always take precedence. Filtered videos are skipped before saving and do not consume the requested matching-result count.

Find recent, short videos with additional details

{
"mode": "search",
"searchKeywords": ["calorie tracker app"],
"maxResults": 10,
"uploadPeriod": "year",
"duration": "under3",
"includeVideoDetails": true
}

This applies YouTube's upload-period and duration filters, then fetches details for each unique video. Some fields may remain unavailable. If enrichment fails, the basic video result remains available with detailStatus: "unavailable" and an explanation in OUTPUT.issues.

Collect videos from a channel

{
"mode": "channel",
"channelUrl": "https://www.youtube.com/@mkbhd",
"maxVideos": "100",
"includeVideoDetails": false
}

Channel mode reads the channel's Videos tab. Supported URL formats include /@handle, /channel/ID, /c/name, and /user/name. maxVideos is a string dropdown; maxResults in Search mode is a number.

Existing integrations that send channelUrl without mode continue to use Channel mode. For new integrations, provide mode explicitly.

Continue a single keyword

{
"mode": "search",
"searchKeywords": ["habit tracker app"],
"maxResults": 20,
"cursor": "PASTE_THIS_KEYWORDS_NEXT_CURSOR"
}

Copy nextCursor from that keyword's entry in OUTPUT.summary.pagination. Keep the same keyword, country, language, sort, upload period, duration, and title filters as the previous run. The example assumes the previous run used the default search settings.

Continue several keywords

{
"mode": "search",
"searchKeywords": ["habit tracker app", "best habit tracker app"],
"maxResults": 20,
"searchCursors": [
{
"keyword": "habit tracker app",
"cursor": "PASTE_FIRST_KEYWORDS_NEXT_CURSOR"
},
{
"keyword": "best habit tracker app",
"cursor": "PASTE_SECOND_KEYWORDS_NEXT_CURSOR"
}
]
}

Each keyword has its own continuation. A keyword with no supplied cursor starts a fresh search. Remove exhausted keywords from searchKeywords when you only want to continue the others. Do not combine cursor and searchCursors.

Continue a channel export

{
"mode": "channel",
"channelUrl": "https://www.youtube.com/@mkbhd",
"maxVideos": "100",
"cursor": "PASTE_CHANNEL_NEXT_CURSOR"
}

Copy the value from OUTPUT.summary.pagination.nextCursor and use the same channel. You can choose a different result limit for the next run.

Input fields

Defaults below describe runtime behavior when a field is omitted. They do not all appear as extra fields in your submitted JSON.

FieldApplies toDefaultDescription
modeBothInferred if omittedsearch or channel. New-form example selects Search. Existing channel-only inputs remain supported.
searchKeywordsSearchNoneNon-empty array of phrases. Repeated identical phrases are searched once.
maxResultsSearch20Integer from 1–1,000, per keyword. Counts matching videos before cross-keyword deduplication.
sortBySearchrelevancerelevance or popularity; uses YouTube's result order.
uploadPeriodSearchanyany, today, week, month, or year.
durationSearchanyany, under3, between3and20, or over20.
countrySearchUSSearch context, for example US, GB, AU, or SG; not a guarantee of creator location.
languageSearchenInterface/relevance context, for example en, fr, or de; does not translate content or guarantee spoken language.
channelUrlChannelNonePublic channel URL; required in Channel mode and ignored in Search mode.
maxVideosChannel"20""10", "20", "50", "100", "300", "500", or "1000".
titleIncludeBothNoneLiteral phrases that must appear in the title, according to titleMatch.
titleMatchBothanyany or all; applies to titleInclude.
titleExcludeBothNoneSkip titles containing any listed phrase.
includeVideoDetailsBothfalseFetch additional public metadata for each unique result.
cursorChannel or one keywordNoneOpaque continuation from the previous output.
searchCursorsSearchNoneArray of objects with keyword and cursor, for multi-keyword continuation.

Result limits are ceilings, not guaranteed totals. YouTube availability, filters, duplicate videos, source errors, and pagination safety limits can reduce the delivered count.

Basic results vs. video details

DataBasic resultWith details enabled
ID, title, URL, thumbnailYes, when supplied by the listingRetained; thumbnail may be enriched
Channel ID, name, URLWhen availableMay be enriched
ViewsParsed listing count; can be roundedExact source value when available; otherwise retains the basic value
Publish dateEstimated from relative listing text when neededExact source date when available; otherwise retains the estimate
DurationListing duration when availableDetail duration when available; otherwise retains the listing duration
DescriptionSearch snippet when availableFull public description when available
Likes and comment countNot includedWhen available
Tags, category, upload date, availability flagsNot includedWhen available; missing fields remain null or empty
Keyword matches and positionsSearch modeRetained

Enrichment requires additional requests and can take longer. Enabling details does not guarantee every field. YouTube can expose a readable video listing while withholding player metadata. This can leave category, duration, likes, or comment count unavailable even when other details are returned.

detailStatus appears only when details were requested:

ValueMeaning
includedThe detail lookup succeeded and its tracked metadata fields were available.
partialThe lookup succeeded, but some tracked fields were unavailable. Other detail fields can still be null.
unavailableEnrichment failed or the detail page was unavailable. The basic result is retained.

Tags are returned only when the source provides video tags; generic YouTube page keywords are not substituted. Live or availability flags remain null when their values are unknown.

Output

  • Default Dataset: one row per unique delivered video in that run.
  • Key-Value Store → OUTPUT: summary, results, and operational issues.
  • Pagination Dataset: one row for the channel, or one row per search keyword.

Video rows contain video data, not error-only records. Check OUTPUT.issues for missing detail fields and source problems.

Example video row

Illustrative basic search output; counts and dates change over time:

{
"videoId": "W6AB-dxnAkA",
"title": "8 Habit Tracking Apps That Actually Work",
"videoUrl": "https://www.youtube.com/watch?v=W6AB-dxnAkA",
"publishedAt": "2025-11-06",
"publishedAtRaw": "1 year ago",
"publishedAtIsApproximate": true,
"duration": "9:38",
"durationSeconds": 578,
"durationMs": 578000,
"views": 76177,
"viewsRaw": "76,177 views",
"viewsIsApproximate": false,
"thumbnailUrl": "https://i.ytimg.com/vi/W6AB-dxnAkA/hqdefault.jpg",
"channel": {
"channelId": "UCYyaQsm2HyneP9CsIOdihBw",
"name": "Tool Finder",
"url": "https://www.youtube.com/@toolfinderhq"
},
"searchMatches": [
{ "keyword": "habit tracker app", "position": 1 },
{ "keyword": "best habit tracker app", "position": 1 }
],
"insight": {
"ageInDays": 365,
"viewsPerDay": 209,
"viewsPerSecond": 131.79,
"estimatedWatchHours": 12230.64,
"durationCategory": "5–15 min"
}
}

Video fields

FieldMeaning
videoId, title, videoUrlVideo identity and direct link.
thumbnailUrlAvailable thumbnail URL.
channelChannel identity: channelId, name, and url; values can be unavailable.
views, viewsRawNormalized view count and original listing text.
viewsIsApproximateWhether the normalized count came from a rounded listing value such as 1.2K.
publishedAt, publishedAtRawNormalized date and original listing text.
publishedAtIsApproximateWhether the normalized date was estimated from relative text.
duration, durationSeconds, durationMsDuration as text, seconds, and milliseconds.
descriptionSnippetSearch-result description snippet, when provided.
searchMatchesCollected keyword matches with the video's position for each keyword; Search mode only.
detailStatusDetail lookup outcome, when requested.
description, likes, commentCountAdditional metadata from a successful detail lookup, when available.
uploadedAt, category, keywordsAdditional upload metadata; tags can be an empty array.
isLive, isUnlisted, isFamilySafeSource-provided flags; unknown values remain null.
insightDerived metrics described below.

Non-English listing counts and relative dates are preserved as raw text. The Actor does not apply English parsing rules to them; normalized values may be null. A successful detail lookup can supply language-independent numeric counts and exact dates.

Derived insights

Field inside insightMeaning
ageInDaysDays since the normalized publish date; estimated when that date is approximate.
viewsPerDayLifetime views divided by video age, with a minimum divisor of one day. Not recent daily growth.
viewsPerSecondViews divided by video duration in seconds. Not a playback or retention measurement.
estimatedWatchHoursViews × full duration ÷ 3,600. Assumes every view watched the whole video; not actual watch time.
durationCategory< 1 min, 1–5 min, 5–15 min, 15–30 min, or 30+ min.

These metrics help compare collected videos. They do not provide YouTube Analytics, keyword search volume, revenue estimates, or a guaranteed viral-opportunity score.

Pagination and continuation

In Channel mode, OUTPUT.summary.pagination is an object. In Search mode, it is an array with one entry per keyword:

[
{
"keyword": "habit tracker app",
"currentPage": 1,
"pageSize": 20,
"totalPages": null,
"hasNextPage": true,
"nextCursor": "OPAQUE_CURSOR_FROM_THIS_RUN"
}
]
FieldMeaning
keywordSearch phrase; absent for Channel pagination.
currentPageExport batch number, beginning at 1. One batch can fetch several source pages.
pageSizeRequested matching-video limit for this keyword or channel.
totalPagesChannel-based estimate when possible; null for Search.
hasNextPageWhether a buffered result or source continuation remains. Not a promise that more matching videos exist.
nextCursorPass into the next run's cursor or corresponding searchCursors entry.
retryRequiredPresent for a failed keyword that needs another attempt. A null cursor here means restart that keyword.

Search cursors expire after 24 hours, and YouTube may invalidate them earlier. Keep the same keyword and search settings when resuming; changing them requires starting a new search without the old cursor. The result limit and detail setting can change between runs. Treat cursors as opaque strings and do not edit them.

Deduplication is per run. Search results and channels change over time. A video can reappear in a later run, including when it was previously found under a different keyword. Deduplicate by videoId in your own database when maintaining a combined export or monitoring history.

Positions count supported organic video cards, excluding ads and unrelated shelves. They reflect the collected search session, not a fixed or universal YouTube ranking.

Run summary and troubleshooting

OUTPUT.summary includes mode, keywords, successCount, filteredCount, duplicateCount, pagesFetched, sourceErrors, detailSuccessCount, detailFailedCount, detailPartialCount, pagination, and timing. Channel runs also include available channel information. detailPartialCount is part of detailSuccessCount, not an additional set of videos.

StatusMeaning
completedThe available matching videos were delivered, up to the requested limit. Individual detail fields can still be missing.
emptyNo matching video rows were delivered; check filters and the source's available results.
invalid_inputAn input, channel URL, cursor, or limit is invalid. The run ends with an explanation rather than video error rows.
partialAvailable results were retained, but a source error, scan limit, spending limit, or failed enrichment prevented a complete response.
failedA technical failure prevented scraping or persistence, or all keyword searches failed. Check the log and any saved output.

Why did I get fewer videos than requested?

  • Different keywords found the same videos, so those matches share one Dataset row.
  • YouTube ran out of available results before your limit.
  • Your title filters excluded results. Check filteredCount.
  • A source request failed after retries, or a pagination safety limit stopped collection. Check issues, stopReason, and the cursor.
  • The run's spending limit stopped delivery.

Channel results are saved as pages arrive. Search results are collected across the requested keywords before delivery so all keyword matches can be merged into each row. One failed keyword does not discard successfully collected results from other keywords.

Temporary source failures are retried. If requests still fail, the Actor reports the problem rather than silently presenting an unknown or blocked page as an empty result. When a resumable continuation is available, it is returned in pagination. Collection is limited to 100 source pages per keyword or channel per run and also stops on repeated continuation tokens or too many pages without new video IDs.

Use successCount and Dataset rows to measure delivery. successRate does not measure completeness of optional metadata. The current totalCharged summary is a video-result estimate at the configured base rate, not a complete Apify invoice; consult the run's charge breakdown for actual billing.

Pricing

Result pricing scheduled for November 20, 2026:

Apify discount tierVideos / 1,000Optional details / 1,000Total with successful details / 1,000
Free$2.00$1.00$3.00
Bronze$2.00$1.00$3.00
Silver$2.00$1.00$3.00
Gold$1.30$1.00$2.30

The primary event is video-scraped, charged once per unique video saved in a run. video-detail-scraped adds $0.001 only when optional detail enrichment succeeds and the video row is saved. A successful enrichment can still have null optional fields. Failed enrichment has no detail-event charge; the basic saved video retains its video-result charge.

For example, on Free, 100 delivered videos cost $0.20 in video events; 100 successfully enriched videos add $0.10. If only 60 of those videos are enriched, the result-event total is $0.26. Filtered and undelivered results have no video-result charge. Deduplication is per run.

During Apify's notice period, the previous $0.005 video-result rate can remain applicable, without a separate detail-event surcharge. The Actor reads the pricing assigned to each run rather than assuming a tier or charging an unregistered event. Check the Pricing tab and run charge breakdown for the rate that applies to you. Enterprise pricing is arranged through Apify.

Standard Dataset-item, Actor Start, and applicable platform usage charges are separate. The prices above cover result events only.

Notes

  • Public YouTube data only. No YouTube login or user-supplied YouTube Data API key is required. Retrieval uses HTTP requests, without launching a browser.
  • Channel mode reads the Videos tab. There is no dedicated Shorts-only, live-only, playlist-search, or channel-search mode in this Actor.
  • Search filters describe the results YouTube returns; they do not search the entire catalog exhaustively. Narrow keywords can still produce loosely related videos. Use title filters when needed.
  • Country and language set search context, not guaranteed creator location or spoken language. They do not translate content.
  • Counts, rankings, publication estimates, and availability are snapshots. YouTube can change its responses or apply rate limits.
  • Missing fields remain null or empty rather than being invented. Public metadata cannot guarantee exact watch time, downloads, or earnings.
  • This Actor returns metadata and derived insights. It does not download videos, retrieve full comment threads, or extract transcripts.

More Actors You Might Like

Built by the same team and backed by the same transparent pricing philosophy: no hidden attempts, no wasted credits, no charge for failed results.

ActorWhat it helps you collect
YouTube Video Detail ScraperPublic metadata for known video URLs and IDs, including available engagement fields.
YouTube Channel Scraper [FAST]Channel profiles, subscribers, engagement, and available contact information.
YouTube Comment ScraperComment text, authors, likes, and reply metadata.
YouTube Transcript ScraperAvailable video transcripts and timestamps.
Google Play Store ScraperAndroid app search, charts, and app details for market research.
App Store ScraperiOS app discovery, charts, and publisher information.

Get in Touch

Have questions or need a custom scraping workflow? Email apizy.studio@gmail.com.