YouTube Shorts Scraper API: Analyze Short-Form Video Content
YouTube Shorts compete directly with TikTok and Instagram Reels. This guide shows you how to extract Shorts data for content analysis and competitive research.
Why Track YouTube Shorts?
- Format Analysis - Compare Shorts vs long-form performance
- Trend Detection - Spot viral Shorts early
- Competitor Research - Analyze rival Shorts strategy
- Content Repurposing - Track cross-posted content
- Growth Tracking - Monitor Shorts channel growth
Shorts API Endpoints
| Endpoint | Description |
|---|---|
| Channel Shorts | Get Shorts from a specific channel |
| Trending Shorts | Discover trending Shorts |
Get Channel Shorts
const response = await fetch(
'https://api.sociavault.com/v1/scrape/youtube/channel/shorts?handle=MrBeast&sort=newest',
{
headers: {
'x-api-key': 'YOUR_API_KEY'
}
}
);
const shorts = await response.json();
Parameters
| Parameter | Required | Description |
|---|---|---|
handle | One of handle/channelId | Channel handle (e.g. MrBeast) |
channelId | One of handle/channelId | Channel ID |
sort | No | newest (default) or popular |
continuationToken | No | Token from previous response for pagination |
Sample Response
Shorts are returned as an object with numeric keys. Use Object.values() to iterate.
{
"success": true,
"data": {
"shorts": {
"0": {
"type": "short",
"id": "abc123xyz",
"url": "https://www.youtube.com/watch?v=abc123xyz",
"title": "Would you do this for $1000? 💰",
"viewCountText": "45M views",
"viewCountInt": 45000000,
"commentCountText": "15K",
"commentCountInt": 15000,
"likeCountInt": 2100000,
"likeCountText": "2.1M",
"description": "...",
"publishDate": "2026-01-08T16:00:00Z",
"genre": "Entertainment"
}
},
"continuationToken": "4qmFsgK..."
},
"credits_used": 1
}
Trending Shorts
Discover currently trending YouTube Shorts (~48 results, no parameters needed):
const response = await fetch(
'https://api.sociavault.com/v1/scrape/youtube/shorts/trending',
{
headers: {
'x-api-key': 'YOUR_API_KEY'
}
}
);
const trending = await response.json();
Trending shorts include additional fields like channel, durationMs, durationFormatted, and captionTracks.
Use Cases
Compare Shorts vs Long-Form
Analyze which format performs better:
async function compareFormats(handle) {
const videosRes = await fetch(
`https://api.sociavault.com/v1/scrape/youtube/channel-videos?handle=${handle}`,
{ headers: { 'x-api-key': 'YOUR_API_KEY' } }
);
const shortsRes = await fetch(
`https://api.sociavault.com/v1/scrape/youtube/channel/shorts?handle=${handle}`,
{ headers: { 'x-api-key': 'YOUR_API_KEY' } }
);
const videos = Object.values((await videosRes.json()).data.videos);
const shorts = Object.values((await shortsRes.json()).data.shorts);
const videoAvg = videos.reduce((s, v) => s + v.viewCountInt, 0) / videos.length;
const shortsAvg = shorts.reduce((s, v) => s + v.viewCountInt, 0) / shorts.length;
console.log(`Long-form average: ${videoAvg.toLocaleString()} views`);
console.log(`Shorts average: ${shortsAvg.toLocaleString()} views`);
console.log(`Shorts perform ${(shortsAvg / videoAvg * 100).toFixed(0)}% compared to long-form`);
}
Track Shorts Posting Frequency
Analyze upload patterns:
async function trackFrequency(handle) {
const res = await fetch(
`https://api.sociavault.com/v1/scrape/youtube/channel/shorts?handle=${handle}&sort=newest`,
{ headers: { 'x-api-key': 'YOUR_API_KEY' } }
);
const shorts = Object.values((await res.json()).data.shorts);
const shortsByWeek = {};
shorts.forEach(short => {
const week = getWeekNumber(new Date(short.publishDate));
shortsByWeek[week] = (shortsByWeek[week] || 0) + 1;
});
const avgPerWeek = shorts.length / Object.keys(shortsByWeek).length;
console.log(`Average Shorts per week: ${avgPerWeek.toFixed(1)}`);
}
Find Viral Shorts
Identify outlier performers:
async function findViralShorts(handle) {
const res = await fetch(
`https://api.sociavault.com/v1/scrape/youtube/channel/shorts?handle=${handle}`,
{ headers: { 'x-api-key': 'YOUR_API_KEY' } }
);
const shorts = Object.values((await res.json()).data.shorts);
const avgViews = shorts.reduce((s, v) => s + v.viewCountInt, 0) / shorts.length;
const viralShorts = shorts.filter(s => s.viewCountInt > avgViews * 3);
console.log(`Viral Shorts (3x+ average): ${viralShorts.length}`);
viralShorts.forEach(s => {
console.log(`- ${s.title}: ${s.viewCountInt.toLocaleString()} views`);
});
}
Trending Analysis
Monitor what's trending:
async function checkTrending() {
const res = await fetch(
'https://api.sociavault.com/v1/scrape/youtube/shorts/trending',
{ headers: { 'x-api-key': 'YOUR_API_KEY' } }
);
const shorts = Object.values((await res.json()).data.shorts);
// Analyze common themes
const titleWords = shorts
.flatMap(s => s.title.toLowerCase().split(/\s+/))
.filter(w => w.length > 3);
const wordCounts = {};
titleWords.forEach(word => {
wordCounts[word] = (wordCounts[word] || 0) + 1;
});
const trending = Object.entries(wordCounts)
.sort((a, b) => b[1] - a[1])
.slice(0, 10);
console.log('Trending topics:', trending);
}
Related Endpoints
- YouTube Channel Scraper - Channel info
- YouTube Videos Scraper - Long-form videos
- YouTube Video Details - Single video info
- TikTok Videos Scraper - Compare with TikTok
Frequently Asked Questions
What's the maximum Shorts duration?
YouTube Shorts are limited to 60 seconds. Content over 60 seconds appears in regular videos.
How do I distinguish Shorts from regular videos?
The Channel Shorts endpoint (/v1/scrape/youtube/channel/shorts) only returns Shorts content. Each item has "type": "short". The Videos endpoint returns regular uploads only.
Can I get Shorts from any channel?
Yes, any public channel's Shorts are accessible.
How often does the trending list update?
Trending Shorts are refreshed continuously, reflecting real-time popularity.
Are view counts accurate?
Yes, view counts are fetched in real-time from YouTube.
Get Started
Sign up free and start analyzing YouTube Shorts.
Documentation: /docs/api-reference/youtube/channel-shorts
Found this helpful?
Share it with others who might benefit
Ready to Try SociaVault?
Start extracting social media data with our powerful API. No credit card required.