YouTube Shorts Scraper
Pricing
from $3.00 / 1,000 results
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
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.listcall 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
dislikeCountfrom 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.listendpoint 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
| Field | Type | Description |
|---|---|---|
videoId | string | 11-character YouTube video identifier |
url | string | Direct link in /shorts/ format |
title | string | Video title including inline hashtags |
description | string | Video description (often empty — YouTube hides it on Shorts without login) |
publishDate | string | Human-readable publish date, e.g. "Mar 30, 2026" |
isShort | boolean | Always true for Shorts |
keywords | array | Hashtags extracted from the title |
thumbnail | string | Thumbnail URL from i.ytimg.com |
music | string | Song or sound name ("Original Sound", artist / track name, sound creator) |
Engagement metrics
| Field | Type | Description |
|---|---|---|
viewCount | integer | Exact total views |
likeCount | integer | Total likes |
dislikeCount | integer | Estimated dislikes via Return YouTube Dislike API |
commentCount | integer | Total number of comments |
Channel data
| Field | Type | Description |
|---|---|---|
channelName | string | Creator's display name |
channelId | string | Channel identifier in UCxxxxxxxxxx format |
channelUrl | string | Link to the channel page |
subscriberCount | integer | Subscriber 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:
| Field | Type | Description |
|---|---|---|
author | string | Commenter's @handle |
text | string | Full comment text |
likes | integer | Likes on the comment |
publishedTime | string | Relative 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
| Field | Type | Description |
|---|---|---|
scrapedAt | string | ISO 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
Mode 1 — search for trending Shorts
{"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
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQueries | array | [] | Keywords to search. #shorts is appended automatically (required) |
channelUrls | array | [] | Channel URLs to scrape Shorts from (e.g. https://www.youtube.com/@MrBeast) |
videoUrls | array | [] | Direct Short or video URLs to scrape |
playlistUrls | array | [] | Playlist URLs to scrape every video from |
maxResultsPerQuery | integer | 20 | Max Shorts per query / channel (1–200) |
sortBy | string | relevance | relevance, upload_date, or view_count (search only) |
publishedAfter | string | — | ISO date — only Shorts published after this date |
publishedBefore | string | — | ISO date — only Shorts published before this date |
includeComments | boolean | false | Extract top comments per Short |
maxComments | integer | 10 | Comments per Short when enabled (1–100) |
onlyShortsFilter | boolean | true | Filter 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" }]}
Popular Short (without comments)
{"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 ApifyClientclient = 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 → Export → CSV. 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 ApifyClientimport openaiclient = 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: continueresp = 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
includeCommentsenabled - Up to 200 Shorts per query — raise
maxResultsPerQueryas 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.
| Feature | This scraper | Alternative A | Alternative B | Alternative C |
|---|---|---|---|---|
| Bypass bot detection | Patchright (undetectable Chromium) | Puppeteer + stealth | Raw HTTP (fragile) | Playwright |
| Dislike count | Yes (Return YouTube Dislike) | No | No | No |
| Comment extraction | Built-in | Separate actor ($) | No | Partial |
| Music / sound attribution | Yes | No | No | Partial |
| Channel data inline | Yes | Yes | Partial | Yes |
| Sort by relevance / date / views | Yes | Partial | No | Yes |
| Date-range filter | Yes (publishedAfter / publishedBefore) | No | No | Partial |
| Shorts-only filter (≤60s) | Yes | No | No | Partial |
| Multi-keyword per run | Yes (array) | Yes | Single | Yes |
| Max results per query | 200 | 100 | 50 | 100 |
| Needs YouTube Data API key | No | No | No | No |
| Code examples in README | Python / Node / curl / OpenAI | None | None | None |
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
- Sign up for Apify — apify.com → free account with $5 trial credit.
- Open the actor — YouTube Shorts Scraper → "Try for free".
- Fill the input form — put keywords like
"cooking hacks"insearchQueries, setmaxResultsPerQueryto 20. - (Optional) Enable comments — turn on
includeCommentsand setmaxCommentsto 5 to start. - Click "Start" — 20 Shorts finish in about a minute.
- View the dataset — see video ID, views, likes, dislikes, comment count, music. Click Export to download.
- Automate — Schedules → Create 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:
| Plan | Price per Short | 1K Shorts | 10K Shorts | 100K Shorts |
|---|---|---|---|---|
| FREE trial | $0 (up to $5 credit) | free | N/A | N/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:
- Python —
pip install apify-client - Node.js —
npm 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.
Related scrapers from the same author
- Google Play Reviews Scraper — Android app reviews, ratings, locales
- Telegram Channel Scraper — public Telegram messages and metadata
- Google Maps Lead Scraper — business phone, email, website
- Fast Airbnb Price Scraper — Airbnb listings, prices and coordinates
- Reddit MCP Server — Reddit data as MCP tools for Claude and Cursor
- TikTok Scraper — TikTok videos and creator analytics (same developer)
Legal & ethics note
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.