YouTube Shorts Scraper - Views & Channel Data
Pricing
from $1.00 / 1,000 videos
YouTube Shorts Scraper - Views & Channel Data
Collect public YouTube Shorts from channel links and search words. Export titles, view counts, thumbnails, and available channel details. Pay per delivered row plus a start fee.
Pricing
from $1.00 / 1,000 videos
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
18
Total users
3
Monthly active users
a day ago
Last modified
Categories
Security
Limited permissionsShare
YouTube Shorts Scraper
Extract public YouTube Shorts metadata from channel links and search words as rows you can export and compare.
- Video titles, Shorts links, thumbnail links, and view counts.
- Channel names and identifiers when available, especially for channel inputs.
- One row per Short, with a collection timestamp and input country and language.
- Channel inputs and search inputs together in one run.
- $1.00 per 1,000 rows on the Free plan, plus a small start fee.
What does YouTube Shorts Scraper do?
YouTube Shorts Scraper collects metadata for Shorts shown on YouTube channel pages and in search results. Use it to compare titles, review visible engagement, or build a spreadsheet of clips for content research. It returns metadata and links, not video files.
- Channel collection: fill
channelUrlswith channel links, handles, or channel IDs. - Keyword search: fill
searchQuerieswith the topics you want YouTube to search. - Combined collection: fill both lists; no separate mode selector is needed.
- One row type:
rowTypeisshort. There are no optional comment or transcript rows.
gl selects the YouTube country setting and hl selects its interface language. These settings do not guarantee that every result comes from that country or uses that language. Search words are used as supplied, not automatically translated.
What data can you extract from YouTube Shorts?
Each row describes one Short. Field availability depends on what YouTube shows; search rows often lack channel details.
| Field | Description | Example |
|---|---|---|
rowType | Row category. | short |
id | Row identifier, equal to the video ID. | AbCdEf12345 |
videoId | YouTube video identifier. | AbCdEf12345 |
title | Title from YouTube or its accessibility label; empty when unavailable. | Quick pasta tips |
url | Direct link to the Short. | https://www.youtube.com/shorts/AbCdEf12345 |
viewCount | Numeric value parsed from the visible label; null when the label is missing or unparseable. | 12000 |
viewCountText | View label supplied by YouTube. | 12K views |
likeCount | Likes when a real source exposes them; null on all current surfaces. | null |
thumbnailUrl | Thumbnail link; may be constructed from the video ID. | https://i.ytimg.com/vi/AbCdEf12345/oar2.jpg |
accessibilityText | Available accessibility label. | Quick pasta tips, 12K views |
channelName | Channel name when available. | Example Channel |
channelId | Channel identifier when available. | UC1234567890123456789012 |
channelUrl | Channel link when available. | https://www.youtube.com/channel/UC1234567890123456789012 |
source | channel_shorts or search. | channel_shorts |
scrapedAt | Collection time in UTC, not publication time. | 2026-10-24T08:00:00Z |
gl | Country setting used for the input. | US |
hl | Interface language used for the input. | en |
Keep viewCountText alongside viewCount: a rounded label is not an exact audience measurement. Neither field represents unique viewers.
How to scrape YouTube Shorts
- Open YouTube Shorts Scraper in Apify Console.
- Fill Channel URLs, Search queries, or both. Remove sample search words if you only want channels.
- Set Max results per input to
3or5for a small first run. - Click Start and wait for completion.
- Open the dataset and download it, or read the rows through the API.
An empty input, including {}, starts an example search for cooking tips with at most 3 rows. This is a real collection run with normal event charges, not a free preview. Filling either target list selects the appropriate collection automatically; both lists can remain populated.
Channel collection
Use a link such as https://www.youtube.com/@YouTube, a bare @YouTube handle, or a channel ID. Channel paths /@name, /channel/UC..., /c/name, and /user/name are accepted. Links from YouTube subdomains and links ending in /shorts or /videos are normalized to the channel. A watch-page link is not a channel input.
Keyword search
Enter one topic per list entry, such as cooking tips. The Actor collects Shorts that YouTube returns for that topic. Search is not a complete catalog of every matching upload, and the requested row count is an upper limit rather than a guaranteed result count.
What to fill in
| Field | What to enter | Default |
|---|---|---|
channelUrls | List of channel links, handles, or channel IDs. | Empty |
searchQueries | List of search words; use either target list or both. | No target default; form sample is cooking tips |
maxResults | Maximum rows for each channel or query, from 1 to 5000. | 70; form sample is 3 |
gl | Two-letter country code, such as US, DE, or JP. | US |
hl | Interface language code, such as en, de, or ja. | en |
useProxyForSearch | Optional retry setting for failed collection requests. Usually leave off. | false |
concurrency | Requested parallel input count, from 1 to 16; it does not guarantee faster collection. | 8 |
Channel example:
{"channelUrls": ["https://www.youtube.com/@YouTube"],"maxResults": 3}
Search example:
{"searchQueries": ["cooking tips"],"maxResults": 3}
Combined example:
{"channelUrls": ["https://www.youtube.com/@YouTube"],"searchQueries": ["cooking tips"],"maxResults": 3}
The combined example requests up to 6 rows before run-wide limits. maxItems and limit are aliases for maxResults; keywords is accepted for searchQueries. Prefer canonical names in saved inputs.
Unknown fields do not fail input resolution: close misspellings can be corrected, and other unknown fields are ignored with a note. Each normal Actor run writes INPUT_REPORT to its default key-value store, showing normalization, ignored fields, inferred collection, and validation errors.
Invalid channel targets stop the run before any rows are charged. The message starts with INVALID_INPUT:, names the field, and explains the correction, for example INVALID_INPUT: channelUrls — use YouTube channel links such as youtube.com/@name or youtube.com/channel/UC..., or a bare @name. Not every invalid setting fails: some unsupported values are ignored or normalized. The start fee is separate from row charges.
Output example
Illustrative channel row; these values are examples, not a live measurement:
{"rowType": "short","id": "AbCdEf12345","videoId": "AbCdEf12345","title": "Quick pasta tips","url": "https://www.youtube.com/shorts/AbCdEf12345","viewCount": 12000,"viewCountText": "12K views","likeCount": null,"thumbnailUrl": "https://i.ytimg.com/vi/AbCdEf12345/oar2.jpg","accessibilityText": "Quick pasta tips, 12K views","channelName": "Example Channel","channelId": "UC1234567890123456789012","channelUrl": "https://www.youtube.com/channel/UC1234567890123456789012","source": "channel_shorts","scrapedAt": "2026-10-24T08:00:00Z","gl": "US","hl": "en"}
Export the dataset as JSON, CSV, Excel, XML, RSS, or an HTML table. The output also links to RUN_SUMMARY, the normalized INPUT_ECHO, and ERROR_SUMMARY when a failure is recorded. RUN_SUMMARY includes the requested inputs, collected count, and completion time.
Why use this YouTube Shorts scraper?
- Pay for delivered rows: row charges apply to rows written to the dataset, plus the start fee.
- Keep delivered data: rows already written remain available after a stop or timeout. Rows still being collected are not guaranteed to reach the dataset.
- Check failures: invalid targets identify the field to correct; recorded collection failures have an
ERROR_SUMMARY. - Compare inputs: collect channel and keyword results together, then sort the exported rows by
viewCount. - Understand missing values: unavailable likes remain
null, channel details can be empty, and missing view counts can be zero. - No proxy setup: you do not need to set up proxies. No YouTube login or YouTube API key is required.
How much does it cost to scrape YouTube Shorts?
The Actor uses pay-per-event pricing. The start event costs $0.005 per GB of memory, with a minimum of one event. At the default 1024 MB, the start charge is $0.005. Each delivered Short row costs $0.001.
| Apify plan | Start at 1024 MB | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.001 | $1.00 |
| Starter | $0.005 | $0.001 | $1.00 |
| Scale | $0.005 | $0.001 | $1.00 |
| Business | $0.005 | $0.001 | $1.00 |
Platform usage is included in these prices. There is no additional charge for an optional row type because this Actor only delivers Short rows.
maxResultsapplies separately to each input and defaults to70. Larger requests are collected in parts; YouTube may supply fewer rows than requested.- Free Apify plan runs are capped at 200 rows for the whole run, with 10 runs of this Actor allowed for free-plan users.
- The whole run stops at the Maximum cost per run you set in the run options, named
maxTotalChargeUsdin the API. It is not an Actor input field.
Example: three queries returning five rows each produce 15 rows. At 1024 MB, the cost is 15 × $0.001 + $0.005 = $0.020 on the Free plan. If fewer rows are delivered, the row charge is lower; the start fee still applies.
What happens when the run timeout is too short
When collection needs more time and automatic resumption is accepted, the run can pause rather than fail. Its status message reads: "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." The run temporarily appears as ABORTED.
When results are ready, the same run starts again, reports "Resumed: delivering N rows.", writes to the same dataset, and finishes as SUCCEEDED if delivery succeeds. The delivery step skips rows already present so they are not delivered or charged twice. You do not need to start a replacement run.
Automatic resumption is bounded, not an unlimited extension. Keep the default timeout of 1800 seconds to reduce early pauses. This behavior is not a guarantee that every timeout or manually aborted run will resume; check the status message.
The synchronous API endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds and can return an empty dataset while the run is paused. For larger requests, start a run asynchronously and read the dataset after SUCCEEDED, or use a webhook for the succeeded event.
Use with AI agents and the API
Apify MCP server
Add this remote MCP server in Claude, ChatGPT, Cursor, VS Code, or another compatible client:
https://mcp.apify.com?tools=lentic_clockss/youtube-shorts-scraper
Sign in with Apify through OAuth when prompted, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns the run and dataset IDs; the agent reads rows with get-dataset-items.
Clients without remote MCP support can use npx @apify/actors-mcp-server --tools lentic_clockss/youtube-shorts-scraper with APIFY_TOKEN configured. Example prompt: "Collect three YouTube Shorts for cooking tips and show their titles, view counts, and links."
Apify API
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/youtube-shorts-scraper").call(run_input={"searchQueries": ["cooking tips"], "maxResults": 3})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row)
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/youtube-shorts-scraper').call({searchQueries: ['cooking tips'], maxResults: 3,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For asynchronous HTTP calls, send the input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~youtube-shorts-scraper/runs with an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Standby HTTP endpoint
Endpoint: https://lentic-clockss--youtube-shorts-scraper.apify.actor.
The current HTTP endpoint exposes these read-only routes, also listed in openapi.json:
| Route | Purpose |
|---|---|
GET / | Service information. |
GET /health | Health status. |
GET /input-example | Example input. |
GET /openapi.json | API document. |
The API document also lists GET /channel?url=...&maxResults=3, POST /channel, GET /search?query=...&maxResults=3, POST /search, and POST /run. These collection routes are not enabled in the current implementation. Use the Apify run API above to collect rows; do not treat those listed routes as working alternatives.
Integrations
Use the Actor's Integrations tab to connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable, or your own webhook. Apify Schedules can start recurring runs. Save timestamps alongside counts when comparing snapshots over time.
FAQ
Is it legal to scrape YouTube Shorts?
This Actor collects public data. You are responsible for complying with applicable terms and data protection law. Public availability does not remove those obligations; processing personal data requires a lawful basis.
Why did my run end as ABORTED?
A short timeout can trigger a temporary pause for automatic resumption. Look for the queued status message described above. A manual abort or a different error is not the same condition and does not promise automatic recovery.
How many results can I get?
Request up to 5000 rows per input with maxResults. Actual delivery depends on available Shorts, the run cost limit, and free-plan limits. Two queries with maxResults: 3 request up to six rows, not three total.
Why are some fields empty?
YouTube does not expose every field on every result. Search rows often lack channel information. likeCount is null unless a source exposes it; viewCount is null when its label is missing or cannot be parsed — zero only means an explicit "No views" label.
Do I need a YouTube API key or account?
No YouTube API key or login is required. You need an Apify account to run the Actor and an Apify token for authenticated API calls.
Does this include view count history?
No. Each row is a snapshot. Schedule separate runs and compare videoId, scrapedAt, and counts yourself. scrapedAt is not the upload date.
Can I search and collect channels in the same run?
Yes. Fill both target lists. Keep videoId when merging exports so you can identify the same Short across inputs and runs. Do not assume the result order is a global ranking by views.
Does it download videos or extract transcripts?
No. It returns metadata, thumbnail links, and Shorts links. Video downloads, comments, transcripts, and long-form video collection are outside this Actor's scope.
Limitations
- Search results and channel pages do not guarantee complete historical coverage.
- Private, removed, or sign-in-only Shorts are not supported.
- Country and interface-language settings are not strict content filters.
- Likes and channel metadata are not available for every row; thumbnail dimensions are not guaranteed.
- View labels can be rounded, and missing or unparseable counts can appear as zero.
- No date-window filter, publication timestamp, historical engagement series, or guaranteed view-based ordering is provided.
- The HTTP endpoint currently provides discovery routes, not direct collection.
Related scrapers
More social media and video scrapers from the same publisher:
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report a problem or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.