YouTube Analytics creatorContentType: split Shorts from long-form

The creatorContentType dimension separates SHORTS from VIDEO_ON_DEMAND in YouTube Analytics API reports. How to use it on clips you generated with Sume.

5 min readSume
All posts

To measure Shorts apart from long-form videos in the YouTube Analytics API, add the creatorContentType dimension to a report. It labels each row with the kind of content that was viewed: SHORTS for a Short, VIDEO_ON_DEMAND for a regular video, and three other values for livestreams, Stories and unknowns. Data for the dimension starts on January 1, 2019.

That makes it the right tool when you generate Shorts in volume and want channel-level answers, such as how many views came from Shorts last month versus long-form. It is a different job from per-video counts, which the batchGetStats post covers. Sume generates and edits the clips; it does not call the Analytics API, so this part lives in your own script.

What values does creatorContentType return?

Google's dimensions reference defines the dimension as the type of content associated with the user activity metrics in the row, and lists five values.

creatorContentType values (YouTube Analytics API dimensions page, read 2026-10-03)
ValueMeaning on the page
SHORTSThe viewed content was a YouTube Short
VIDEO_ON_DEMANDA YouTube video that does not fall under one of the other values
LIVE_STREAMThe viewed content was a YouTube livestream
STORYThe viewed content was a YouTube Story
UNSPECIFIEDThe content type of the viewed content is unknown

Which reports accept it?

The channel reports page lists creatorContentType as an optional dimension in several reports, including a user-activity-by-country report and a playback-details report. It also appears in playlist reports. The page does not give a sample request that uses it, so confirm the exact dimension and metric combination in the report tables before you rely on a query.

A query goes to GET https://youtubeanalytics.googleapis.com/v2/reports with ids, startDate, endDate and metrics; dimensions and filters are optional, per the reports.query reference. The yt-analytics.readonly scope covers viewing reports. The reference also notes that data for the most recent days can be missing from queries that use the day dimension, so do not read yesterday's Shorts total as final.

from urllib.parse import urlencode

params = {
    "ids": "channel==MINE",
    "startDate": "2026-09-01",
    "endDate": "2026-09-30",
    "metrics": "views",
    "dimensions": "day,creatorContentType",
}
url = "https://youtubeanalytics.googleapis.com/v2/reports?" + urlencode(params)
print(url)
# Send it with: Authorization: Bearer <token with yt-analytics.readonly>
# Confirm this dimension/metric pair against the report tables first.

Where does Sume fit in the measurement loop?

The label is YouTube's classification of what viewers watched, not a promise about what you intended. If a clip you meant as a Short is reported under another value, you need to know what file you actually shipped before you blame the creative. So keep your own record of what you produced.

Before upload, run the clip through video inspect. It returns a probe with duration_seconds, width, height and size_bytes and does not re-encode the source. Store those four numbers beside the video id you get back from YouTube. If a video later shows up under an unexpected content type, you can compare YouTube's label with the file you actually shipped. The preflight post has a Python version of that check.

Generated clips come from a video generation job whose result you download from unsigned_urls; the job id is a convenient key for that record.

What this does not tell you

creatorContentType splits activity by content type. It does not say why a Short underperformed, and it does not identify which Sume variant won an A/B test; for that you still need video-level rows. Since August 27, 2026 views count the moment a video begins to play across formats, which affects any before-and-after comparison; the view-count post covers it.

  • Use creatorContentType for channel-level Shorts versus long-form totals.
  • Use per-video stats for single-clip performance.
  • Keep a Sume job id to YouTube video id table so either view can be traced to the file.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume