YouTube Shorts Scraper - Views, Likes & Channel Data
Pricing
from $1.20 / 1,000 short scrapes
YouTube Shorts Scraper - Views, Likes & Channel Data
Scrape every Short from any YouTube channel: title, view count, thumbnail, duration, publish date and description, with exact view and like counts on request. Takes handles, channel ids or URLs. No login, no API key, no quota.
Pricing
from $1.20 / 1,000 short scrapes
Rating
0.0
(0)
Developer
Eimantas V
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
YouTube Shorts Scraper
Scrape every Short from any YouTube channel — by handle, channel id or URL — with view counts, thumbnails, titles and publish order. No Google account, no API key, and none of the 10,000-unit daily quota the official YouTube Data API imposes.
One row per Short, plus a summary row per channel that tells you exactly what was and was not collected.
What you get on every Short
| Identity | video id, canonical youtube.com/shorts/… link, title |
| Reach | view count as a number and as YouTube words it, plus a flag saying which kind you got |
| Image | thumbnail at full 1080×1920, not a resized preview |
| Order | rank — its position in the channel's Shorts tab, newest first |
| Channel | channel id, display name and URL on every row, so nothing needs joining back together |
Turn on exact statistics and each Short also carries its exact view count, duration in seconds, UTC publish date and full description. Turn on like counts as well and you get the exact number of likes.
The rounded-number problem, and what this does about it
A channel's Shorts tab does not contain view counts. It contains prose about view counts — "12M views" — and 12M is anything from 12,000,000 to 12,999,999. That is a range a million wide, presented as a fact.
Most exports quietly turn "12M views" into 12000000 and hand it to you as a number. It looks exact. It is a rounding artefact, and it will happily tell you two Shorts performed identically when one has 400,000 more views than the other.
This Actor does three things instead:
- Keeps
viewCountText— the original"12M views"— so the source figure is never lost. - Puts the expanded number in
viewCount, which is genuinely useful for sorting and thresholds. - Marks every row with
viewCountIsExact, so you always know which you are holding.
Switch on exact view counts and viewCount is replaced with the real figure and the flag flips to true. Measured on a MrBeast Short listed as "12M views": the exact count was 12,574,516. The rounding hid over half a million views.
The exact figure is read from whichever of two sources answers, so a bot check on one of them costs you the duration and the publish date but never the view count itself.
Like counts work the same way, except there is no rounded version to fall back on — YouTube publishes no like count anywhere on a Shorts listing, so this is the only way to get one at all.
Point it at a channel however you already write it
@MrBeastor justMrBeastUCX6OQ3DkcsbYNE6H8uQQuVAhttps://www.youtube.com/@MrBeasthttps://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA- the older
/c/Nameand/user/Nameforms
A channel id costs nothing to resolve; a handle costs one extra request. Paste a /watch or /shorts link — a single video rather than a channel — and you get a clear bad-input row saying so, rather than a silent guess at which channel you meant.
Every run is deduplicated across the whole run, so listing the same channel twice under two different names collects it once and bills it once.
An empty result always tells you why
A channel that has never posted a Short returns a perfectly successful, completely empty response — identical in shape to what a broken scraper produces. So every channel gets a summary row that says which it was:
zeroReason | What it means |
|---|---|
channel-has-no-shorts | The channel was read successfully and genuinely posts no Shorts |
all-shorts-filtered-out | Shorts were found; your minimum-views filter removed all of them |
charge-limit-reached | Your charge limit stopped the run before this channel |
run-short-limit-reached | The total-Shorts ceiling was reached first |
run-timeout-reached | The run stopped itself early to finish cleanly rather than be killed |
The same row carries stoppedOn, pagesFetched, shortsScanned and shortsFiltered, so a short result is never ambiguous. If a channel stopped because it ran out of page budget rather than out of Shorts, stoppedOnScanLimit says so and the log tells you which setting to raise.
A channel handle that does not exist produces an error row with errorClass: channel-not-found — never an empty result that could be mistaken for a quiet channel.
Honest about limits
- YouTube's Shorts tab is finite. It pages back a long way but not forever, and a channel with tens of thousands of Shorts will stop before you reach the end.
stoppedOntells you when that happens. - Listing view counts are rounded. Covered above — the flag is there so you always know.
- Duration, publish date and description are best-effort. YouTube applies a bot check to one of the two requests behind exact statistics, based on the IP address a run happens to be given. Exact view counts are unaffected — they are read from a second source that is not gated — but those three fields come only from the checked request and are left
nullon the Shorts it refuses. Measured on a full run: exact views on 100% of rows, the other three on roughly half. The summary row'sdetailsGatedis the count, so an empty cell always has a number explaining it, and you are never charged for statistics you did not receive. Re-running, or using a different proxy country, normally returns a different set. - The description is never approximated. The lighter source that supplies view counts also carries a description, but it truncates every URL inside it —
https://www.themo…instead of the real link. Rather than hand you a broken link that looks like a working one, the description is left empty unless the full version was retrieved. - Like counts are occasionally withheld by YouTube on individual Shorts. Those rows get
likeCount: null, and a null is never charged for. - Comments are not included. They are a different surface with a different cost, and bundling them would mean charging every customer for something most do not want.
- Sorting is YouTube's. The Shorts tab is newest-first and there is no "most viewed" ordering available on it, so
rankreflects recency. Sort byviewCountafter the fact.
Pricing
Pay per result. No monthly platform rental on top.
| Event | Price per 1,000 | What triggers it |
|---|---|---|
| Short scraped | $2.00 | One Short written to your dataset |
| Exact statistics | $1.00 | Optional — exact views, duration, publish date, description |
| Exact like count | $1.20 | Optional — one exact like count actually obtained |
Prices fall with your Apify plan, down to $1.20 / $0.60 / $0.80 per 1,000 on Gold.
A listing-only run — titles, rounded views, thumbnails, ranks — costs $2.00 per 1,000 Shorts and nothing else. The two optional events each cost one extra request per Short, which is why they are priced separately rather than folded into one headline number you would pay whether you used them or not.
What is never charged:
- Shorts removed by your minimum-views filter — they are never written, so they are never billed
- The same Short seen twice in one run
- Summary rows and error rows
- A request that failed and had to be retried
- A like count that came back empty
Getting started
- Put one or more channels in YouTube channels — handles, ids or URLs, one per line.
- Set Max Shorts per channel. YouTube returns 48 per request, so 100 is three requests and takes seconds.
- Leave the exact-statistics options off for a first run to see the shape of the data cheaply. Turn them on when you need real numbers.
- Run it. Results appear in the dataset as they are collected — the Shorts view is one row per Short, the Run report view is the per-channel summary.
Leave the channel list empty and it runs a small demo on @MrBeast, so you can see the output format before spending anything meaningful.