Shorts are where many channels now test ideas, so tracking them tells you what is working: which hashtags are growing, which creators post every day, which search terms bring short videos up. YouTube's official Data API has no Shorts-only feed or hashtag endpoint, and a single search call costs 100 of the 10,000 daily quota units. This guide shows how to collect Shorts from three sources — a channel, a hashtag or a search — as one clean JSON row per Short, for $1 per 1,000 shorts.
What you get
One row per Short. Fields marked "with details" appear only when Include details is on, or, for dates, when Published after is set.
| Field | Meaning |
|---|---|
videoId, url |
The Short's 11-character ID and its youtube.com/shorts/… link |
title, thumbnail |
Title as shown on the card, and the vertical thumbnail URL |
viewCount, viewCountText |
Views as a number and as YouTube displays them ("650K views") |
channelName, channelId, channelHandle |
The creator and their @handle. Always filled for channel rows; for hashtag and search rows, with details or a date filter |
publishDate |
Exact publish time in ISO 8601 UTC (with details or a date filter) |
hashtags |
Words after # in the title, plus the description with details |
source, sourceType |
Which channel, hashtag or search query produced the row, and its type |
description, descriptionStatus, lengthSeconds, keywords |
With details: the description, its length and tags. descriptionStatus is present, empty (YouTube has none) or unavailable (YouTube did not answer) |
scrapedAt |
When the row was collected |
Step-by-step
- Add channels in any of three forms: a handle (
@MrBeast), a channel URL, or aUC…channel ID. - Add hashtags without the
#symbol (cooking), and search queries such asiphone tips, which return Shorts only. - Set Max Shorts per source (default 30, up to 500). The limit applies to each channel, hashtag or query separately.
- Optional: turn on Include details for descriptions, tags, length, exact views and the exact publish date. Each Short then needs extra requests, so runs are slower.
- Optional: set Published after (ISO format, such as
2026-10-01) to keep only newer Shorts. Older ones are dropped before they are charged. - Keep Max concurrency at 2 to 4 for large lists to avoid HTTP 429 rate limits.
- Click Start and export as JSON, CSV, Excel or HTML, or read the rows through the API.
Run YouTube Shorts Scraper on Apify →
Call it from code
import json
import os
from apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("webdatatools/youtube-shorts-scraper").call(run_input=json.loads("{\n "channels": [\n "@MrBeast"\n ],\n "hashtags": [],\n "searchQueries": []\n}"))
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('webdatatools/youtube-shorts-scraper').call({
"channels": [
"@MrBeast"
],
"hashtags": [],
"searchQueries": []
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
curl -X POST "https://api.apify.com/v2/acts/webdatatools~youtube-shorts-scraper/run-sync-get-dataset-items"
-H "Authorization: Bearer $APIFY_TOKEN"
-H "Content-Type: application/json"
-d '{"channels":["@MrBeast"],"hashtags":[],"searchQueries":[]}'Use it in n8n or Make
In n8n, add an HTTP Request node: method POST, URL https://api.apify.com/v2/acts/webdatatools~youtube-shorts-scraper/run-sync-get-dataset-items, a header Authorization with the value Bearer YOUR_APIFY_TOKEN, and a JSON body. The response is an array with one item per Short. In Make, use HTTP > Make a request with the same method, URL and header, body type Raw with JSON content, and Parse response on, then iterate over the array.
Synchronous calls wait for the run to finish. For a long list of sources, start the run asynchronously and read the dataset when it completes.
Body example:
{
"channels": ["@MrBeast"],
"hashtags": ["cooking"],
"searchQueries": ["iphone tips"],
"maxShortsPerSource": 20,
"publishedAfter": "2026-10-01",
"includeDetails": false
}
Download the n8n workflow (JSON) — a manual trigger, the HTTP Request node above and a placeholder for your token.
Recipes
Track a channel's new Shorts every day
Schedule a run with the channel in Channels and Published after set to yesterday's date. Each run returns only the Shorts published since the last check, and the rows are easy to append to a sheet or database.
Find the hashtags that are growing
Run a list of hashtags with Include details on, so every row has an exact publishDate and viewCount. Group the rows by hashtag and compare the views per Short across the dates you collected.
Compare creators in one niche
Put several channels in one run and group the rows by source. Compare the number of Shorts, the median viewCount and how often each channel posted in the window you chose.
How much does it cost?
| Apify plan | Per short | Per 1,000 |
|---|---|---|
| Free plan | $0.001 | $1 |
| Starter | $0.0008 | $0.80 |
| Scale | $0.0007 | $0.70 |
| Business | $0.0006 | $0.60 |
| Enterprise | $0.0006 | $0.60 |
| Enterprise+ | $0.0006 | $0.60 |
Primary event rates from a catalog snapshot; this is not the total price of a run. Additional charge events and Actor Start fees may apply; start fees can scale with memory. Check the Actor's Pricing tab on Apify for all events, conditions and current plan-specific rates, and set a maximum run budget before starting.
You pay per Short that lands in your dataset. A channel, hashtag or query that fails is recorded in the run log and costs nothing. Shorts removed by Published after are not charged. Set Maximum cost per run to cap a run.
Limits
- Public Shorts only. There are no like or comment counts.
- View counts on cards are rounded ("650K") unless Include details is on.
- Exact publish dates need Include details or Published after, and YouTube omits them for some Shorts. Those Shorts are kept when a date filter is active.
- A hashtag or search feed ends when YouTube stops returning new Shorts, so some channels and tags return fewer rows than you asked for.
FAQ
Is scraping YouTube Shorts legal?
The Actor reads only public pages and does not log in. You are responsible for how you use the data, including YouTube's terms, privacy law and the copyright of the videos.
Why is channelName empty on hashtag or search rows?
Those feeds do not show the creator on the card. Turn on Include details to fill it from the video's own page data.
Why is description empty on some Shorts?
Many Shorts have no description. descriptionStatus set to empty means YouTube returned none. unavailable means YouTube did not answer for that Short, so the text is unknown.
Does Published after cost more?
There is no extra Apify charge. The filter adds one YouTube request per Short to read its date. Filtered Shorts are not returned and not charged. The limit applies to the candidates each source fetches (up to Max Shorts per source), so a filter can return fewer Shorts than you asked for.
Why do I get fewer Shorts than I asked for?
A hashtag or search feed ends when YouTube stops returning new Shorts, and some channels have only a few.
Can I get the same data from the YouTube Data API?
Not as a Shorts feed. The Data API has no Shorts-only endpoint, and a single search call costs 100 of your 10,000 daily quota units. This Actor reads the public pages used by the YouTube app, with no key and no quota.