Video & audio · Coming soon

YouTube Video Stats & Metadata

Paste video links or IDs. Get views, likes, comments, duration, tags, category and language. One row per video, with numbers as numbers. You use your own free YouTube API key.

Built and tested. Prices will be shown after release.

Coming soon to the Apify StoreFollow us on Apify

What you get, for example

videoIdjNQXAC9IVRw
urlhttps://www.youtube.com/watch?v=jNQXAC9IVRw
titleMe at the zoo

How it will work: 3 steps

  1. Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: https://www.youtube.com/watch?v=dQw4w9WgXcQ in Video URLs or IDs. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

YouTube Video Stats & Metadata gets views, likes, comments, duration, tags, category and language for a list of YouTube videos. You paste video links or IDs and add your own free YouTube Data API v3 key. You get one clean table row per video, with numbers as numbers.

  • Accepts watch?v=, youtu.be/, shorts/, embed/, live/ and m.youtube.com links, or plain 11-character video IDs. Extra parts of a link like &t=30s are ignored.
  • Duplicates are looked up once.
  • A video that is deleted, private or never existed gets a not_found row with your original line, not an error.
  • A line that is not a YouTube video gets an invalid_input row with your original line.
  • null means "no value from YouTube" (for example, hidden likes). It is never written as 0.

Good for

  • You have a list of video links and need their numbers in a table.
  • You want an official, stable data source with a clear quota.
  • You already have a Google Cloud project, or you can make one in a few minutes.

Not a good fit

  • You have no API key and do not want one. This Actor does not work without a key.
  • You need search results, comments, transcripts or a whole channel. See Related Actors.
  • You need view history over time from the past. YouTube only gives the current numbers.

Who uses it

Marketers

Track the numbers of videos you run ads or sponsor deals on.

Creators

Check stats of your own videos in one table.

Researchers

Add tags and categories to a list of video links.

Price

Prices will be shown after release.

Questions

Do I need a YouTube API key?

Yes. It does not work without a key. You make one for free in a Google project.

How many videos per run?

Up to 5,000 lines per run.

What if a video is private or deleted?

You get a not_found row with your original line, not an error.

Does it work for Shorts and live streams?

Yes. For a stream that is live now, the duration is empty.

Do I need a YouTube or Google account?

You need a Google account to make the free API key. The Actor does not log in to YouTube and does not use cookies.

Does it cost Google money?

No. The YouTube Data API is free within the daily quota. You pay only the Apify price above.

Do the data groups change the price?

No. One video row is one video event, and one request is 1 quota unit, whatever parts you pick.

Is personal data included?

Only public video and channel data that YouTube shows on the video page: channel ID and name. No viewer data.

Details

Step by step on Apify
  1. Get a key (see above).
  2. Paste video links into Video URLs or IDs, one per line. The form already has 2 example videos.
  3. Paste your key into YouTube Data API key.
  4. Click Start. Two videos take a few seconds.
  5. Open the Videos view of the dataset, or download it as CSV, Excel or JSON.
Use cases
TaskInputKey fieldsNext step
Report on campaign videosyour campaign video linksviews, likes, comments, fetchedAtPut into a weekly sheet or dashboard
Check influencer videos before a dealcreator's video linksviews, likes, comments, publishedAtCompare engagement per video
Clean a video lista list from a sheet or CRMstatus, title, durationSec, channelTitleRemove not_found videos, fix titles
Tag and category researchcompetitor video linkstags, category, defaultLanguageFind common tags and languages
Enrich data for a model or BImany video IDsall fieldsJoin on videoId
Tips for better results
  • Mixed link types are fine: watch, youtu.be, Shorts or embed.
  • Duplicate links are looked up once.
  • Run on a schedule to see how views grow.
Limits and good to know

Data comes from the YouTube Data API v3 under your own key and Google project. Please follow the YouTube API Services Terms of Service. This Actor is not affiliated with or endorsed by YouTube or Google.

  • Up to 5,000 lines per run. We tested 5,000 videos in one run: COMPLETE in about 71 seconds, 100 quota units
  • The Actor stops reading at about 270 seconds so it can save the results inside the 300-second default timeout (PARTIAL, reason DEADLINE). Saved rows are kept
  • If your daily quota runs out during a run, the Actor keeps the rows it saved, ends as PARTIAL with reason QUOTA_LIMIT, and the run SUCCEEDED. Run the rest after the quota resets
  • If Google fails again and again for a batch, the run keeps saved rows and ends with reason SOURCE_ERROR
  • Numbers are live at fetchedAt and change all the time. Since August 24, 2026, YouTube counts a view as soon as a video starts to play (Google note), so views can be higher than numbers you saved before that date
  • Category names come from the US category list

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "status": "complete",
  "videoId": "jNQXAC9IVRw",
  "url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
  "input": "https://youtu.be/jNQXAC9IVRw",
  "title": "Me at the zoo",
  "description": "…",
  "channelId": "UC4QobU6STFB0P71PMvOGN5A",
  "channelTitle": "jawed",
  "publishedAt": "2005-04-24T03:31:52Z",
  "durationSec": 19,
  "duration": "PT19S",
  "views": 445744244,
  "likes": 20099017,
  "comments": 10642898,
  "tags": ["me at the zoo", "jawed karim", "first youtube video"],
  "categoryId": "1",
  "category": "Film & Animation",
  "defaultLanguage": "en",
  "defaultAudioLanguage": "en",
  "liveBroadcastContent": "none",
  "definition": "hd",
  "caption": true,
  "licensedContent": true,
  "thumbnailUrl": "https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg",
  "parts": ["snippet", "statistics", "contentDetails"],
  "source": "youtube-data-api-v3",
  "sourceUrl": "https://www.googleapis.com/youtube/v3/videos?part=snippet%2Cstatistics%2CcontentDetails&id=dQw4w9WgXcQ%2CjNQXAC9IVRw",
  "fetchedAt": "2026-10-22T04:43:42.039Z",
  "error": null,
  "errorCode": null
}
Data fields (30)
FieldTypeMeaning
statusstringcomplete, not_found, invalid_input, error, api_key_required, api_key_invalid or quota_exceeded.
videoIdstringYouTube video ID.
urlstringWatch URL.
inputstringYour line from videoUrls.
titlestringVideo title (snippet).
descriptionstringVideo description (snippet).
channelIdstringChannel ID (snippet).
channelTitlestringChannel name (snippet).
publishedAtstringPublish time, ISO 8601 (snippet).
durationSecintegerDuration in seconds; null for live or upcoming streams (contentDetails).
durationstringDuration as returned by the API, ISO 8601 (contentDetails).
viewsintegerView count; null when not returned (statistics).
likesintegerLike count; null when the owner hides likes (statistics).
commentsintegerComment count; null when comments are disabled (statistics).
tagsarrayVideo tags; empty list when none (snippet).
categoryIdstringCategory ID (snippet).
categorystringCategory name in English.
defaultLanguagestringLanguage of title and description (snippet).
defaultAudioLanguagestringSpoken language (snippet).
liveBroadcastContentstringnone, live or upcoming (snippet).
definitionstringhd or sd (contentDetails).
captionbooleanTrue when the video has captions (contentDetails).
licensedContentbooleanTrue when the video is licensed content (contentDetails).
thumbnailUrlstringLargest thumbnail URL (snippet).
partsarrayData groups requested.
sourcestringyoutube-data-api-v3.
sourceUrlstringAPI request URL for this batch (without your key).
fetchedAtstringWhen the row was fetched, ISO 8601.
errorstringWhy the row is not complete.
errorCodestringMachine-readable error code.
Input settings (3)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Video URLs or IDs requiredvideoUrlsarray["https://www.youtube.com/watch?v=dQw4w9WgXcQ", "https://youtu.be/jNQXAC9IVRw"]
YouTube Data API keyapiKeystring
Data groupspartsarray["snippet", "statistics", "contentDetails"]

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure