YouTube Video & Channel Data Scraper avatar

YouTube Video & Channel Data Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
YouTube Video & Channel Data Scraper

YouTube Video & Channel Data Scraper

Scrape YouTube videos and channels by search query, video URL or channel URL. Get title, view count, channel name, subscribers, duration, publish date, description and thumbnail. Export to JSON, CSV or Excel. No API key or proxy.

Pricing

from $2.00 / 1,000 results

Rating

5.0

(1)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

20 hours ago

Last modified

Share

YouTube Video & Channel Data Scraper

YouTube Video & Channel Data Scraper

Here is one real result, with every field the actor returns:

{
"videoId": "CLeZyIID9Bo",
"url": "https://www.youtube.com/watch?v=CLeZyIID9Bo",
"title": "Chill Lofi Mix [chill lo-fi hip hop beats]",
"channelName": "Settle",
"channelId": "UCkKT4qf-TcPFOmpqhTawrGA",
"channelUrl": "https://www.youtube.com/channel/UCkKT4qf-TcPFOmpqhTawrGA",
"viewCount": 34086842,
"viewCountText": "34,086,842 views",
"likeCount": 187000,
"likeCountText": "187K",
"duration": "1:44:52",
"publishedText": "3 years ago",
"publishedAt": "2022-08-12",
"description": "YouTube Playlists: http://listen.settle.fm/youtube Listen on Spotify, Apple Music & more: https://listen.settle.fm/playlists Tracklist ...",
"thumbnailUrl": "https://i.ytimg.com/vi/CLeZyIID9Bo/hq720.jpg?sqp=-oaymwE2CNAFEJQDSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARhDIGQoZTAP&rs=AOn4CLCljfsoUy4QvdaH9IydXKSjwkcbgg",
"isLive": false,
"source": "search",
"observedAt": "2026-08-10T14:38:45.934Z",
"error": null
}

The most complete YouTube scraper available. It returns every field the public YouTube data layer exposes for each video, plus enriched like counts and an ISO publish date on search and channel results, and gives you three inputs (search queries, video URLs, channel URLs) to target exactly the videos you need. No API key or proxy.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor reads YouTube's public data layer and returns one normalized record per video. It accepts three kinds of input, in any combination:

  • searchQueries: keywords to search YouTube for; returns matching video cards.
  • videoUrls: video URLs or IDs; returns full per-video details including subscriber count.
  • channelUrls: channel URLs; returns that channel's recent videos.

With enrichDetails on (the default), every search and channel result is enriched with its like count and exact ISO publish date (video-URL records always include them). Missing values are returned as null. No API key and no proxy are required.

Quickstart

Open the actor, paste this into the input, and press Run. It returns the 10 top videos for a search.

{
"maxVideos": 10,
"searchQueries": ["lofi hip hop"],
"enrichDetails": true,
"country": "US",
"language": "en"
}

Provide any combination of searchQueries, videoUrls, and channelUrls. Every video-URL record includes the channel's subscriberText.

Input reference

FieldTypeRequiredDefaultDescription
searchQueriesstring[]no["lofi hip hop"]Keywords to search YouTube for. Each query returns matching videos.
videoUrlsstring[]no[]YouTube video URLs or IDs to fetch full details for (watch?v=..., youtu.be/..., or a bare 11-character ID).
channelUrlsstring[]no[]Channel URLs to pull recent videos from (/@handle, /channel/UC..., /c/name).
maxVideosintegerno10Maximum number of videos to return across all inputs. Free Apify plans are capped at 10 per run.
enrichDetailsbooleannotrueAdd like counts and the exact publish date to every video found by search or channel. Turn off for the fastest run.
countrystringnoUSTwo-letter country code for results (gl).
languagestringnoenInterface language code (hl).

At least one of searchQueries, videoUrls, or channelUrls must be provided.

Output reference

One dataset item per video. Types: string, integer, boolean, or null when the source value is absent.

FieldTypeDescription
videoIdstringYouTube 11-character video ID.
urlstringCanonical watch URL for the video.
titlestringVideo title.
channelNamestringName of the channel that published the video.
channelIdstringChannel ID (UC...), or null.
channelUrlstringCanonical channel URL, or null.
subscriberTextstringChannel subscriber count as shown, for example 4.53M subscribers. Present on video-URL records only.
viewCountintegerView count parsed to an integer, or null.
viewCountTextstringView count as shown, for example 34,086,842 views.
likeCountintegerLike count parsed to an integer, or null when unavailable.
likeCountTextstringLike count as shown, for example 187K, or null.
durationstringVideo duration, for example 1:44:52. null on video-URL records.
publishedTextstringRelative or absolute publish text, for example 3 years ago or Oct 24, 2009.
publishedAtstringExact publish date normalized to YYYY-MM-DD, or null.
descriptionstringVideo description or search snippet, or null.
thumbnailUrlstringURL of the best available thumbnail.
isLivebooleantrue when the item is a live stream. Present on search and channel records.
sourcestringWhere the record came from: search, video, or channel.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. An item that could not be parsed is written with a populated error field instead.

subscriberText appears on video-source records; isLive and duration appear on search and channel records.

Example output record

Real record from a live run (input {"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"], "maxVideos": 1}). The description is trimmed here for readability; the actor returns the full description string:

{
"videoId": "dQw4w9WgXcQ",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"channelName": "Rick Astley",
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"channelUrl": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
"subscriberText": "4.53M subscribers",
"viewCount": 1804354752,
"viewCountText": "1,804,354,752 views",
"likeCount": 19000000,
"likeCountText": "19M",
"duration": null,
"publishedText": "Oct 24, 2009",
"publishedAt": "2009-10-24",
"description": "The official video for \"Never Gonna Give You Up\" by Rick Astley. [trimmed for README]",
"thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"source": "video",
"observedAt": "2026-08-15T11:12:21.690Z",
"error": null
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~youtube-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["lofi hip hop"],"maxVideos":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~youtube-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"channelUrls":["https://www.youtube.com/@RickAstleyYT"],"maxVideos":50}'

Apify CLI:

apify call scrapers_lat/youtube-scraper \
--input '{"videoUrls":["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per video record returned (result event). See the pricing tab for the current per-result price.
  • No charge on failure. Items that cannot be parsed are written with a populated error field and are not charged. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run. Upgrade for higher maxVideos.
  • No API key or proxy is required.

FAQ and troubleshooting

A run returned 0 records. Why? No input was provided, or the search matched nothing. Provide at least one of searchQueries, videoUrls, or channelUrls. Zero-result runs are not charged.

Why is likeCount null on some records? Like counts and exact dates are added by the detail enrichment step. Keep enrichDetails on (the default) so search and channel results carry them. Video-URL records always include them.

Why is subscriberText missing on some records? Subscriber count is only exposed on the per-video detail response, so it appears on video-source records (from videoUrls), not on search or channel cards.

Can I mix search, video, and channel inputs? Yes. Provide any combination; results from all three are merged and deduplicated by video ID up to maxVideos.

Do I need a YouTube API key? No. The actor reads YouTube's public data layer directly. No API key and no proxy are needed.

Is this an official YouTube tool? No. This actor is independent and has no affiliation with YouTube or Google. It reads only data that is publicly available.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with YouTube or Google. Accesses only publicly available data.