YouTube Search Scraper avatar

YouTube Search Scraper

Pricing

from $0.99 / 1,000 results

Go to Apify Store
YouTube Search Scraper

YouTube Search Scraper

Search YouTube videos, channels, and playlists. Filter by upload date, view count, length, live, shorts. Bulk-paginated.

Pricing

from $0.99 / 1,000 results

Rating

0.0

(0)

Developer

Farhan Febrian Nauval

Farhan Febrian Nauval

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Search YouTube by keyword and stream back structured results — videos, channels, and playlists — with built-in filters for upload date, view count, content type, and live/shorts.

Why use this actor

  • No account / no API key required — just give it a query and the actor returns the same results YouTube shows on the web.
  • Filter the way YouTube does — sort by relevance, upload date, view count, or rating; restrict to videos / channels / playlists; or narrow to today's or this week's uploads, live streams, or shorts.
  • Mixed result types in one stream — videos, channels, and playlists are returned together, each tagged with a type discriminator so you can split them downstream.
  • No quota limits — unlike the official YouTube Data API, runs are not capped by a daily quota; pay only for the results you receive.
  • Bulk queries in one run — pass a list of search terms; every record is tagged with _input and _filter so you can join results back to your input list.
  • Stable JSON output — every row carries _input, _filter, _source, _scrapedAt envelope fields, ready for pipelines, spreadsheets, and databases.

How it works

  1. You provide one or more search queries (e.g. twice, python tutorial) and pick a filter.
  2. The actor fetches search results the same way YouTube's web app does, then paginates with continuation tokens until it has gathered maxResults items per query.
  3. Results stream into your dataset as flat JSON records, ready to download as JSON, CSV, or Excel.

You do not need to manage scrapers, browsers, or rotating IPs — all handled internally.

Input

{
"queries": [
"lofi hip hop",
"python tutorial"
],
"maxResults": 20,
"filter": "relevance",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["DATACENTER"]
}
}
FieldTypeDescription
queriesarrayOne or more search queries to run. Each query is processed independently.
maxResultsintegerMaximum results returned per query. Pagination is automatic. Default: 20. Set to 0 for unlimited.
filterstringFilter / sort mode. See table below. Default: relevance.
proxyConfigurationobjectApify Proxy settings. Datacenter is the default and works well for search.

filter options

ValueWhat it does
relevanceDefault YouTube ranking (best match for the query).
upload_dateSort by newest upload first.
view_countSort by most viewed first.
ratingSort by highest-rated first.
video_onlyRestrict results to videos.
channel_onlyRestrict results to channels — useful for influencer discovery.
playlist_onlyRestrict results to playlists.
liveCurrently live streams only.
shortVideos under 4 minutes (catches most Shorts).
todayUploaded in the last 24 hours.
this_weekUploaded in the last 7 days.

Output

Input: queries: ["twice"], maxResults: 5, filter: "relevance" — the actor returns a mixed stream of videos and channels:

{
"type": "video",
"videoId": "i0p1bmr0EmE",
"title": "TWICE \"What is Love?\" M/V",
"channelTitle": "JYP Entertainment",
"channelId": "UCaO6TYtlC8U5ttz62hTrZgg",
"publishedTimeText": "8 years ago",
"lengthText": "3:44",
"viewCountText": "918,997,637 views",
"descriptionSnippet": "TWICE(트와이스) \"What is Love?\" M/V Spotify https://goo.gl/jVLYYY iTunes & Apple Music https://goo.gl/DKyKZf Google Music ...",
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/i0p1bmr0EmE/hqdefault.jpg?sqp=-oaymwEcCOADEI4CSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA8eBN8cI0jbqpUfPBbCVH7jph99A",
"width": 480,
"height": 270
}
],
"_input": "twice",
"_filter": "relevance",
"_source": "S1-primary",
"_scrapedAt": "2026-05-18T10:42:57.499074+00:00"
}
{
"type": "channel",
"channelId": "UCzgxx_DM2Dcb9Y1spb9mUJA",
"title": "TWICE",
"descriptionSnippet": "TWICE Official YouTube Channel.",
"subscriberCountText": "19.3M subscribers",
"thumbnails": [
{
"url": "https://yt3.googleusercontent.com/rj-m7CQIV8hIHx_lB8cjs0NxrDFJaUkVwZ5tCnZTNSVEr2IqXGF-2e7nr7og1IGeRXtHikce=s176-c-k-c0x00ffffff-no-rj-mo",
"width": 176,
"height": 176
}
],
"_input": "twice",
"_filter": "relevance",
"_source": "S1-primary",
"_scrapedAt": "2026-05-18T10:42:57.499074+00:00"
}
{
"type": "video",
"videoId": "FxkAkEaalB8",
"title": "TWICE (트와이스) PLAYLIST 2025 [UPDATED]",
"channelTitle": "FEARLIX",
"channelId": "UCqNQp_VOtVjQBOR_OhrizMA",
"publishedTimeText": "10 months ago",
"lengthText": "2:52:07",
"viewCountText": "765,898 views",
"descriptionSnippet": "TWICE (트와이스) is a nine-member girl group under JYP Entertainment, Formed through the reality show SIXTEEN. Group ...",
"_input": "twice",
"_filter": "relevance",
"_source": "S1-primary",
"_scrapedAt": "2026-05-18T10:42:57.499074+00:00"
}

… 2 more results in the same run.

Common fields (every row)

FieldTypeDescription
_inputstringThe query exactly as you supplied it. Use this to join results back to your input list.
_filterstringThe filter value used for this run (e.g. relevance, upload_date).
_sourcestringInternal tag for the fetch path. S1-primary means the fastest, richest path; S2-* would indicate a fallback.
_scrapedAtstringISO-8601 UTC timestamp when the record was scraped.
typestringResult type discriminator: video, channel, or playlist.

Video fields (type: "video")

FieldTypeDescription
videoIdstringYouTube video ID (the part after watch?v=).
titlestringVideo title.
channelTitlestringDisplay name of the channel that uploaded the video.
channelIdstringChannel ID (starts with UC...).
publishedTimeTextstringYouTube's localized upload time (e.g. "8 years ago", "3 days ago").
lengthTextstringVideo duration as displayed (e.g. "3:44", "2:52:07").
viewCountTextstringView count as displayed (e.g. "918,997,637 views").
descriptionSnippetstringShort description snippet shown under the result.
thumbnailsarrayThumbnail URLs with width and height.

Channel fields (type: "channel")

FieldTypeDescription
channelIdstringChannel ID (starts with UC...).
titlestringChannel display name.
descriptionSnippetstringShort channel description.
subscriberCountTextstringSubscriber count as displayed (e.g. "19.3M subscribers").
thumbnailsarrayChannel avatar URLs with width and height.

Playlist fields (type: "playlist")

FieldTypeDescription
playlistIdstringYouTube playlist ID.
titlestringPlaylist title.
videoCountstringNumber of videos in the playlist.
channelTitlestringDisplay name of the channel that owns the playlist.

Error envelope

Queries that fail to fetch return a structured error instead of crashing the run:

{
"_input": "some query",
"_error": "fetch_failed",
"_errorDetail": "network error or upstream rejection",
"_source": "S1-primary",
"_scrapedAt": "2026-05-18T10:42:57.499074+00:00"
}

Filter on _error to triage failed rows.

Pricing

This actor is billed per result: $3.50 per 1,000 results. Each video, channel, or playlist record = 1 result. Errors are not billed.

Other Sosmed Actors

PlatformActorBest for
YouTubeYouTube Channel ScraperPull a channel's full upload list + metadata
YouTubeYouTube Video Detail ScraperFull metadata, description, and stats for any video
BlueskyBluesky Search ScraperKeyword search across the Bluesky timeline
RedditReddit Search ScraperSearch posts across all subreddits
X / TwitterX Search ScraperKeyword search across X posts
TumblrTumblr Blog ScraperPull posts from any Tumblr blog

Browse the full catalog at apify.com/xtracto.

Notes

  • Result freshness — YouTube ranks search results dynamically; the same query rerun a few minutes later may return a slightly different order. Use _scrapedAt to track when each row was captured.
  • Pagination — the actor chains continuation tokens automatically until maxResults is reached or YouTube returns no more pages. Very large maxResults values for narrow queries may end early simply because YouTube has no more results to give.
  • Why filters helprelevance is broad and noisy for popular keywords. For trend monitoring, today or this_week give you only fresh uploads; for influencer discovery, channel_only strips out the videos; for view-driven research, view_count puts the biggest hits first.
  • Counts as textviewCountText, subscriberCountText, and publishedTimeText are returned as YouTube's localized strings ("918,997,637 views", "19.3M subscribers", "3 days ago"). Parse these client-side if you need numeric values.
  • No deduplication — the actor does not deduplicate by videoId / channelId / playlistId across pages; downstream pipelines should dedupe if strict uniqueness is required.