Supported Content Types
- Videos: Long-form content. 1 video, up to 4 hours. Max 5 GB.
- Shorts: Vertical/square video, max 3 minutes. YouTube auto-detects based on duration and aspect ratio.
Quirks & Gotchas
”Made for Kids” (COPPA)
This is not just a quirk, it’s a legal requirement.- You must flag content as
madeForKids: trueif it targets children. - Failure to do so can result in penalties - real ones, from the FTC.
- We expose this field in the
data.YOUTUBEobject. Use it. Don’t skip it. Don’t “figure it out later”.
Shorts Detection
There is no special “upload as Short” button. YouTube decides for you based on the file:- Duration: Under 3 minutes (180 seconds).
- Aspect Ratio: Vertical (9:16) or Square (1:1). Technically 1:3 to 1:1.
YouTube Title is Required
Unlike most platforms where you just need text, YouTube treatsdata.YOUTUBE.text as the video title. If you leave it empty, YouTube can reject the upload.
Media Limits
See Platform Limits for the full breakdown.Text & Field Limits
Post Options
Send YouTube-specific options insidedata.YOUTUBE.
Analytics
For general analytics concepts (refresh rates, data retention, what “Returns 0” means), see the Analytics Overview. YouTube analytics are all Lifetime values. There is no rolling window - everything is cumulative from day one.Profile (Channel) Analytics
Period: Lifetime.Post (Video) Analytics
Period: Lifetime.Quirks
- YouTube doesn’t distinguish between impressions and unique impressions at any level.
- Dislikes are available through the API (though YouTube no longer shows dislike counts publicly). Handy if you want to know the truth.
- Channel-level likes are not available. Video shares need raw analytics enabled. YouTube gives us a lot, but not everything.
- Imported videos are always
type: VIDEO. Shorts are flagged in the post’sextraDatainstead:{ "contentType": "SHORTS", "isShort": true }, and theirpermalinkuseshttps://www.youtube.com/shorts/<id>.contentTypeis YouTube’screatorContentType(SHORTS,VIDEO_ON_DEMAND,LIVE_STREAM, …). If YouTube can’t tell us (no views yet, say),extraDataisnulland the link stays/watch. Re-running the import updatesextraDataandpermalinkon videos you already imported.
Raw Analytics - Demographics & Audience Data
YouTube raw analytics include demographics data when enabled for your organization. We query the YouTube Analytics API for each video and return age/gender breakdowns and country-level view counts. The same breakdown is also available for the whole channel in the profile raw analytics.Raw analytics are gated per organization (
rawYoutubeAnalyticsEnabled). If raw analytics are disabled for your org, the extended fields below (demographics, traffic sources, monetization, etc.) are not collected - only the standard metrics remain.Monetization
Monetization (revenue) data is included in raw analytics only when both conditions are met:- Raw analytics are enabled for your organization, and
- The account connected with business access - the YouTube monetary analytics scope, granted via
withBusinessScopeat connect time.
- Channel-level - a channel-wide revenue report for the analytics window, stored in the profile raw analytics
monetizationfield. - Video-level - a per-video revenue report, stored in each video’s
monetizationfield.
estimatedRevenue, estimatedAdRevenue, estimatedRedPartnerRevenue, grossRevenue, cpm, playbackBasedCpm, adImpressions, and monetizedPlaybacks.
A channel without monetization - not in the YouTube Partner Program (YPP), or the account never granted the monetary scope - returns the string
"no data available" in the monetization field instead of a report. This is expected and never fails the analytics run.monetization field holds a report with columnHeaders and rows:
Channel Demographics
Profile raw analytics carry a channel-widedemographics field: viewer percentage by age group and gender, plus views by country (sorted by views, descending). It covers the last 365 days, so it’s a stable audience picture rather than a noisy 30-day slice. If YouTube returns nothing (or the call fails), the field is null and the rest of the run carries on.
Video-Level Raw Data
Empty demographics data is normal. YouTube has undocumented thresholds for when demographics become available. Unlike Instagram (~1,000 followers), nobody knows YouTube’s minimum. If
demographics comes back empty or null for your videos, it likely means the account or video hasn’t hit the threshold yet. If you do see data, let us know your account stats - we’re trying to figure out the threshold too.Raw YouTube data includes viewer percentage by age group and gender and views by country (sorted by view count, descending). This is useful for audience analysis and content strategy - especially if you’re targeting specific demographics or regions.
lifetimeTotals covers the video’s whole life (the window starts on or before the day before it went live, and runs until today). averageViewDuration is in seconds, averageViewPercentage is a percentage of the video length. contentType / isShort come from YouTube’s creatorContentType. Any of these is null when YouTube has no data for the video yet. The normalized shares metric is taken from lifetimeTotals.shares.At the video level, the
monetization field is null when the account has no business access (monetary scope was never granted), and "no data available" when the account has business access but the video has no monetary data (e.g. not in YPP). A populated report only appears when business access is granted and the video earned revenue in the window.