YouTube Video Stats: Views, Likes, Comments by Video URL
Pricing
from $0.40 / 1,000 video returneds
YouTube Video Stats: Views, Likes, Comments by Video URL
Paste YouTube video URLs or IDs and get one row per video: exact views, likes and comment count, duration, publish date, category, tags, description and channel. No login, no Google API key, no API quota. Private or removed videos are free.
Pricing
from $0.40 / 1,000 video returneds
Rating
0.0
(0)
Developer
Adriana Voss
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
Paste a list of YouTube video URLs or IDs and get a spreadsheet with each video's exact views, likes, comment count, duration and publish date.
Who uses this
- Creator and brand teams tracking how a set of competitor or campaign videos performs, without opening each one.
- Agencies and analysts filling a Google Sheet or Airtable with view and like counts for a client report.
- Researchers and data teams collecting tags, category and publish dates for a list of video IDs, with no Google API key and no daily quota.
Try it in 30 seconds
The input box already holds two real video IDs. Click Start and you get one row per video. No login, no cookies, no API key.
Example output
Real rows from a keyless run on 2026-10-11:
| videoId | title | views | likes | comments | duration (s) | published |
|---|---|---|---|---|---|---|
| dQw4w9WgXcQ | Rick Astley - Never Gonna Give You Up | 1,825,571,544 | 19,484,272 | 2,458,789 | 213 | 2009-10-24 |
| jNQXAC9IVRw | Me at the zoo | 442,880,517 | 20,055,529 | 10,638,397 | 19 | 2005-04-23 |
| 9bZkp7q19f0 | PSY - GANGNAM STYLE | 6,089,273,797 | 32,303,429 | 5,465,116 | 252 | 2012-07-15 |
Every row also carries channel name, ID and URL, category, tags, description, thumbnail and live/unlisted flags.
What it costs
About $0.60 to $0.80 per 1,000 videos returned, depending on your Apify plan, and nothing at all for a video that is private, removed or mistyped. First runs fit inside Apify's free credit.
Why this one
- Exact numbers, not the rounded ones on the page. The watch page shows "1.8B views" and "19M"; the page's own data carries the full integers, and that is what you get.
- Comment count included. The count comes from the same public comments panel a visitor sees. A video with comments turned off returns
nullandcommentsEnabled: false, never a fake 0. - Missing is
null, never 0. A hidden like count or a video with no tags comes back empty, so a chart never plots a false zero. - Never charged for a miss. A private, removed or bot-checked video comes back as a clean
NOT_FOUNDorBLOCKEDrow and costs nothing. - Any URL shape works.
watch?v=,youtu.be/, Shorts, embed and live links, or a bare 11-character ID. - No API key and no quota. It reads the public watch page, so there is no Google Cloud project to set up and no 10,000-unit daily limit to plan around.
Example runs
Keyless runs, no API key and no login. Counts move by the minute, so yours will be slightly higher.
1. The prefilled input, run on a datacenter IP that YouTube bot-checked
{ "videos": ["dQw4w9WgXcQ", "jNQXAC9IVRw"] }
One row for Rick Astley - Never Gonna Give You Up (1,825,571,456 views, 19,484,269 likes, 2,458,789 comments) and one BLOCKED row for the second video, with the message "YouTube asked this connection to confirm it is not a bot". The blocked line cost nothing. Later versions re-fetch a bot-checked page on a fresh proxy IP before giving up.
2. A mix of IDs and a short link
{ "videos": ["dQw4w9WgXcQ", "jNQXAC9IVRw", "https://youtu.be/9bZkp7q19f0"] }
Three rows, one per video, the short link resolved to 9bZkp7q19f0 (PSY - GANGNAM STYLE, 6,089,273,797 views, category Music, 14 tags). Run time about 8 seconds, platform cost under $0.0005.
3. A line that is not a video
{ "videos": ["dQw4w9WgXcQ", "https://www.youtube.com/@NASA"] }
A channel link is not a video, so that line comes back as one BAD_FORMAT row that says so, and only the real video is returned. A private or removed video returns a NOT_FOUND row the same way, and a YouTube bot check returns BLOCKED; none of these is charged.
How to use
- In the Apify Console. Open the actor page and click Start — the
videosfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - Via the API. Call it directly with a POST request — no Console needed once you have an API token:
curl "https://api.apify.com/v2/acts/accountable_eel~youtube-video-stats-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"videos":["dQw4w9WgXcQ","jNQXAC9IVRw"]}'
- On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
Input
{"videos": ["dQw4w9WgXcQ","jNQXAC9IVRw"]}
One YouTube video URL or 11-character video ID per line. Accepted formats: dQw4w9WgXcQ, https://www.youtube.com/watch?v=dQw4w9WgXcQ, https://youtu.be/dQw4w9WgXcQ, https://www.youtube.com/shorts/jNQXAC9IVRw.
{"items": ["<identifier-1>", "<identifier-2>"],"maxConcurrency": 5}
items is a list of YouTube video URLs or 11-character video IDs. One dataset row is returned
per item; rows with "found": false are never charged.
Output
One row per item, for example:
| query | found | status | videoId | url | title | channelName | channelId | channelUrl | viewCount | likeCount | commentCount | commentsEnabled | durationSeconds | publishedAt | category | tags | description | isLive | isUnlisted | thumbnailUrl | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dQw4w9WgXcQ | true | OK | <channel> | <duration (seconds)> | 1970-01-01T00:00:00.000Z |
A miss comes back as a row with "found": false and is never charged.
Pricing
Pay-per-event. A flat per-run fee covers session/proxy warmup; you're billed
per item only when data is actually found and returned — see
.actor/pay_per_event.json for exact prices. A miss is never charged.
Use it from Clay, n8n, Make, or an AI agent
This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.
curl "https://api.apify.com/v2/acts/accountable_eel~youtube-video-stats-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"videos":["dQw4w9WgXcQ","jNQXAC9IVRw"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~youtube-video-stats-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"videos":["dQw4w9WgXcQ","jNQXAC9IVRw"]} (swap in an expression from an earlier node for a real value).
Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~youtube-video-stats-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"videos":["{{video}}"]}, mapping the row's video into the videos array.
MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "youtube video stats scraper" — the agent will find and run this actor.