YouTube Shorts Scraper - Exact Views, Dates & Channels avatar

YouTube Shorts Scraper - Exact Views, Dates & Channels

Pricing

from $2.92 / 1,000 short returneds

Go to Apify Store
YouTube Shorts Scraper - Exact Views, Dates & Channels

YouTube Shorts Scraper - Exact Views, Dates & Channels

For influencer vetting, sponsorship reporting and trend research: Shorts from any YouTube channel or search term with id, URL, title, channel, thumbnail and the exact view count. The number printed under a Short is truncated, not rounded - one shown as 10M really had 10,962,867 on 2026-09-08.

Pricing

from $2.92 / 1,000 short returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

YouTube Shorts Scraper - views, dates and channels

For creator and competitor analysis, trend research and tracking Shorts performance: Shorts from any YouTube channel or search term — id, URL, title, channel, thumbnail and view count.

The part that makes this one different is uncomfortable to say out loud: the number YouTube prints under a Short is truncated, not rounded, so it is always too low. 10M views is not 10,000,000 and it is not "about 10 million" either. Measured on 8 September 2026 on one channel's eight most recent Shorts:

What the Shorts list saysWhat it really wasMissing
10M views10,962,867962,867
24M views24,936,936936,936
41M views41,717,006717,006
47M views47,213,481213,481
156M views156,150,868150,868

In 8 of 8 cases the listed number was the lower one, and the first row of that table is in test/fixtures/ with the test suite asserting the 962,867 difference, so you can recount it yourself.

So you get all four values and a flag: viewCountText (10M views), viewCountApprox (10000000), viewCount and viewCountIsExact. Turn on Exact numbers and it fetches the real count for one extra request per Short — measured from Apify on 8 September 2026, 10 of 10 came back exact, and 10M views was 10,969,868.

About the publish date, measured rather than promised: the Shorts list carries no date at all. With exact numbers on, YouTube gives this Actor either a full timestamp (publishedAt, 2026-08-23T09:00:04-07:00) or, when it will not serve the video endpoint to the address the run comes from, only the day (publishedDateText, Aug 23, 2026). Runs from Apify's own servers currently get the day; turning the proxy on gets the timestamp. Rows carry whichever one is true, and never a made-up time.

No API key, no login. Export as JSON, CSV or Excel.


What every row carries

  • The Short: shortId, url, title, thumbnailUrl, accessibilityText
  • The numbers: viewCountText / viewCountApprox / viewCount / viewCountIsExact
  • Only with Exact numbers: publishedAt (a full timestamp) or publishedDateText (the day, when that is all YouTube will give this run), and lengthSeconds when it comes with them
  • The channel: channelName, channelId, channelHandle, channelUrl
  • Where it came from: channelInput or query, plus page and rank

The four things this Actor refuses to fake

1. A truncated number is never presented as exact. Every row says which it is, and a free row in each run says how many rows are still approximate and what that costs you.

2. It does not invent a publish date. The Shorts list carries no date at all - not even "3 days ago". Rows carry publishedAt: null until you ask for exact numbers, rather than a guess.

3. A channel with no Shorts is not a channel that could not be read. Those are two different free rows (no-shorts and channel-not-found), because "this creator posts no Shorts" and "we could not reach YouTube" mean opposite things to whoever reads your spreadsheet.

4. It follows the right continuation. A channel's Shorts tab hands back three "next page" tokens and only one of them is the real one - taking the last, which is what the neighbouring endpoint needs, returns an empty second page. This Actor tries the candidates and keeps the one that actually produces Shorts it has not seen, and never returns the same Short twice.


Example output (one row, shortened)

{
"channelInput": "@MrBeast",
"shortId": "5mU6SRS2Bxo",
"url": "https://www.youtube.com/shorts/5mU6SRS2Bxo",
"title": "World’s Largest Tennis Match",
"viewCountText": "10M views",
"viewCountApprox": 10000000,
"viewCount": 10962867,
"viewCountIsExact": true,
"publishedAt": "2026-08-23T09:00:04-07:00",
"publishedDateText": "Aug 23, 2026",
"lengthSeconds": 36,
"channelName": "MrBeast",
"channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"channelHandle": "@MrBeast",
"channelUrl": "https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA",
"page": 1,
"rank": 1
}

Without Exact numbers the same row carries viewCount: 10000000, viewCountIsExact: false, publishedAt: null and lengthSeconds: null - and costs one request per 48 Shorts instead of one request each.


Input

  • channels - handles such as @MrBeast, channel URLs, or ids starting with UC. Only when channels, searchQueries and shortUrls are all empty does the run use the example channel @MrBeast, and a free example-input row says so. Nothing is ever added to what you asked for. If the form's example @MrBeast is still in channels when you give your own search terms or Shorts, it is skipped (not fetched, not charged) and a free example-input-skipped row says so.
  • searchQueries - words or hashtags. YouTube search mixes Shorts with ordinary videos; only the Shorts are kept, and a free row says so when a search returned results but no Shorts.
  • shortUrls - specific Shorts by URL or id. These always come back with exact numbers.
  • maxShortsPerSource - how many Shorts per channel or search term (a channel page holds about 48).
  • maxRecords - the most rows this run may return and charge for. When the cap bites, rows are taken evenly from every channel and search term, so none of them disappears completely.
  • exactNumbers - fetch the real view count, and the publish date at whatever precision YouTube gives this run, at one request per Short. If YouTube refuses that request entirely, one free row says so and the rows keep the truncated count, still marked as not exact.
  • minViews - without exact numbers this compares against the truncated count, which is lower than the real one, so nothing that really passes your threshold is dropped.
  • maxLengthSeconds, keywords, keywordMatch, excludeKeywords - Shorts whose length is unknown are kept, not thrown away.
  • monitoringMode, resetMonitoringState - remembers the Shorts already returned to you and returns only new ones. Run it on a schedule to watch a channel and pay only for what is new.
  • maxRequests - hard ceiling on requests to YouTube, counting channel lookups, list pages and the extra request per Short that exact numbers need.
  • useProxy - off by default. Measured 8 September 2026: a plain connection returned HTTP 200.

Rows you are never charged for

Every row that is not a Short carries a reason and the words This row is not charged:

statuswhen
no-shortsthe channel was found and its Shorts tab was empty
channel-not-foundYouTube says that handle or id does not exist
invalid-inputsomething you passed is not a YouTube channel or Short
no-resultsa search returned results but none of them was a Short
approximate-viewshow many rows still carry the truncated count, and what to do about it
unreadablethe answer could not be read
bot-checkYouTube answered with a bot check
no-matchShorts were read but none matched your filters
request-limit-reachedthe run stopped at your maxRequests
maximum-reachedrows were left out by your maxRecords
exact-numbers-unavailableexact numbers were asked for but YouTube refused them to this run
no-new-since-last-runmonitoring mode: everything read had already been returned to you
budget-reachedthe run hit the maximum total charge set for it

How the numbers in this README can be checked

The responses are in test/fixtures/, taken from production on 8 September 2026:

npm test # checks against those real responses, including the 962,867 difference above
npm run mutate # deliberate breakages; every one of them must turn the checks red