If you make Shorts, run social for a brand, or analyse short-form video, you will eventually want a table like this one: every Short in a niche, with its views, likes, comments, length, publish date and channel. Then you can see which formats actually work, which channels keep breaking out, and how fast things move.
Getting that table from the official YouTube Data API is harder than it sounds. The default quota is 10,000 units per day, and every search.list call costs 100 of them, so you get roughly 100 searches a day before you count the follow-up videos.list calls you need for statistics. The API also has no Shorts-only search filter. The closest thing is videoDuration=short, which means "under four minutes", so regular videos come back too.
This tutorial shows another route: an Apify Actor that searches Shorts the way the YouTube app does and exports the results as JSON, CSV or Excel.
Disclosure: I built and maintain this Actor. It is a paid tool ($1.00 per 1,000 results). I've tried to describe what it can't do as plainly as what it can.
What you can do with the data
- Find the formats that work in a niche. Pull a few hundred Shorts for "meal prep" or "budget travel", then sort by views and read the top 30 titles. Patterns show up quickly: hooks, lengths, "for the week" vs "in 1 hour".
- Track a competitor's Shorts. Give it a channel handle and you get that channel's Shorts newest first, with exact numbers. Schedule it weekly and you have a history.
- Build a dataset for analysis. Engagement rate by length, median views by upload week, which hashtags show up on the top performers.
Step 1: Set up a run in Apify Console
Open YouTube Shorts Scraper and click Try for free. The input form has these fields:
| Field | What it does |
|---|---|
Search keywords (searchQueries) | One or more keywords, e.g. meal prep. |
Channels (channelUrls) | Channel URLs or handles like @NicksKitchen. You get that channel's Shorts, newest first. |
Max results (maxItems) | Upper limit for the whole run. You're only charged for saved results. |
Max results per keyword or channel (maxItemsPerQuery) | Stops one source from using up the whole run. |
Add full details (shortsDetails) | On by default. Opens each Short to add exact views, likes, comment count, publish date, channel, description and hashtags. |
Sort by (sortBy) | relevance or date ("Recent first"). Applies to keywords only. |
Uploaded (uploadDate) | any, hour, today, week, month, year. Applies to keywords only. |
You can use keywords, channels or both. No YouTube API key, login or proxy setup is needed.
Step 2: Run it and export
Click Start. When the run finishes, open the Output tab and export as JSON, CSV or Excel.
For this article I ran one keyword, meal prep, with maxItems: 20 and full details on. It saved 20 Shorts in about 30 seconds. Here are two of them, with some fields removed to keep this short (values unchanged):
[ { "videoId": "s8wAVav48NE", "url": "https://www.youtube.com/shorts/s8wAVav48NE", "title": "🍗 Meal Prep on a Budget! 💰", "viewCount": 14544, "likeCount": 937, "commentCount": 17, "durationSeconds": 91, "publishedAt": "2026-10-27T15:27:52Z", "hashtags": ["#SummersHomemadeMeals", "#MealPrepIdeas", "#HealthyOnABudget"], "channelName": "Summers_homemade_meals", "channelHandle": "@summers_homemade_meals", "channelSubscriberCount": 536000, "searchQuery": "meal prep", "scrapedAt": "2026-10-27T21:20:56Z" }, { "videoId": "TRlli6WOsFA", "url": "https://www.youtube.com/shorts/TRlli6WOsFA", "title": "How I Meal Prep for the Whole Week (in just 1 hour) 👨🏻🍳🍲", "viewCount": 735662, "likeCount": 15548, "commentCount": 282, "durationSeconds": 137, "publishedAt": "2026-08-27T16:20:09Z", "hashtags": ["#mealprepping", "#whatieatinaday", "#whatieat"], "channelName": "Zack Venios", "channelHandle": "@ZackVenios", "channelSubscriberCount": 6390, "searchQuery": "meal prep", "scrapedAt": "2026-10-27T21:20:56Z" } ] Even in this tiny sample, the second Short has about 735K views from a channel with about 6K subscribers. That's the kind of thing you want to spot across a few hundred rows.
A few notes on the fields. hashtags holds the hashtags YouTube shows above the title, which is usually up to three. The full text is in description. Every row also has a searchQuery field that tells you which keyword found it.
Step 3: Do it from Python
Install the official client and pandas:
pip install apify-client pandas Then run the Actor and load the results:
from apify_client import ApifyClient import pandas as pd client = ApifyClient("YOUR_APIFY_TOKEN") run_input = { "searchQueries": ["meal prep", "meal prep for the week", "high protein meal prep"], "maxItemsPerQuery": 120, "maxItems": 400, "shortsDetails": True, "sortBy": "relevance", "uploadDate": "any", } run = client.actor("pipiagent/youtube-shorts-scraper").call(run_input=run_input) items = list(client.dataset(run.default_dataset_id).iterate_items()) df = pd.DataFrame(items) # The same Short can be found by several keywords; keep one copy for analysis. df = df.drop_duplicates(subset="videoId") df["publishedAt"] = pd.to_datetime(df["publishedAt"]) df["likeRate"] = df["likeCount"] / df["viewCount"] # Top 10 Shorts by views print(df.nlargest(10, "viewCount")[["title", "channelHandle", "viewCount", "durationSeconds"]]) # Median views by upload week (useful when you search with uploadDate="month") weekly = df.set_index("publishedAt").resample("W")["viewCount"].median() print(weekly.tail(8)) To track a competitor, swap the keywords for "channelUrls": ["@SomeChannel"] and set maxItemsPerQuery to however many recent Shorts you care about.
What it costs
You pay per saved result: $1.00 per 1,000 Shorts, with no start fee and no monthly rental. Turning on full details doesn't change the price.
- A 20-Short run like my test: $0.02.
- Three keywords at about 120 Shorts each (around 360 rows): about $0.36.
- 500 Shorts from one channel: $0.50.
You can also set a maximum charge per run in the run options, and the Actor stops when it reaches that amount.
Limitations
These come from how YouTube serves Shorts, so it's better to know them before you plan a project:
- About 100–140 Shorts per keyword. YouTube's Shorts search stops there. Changing the sort order or upload date adds only a few more. To get a bigger sample, use several related keywords, as in the Python example.
- No sort by views. YouTube returns nothing for Shorts sorted by views, so the Actor offers relevance and date only. Sort the exported table by
viewCountinstead. - Upload date filters shrink results a lot. With "This week", a keyword often returns only a dozen or so Shorts, and occasionally none.
- Full details are slower. The Actor opens every Short. 100 Shorts take about 2 minutes, compared with about 10 seconds with details off. With details off, you only get the title and a rounded view count (e.g. "40M"), without likes, dates or the channel.
- Channel Shorts come newest first. YouTube doesn't offer another order.
- Duplicates across keywords are kept, so de-duplicate on
videoIdas shown above.
Related tools
If you need regular long-form videos rather than Shorts, YouTube Search Scraper handles keyword search with upload-date filters and sort by views. YouTube Channel Videos Scraper exports every upload of a channel and can include Shorts and live streams.
If you want to try the Shorts workflow on your own niche, the YouTube Shorts Scraper store page has the input form and more examples. If something doesn't work the way this article says, open an issue there and I'll look into it.
