YouTube Search Scraper – Videos, Channels & Shorts
Pricing
from $5.00 / 1,000 youtube search results
YouTube Search Scraper – Videos, Channels & Shorts
Unofficial YouTube search scraper for ranked channels, videos, and native Shorts. Get clean JSON with creator profiles, public emails when exposed, engagement metrics, descriptions, tags, chapters, country/language localization, and search rank—no YouTube API key. Not affiliated with YouTube.
Pricing
from $5.00 / 1,000 youtube search results
Rating
0.0
(0)
Developer
Arjun AI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Share
Search YouTube videos, channels, and Shorts by keyword
Turn YouTube search results into ranked, analysis-ready JSON. Choose one result type per run—channels, standard videos, or native Shorts—then control the keyword, YouTube region, interface language, ranking, date, duration, and result limit.
The Actor enriches only the final selected results. Channel searches return public channel profiles; video and Shorts searches return content metadata plus a compact channel identity. It does not silently expand channels into unrelated content, and it does not require a YouTube Data API key.
This is an unofficial Actor and is not affiliated with, endorsed by, or sponsored by YouTube or Google. It collects publicly accessible metadata only.
Ready-to-run examples
- Find YouTube videos by keyword and region
- Find YouTube channels by keyword
- Find YouTube Shorts by keyword
What you can do
- Discover creators that rank for a topic or niche.
- Research standard videos by relevance, popularity, upload period, or duration.
- Search YouTube's native Shorts surface instead of guessing from video length.
- Compare localized search results across YouTube regions and interface languages.
- Export titles, descriptions, thumbnails, dates, engagement metrics, tags, categories, chapters, and basic creator data when publicly exposed.
- Build datasets for creator research, SEO, monitoring, market analysis, automation, or LLM workflows.
Quick start
This input returns up to three standard videos for each keyword:
{"searchQueries": ["AI automation","faceless YouTube"],"searchType": "videos","maxResultsPerQuery": 3,"sortBy": "popularity","uploadDate": "thisMonth","duration": "3To20Minutes","searchCountry": "US","searchLanguage": "en"}
Input reference
| Field | Type | Default | Accepted values and behavior |
|---|---|---|---|
searchQueries | string[] | ["AI automation"] | 1–20 unique keyword phrases. The result limit applies separately to each phrase. |
searchType | string | videos | channels, videos, or shorts. One run returns one consistent result type. |
maxResultsPerQuery | integer | 3 | 1–25 results per keyword. |
sortBy | string | relevance | relevance or popularity for channels and standard videos. Shorts use relevance. |
uploadDate | string | any | any, today, thisWeek, thisMonth, or thisYear for standard videos. |
duration | string | any | any, under3Minutes, 3To20Minutes, or over20Minutes for standard videos. |
searchCountry | string | US | YouTube content-region code used to localize ranking. It is not a strict channel-country filter. |
searchLanguage | string | en | YouTube interface and localized-metadata language. It is not a strict spoken-language filter. |
The input form provides dropdowns for the YouTube region and language values supported by this Actor. Common examples are US, GB, IN, DE, JP, and BR for regions, and en, es, de, ja, pt, and zh-CN for languages. Use the form rather than maintaining a copied list of codes in your integration.
Which filters apply?
The Actor applies supported filters during YouTube search, before selecting results. Filters that do not apply to the selected result type are safely reset to that type's defaults.
| Result type | sortBy | uploadDate | duration |
|---|---|---|---|
channels | relevance or popularity | any | any |
videos | relevance or popularity | Supported | Supported |
shorts | relevance | any | any |
popularity is YouTube's own server-side ranking. It is not a local numerical sort of the returned counters. searchCountry and searchLanguage influence YouTube's localized result context but do not guarantee that every result originates in that country or uses that spoken language.
How it works
For each keyword, the Actor:
- Requests the selected YouTube search surface with the effective filters.
- Keeps up to
maxResultsPerQueryranked matches. - Enriches only those selected matches and streams them to the Dataset.
Channel enrichment reads the public channel profile and About data. Video and Shorts enrichment reads the content detail page and keeps only a six-field basic channelProfile; it does not make another request to the creator's About page.
The Actor searches by keyword. It does not crawl a channel's complete archive.
Dataset output
The default Dataset contains one type-specific object per successful result:
channel— channel identity, public statistics, history, branding, social links, and directly exposed emails.video— standard video metadata and compact channel identity.short— native Shorts metadata and compact channel identity.searchStatus— a free operational row for a keyword with no results, a failed search, or a maximum-charge stop.
Fields belonging to another result type are omitted instead of being added as unrelated null values.
Fields shared by successful results
| Field | Description |
|---|---|
recordType | channel, video, or short |
detailStatus | complete when enrichment finished; basic when useful search-level data was preserved after a detail failure |
detailError | Detail failure message on a basic fallback |
title, url, description | Public identity and description fields |
searchQuery | Original keyword that produced the row |
searchRank | One-based position inside that keyword's result set |
searchCountry, searchLanguage | Effective YouTube localization context |
scrapedAt | UTC ISO 8601 collection timestamp |
Channel fields
Channel rows can contain:
avatarUrl, bannerUrl, channelId, channelName, channelHandle, channelUrl, subscriberCount, subscriberCountText, isVerified, totalViewCount, videoCount, joinedDate, joinedDateText, channelCountry, socialLinks, and emails.
emails contains only addresses directly exposed in public page data. The Actor does not sign in, solve CAPTCHAs, or reveal protected business-email controls.
Video and Shorts fields
Content rows can contain:
videoId, thumbnailUrl, durationSeconds, durationText, uploadDate, publishedAt, publishedTimeText, viewCount, viewCountText, likeCount, commentCount, liveStatus, availability, ageLimit, videoLanguage, tags, categories, chapters, and channelProfile.
The compact channelProfile contains channelId, channelName, channelHandle, channelUrl, subscriberCount, and isVerified. It is not a full channel About profile.
Real output examples
The records below are shortened from real runs. Counts and availability change over time.
Channel result
{"recordType": "channel","detailStatus": "complete","title": "Automate AI Consulting","url": "https://www.youtube.com/@AutomateAIConsulting","channelId": "UCgugjY9T1jv41UcKmaZ5NLQ","channelHandle": "@AutomateAIConsulting","subscriberCount": 22000,"totalViewCount": 1292802,"videoCount": 377,"joinedDate": "2025-03-01","channelCountry": "United States","emails": ["collab@automateaiconsulting.com"],"searchQuery": "AI automation","searchRank": 3,"searchCountry": "US","searchLanguage": "en"}
Video result
{"recordType": "video","detailStatus": "complete","videoId": "3mVWPk6BwVc","url": "https://www.youtube.com/watch?v=3mVWPk6BwVc","title": "Apple September 2026 Event - The 8 NEW Products!","durationSeconds": 719,"durationText": "11:59","uploadDate": "2026-08-28","publishedAt": "2026-08-28T14:35:32Z","viewCount": 102293,"likeCount": 1130,"commentCount": 62,"categories": ["Science & Technology"],"channelProfile": {"channelId": "UCr6JcgG9eskEzL-k6TtL9EQ","channelName": "ZONEofTECH","channelHandle": "@ZONEofTECH","subscriberCount": 1670000,"isVerified": true},"searchQuery": "apple event","searchRank": 4}
Shorts result
{"recordType": "short","detailStatus": "complete","videoId": "ihbcOF4_2Ok","url": "https://www.youtube.com/shorts/ihbcOF4_2Ok","title": "The Lunch That Changed The Game #shorts #cooking #recipe","durationSeconds": 39,"durationText": "39","uploadDate": "2025-09-28","publishedAt": "2025-09-28T14:48:32Z","viewCount": 7496908,"likeCount": 171421,"commentCount": 1800,"channelProfile": {"channelId": "UCogoqwISeiIx0u4_7DqddPQ","channelName": "Meatlicious","channelHandle": "@Meatlicious_","subscriberCount": 1030000,"isVerified": false},"searchQuery": "cooking","searchRank": 1}
No-result status
{"recordType": "searchStatus","status": "noResults","searchQuery": "an extremely specific missing topic","searchType": "videos","errorCode": "NO_SEARCH_RESULTS","errorMessage": "YouTube returned no matching public results for this keyword and filter combination.","suggestion": "Try a broader keyword or less restrictive search filters."}
Pricing and result limits
This Actor uses pay-per-event pricing:
- Actor start:
$0.00005per run. - Successful search result:
$0.005perchannel,video, orshortrow—$5.00per 1,000 results. - Status rows:
searchStatusrows are free.
Example event charges before any configured discounts:
| Successful results | Event charge including one start |
|---|---|
| 1 | $0.00505 |
| 5 | $0.02505 |
| 100 | $0.50005 |
| 500 | $2.50005 |
The maximum requested scope is number of keywords × maxResultsPerQuery. With 20 keywords and 25 results per keyword, one run can request up to 500 successful search-result rows. This is a ceiling, not a guarantee: YouTube can return fewer matches, and unavailable details can fall back to basic data.
The Actor respects the user's maximum run charge. The Actor's Pricing tab is the source of truth for active prices and discounts.
Understanding missing fields
detailStatus: "complete" means the relevant detail request completed; it does not mean every optional field exists. A value can still be null or an array can be empty when YouTube hides it, the creator did not publish it, comments are disabled, the content is live or upcoming, or the selected response does not expose it.
detailStatus: "basic" means the Actor kept useful search-level metadata after detail enrichment failed. detailError explains the failure.
Subscriber counts are normalized from YouTube's public, sometimes abbreviated display value and can therefore be approximate. subscriberCountText preserves the displayed label when available. joinedDate uses YYYY-MM-DD; YouTube exposes a date, not a precise join time.
Run summary
The default Key-Value Store record named OUTPUT provides run-level diagnostics without adding them to every result row. It includes effective filters, query counts and statuses, resultsByQuery, complete and basic result totals, Dataset item totals, concurrency, and whether the maximum charge was reached.
Use searchQuery plus searchRank to restore ranking order. Enrichment runs concurrently, so physical Dataset insertion order can differ from search order.
Run with the Apify API
curl -X POST \"https://api.apify.com/v2/acts/arjun_code~youtube-search-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries": ["AI automation"],"searchType": "videos","maxResultsPerQuery": 3,"sortBy": "relevance","uploadDate": "thisWeek","duration": "under3Minutes","searchCountry": "US","searchLanguage": "en"}'
For synchronous testing, replace /runs with /run-sync-get-dataset-items. Use asynchronous runs for larger requests.
Performance guidance
- Start with one keyword and 3–5 results to validate the result type and localization.
- Runtime grows with the number of keywords and selected results because each final match is enriched.
- Channel searches usually require a channel profile request; video and Shorts searches require a content-detail request.
- A broad keyword is usually faster and more reliable than a highly restrictive filter combination that produces no matches.
Troubleshooting
The Dataset contains a searchStatus row
Read status, errorMessage, and suggestion. noResults usually means the keyword or filter combination was too narrow. failed means the search request did not complete. chargeLimitReached means the selected maximum run charge prevented more billable rows.
Search rank looks out of order in the Dataset
Detail requests finish concurrently. Sort by searchQuery, then searchRank; do not use Dataset insertion order as the ranking.
A field is empty even though the record is complete
Optional public metadata varies by result. Check the source page and the missing-field guidance above. The Actor does not invent hidden counters, contact details, tags, chapters, or country values.
Related Actors
| Goal | Actor |
|---|---|
| Enrich known channel handles, IDs, or URLs | YouTube Channel Details Scraper |
| Get metadata for known video or Shorts URLs or IDs | YouTube Video and Shorts Details Scraper |
| Export a channel's videos, Shorts, and streams | YouTube Channel Content Scraper |
| Export public comments and replies | YouTube Comments Scraper |
FAQ
Does this use the YouTube Data API?
No. No YouTube API key or Google account is required.
Can region or language strictly filter creator nationality or spoken language?
No. They set YouTube's localized search context and influence ranking. They are not strict post-result filters.
Are Shorts detected only by duration?
No. Discovery uses YouTube's native Shorts search surface.
Can it reveal a protected business email?
No. Channel records include only email addresses directly exposed in public page data.
Can one run return channels and videos together?
No. Select one result type per run so the Dataset has a consistent schema. Run separate Tasks when you need multiple types.
Support and responsible use
For unexpected data, open the Actor's Issues tab and include the run ID, input, affected keyword, result URL, and expected field. Do not post API tokens or private data.
Use the Actor only for lawful processing of publicly accessible information. You are responsible for complying with applicable laws, privacy requirements, YouTube's terms, and rules governing use of contact information.