# YouTube Video Stats & Metadata

> Get YouTube video stats by link: views, likes, comments, duration, tags and category for up to 5,000 videos. Official Data API with your free key.

URL: https://cliqtomedia.com/actors/youtube-video-details/

Category: Video, audio & streaming · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto

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.

## How to use it: 3 steps

1. **Follow us on Apify.** The 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 Start.** No 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 results.** When 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.

## 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.

## 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.

## Data fields

- `status` (string): complete, not_found, invalid_input, error, api_key_required, api_key_invalid or quota_exceeded.
- `videoId` (string): YouTube video ID.
- `url` (string): Watch URL.
- `input` (string): Your line from videoUrls.
- `title` (string): Video title (snippet).
- `description` (string): Video description (snippet).
- `channelId` (string): Channel ID (snippet).
- `channelTitle` (string): Channel name (snippet).
- `publishedAt` (string): Publish time, ISO 8601 (snippet).
- `durationSec` (integer): Duration in seconds; null for live or upcoming streams (contentDetails).
- `duration` (string): Duration as returned by the API, ISO 8601 (contentDetails).
- `views` (integer): View count; null when not returned (statistics).
- `likes` (integer): Like count; null when the owner hides likes (statistics).
- `comments` (integer): Comment count; null when comments are disabled (statistics).
- `tags` (array): Video tags; empty list when none (snippet).
- `categoryId` (string): Category ID (snippet).
- `category` (string): Category name in English.
- `defaultLanguage` (string): Language of title and description (snippet).
- `defaultAudioLanguage` (string): Spoken language (snippet).
- `liveBroadcastContent` (string): none, live or upcoming (snippet).
- `definition` (string): hd or sd (contentDetails).
- `caption` (boolean): True when the video has captions (contentDetails).
- `licensedContent` (boolean): True when the video is licensed content (contentDetails).
- `thumbnailUrl` (string): Largest thumbnail URL (snippet).
- `parts` (array): Data groups requested.
- `source` (string): youtube-data-api-v3.
- `sourceUrl` (string): API request URL for this batch (without your key).
- `fetchedAt` (string): When the row was fetched, ISO 8601.
- `error` (string): Why the row is not complete.
- `errorCode` (string): Machine-readable error code.

## Input settings

- `videoUrls` (array, required): One per line: watch?v=, youtu.be/, shorts/, embed/ or live/ links, or plain 11-character video IDs. Duplicates are looked up once. Up to 5,000 per run.
- `apiKey` (string): Required. Your own free key: Google Cloud Console → APIs & Services → enable “YouTube Data API v3” → Credentials → Create credentials → API key. Stored encrypted; never written to the output or logs. Without a key the run returns one api_key_required row and charges no per-video events (only the Actor start fee).
- `parts` (array): Which field groups to fill. snippet: title, channel, publish date, tags, category, language, thumbnail. statistics: views, likes, comments. contentDetails: duration, definition, captions. Quota cost is the same (1 unit per 50 videos) whatever you pick.

## 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

| Task | Input | Key fields | Next step |
|---|---|---|---|
| Report on campaign videos | your campaign video links | `views`, `likes`, `comments`, `fetchedAt` | Put into a weekly sheet or dashboard |
| Check influencer videos before a deal | creator's video links | `views`, `likes`, `comments`, `publishedAt` | Compare engagement per video |
| Clean a video list | a list from a sheet or CRM | `status`, `title`, `durationSec`, `channelTitle` | Remove `not_found` videos, fix titles |
| Tag and category research | competitor video links | `tags`, `category`, `defaultLanguage` | Find common tags and languages |
| Enrich data for a model or BI | many video IDs | all fields | Join on `videoId` |

## Tips

- 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

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.

## Sample 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
}
```

## Similar tools

- [YouTube Search Results Scraper — No Login](https://cliqtomedia.com/actors/youtube-search-scraper/)
- [YouTube Comments Scraper](https://cliqtomedia.com/actors/youtube-comments-scraper/)
- [YouTube Subtitles & Transcript Scraper API](https://cliqtomedia.com/actors/youtube-transcript-scraper/)
- [Apple Podcast Directory & RSS Contacts Scraper](https://cliqtomedia.com/actors/podcast-directory-rss-contacts-scraper/)
- [Audio & Podcast Transcriber (Speech to Text)](https://cliqtomedia.com/actors/audio-video-transcriber/)
- [Social Video Downloader: TikTok, Instagram, X - No Login](https://cliqtomedia.com/actors/social-video-downloader/)
