YouTube Shorts Scraper - Channels & Hashtags
Pricing
from $3.00 / 1,000 youtube short results
YouTube Shorts Scraper - Channels & Hashtags
Extract YouTube Shorts from channels, hashtags, or video URLs. Collect titles, views, likes, publish dates, and available creator data. Paginate up to 1,000 Shorts per source and export JSON, CSV, or Excel. No YouTube API key required. $3 per 1,000 video results plus Apify usage.
Pricing
from $3.00 / 1,000 youtube short results
Rating
1.8
(3)
Developer
Newbs
Maintained by CommunityActor stats
14
Bookmarked
438
Total users
12
Monthly active users
4 days ago
Last modified
Categories
Share
YouTube Shorts Scraper
Extract YouTube Shorts from channels, hashtags, and direct video URLs into a dataset you can export as JSON, CSV, or Excel. Collect titles, video links, thumbnails, views, and available engagement and creator metadata without a YouTube API key.
Use it to monitor competitor channels, research short-form content, discover creators, or feed a dashboard. Request up to 1,000 Shorts per channel or hashtag with automatic pagination. YouTube availability and your run limits determine how many results can be returned.
Price: $0.003 per video result ($3 per 1,000), plus Apify platform usage. Diagnostic rows are free.
Try it in three steps
- Enter
@youtube, a channel URL, or#fashionin YouTube sources. - Choose Results per source. Start with the prefilled one-result sample; increase it for your real job.
- Click Start, inspect the Overview output, and export your results.
Video enrichment is enabled by default. For a faster collection of titles, links, thumbnails, and listing view counts, turn off Enrich video and channel details.
Use one source type per run. For compatibility with existing integrations, direct video URLs take priority over hashtags, and hashtags take priority over channels when you mix types.
Choose the right settings
| Your goal | Settings | What to expect |
|---|---|---|
| Collect many Shorts quickly | needVideoDetails: false | Titles, URLs, thumbnails, and available listing views. Automatic pagination. |
| Analyze video performance | needVideoDetails: true (default) | Available views, likes, publish dates, descriptions, duration, and author data. |
| Research creators | Add includeChannelDetails: true | Available subscribers, channel video count, profile image, banner, description, and social links. Profile requests are cached per creator. |
| Recover missing metadata | Add fallbackToBrowser: true | Slower browser recovery. Fields hidden by YouTube can still be missing. |
Missing values remain null or N/A. Comment counts and profile fields are not guaranteed. This Actor returns metadata; it does not download video files, transcripts, or individual comments.
Example inputs
Collect 100 Shorts from a channel
{"channel": ["@youtube"],"numberOfResults": 100,"needVideoDetails": false,"maxRunSeconds": 240}
To compare several channels, put their handles in the same channel array. The result limit applies to each source.
Research Shorts by hashtag
{"hashtag": ["fashion", "style"],"numberOfResults": 20,"needVideoDetails": true,"includeChannelDetails": false,"maxRunSeconds": 240}
Hashtag results follow YouTube's available listing order. They are not a complete historical archive or a guaranteed ranking of the most viral videos.
Enrich specific videos
{"videoUrls": ["https://www.youtube.com/shorts/SWQHAPIY5ag"],"needVideoDetails": true,"includeChannelDetails": true}
Direct inputs also accept watch, embed, live, and youtu.be URLs or bare video IDs. These URLs skip discovery; the Actor does not certify that an arbitrary direct video is a Short.
Output and exports
Each video has resultType: "video". The following shortened example shows the structure; counts change over time:
{"resultType": "video","id": "7yG3lTRoqxc","videoUrl": "https://www.youtube.com/shorts/7yG3lTRoqxc","author": "@youtube","channelId": "UCBR8-60-B28hp2BmDPdntcQ","source": "@youtube","sourceType": "channel","position": 1,"detailStatus": "not_requested"}
| Field group | Fields |
|---|---|
| Video | id, title, videoUrl, coverImage, description, durationSeconds, durationText |
| Performance | viewCount, viewCountText, likeCount, commentCount, publishedAt |
| Creator | author, channelId, channelUrl, subscriberCount, amountOfVideos, profilePicture, profileBanner, channelInfo |
| Source and quality | source, sourceType, hashtag, position, resultType, detailStatus, dataQualityScore, missingFields |
Numeric counts are normalized where possible; abbreviated listing views such as 5.3K are approximate. viewCountText preserves a readable representation. Existing output aliases remain available for integrations.
Open Output → Overview to inspect the results, or export the dataset to JSON, CSV, Excel, and other Apify-supported formats. Filter to resultType === "video" in automations: empty or invalid sources can produce free source_status diagnostic rows.
The Run summary output links to OUTPUT, which includes saved video counts, missing-field coverage, runtime information, summary.timeToFirstVideoSeconds, and summary.collectionStats. Time to first video measures the delay from application input loading to the first saved video; Apify startup adds extra time. Collection statistics explain whether each HTTP source reached its requested limit, exhausted its listing, hit a runtime limit, or encountered a pagination problem.
Use the YouTube Shorts Scraper API
Run the Actor from JavaScript with the official Apify client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('newbs/youtube-shorts').call({channel: ['@youtube'],numberOfResults: 100,needVideoDetails: false,}, { maxTotalChargeUsd: 0.50, timeout: 300 });const { items } = await client.dataset(run.defaultDatasetId).listItems();const videos = items.filter(item => item.resultType === 'video');console.log(videos);
See the API tab for Python, JavaScript, and HTTP examples. For recurring monitoring, save an Apify task and schedule it. Every run is a fresh scrape; deduplicate by id in your destination when tracking changes over time.
Pricing and cost control
| Saved video results | Result fee |
|---|---|
| 10 | $0.03 |
| 100 | $0.30 |
| 1,000 | $3.00 |
Apify compute, proxy traffic, data transfer, and storage usage are additional. Only video rows saved to the dataset incur the result fee; source_status diagnostics are free.
The maximum run charge is a spending limit, not an upfront charge. The Actor limits collection to the remaining result allowance and saves completed rows immediately or in short micro-batches. It stops additional work when the result budget is exhausted. Set your maximum charge and timeout before a large run.
Input reference
| Field | Default | Description |
|---|---|---|
channel | — | Channels/handles/URLs, hashtags, or direct videos. Up to 20 entries in the input form. Prefer one source type per run. |
hashtag | — | Dedicated hashtag list, with or without #, or full hashtag URLs. |
videoUrls | — | Dedicated direct-video list; up to 50 entries in the input form. |
numberOfResults | 1 | Maximum per channel/hashtag, from 1 to 1,000. Direct URL runs ignore it. |
needVideoDetails | true | Request available video metadata over HTTP. |
includeChannelDetails | false | Request additional creator profile metadata. |
fallbackToBrowser | false | Enable slower browser recovery for missing listings/details. |
maxSourceConcurrency | 2 | Concurrent HTTP sources; maximum 10. |
maxVideoDetailConcurrency | 10 | HTTP video/creator requests in parallel per source; maximum 20. Lower this if YouTube throttles a large job. |
maxConcurrency | 1 | Concurrent browser fallback pages; maximum 5. |
maxRunSeconds | 0 | Optional graceful runtime cap; 0 follows the Apify timeout. The sample is prefilled with 240 seconds. |
proxyConfiguration | Apify Proxy on platform | Apify or custom proxy configuration. |
proxyMode | auto | Direct HTTP first, then proxy recovery. always uses the configured proxy; never disables it. |
videoDetailProxyStrategy | auto | Set proxyFirst if direct detail requests are repeatedly blocked. |
directRetryAttempts | 1 | Extra direct detail attempts before other recovery routes; maximum 3. |
Performance and reliability
Results appear in the dataset as they become ready. Completed videos do not wait for a slower member of a fixed batch. Rows can therefore arrive in completion order; use source and position to recover the original listing order. Channel listing-only runs stream results while subsequent pages are still being collected. Hashtag creator lookups share the configured HTTP concurrency, and creator profile requests remain cached within the run.
The HTTP collector follows YouTube continuation pages and removes duplicate video IDs within each source. Small channel samples can use RSS; bulk collection reads the Shorts listing so it is not limited to the feed's recent-upload window. Page failures preserve results already collected. Repeated tokens and duplicate-only pages stop pagination to avoid wasted requests.
For large jobs, start with listing-only mode, keep source concurrency modest, and raise the Apify timeout as needed. Video and profile enrichment require additional requests. The 1,000-result setting is an upper limit, not a guarantee that a source exposes that many public Shorts.
Troubleshooting and FAQ
Why did I receive fewer results than requested?
Check Run summary → summary.collectionStats and summary.stopReason. A source may have fewer public Shorts, YouTube may stop pagination, a request may fail, or your runtime/result budget may be exhausted. Increase the relevant limit or retry a blocked source. Collected results are preserved.
Why did I receive a diagnostic row?
Rows with resultType: "source_status" explain invalid inputs, unavailable sources, or collection failures. They are free and are not video results. Check scrapingStatus and the row's description.
Can I mix channels and hashtags?
Use separate runs for different source types. Within one run, direct videos take priority, then hashtags, then channels. You can batch multiple sources of the same type.
Are likes, comments, and subscriber counts always available?
No. Availability varies by video, channel, and YouTube response. Enable the relevant enrichment settings, inspect missingFields, and use browser fallback when the extra runtime is worthwhile. A missing field does not mean its value is zero.
Is a YouTube API key or login required?
No YouTube API key or YouTube login is required. This is an independent scraper of public metadata, not an official YouTube API.
How do I report a problem?
Open an issue on the Actor page with your input, a run link, expected result count, and an example URL. Share the affected run so the developer can inspect it; other users' private run data is not visible by default.