YouTube Metadata Scraper With Creator Contact Leads
Pricing
from $4.99 / 1,000 results
YouTube Metadata Scraper With Creator Contact Leads
YouTube Metadata Scraper extracts public video and creator data, including titles, descriptions, views, likes, upload dates, channel details, and publicly available contact leads. Build structured datasets for content research, influencer discovery, lead generation, and competitor analysis.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
YouTube Scraper β Extract Videos, Creator Contacts and Captions
This YouTube scraper pulls video metadata and turns every result into a creator contact record β the real @handle, exact channel-level view and video counts, and every external link and social profile published on the channel's public About panel. Feed it video links, prospect by keyword, or both; every unique channel behind the results is enriched once, however many videos it published. Every response is typed, normalized JSON β no HTML, no selectors, no parsing step. Once you've read this, you'll know exactly which input to set and which fields to pull for an outreach list, a caption-driven AI pipeline, or channel-level analytics.
What is YouTube Metadata Scraper With Creator Contact Leads?
YouTube Metadata Scraper With Creator Contact Leads is an Apify Actor that scrapes public YouTube video pages and channel About pages and returns one JSON row per video, enriched with the creator's contact details. It works entirely logged out β no YouTube account, no API key, no cookies. Its distinguishing move is opening the channel's About panel behind every video and reading off the real handle, exact lifetime stats, and every external link, rather than stopping at the video itself.
- Scrape video metadata β title, description, tags, category, duration, view/like/comment counts, thumbnails, live/members-only/paid flags
- Scrape creator contact records β handle, canonical URL, country, join date, exact channel view/video counts, external links, a platform-to-URL socials map, and an honest business-email gate flag
- Scrape captions and comments β caption tracks in plain text or timed segments, plus top-level comments
- Export as JSON, CSV, Excel, XML or HTML from the dataset tab, or pull results via the Apify API
- No proxy management and no HTML parsing on your end β the Actor handles both
What data does YouTube Metadata Scraper With Creator Contact Leads collect?
Every dataset row blends three kinds of data: the video itself, the creator behind it, and β optionally β the audience and caption text attached to that video.
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Videos | title, view/like/comment counts, upload date, duration, tags | title, viewCount, likeCount, commentCount, uploadDatetime, lengthInSeconds, tags |
| Creator contact records | real handle, exact channel stats, links, socials, email/business-email gate | channelHandle, channelViewCount, channelVideoCount, channelLinks, channelSocials, channelEmail, channelHasBusinessEmail |
| Captions & comments | caption language and text, top-level comment text and author | transcripts (language, languageCode, isAutoGenerated, content), comments (text, author, likeCount, replyCount) |
Need creator contact leads from other platforms?
If your outreach list spans more than YouTube, API Empire publishes companion contact-lead Actors for other platforms in the same account: Instagram Profile Phone Number Scraper By Keyword, TikTok Profile Videos API Scraper With Playlist Details, and LinkedIn Profile Phone Number Scraper. Each follows the same pattern β public metadata plus a contact record β so the fields line up if you're merging leads from more than one platform into one CRM import.
How does YouTube Metadata Scraper With Creator Contact Leads differ from the official YouTube Data API v3?
The YouTube Data API v3 gives you a quota-metered, OAuth-aware endpoint for video and channel statistics; this Actor gives you the same public data plus the About-panel contact fields the API does not expose, with no Google Cloud setup.
| Feature | YouTube Data API v3 | This Actor |
|---|---|---|
| Access setup | A Google Cloud project, an enabled API, and an API key (OAuth for anything beyond public reads) | Runs directly from the Apify Console β no Google account or credentials |
| Daily allowance | 10,000 units/day by default, shared across every call your app makes that day | No YouTube-side daily quota β governed by your Apify plan and pay-per-event usage |
| About-panel links, socials, business-email status | Not exposed β channels.list returns only snippet, statistics and brandingSettings | Returned per row as channelLinks, channelSocials, channelWebsite, channelHasBusinessEmail |
| Caption/transcript text | captions.download requires an OAuth scope tied to edit permission on that specific video β third-party apps cannot fetch captions for videos they don't own | Downloads the public caption track directly for any video that has one, no OAuth |
| Keyword-based discovery | search.list draws from the same shared daily quota as every other call | Deep-paged keyword search, capped only by max_results_per_keyword |
| Top-level comments | commentThreads.list is a separate metered call per page | Up to max_comments comments attached to the row automatically |
(Sourced from Google's YouTube Data API v3 documentation β Getting Started, Channels, captions.download β checked 2026-07-30.)
Reach for the official API when you already have per-user OAuth consent and only need statistics or upload management inside your own Google Cloud quota. Reach for this Actor when you need About-panel contact fields, caption text for videos you don't own, or a run that starts without any Google Cloud setup.
Why do developers and teams scrape YouTube?
Different roles pull different slices of the same row β the fields below all come from one run.
For AI engineers and agent builders
Caption text (transcripts[].content) gives you clean source text for a video without a separate transcription step, ready to chunk into a vector store for RAG, or to summarize with an LLM alongside the video's own title and description. Because transcript_format: "timestamps" keeps each segment's start and dur, an agent can cite the exact moment a claim was made in a video rather than the whole transcript. Combine that with channelSocials and channelEmail and the same run also produces a structured outreach record an agent can act on directly, without an intermediate parsing step.
For marketers and creator-partnership teams
Prospect a niche by keyword, turn on onlyChannelsWithContact, and the dataset that comes back is already an influencer shortlist: handle, exact subscriber count, social links and a scraped email or business-email flag for every qualifying creator. Layer minChannelSubscribers and channelCreatedAfter/channelCreatedBefore to match the tier and channel maturity a specific campaign needs before anyone on the team opens a single channel page.
For researchers and analysts
channelViewCount and channelVideoCount are exact lifetime figures, not YouTube's rounded on-page label, so cadence and reach comparisons across creators in a niche don't inherit YouTube's own rounding. Pair that with comments for a sample of audience sentiment and channelCountry plus channelCreatedAt to segment a niche by geography and channel age β all from public pages, no account required.
For revenue and growth teams building lead-gen pipelines
Feed in a list of video URLs you already track β competitor uploads, category leaders, past collaborators β and get back the canonical @handle and every outreach channel for that creator in one pass, deduplicated so a channel with ten videos in your list only costs one About-panel lookup.
How to scrape YouTube (step by step)
- Open YouTube Metadata Scraper With Creator Contact Leads on its Apify Store listing and click Start, or configure it from the Apify Console.
- Provide input β paste video links/IDs into
urls, niche phrases intokeywords, or both. Neither is marked required in the schema, but the run fails immediately with "Provide at least one video URL/ID or one prospecting keyword" if both are left empty. - Set your lead filters β
onlyChannelsWithContact,requireSocialProfile,requireEmail,minChannelSubscribers, and thechannelCreatedAfter/channelCreatedBeforewindow all narrow the result to qualifying channels before anything is saved. - Start the run and watch it stream rows into the dataset as each video finishes.
- Download results as JSON, CSV, Excel, XML or HTML from the OUTPUT tab, or pull them programmatically via
apify_client.
What to do when YouTube changes its structure
The Actor is maintained against YouTube's current page structure, and the output schema β field names and types β stays stable on your end even when the underlying extraction logic needs an update. No numeric turnaround time is published for that maintenance.
What changed in YouTube scraping recently?
YouTube retired "Sort by: upload date" and "Sort by: rating" in search results, announced January 9, 2026 β the "Sort by" menu was renamed "Prioritize" and now offers only Relevance and Popularity (ppc.land, 2026-01-11). This Actor's sort_order input still accepts the retired values for compatibility, but logs a warning and returns relevance-ordered results when you pick one β it cannot restore a sort YouTube no longer offers.
Separately, YouTube has widened its "Sign in to confirm you're not a bot" (LOGIN_REQUIRED) walling of logged-out and datacenter-IP traffic, a pattern reported as escalating since mid-2024 and continuing through 2025 and into 2026 (yt-dlp issue tracker). This is exactly the wall this Actor's residential-proxy default and retry logic are built to route around β no action is required on your end beyond leaving the default proxy configuration in place.
β¬οΈ Input
All 22 parameters are optional at the schema level, but the run fails at start if both urls and keywords are empty β at least one lead source is required in practice.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
urls | No | array | Video links or IDs. Accepts youtube.com/watch?v=β¦, youtu.be/β¦, /shorts/β¦, /live/β¦, /embed/β¦ or the bare 11-character video ID, one per line. Leave empty to prospect by keyword instead. | ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"] |
keywords | No | array | Niche search phrases, one per line. Every video the search returns is resolved to its channel and enriched. | ["home barista setup"] |
max_results_per_keyword | No | integer | How deep to page each search term. Default 20, minimum 1, maximum 100000 β a cap, not a promise: YouTube stops issuing continuation tokens somewhere around 130β480 videos per term. | 30 |
sort_order | No | string (enum) | Applies to keyword prospecting only. relevance (default) or view_count change ranking; upload_date and rating are retired by YouTube and kept only for input compatibility β picking one logs a warning. | "relevance" |
includeChannelContacts | No | boolean | Opens the creator's About panel and adds the handle, canonical URL, country, join date, exact stats, links, socials and business-email gate flag. Default true. | true |
emailSources | No | array (enum, multi-select) | Where to look for a scraped email address. Default ["channel_about_bio", "channel_about_page", "video_description"]; choices are channel_about_bio, channel_about_page, video_description. | ["channel_about_bio", "video_description"] |
maxChannelsToEnrich | No | integer | Hard budget on About-panel requests. Default 0 (no cap), minimum 0. Once the cap is reached, later rows keep full video metadata but no lead block. | 50 |
onlyChannelsWithContact | No | boolean | Keep only rows with a contact signal β a scraped email, a social profile, a website link, or a configured (gated) business email. Default false. | true |
requireSocialProfile | No | boolean | Keep only rows whose About panel lists a recognised social platform link. Default false. | false |
requireEmail | No | boolean | Strictest filter β keep only rows where a literal email address was found in scraped text. Default false; expect this to discard most channels. | false |
minChannelSubscribers | No | integer | Floor on channelSubscribersCount, an approximate figure de-abbreviated from YouTube's rounded label. Default 0 (no floor), minimum 0. | 5000 |
channelCreatedAfter | No | string | Keep only newer channels. Absolute (2020-01-01) or relative ("3 years"), matched against channelCreatedAt. | "2020-01-01" |
channelCreatedBefore | No | string | Keep only established channels. Absolute (2018-12-31) or relative ("5 years"). Rows with no readable join date are never dropped by this filter. | "5 years" |
max_comments | No | integer | Top-level comments to attach per video. Default 2, minimum 0, maximum 5000. Set 0 to skip comments entirely. | 0 |
include_transcripts | No | boolean | Downloads the caption track when YouTube exposes one; byte-identical duplicate tracks are removed automatically. Default true. | false |
transcript_format | No | string (enum) | text (default) β one plain-text block β or timestamps β timed segments with start/dur/text. | "text" |
include_english_auto | No | boolean | Also accept YouTube's auto-generated English captions when no human-uploaded track exists. Default false. | false |
include_non_english | No | boolean | Also accept non-English caption tracks β a popular video can expose 38+ language tracks. Default false. | false |
maxTranscriptLanguages | No | integer | Cap on distinct caption tracks stored per video, applied after duplicates are removed. Default 3, minimum 1, maximum 40. | 3 |
transcriptTimeoutSeconds | No | integer | Wall-clock budget for caption downloads on one video. Default 90, minimum 15, maximum 600. The row still saves without captions if this runs out. | 90 |
proxyConfiguration | No | object | Proxy configuration. Default {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"} β this is the configuration these endpoints were verified on. | see default |
allowProxyAutoUpgrade | No | boolean | If the run starts with no proxy selected, switch to Apify Residential (US) and log why. Default true. | true |
Example JSON input
{"keywords": ["home barista setup", "specialty coffee roaster tour"],"max_results_per_keyword": 30,"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"sort_order": "relevance","includeChannelContacts": true,"emailSources": ["channel_about_bio", "channel_about_page", "video_description"],"maxChannelsToEnrich": 0,"onlyChannelsWithContact": true,"requireSocialProfile": false,"requireEmail": false,"minChannelSubscribers": 5000,"channelCreatedAfter": "","channelCreatedBefore": "2023-01-01","max_comments": 5,"include_transcripts": true,"transcript_format": "text","include_english_auto": false,"include_non_english": false,"maxTranscriptLanguages": 3,"transcriptTimeoutSeconds": 90,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"},"allowProxyAutoUpgrade": true}
Common pitfall: the five lead-qualification filters (onlyChannelsWithContact, requireSocialProfile, requireEmail, minChannelSubscribers, channelCreatedAfter/channelCreatedBefore) all read from the About-panel enrichment. Leave includeChannelContacts at its default true when using any of them β with it turned off, every row fails these checks and the dataset comes back empty.
β¬οΈ Output
Every row is typed, normalized JSON with a fixed set of keys β the same 48 fields on every row, null where a value genuinely doesn't apply, never a missing key. Export as JSON, CSV, Excel, XML or HTML from the dataset tab. Two dataset views ship with the Actor: π Creator contact leads (the default, 26 fields, contact-first) and π¬ Full video metadata (28 fields, every video field including transcripts and comments). Both are views over the same underlying rows β the full 48-field row is always what's stored.
Scraped video + creator contact record
{"id": "dQw4w9WgXcQ","url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","description": "The official video for βNever Gonna Give You Upβ by Rick Astley...","lengthInSeconds": 213,"uploadDatetime": "2009-10-25T06:57:33-07:00","publish_date_since": "16 years ago","category": "Music","tags": ["rick astley", "never gonna give you up", "80s"],"thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg","thumbnails_urls": ["https://i.ytimg.com/vi/dQw4w9WgXcQ/mqdefault.jpg"],"channelID": "UCuAXFkgsw1L7xaCfnd5JJOw","channelURL": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw","channelUsername": "RickAstleyYT","channelDisplayName": "Rick Astley","channelSubscribers": "4.52M","author_avatar_url": "https://yt3.ggpht.com/abc123=s800-c-k-c0x00ffffff-no-rj","is_verified": true,"viewCount": 1650000000,"likeCount": 18500000,"commentCount": 2400000,"is_live_now": false,"description_links": ["https://RickAstley.lnk.to/whereareyounow"],"is_comments_off": false,"is_members_only": false,"is_paid_content": false,"transcripts": [{"language": "English","languageCode": "en","isAutoGenerated": false,"content": "We're no strangers to love, you know the rules and so do I..."}],"comments": [{"id": "UgxABC123","text": "Never gets old.","author": "@someviewer","authorChannelId": "UCxyz456","likeCount": 341,"publishedTime": "3 years ago","replyCount": 2}],"channelLeadEnriched": true,"channelAboutCacheHit": false,"channelHandle": "@RickAstleyYT","channelCanonicalUrl": "https://www.youtube.com/@RickAstleyYT","channelJoinedDate": "Feb 1, 2015","channelCreatedAt": "2015-02-01","channelCountry": "United Kingdom","channelViewCount": 2513258892,"channelVideoCount": 431,"channelAboutDescription": "Official Rick Astley YouTube channel.","channelSubscribersCount": 4520000,"channelLinks": [{"title": "Instagram", "url": "https://www.instagram.com/rickastley", "domain": "instagram.com", "platform": "instagram"},{"title": "Official site", "url": "https://www.rickastley.co.uk", "domain": "rickastley.co.uk", "platform": ""}],"channelSocials": {"instagram": "https://www.instagram.com/rickastley", "twitter": "https://x.com/rickastley"},"channelSocialPlatforms": ["instagram", "twitter"],"channelWebsite": "https://www.rickastley.co.uk","channelHasBusinessEmail": true,"channelBusinessEmailStatus": "gated_sign_in","channelEmail": null,"channelEmailSource": null,"channelContactSignals": 3}
How does YouTube Metadata Scraper With Creator Contact Leads compare to other YouTube scrapers?
| Feature | This Actor | Generic YouTube contact scraper |
|---|---|---|
| Entity coverage | Video metadata + creator contact record + captions + comments, all in one row | Channel/creator record only β no video-level fields, observed on coregent/youtube-creator-leads-finder and nexgendata/youtube-creator-contact-finder listings (checked 2026-07-30) |
| Caption/transcript text | Included, with language and auto-caption controls | Not documented on either listing checked 2026-07-30 |
| About-panel lookup cost model | One request per unique channel, cached for the whole run | Not documented on either listing checked 2026-07-30 |
| Lead-qualification filters | 5 filters β contact signal, social profile, email, subscriber floor, channel-age window β applied before a row is saved | coregent/youtube-creator-leads-finder documents an equivalent filter set (subscriber range, creator country, channel age) applied pre-save, per its listing checked 2026-07-30 |
| Pricing model | One charged event (row_result) per pushed row; filtered-out and failed videos are never charged | coregent/youtube-creator-leads-finder bills a creator-lead event per delivered creator plus an optional email-validated event; nexgendata/youtube-creator-contact-finder bills a flat rate per channel scanned (both per their listings, checked 2026-07-30) |
If you're building an AI agent or RAG pipeline, the entity-coverage row is the decision-maker β parsing HTML for captions or comments inside an agent loop is a reliability failure mode, not a feature, and this Actor returns both as typed arrays alongside the contact record in the same call.
How many results can you scrape with YouTube Metadata Scraper With Creator Contact Leads?
There's no hard cap on total videos or channels in the Actor itself β urls and keywords both accept an unbounded list, and max_results_per_keyword (default 20, maximum 100000) sets the cap per search term. In practice, YouTube itself stops issuing continuation tokens somewhere around 130β480 videos per keyword, so a max_results_per_keyword above that ceiling has no further effect. Many videos in a result set share one channel β 30 videos resolved to 15 unique channels in the Actor's own testing β so the number of About-panel lookups is usually well below the video count, and maxChannelsToEnrich lets you cap that separately. Videos are processed with 4 concurrent in-flight requests. No benchmark run time is published here β actual duration depends on how many transcripts and comments you request per video.
Integrate YouTube Metadata Scraper With Creator Contact Leads and automate your workflow
YouTube Metadata Scraper With Creator Contact Leads works with any language or tool that can send an HTTP request.
REST API integration
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("youtube-metadata-scraper-with-creator-contact-leads").call(run_input={"keywords": ["home barista setup"],"max_results_per_keyword": 30,"onlyChannelsWithContact": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["channelHandle"], item["channelEmail"], item["channelSocials"])
Works in Python, Node.js, Go, Ruby, cURL.
Automation platforms (n8n, Make, LangChain)
Any Apify Actor, including this one, can be triggered from n8n's Apify node or Make's Apify app by selecting the Actor and passing the same input shown above as run input; both platforms poll the run and pass the resulting dataset items downstream. In a LangChain or similar agent framework, wrap the apify_client call above as a tool function β the typed JSON output, including caption text and the contact record, can be passed directly into an agent's context or a vector-store ingestion step without an HTML-parsing stage in between.
Is it legal to scrape YouTube?
Scraping publicly accessible YouTube pages to collect data that is visible to any logged-out visitor is generally lawful; this Actor returns only that publicly available data β it does not log in, does not bypass authentication, and does not attempt to defeat the sign-in wall protecting YouTube's own business-email field. Because the creator contact record includes personal and business contact information tied to an identifiable person (an email address, social profile links, a declared country), GDPR and CCPA govern how you may store and use it, not just how it was collected β you need a lawful basis for outreach, and recipients retain rights over their own data regardless of where you sourced it. Consult legal counsel for commercial use cases involving bulk personal data.
β Frequently asked questions
Does YouTube Metadata Scraper With Creator Contact Leads work without a YouTube account?
Yes. No account, no API key, no cookies, no OAuth token β every request is made logged out.
How often is the scraped data updated?
Every run fetches live pages at request time; nothing is served from a cache across runs. The only in-run cache is the per-channel About-panel lookup, which exists to avoid re-fetching the same channel twice inside a single run β it's discarded once the run ends.
What happens when a video is private, deleted, age-restricted or region-locked?
The Actor detects this from playabilityStatus and an empty video title on an HTTP 200 response β YouTube almost never returns a hard error status for these cases. It retries the video on a fresh proxy exit up to three times; if it's still blocked, the video is skipped, logged with its error in the run's SUMMARY key-value record, and never appears as a row in the dataset. If every URL and keyword in a run resolves to zero videos at all, the whole run fails with "No videos resolved. Check the video URLs/IDs or the keywords."
Can I scrape a creator's gated business email?
No. YouTube's own "business email" field sits behind a sign-in wall β it is not a CAPTCHA, and no proxy or retry logic recovers it. This Actor reports it as the boolean channelHasBusinessEmail (with channelBusinessEmailStatus distinguishing gated_sign_in from not_configured) and never fabricates or guesses an address. channelEmail is populated only when a real address is literally present in scraped text β the About bio, the About page payload, or the video description.
Am I charged for videos that get filtered out or fail?
No. The five lead-qualification filters run before the dataset push, so a filtered-out video is never charged. A video that fails extraction after retries β blocked, degraded, or missing required fields β is also never pushed and never charged. Only a row that clears every filter and a completeness check (title, view count, and channel identity all present) is saved and billed with the single row_result charged event.
Does YouTube Metadata Scraper With Creator Contact Leads work for AI agent workflows and LLM pipelines?
Yes β it's callable as an HTTP endpoint by any agent framework via the Apify API and apify_client. Every response is typed JSON with stable field names, including caption text and the contact record, so it can be passed straight into an LLM context window, indexed into a vector store, or routed through an agent tool.
How does YouTube Metadata Scraper With Creator Contact Leads handle YouTube's anti-bot system?
It defaults to Apify Residential proxies (US) because datacenter and platform exits are served an HTTP 200 page with playabilityStatus: LOGIN_REQUIRED a large majority of the time. It treats a body under roughly 10,000 bytes, or one missing the ytInitialData marker, as a degraded page and retries; on repeated failures or a 403/429/503 response it escalates the proxy mode, moving to Residential/US if it started elsewhere. If Residential itself fails three times in a row on one video, that video is skipped rather than retried indefinitely.
How does YouTube Metadata Scraper With Creator Contact Leads compare to other YouTube scrapers?
The comparison table above covers this in detail. In short: coregent/youtube-creator-leads-finder and nexgendata/youtube-creator-contact-finder both focus on the channel/creator record and don't document video-level fields, captions or comments (checked 2026-07-30); this Actor returns all of that plus the contact record from the same run.
Does YouTube Metadata Scraper With Creator Contact Leads return data in a format LLMs can use directly?
Yes. Typed, normalized JSON with stable field names β no HTML, no selectors, no parsing step before passing it to an LLM.
Can I use YouTube Metadata Scraper With Creator Contact Leads without managing proxies?
Yes. The Actor ships with a working default (Apify Residential, US) and auto-upgrades to it if you start a run with no proxy configured, logging why it did so. Set allowProxyAutoUpgrade: false to force your own exact network choice instead.
What happens when YouTube changes its structure or blocks the scraper?
The scraper is maintained, and the output schema β field names and types β stays stable on your end even when the extraction logic underneath needs an update. No numeric turnaround time is published for that maintenance.
π¬ Your feedback
Found a bug or missing a field? We want to know. Reach out through this Actor's Apify Store page or Apify's support channels with your run ID and what you expected β reports like this keep the Actor accurate as YouTube's own pages keep changing.