YouTube Scraper - Search, Videos, Channels & Comments
Pricing
$0.25 / 1,000 results
YouTube Scraper - Search, Videos, Channels & Comments
Search, videos, channels & comments in one Actor. No Google API key, no daily quota - just $0.25 per 1,000 results.
Pricing
$0.25 / 1,000 results
Rating
5.0
(1)
Developer
Smart API
Maintained by CommunityActor stats
1
Bookmarked
49
Total users
49
Monthly active users
5 days ago
Last modified
Categories
Share
YouTube Scraper — Search, Videos, Channels & Comments
Search, videos, channels & comments in one Actor. No Google API key, no daily quota — just $0.25 per 1,000 results.
Scrape YouTube search results, video details, channel stats and comments as clean, structured data. Paste YouTube links or keywords — no Google API key, no daily quota. One Actor covers seven common tasks: pick a task, fill one box, hit Start.
- ✅ $0.25 per 1,000 results — pay only for rows you actually get
- ✅ No Google API key, no daily quota — nothing to set up
- ✅ Paste links, not IDs — full
watch?v=,youtu.be/,/shorts/,@handleand/channel/UC…URLs all work - ✅ Pagination handled for you — just say how many results you want
- ✅ Flat rows that export straight to CSV, Excel, Google Sheets or JSON
- ✅ Works from the UI and from the API — same input either way
What can it do?
| Task | What you give it | What you get back |
|---|---|---|
| 🔍 Search videos | Keywords | Matching videos with title, channel, publish date, thumbnail |
| 🔍 Search channels | Keywords | Matching channels with title, description, thumbnail |
| 🎬 Video details | Video URLs or IDs | Views, likes, comment count, duration, tags, category, captions |
| 📺 Channel details | Channel URLs, @handles or IDs | Subscribers, total views, video count, country, handle |
| 📺 Channel videos | Channel URLs, @handles or IDs | The channel's uploads, newest first |
| 💬 Video comments | Video URLs or IDs | Top-level comments + author, likes, date (replies optional) |
| 💬 Comment replies | Comment IDs | All replies to those comments |
Quick start (UI)
- Choose a task in “What do you want to get?”.
- Fill in only the box that belongs to it — each box says which task it is for:
- Search keywords → for the two search tasks
- Videos (URLs or IDs) → for video details and video comments
- Channels (URLs, handles or IDs) → for channel details and channel videos
- Comment IDs → for comment replies
- Optionally set Max results per input, a country, a date range or a sort order.
- Click Start. Results appear on the Storage → Dataset tab, ready to export.
Every box comes pre-filled with a working example, so you can switch the task dropdown and hit Start straight away to see what each one returns.
Examples
Search for videos
{"operation": "search_videos","queries": ["coke studio", "lofi hip hop"],"order": "viewCount","regionCode": "IN","maxItems": 100}
Get details for a few videos
{"operation": "video_details","videos": ["https://www.youtube.com/watch?v=4zTFzMPWGLs","https://youtu.be/dQw4w9WgXcQ","https://www.youtube.com/shorts/-2Wqk2ncV7c"]}
Get channel stats from a handle
{"operation": "channel_details","channels": ["https://www.youtube.com/@MrBeast", "@mkbhd"]}
List a channel's newest uploads
{"operation": "channel_videos","channels": ["UCu59yAFE8fM0sVNTipR4edw"],"order": "date","publishedAfter": "2025-01-01","maxItems": 200}
Scrape comments (with replies)
{"operation": "comment_threads","videos": ["https://www.youtube.com/watch?v=32mJgqhnbGY"],"commentOrder": "relevance","includeReplies": true,"maxRepliesPerComment": 50,"maxItems": 500}
Output
Rows are flat and consistent, so CSV and Sheets exports just work.
Videos (search / channel videos)
{"videoId": "5Eqb_-j3FDA","title": "Pasoori | Coke Studio Season 14","url": "https://www.youtube.com/watch?v=5Eqb_-j3FDA","publishedAt": "2022-02-07T13:30:11Z","channelTitle": "Coke Studio Pakistan","channelId": "UCM1VesJtJ9vTXcMLLr_FfdQ","channelUrl": "https://www.youtube.com/channel/UCM1VesJtJ9vTXcMLLr_FfdQ","description": "Let's transcend boundaries…","thumbnailUrl": "https://i.ytimg.com/vi/5Eqb_-j3FDA/hqdefault.jpg","liveBroadcastContent": "none","searchQuery": "coke studio"}
Video details adds viewCount, likeCount, commentCount, duration,
durationSeconds, tags, categoryId, topicCategories, definition,
hasCaptions, privacyStatus, madeForKids, defaultAudioLanguage.
Channel details
{"channelId": "UCFFbwnve3yF62-tVXkTyHqg","title": "Zee Music Company","handle": "@zeemusiccompany","url": "https://www.youtube.com/@zeemusiccompany","subscriberCount": 122000000,"viewCount": 89211450788,"videoCount": 16576,"publishedAt": "2014-03-12T11:59:25Z","country": "IN","uploadsPlaylistId": "UUFFbwnve3yF62-tVXkTyHqg"}
Comments
{"commentId": "UgwOSGaPuVONHxyrtxV4AaABAg","text": "does he speak Kannada ?","authorDisplayName": "@prashanthalex7702","likeCount": 12,"publishedAt": "2025-03-18T23:26:33Z","isReply": false,"parentId": null,"totalReplyCount": 1,"videoId": "32mJgqhnbGY","videoUrl": "https://www.youtube.com/watch?v=32mJgqhnbGY","authorChannelId": "UCWS904BG8MIrnbCMj8qiNfQ"}
Replies come as extra rows with isReply: true and parentId set to the comment
they belong to.
Counts are real numbers (not strings), so you can sort and total them right away. Need the untouched nested objects instead? Turn on Raw output (advanced).
Using it from the API
Run the Actor and get results in one call:
curl -X POST "https://api.apify.com/v2/acts/trysmartapi~youtube-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"operation": "search_videos","queries": ["coke studio"],"maxItems": 50}'
Same thing in JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('trysmartapi/youtube-scraper').call({operation: 'comment_threads',videos: ['https://www.youtube.com/watch?v=32mJgqhnbGY'],maxItems: 200,includeReplies: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
And in Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("trysmartapi/youtube-scraper").call(run_input={"operation": "channel_details","channels": ["@MrBeast", "@mkbhd"],})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Input reference
| Field | Type | Used by | Notes |
|---|---|---|---|
operation | string | all | search_videos, search_channels, video_details, channel_details, channel_videos, comment_threads, comment_replies |
queries | string[] | search tasks | One keyword per entry; each is searched separately |
videos | string[] | video_details, comment_threads | Video URLs or 11-char IDs |
channels | string[] | channel_details, channel_videos | Channel URLs, @handles or UC… IDs |
commentIds | string[] | comment_replies | Comment IDs from a comments run |
maxItems | integer | listing tasks | Cap per keyword / video / channel. Default 100 |
includeReplies | boolean | comment_threads | Adds reply rows. Default false |
maxRepliesPerComment | integer | comment_threads | Default 50 |
commentOrder | string | comment_threads | time (newest) or relevance |
order | string | search / channel videos | relevance, date, viewCount, rating, title. Use date on channels for full history |
videoDuration | string | video listings | any, short (<4 m), medium (4–20 m), long (>20 m) |
regionCode | string | listings | ISO country code, e.g. US, IN, GB |
videoCategoryId | string | video listings | e.g. 10 Music, 20 Gaming, 24 Entertainment |
publishedAfter / publishedBefore | string | listings | YYYY-MM-DD or full ISO date-time |
eventType | string | search_videos | any, live, upcoming, completed |
rawOutput | boolean | all | Return nested API objects instead of flat rows |
startToken | string | listings | Resume a previous run (single input item only) |
Notes & tips
maxItemsis per input. Three keywords withmaxItems: 100returns up to 300 rows.- Resuming a run: each run stores a
nextTokenper input in its key-value store underOUTPUT. Paste one intostartTokento continue from the next page. - Video and channel details are batched — asking for 200 videos costs a handful of requests, not 200.
- Channel videos walks the full upload history. YouTube's channel listing only exposes
the newest ~15 uploads, so the Actor slices the request into one-year windows and pages
through each, newest year first. Set
maxItemsas high as you need. Sorting by anything other than "Newest first" uses the plain listing instead and returns far fewer videos — use "Newest first" when you want depth. - Private, deleted or region-blocked items are skipped and reported as run-log warnings.
@handlesare resolved automatically to channel IDs, which costs one extra lookup. PassUC…IDs directly if you already have them.- Comment counts on a video can be larger than what is fetchable — YouTube hides some comments and disables them entirely on some videos.
Pricing
$0.25 per 1,000 results — charged per row written to the dataset, nothing else. No monthly fee, no minimum, no charge for rows you don't receive.
| You scrape | You pay |
|---|---|
| 100 results | $0.03 |
| 1,000 results | $0.25 |
| 10,000 results | $2.50 |
| 100,000 results | $25.00 |
Both a comment and a video row count as one result. Use Max results per input to keep any run inside a budget you choose.
Legal
This Actor retrieves publicly available YouTube data only. It does not access private data or bypass any login. You are responsible for using the collected data in line with YouTube's terms and applicable law (including GDPR when handling personal data such as comment author names).