YouTube Shorts Scraper avatar

YouTube Shorts Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
YouTube Shorts Scraper

YouTube Shorts Scraper

Extract metadata, views, likes, dislikes, comments, music, and channel data from YouTube Shorts. Search by keyword, channel URL, or video link. Pure HTTP, no browser, 256 MB memory.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

deusex machine

deusex machine

Maintained by Community

Actor stats

1

Bookmarked

11

Total users

8

Monthly active users

4 days ago

Last modified

Categories

Share

YouTube Shorts Scraper — Views, Likes, Dislikes, Comments & Music API

Useful? Leave a review — it takes 10 seconds and is the single biggest thing that helps other trend researchers, creator-economy analysts, brand marketers and short-form video tool builders find this YouTube Shorts scraper.

A fast, production-grade YouTube Shorts scraper that extracts full metadata, engagement metrics and optional top comments from YouTube Shorts search results. For every Short it pulls video ID, title, description, channel name and URL, view count, like count, dislike count (via the community Return YouTube Dislike dataset), comment count, publish date, hashtags / keywords, thumbnail URL, music or sound attribution, and — when enabled — the top comments with author, text, likes and relative timestamp.

No YouTube Data API v3 key, no OAuth, no daily quota, no waiting for Google to approve your app. Pass an array of search keywords like "cooking hacks", "fitness motivation" or "funny cats" and get back clean JSON or CSV ready to drop into a trend dashboard, a creator CRM, a content-planning tool, a sentiment-analysis pipeline or a brand-safety system.

Built for trend researchers, creator economy analysts, YouTube creators benchmarking their own niche, brand marketers tracking campaign hashtags, music and sync-licensing analysts, content-strategy agencies, social listening vendors, creator CRMs, UGC discovery platforms and anyone doing YouTube Shorts research at scale.

What this YouTube Shorts scraper does

Given a list of search queries, this actor hits the internal YouTube / InnerTube API to retrieve Shorts-category results, extracts video IDs, resolves every ID to its full metadata via InnerTube video endpoints, augments the metrics with the Return YouTube Dislike community-sourced dislike API and optionally opens each Short's comment panel to extract the top comments.

The #shorts hashtag is appended automatically to every search query so you don't accidentally mix regular long-form videos into your dataset. When onlyShortsFilter is enabled, the actor also filters out any result that exceeds ~60 seconds, guaranteeing a clean Shorts-only dataset.

Under the hood, the actor talks to an internal backend that wraps Patchright — an undetectable Chromium fork — and a hardened InnerTube client. That combination bypasses YouTube's typical bot-detection checks natively, without the stealth-plugin whack-a-mole that stock Puppeteer + puppeteer-extra-plugin-stealth runs into on YouTube.

Why use this Shorts scraper instead of the YouTube Data API

The official YouTube Data API v3 is free but has harsh trade-offs for short-form video research:

  • 10,000-unit daily quota — a single search.list call costs 100 units. That's 100 searches per day, total, across your entire project. Shorts research at scale blows through this in minutes.
  • No dislike count — YouTube removed dislikes from the Data API in 2021. You cannot get dislikeCount from any official endpoint at any price.
  • No music / sound attribution — Shorts audio metadata (song name, original sound) is not exposed in the Data API.
  • Shallow comment access — the commentThreads.list endpoint is rate-limited and frequently rejected on Shorts specifically.
  • Quota-increase forms — burst past the default and Google asks for a use-case justification and a multi-week review.

This actor works around every one of those limits. Dislikes come from Return YouTube Dislike's public API (a community project with hundreds of millions of cached counts). Music is parsed from the Shorts player. Comments are pulled from the Shorts comment panel directly. No quota, no review, no approvals.

Data fields the YouTube Shorts scraper extracts

One item per Short, flat JSON (with an optional comments array). Maps cleanly to a BigQuery schema, a Postgres table or a Google Sheet.

Video metadata

FieldTypeDescription
videoIdstring11-character YouTube video identifier
urlstringDirect link in /shorts/ format
titlestringVideo title including inline hashtags
descriptionstringVideo description (often empty — YouTube hides it on Shorts without login)
publishDatestringHuman-readable publish date, e.g. "Mar 30, 2026"
isShortbooleanAlways true for Shorts
keywordsarrayHashtags extracted from the title
thumbnailstringThumbnail URL from i.ytimg.com
musicstringSong or sound name ("Original Sound", artist / track name, sound creator)

Engagement metrics

FieldTypeDescription
viewCountintegerExact total views
likeCountintegerTotal likes
dislikeCountintegerEstimated dislikes via Return YouTube Dislike API
commentCountintegerTotal number of comments

Channel data

FieldTypeDescription
channelNamestringCreator's display name
channelIdstringChannel identifier in UCxxxxxxxxxx format
channelUrlstringLink to the channel page
subscriberCountintegerSubscriber count (often 0 on Shorts — YouTube hides this on the Shorts player)

Comments (when includeComments=true)

Each Short gets an additional comments array. Comment fields:

FieldTypeDescription
authorstringCommenter's @handle
textstringFull comment text
likesintegerLikes on the comment
publishedTimestringRelative timestamp ("2 hours ago")

When enabled, the scraper clicks the comment button on each Short, waits for the panel to render, and extracts up to 20 visible comments per video.

Run metadata

FieldTypeDescription
scrapedAtstringISO 8601 timestamp of extraction

Use cases for this YouTube Shorts API

  • Trend research — search by keyword to spot which topics, hashtags and sounds are gaining traction before they peak. Shorts is the fastest-moving discovery layer on YouTube; catching a trend early has outsized ROI.
  • Creator analytics — pull Shorts from search terms and benchmark engagement rates (likeCount / viewCount), comment velocity and publishing cadence across creators in a niche.
  • Competitor monitoring — track what direct competitors publish, how fast their audience engages and what commenters are actually saying.
  • Content strategy — analyze the top-performing Shorts in your category to understand which hooks, formats and audio drive views.
  • Music and sound tracking — identify which songs, original sounds and creator audio are trending across Shorts. Feed into sync-licensing and music-discovery workflows.
  • Sentiment analysis and NLP — extract comments to measure audience sentiment. Route through OpenAI, Claude or a local Llama for feature-request and bug extraction from creator content.
  • Engagement benchmarking — compare like-to-view ratios and dislike ratios across videos, niches and creators. Ranking by these ratios uncovers viral sleepers that raw view-count lists miss.
  • Brand safety — when your brand sponsors a creator, scrape their Shorts weekly, scan comments for toxic language or coordinated attacks, flag early.
  • Creator discovery for brand partnerships — rank emerging creators by engagement velocity rather than lagging subscriber counts. Reach out before their rates balloon.
  • Training data for LLMs and recommenders — Shorts titles and comments in underrepresented languages are valuable fine-tuning data.

How to use this YouTube Shorts scraper

{
"searchQueries": ["cooking hacks", "meal prep ideas"],
"maxResultsPerQuery": 20
}

Mode 2 — search with comments

{
"searchQueries": ["funny cats"],
"maxResultsPerQuery": 10,
"includeComments": true,
"maxComments": 5
}

Mode 3 — multi-keyword niche scan

{
"searchQueries": ["fitness motivation", "home workout", "gym fails"],
"maxResultsPerQuery": 30
}

Mode 4 — sort by upload date for newest Shorts

{
"searchQueries": ["ai tools"],
"maxResultsPerQuery": 50,
"sortBy": "upload_date"
}

Mode 5 — sort by view count for top Shorts

{
"searchQueries": ["travel vlog"],
"maxResultsPerQuery": 50,
"sortBy": "view_count"
}

Mode 6 — high-volume competitive scan

{
"searchQueries": ["iphone 17 review", "pixel 10 review", "samsung s26 review"],
"maxResultsPerQuery": 100,
"includeComments": true,
"maxComments": 20
}

Input parameters

ParameterTypeDefaultDescription
searchQueriesarray[]Keywords to search. #shorts is appended automatically (required)
channelUrlsarray[]Channel URLs to scrape Shorts from (e.g. https://www.youtube.com/@MrBeast)
videoUrlsarray[]Direct Short or video URLs to scrape
playlistUrlsarray[]Playlist URLs to scrape every video from
maxResultsPerQueryinteger20Max Shorts per query / channel (1–200)
sortBystringrelevancerelevance, upload_date, or view_count (search only)
publishedAfterstringISO date — only Shorts published after this date
publishedBeforestringISO date — only Shorts published before this date
includeCommentsbooleanfalseExtract top comments per Short
maxCommentsinteger10Comments per Short when enabled (1–100)
onlyShortsFilterbooleantrueFilter out videos longer than ~60s so you get pure Shorts data

Output example (JSON)

Short with comments

{
"videoId": "Hh6beuoFjww",
"url": "https://www.youtube.com/shorts/Hh6beuoFjww",
"title": "cats being cats 🤣#youtubeshorts #funnycats #catvideos #shortvideo",
"description": "",
"channelName": "Hilarious_cats19",
"channelId": "UCC1g5eTBsEvHPWWPthcxZ4g",
"channelUrl": "https://www.youtube.com/@Hilarious_cats19",
"viewCount": 7457,
"likeCount": 664,
"dislikeCount": 6,
"commentCount": 7,
"subscriberCount": 0,
"keywords": ["youtubeshorts", "funnycats", "catvideos", "shortvideo"],
"thumbnail": "https://i.ytimg.com/vi/Hh6beuoFjww/frame0.jpg",
"publishDate": "Mar 30, 2026",
"isShort": true,
"music": "Original Sound",
"scrapedAt": "2026-04-22T04:45:47.559Z",
"comments": [
{ "author": "@deeannsmith7775", "text": "Love the Voids", "likes": 0, "publishedTime": "2 hours ago" },
{ "author": "@arien3776", "text": "Jajsjsjs", "likes": 0, "publishedTime": "4 hours ago" }
]
}
{
"videoId": "V_tjF0lWmsw",
"url": "https://www.youtube.com/shorts/V_tjF0lWmsw",
"title": "Brave Chihuahua vs Calm Bulldog: Funny Dog Standoff 😱",
"description": "",
"channelName": "doggo.pranks",
"channelId": "UCUINei7Oezna9eVO1KjbbHg",
"channelUrl": "https://www.youtube.com/@doggo.pranks",
"viewCount": 13392,
"likeCount": 199,
"dislikeCount": 4,
"commentCount": 2,
"subscriberCount": 0,
"keywords": [],
"thumbnail": "https://i.ytimg.com/vi/V_tjF0lWmsw/frame0.jpg",
"publishDate": "Mar 29, 2026",
"isShort": true,
"music": "Original Sound",
"scrapedAt": "2026-04-22T04:34:45.872Z"
}

Export the dataset as JSON, CSV, Excel, XML, JSONL or HTML table directly from the Apify console, or via the Apify API.

How to call this scraper from your code

curl

curl -X POST 'https://api.apify.com/v2/acts/makework36~youtube-shorts-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"searchQueries": ["cooking hacks"],
"maxResultsPerQuery": 30,
"includeComments": true,
"maxComments": 10
}'

Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("makework36/youtube-shorts-scraper").call(run_input={
"searchQueries": ["ai tools", "ai startups"],
"maxResultsPerQuery": 50,
"sortBy": "view_count",
"includeComments": True,
"maxComments": 20,
})
for s in client.dataset(run["defaultDatasetId"]).iterate_items():
ratio = s["likeCount"] / max(s["viewCount"], 1)
print(f"{s['videoId']} views={s['viewCount']:>8} ratio={ratio:.3f} {s['title'][:60]}")

Node.js (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('makework36/youtube-shorts-scraper').call({
searchQueries: ['travel vlog'],
maxResultsPerQuery: 50,
sortBy: 'upload_date',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.table(items.map((s) => ({
id: s.videoId, views: s.viewCount, likes: s.likeCount, music: s.music,
})));

Export to CSV

From the run page → ExportCSV. Or via API:

https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&token=YOUR_TOKEN

Feed Shorts into a sentiment pipeline

from apify_client import ApifyClient
import openai
client = ApifyClient("YOUR_APIFY_TOKEN")
oa = openai.OpenAI()
run = client.actor("makework36/youtube-shorts-scraper").call(run_input={
"searchQueries": ["my_brand_campaign"],
"maxResultsPerQuery": 30,
"includeComments": True,
"maxComments": 20,
})
for short in client.dataset(run["defaultDatasetId"]).iterate_items():
joined = "\n".join(c["text"] for c in short.get("comments", []))
if not joined: continue
resp = oa.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": f"Sentiment (pos/neg/neu) of these Shorts comments:\n{joined}"}],
)
print(short["videoId"], resp.choices[0].message.content)

Zapier / Make.com no-code

Both Zapier and Make have an official Apify integration. Trigger on a schedule, action "Run Apify Actor", pass this actor's name and your input JSON, then send the output into a Google Sheet, Airtable, Slack alert or Notion row.

Performance & cost

  • ~3–5 seconds per Short in metadata-only mode
  • ~8–10 seconds per Short with includeComments enabled
  • Up to 200 Shorts per query — raise maxResultsPerQuery as needed
  • Multi-query runs process sequentially to stay polite to YouTube
  • No daily quota — runs are limited only by your Apify compute budget

YouTube Shorts scraper comparison

Several YouTube scrapers live on the Apify Store. Here's how this one stacks up on what actually matters for short-form video research.

FeatureThis scraperAlternative AAlternative BAlternative C
Bypass bot detectionPatchright (undetectable Chromium)Puppeteer + stealthRaw HTTP (fragile)Playwright
Dislike countYes (Return YouTube Dislike)NoNoNo
Comment extractionBuilt-inSeparate actor ($)NoPartial
Music / sound attributionYesNoNoPartial
Channel data inlineYesYesPartialYes
Sort by relevance / date / viewsYesPartialNoYes
Date-range filterYes (publishedAfter / publishedBefore)NoNoPartial
Shorts-only filter (≤60s)YesNoNoPartial
Multi-keyword per runYes (array)YesSingleYes
Max results per query20010050100
Needs YouTube Data API keyNoNoNoNo
Code examples in READMEPython / Node / curl / OpenAINoneNoneNone

The honest take: if you only need basic metadata and never care about dislikes, music or comments, a cheaper metadata-only scraper is fine. If you want the full signal set that lets you do serious Shorts research — dislike ratios, comment sentiment, music trends — this scraper bundles it all in one pass.

Step-by-step tutorial — your first run in 3 minutes

  1. Sign up for Apifyapify.com → free account with $5 trial credit.
  2. Open the actorYouTube Shorts Scraper → "Try for free".
  3. Fill the input form — put keywords like "cooking hacks" in searchQueries, set maxResultsPerQuery to 20.
  4. (Optional) Enable comments — turn on includeComments and set maxComments to 5 to start.
  5. Click "Start" — 20 Shorts finish in about a minute.
  6. View the dataset — see video ID, views, likes, dislikes, comment count, music. Click Export to download.
  7. AutomateSchedulesCreate new schedule for daily trend tracking.

That's it — no Google Cloud console, no API key, no quota form.

Advanced usage patterns

Pattern 1 — weekly trend dashboard

Schedule the actor weekly across 20 category keywords. Push results into BigQuery keyed on videoId + scrapedAt. Compute week-over-week velocity: (viewCount_this_week - viewCount_last_week) / days_since_publish. Top 10 by velocity = the week's rising Shorts.

Pattern 2 — music and sound trend tracker

Run daily with maxResultsPerQuery=100 across broad lifestyle / dance / comedy queries. Aggregate by the music field. Emerging music clusters (10+ uses in 3 days by 5+ different creators) predict which tracks are about to blow up. Sync-licensing opportunity, or A&R signal.

Pattern 3 — brand safety comment monitor

When your brand sponsors a creator, scrape their Shorts daily with includeComments=true. Feed comments through an LLM toxicity classifier. Alert if >5% of comments are toxic — a possible sign of a coordinated attack or controversy.

Pattern 4 — competitor launch tracker

Competing product launches on Shorts? Set searchQueries to the product name, sortBy="upload_date", schedule hourly. Catch sponsored Shorts the moment they drop and notify your marketing team.

Pattern 5 — creator prospecting

For influencer marketing, run the actor across 50 keywords in your category with maxResultsPerQuery=200. Aggregate by channelId. Rank creators by median engagement ratio, filtering by a minimum subscriber count in your creator CRM. Reach out to rising creators before their rates balloon — likeCount / viewCount is a much earlier signal than subscriber growth.

Troubleshooting

description is empty YouTube hides full descriptions on Shorts unless the viewer is logged in. The title usually contains the hashtags and context you need. If you absolutely need descriptions, pass the same videos through a full YouTube scraper.

subscriberCount is 0 YouTube's Shorts player omits subscriber counts. The channelUrl is included so you can look up subscribers separately or join with a channels dataset.

music is null Not every Short uses a tagged audio track. Creators who upload their own audio without selecting a sound from YouTube's library leave the field empty.

dislikeCount is 0 on new videos Return YouTube Dislike estimates from a browser extension's observed dislike events. Very new, low-traffic or niche-locale videos have too little signal to estimate — the field returns 0 until the community collects enough data.

Fewer results than maxResultsPerQuery YouTube caps search results somewhere around 300–500 total per query. Setting maxResultsPerQuery=200 works, but asking for 1000 in one query won't actually return 1000. Split into multiple narrower queries for depth.

Comments not appearing Confirm includeComments=true. If comments are disabled on a Short (creators can toggle this off) the array is empty. If a Short has restricted visibility (age-gated, region-locked) comments may also be unavailable.

Run timed out Large queries with comments enabled can run long. Reduce maxResultsPerQuery, split across multiple runs, or raise the Apify run timeout in the console.

Pricing

Pay-per-result model:

PlanPrice per Short1K Shorts10K Shorts100K Shorts
FREE trial$0 (up to $5 credit)freeN/AN/A
BRONZE$0.004$4$40$400
SILVER$0.0035$3.50$35$350
GOLD$0.003$3$30$300
DIAMOND$0.0025$2.50$25$250

Apify gives every new user a $5 trial credit — enough to scrape ~1,250 Shorts while you evaluate. No subscription, no minimum, no egress fees. Adding includeComments does not change the per-result price; it only adds compute time.

Integrations

Export data in JSON, CSV, Excel, XML, JSONL or HTML table. Connect to your stack:

  • Pythonpip install apify-client
  • Node.jsnpm install apify-client
  • REST API — trigger runs and fetch results over HTTPS
  • Webhooks — get notified when a run completes
  • Zapier, Make, Airbyte — 1,000+ app integrations
  • Google Sheets — export straight to a spreadsheet
  • Scheduled runs — daily, weekly, custom cron
  • BigQuery / Postgres / Snowflake — pipe dataset items into any warehouse

FAQ

Can I scrape regular YouTube videos, not just Shorts? This actor is focused on Shorts. For regular long-form videos, use our YouTube Scraper.

Can I scrape dislikes? Yes. Dislike counts come from the Return YouTube Dislike community API. Very new or low-traffic videos may show zero dislikes until the community collects enough data.

Can I extract comments from Shorts? Yes. Set includeComments to true. The scraper opens each Short's comment panel and extracts author, text, likes and timestamp. Up to 20 comments per Short are available.

Why is description empty on Shorts? YouTube doesn't expose the full description on the Shorts player without login. The title usually contains the relevant hashtags and context.

Why is subscriberCount zero on Shorts? YouTube's Shorts page doesn't display subscriber counts. The channelUrl lets you resolve subscribers via a separate lookup.

Why is music null on some Shorts? Not every Short uses a tagged audio track. Creator-uploaded custom audio without a selected YouTube sound will leave music null.

Is scraping YouTube legal? Scraping publicly available data is generally permissible in most jurisdictions. Respect YouTube's Terms of Service and privacy regulations (GDPR, CCPA, LGPD). Consult legal counsel for your specific use case.

Can I run this on a schedule? Yes. Apify's scheduler supports daily, weekly and custom cron expressions. Every run writes to a fresh dataset that you can pull over the Apify API.

Do I need a YouTube Data API v3 key? No. This scraper doesn't touch the official Data API, so quota limits, key rotation and OAuth are all irrelevant.

Can I filter by minimum view count or engagement ratio? Not in the input — filter client-side on viewCount, likeCount and commentCount. That's faster and more flexible than server-side filtering.

Changelog

  • v1.0 (2026-04-22) — Full SEO rewrite, pricing tiers, comparison table, OpenAI sentiment example, advanced patterns, channel / playlist input parameters.
  • v0.4 (2026-03-30) — Comment extraction via Shorts comment panel.
  • v0.3 (2026-03-10) — Music / sound attribution.
  • v0.2 (2026-02-20) — Return YouTube Dislike integration.
  • v0.1 (2026-02-01) — Initial release — Shorts search metadata via InnerTube.

This scraper reads only publicly available pages on youtube.com/shorts — the same pages any anonymous browser visitor can see. It does not bypass logins, subscriber-only content, age gates or any paid feature. Dislike counts come from the publicly available Return YouTube Dislike community project. Output follows open conventions documented at schema.org/VideoObject and schema.org/Comment. You are responsible for complying with YouTube's Terms of Service, the YouTube API Services Terms (when they apply), GDPR, CCPA, LGPD and any journalistic / research ethics code relevant to your jurisdiction. Don't store personally identifying commenter data longer than you need it.


🙏 Ran this scraper successfully? Leaving a review helps the algorithm surface this to other trend researchers and creator-economy analysts. Much appreciated.