Creator pillar · v0.14.1

audience-snapshot AudienceSnapshot

Daily aggregate of audience activity for one channel on one date. Path-shape: `creator/audience-snapshots/YYYY-MM-DD-{channel-slug}.yaml`. Core activity row is fetched daily; demographic / geographic / traffic-source breakdowns are fetched on a weekly cadence (the connector decides — empty `*_breakdown` vectors are valid for a day where only the core row was synced).

$id · https://corpospec.com/schemas/v0.14.1/audience-snapshot.schema.json

Fields

Field Type Required Description
average_view_duration_seconds number yes
average_view_percentage number yes
channel PathRef yes Path-based cross-reference relative to .corpospec/ root. Pattern: `^[a-z0-9_-]+(/[a-z0-9_.-]+)+$`
comments integer yes Aggregate count only; comment text and author identities not synced.
date IsoDate yes Activity day. Connectors normalise to the platform's reporting timezone (e.g. YouTube Analytics buckets in Pacific time).
dislikes integer yes
engaged_views integer yes
estimated_minutes_watched integer yes
id PathRef yes CorpoSpec PathRef (e.g. `creator/audience-snapshots/2026-05-05-unstarter-yt`).
likes integer yes
provenance SyncProvenance yes Provenance metadata stamped on every synced atomic record across the creator pillar. Per-record granularity; the `retention_tier` reflects the strictest tier of any field on the record so the cache-purge job can decide conservatively. Field-level retention distinctions are documented in each entity type's struct doc-comments — the schema documents the static taxonomy, the data carries only the per-fetch state.
shares integer yes
subscribers_gained integer yes
subscribers_lost integer yes
thumbnail_impressions integer yes Number of times the channel's video thumbnails were shown to viewers (impression count).
thumbnail_impressions_ctr number yes Click-through rate on `thumbnail_impressions` as a percentage.
videos_added_to_playlists integer yes
videos_removed_from_playlists integer yes
views integer yes
age_gender_breakdown AgeGenderBreakdown[]
content_type_breakdown ContentTypeBreakdown[]
country_breakdown CountryBreakdown[]
device_breakdown DeviceBreakdown[]
live_on_demand_breakdown LiveOnDemandBreakdown[]
operating_system_breakdown OperatingSystemBreakdown[]
playback_location_breakdown PlaybackLocationBreakdown[]
premium_subscriber_stats PremiumSubscriberStats? Per-channel activity attributable to the host platform's premium subscription tier. Optional — absent when the host platform does not surface premium-tier metrics for the channel.
subscribed_status_breakdown SubscribedStatusBreakdown[]
traffic_source_breakdown TrafficSourceBreakdown[]

Definitions

Shared types referenced within this schema.

AgeGenderBreakdown
Age-group × gender breakdown row.
type: object
AgeGroup
Age-group bucket. Aggregate-level only; never identifies a single viewer. Wire form preserves the numeric-range convention common to analytics APIs that report demographics this way (e.g. YouTube Analytics' `ageGroup` dimension emits `age13-17`, `age18-24`, …).
enum: "age13_17", "age18_24", "age25_34", "age35_44", "age45_54", "age55_64", "age65_plus"
ContentTypeBreakdown
Content-type breakdown — Shorts vs VOD vs livestream.
type: object
CountryBreakdown
Country-distribution row.
type: object
CreatorContentType
Authoritative content-type classification from the host platform's analytics surface, where one is exposed (e.g. YouTube Analytics' `creatorContentType` dimension). The best available signal for separating short-form, long-form, livestream, and story content in audience aggregates; the connector reconciles `Video.kind` against this where the host platform supports it.
enum: "live_stream", "shorts", "story", "video_on_demand", "unspecified"
DataClass
Classification of a synced field's data sensitivity. Drives subject- rights workflows and cache-purge retention decisions.
DeviceBreakdown
Device-distribution row.
type: object
DeviceType
Device type reported by analytics surfaces. Connectors map their native device taxonomies onto the closest member.
enum: "desktop", "game_console", "mobile", "tablet", "tv", "automotive", "wearable", "unknown_platform"
Gender
Gender bucket reported by analytics surfaces. `user_specified` captures platforms that expose self-declared options beyond the female/male binary.
enum: "female", "male", "user_specified"
IsoCountry
ISO 3166-1 alpha-2 country code.
pattern: ^[A-Z]{2}$
IsoDate
ISO 8601 date (YYYY-MM-DD).
type: string
LiveOnDemandBreakdown
Live-vs-on-demand split row.
type: object
LiveOrOnDemand
Live-vs-on-demand discriminator on a daily aggregate row.
enum: "live", "on_demand"
OperatingSystem
Operating system reported by analytics surfaces.
enum: "android", "ios", "windows", "macintosh", "linux", "chrome_cast", "firefox", "play_station", "xbox", "other"
OperatingSystemBreakdown
Operating-system-distribution row.
type: object
PathRef
Path-based cross-reference relative to .corpospec/ root. Pattern: `^[a-z0-9_-]+(/[a-z0-9_.-]+)+$`
pattern: ^[a-z0-9_-]+(/[a-z0-9_.-]+)+$
PlaybackLocation
Playback location reported by analytics surfaces. Connectors map their native location dimensions onto the closest member.
PlaybackLocationBreakdown
Playback-location-distribution row.
type: object
PremiumSubscriberStats
Per-channel audience activity attributable to the host platform's premium subscription tier, where the platform exposes one (e.g. YouTube Premium / formerly "YouTube Red"). Tracks the slice of views and watch-time that originated from premium subscribers; absent when the platform does not surface premium-tier metrics.
type: object
RetentionTier
Retention policy applied to a synced record. Tiers are named after the discipline they impose; the connector layer maps each upstream surface onto the appropriate tier. - `thirty_day_strict` — atomic records that auto-purge or refresh at the thirty-day boundary. The dominant tier on platforms whose Terms of Service impose a thirty-day cache discipline on derived data (e.g. YouTube Developer Policies §III.E.4 for Data API outputs). - `thirty_day_aggregate_with_lineage` — atomic record purges at thirty days; the aggregate computed from it may be retained when accompanied by explicit `derived_from` + `derivation_method` lineage. - `auth_lifetime` — atomic record retains against active OAuth authorisation; tears down on token revocation or tenant deletion. Used for analytics surfaces whose ToS explicitly exempt them from the thirty-day rule (e.g. YouTube Analytics API per §III.E.4). - `creator_authored` — data the tenant originates rather than fetches; no upstream-platform retention constraint applies. - `metadata_indefinite` — structural identifiers and immutable timestamps the upstream ToS explicitly permits to retain.
SourceAttribution
Source attribution for a synced field. Records the kind of upstream surface that produced the value; combined with the parent record's `platform`, this fully attributes any value back to its origin. Open-ended by design: new connector kinds (e.g. monetary or content- owner APIs) extend without breaking changes. The platform discriminator (`Channel.platform`) carries the brand identity; this enum carries only the kind of API surface the value came from.
SubscribedStatus
Subscribed-status discriminator on a daily aggregate row. Splits audience activity by whether the viewer is subscribed to the channel at the time of the play.
enum: "subscribed", "unsubscribed"
SubscribedStatusBreakdown
Subscribed-status breakdown row.
type: object
SyncProvenance
Provenance metadata stamped on every synced atomic record across the creator pillar. Per-record granularity; the `retention_tier` reflects the strictest tier of any field on the record so the cache-purge job can decide conservatively. Field-level retention distinctions are documented in each entity type's struct doc-comments — the schema documents the static taxonomy, the data carries only the per-fetch state.
type: object
TrafficSourceBreakdown
Traffic-source-distribution row.
type: object
TrafficSourceType
Traffic-source type reported by analytics surfaces. The eighteen members cover the union of categories surveyed across major creator analytics APIs; values prefixed `platform_` denote platform-internal sources (the platform's own search, channel pages, recommendation surfaces) that map onto each platform's native enum at the connector boundary.

Reference in your YAML

# yaml-language-server: $schema=https://corpospec.com/schemas/v0.14.1/audience-snapshot.schema.json