Brief Intro

Here is my first post dedicated to scoping the digital video measurement analytics framework hopefully useful for Analytics Implementation Engineers and Senior Web Analysts and other analytics practitioners.

I’d like to hand you over a data layer framework that with some adaptations can be used with any digital analytics tool like Google Analytics or Adobe Analytics.

All you need is to adapt the data layer to your schema and needs - some values may be not available or not really required by your business.

Problems with Scoping Video Measurement Framework

Judging from my own experience, it is really worth it to put time and effort into the scoping measurement framework. Rushed framework usually means it needs to be done twice 😓. Here is the example: it may be too late when the analytics spec with missing data points is already sent to devs but your stakeholders require answers to questions that provided data cannot fill in. Dreadful situation to be in 😰.

Therefore, it is better to define more data points as a conversation starting point with developers and business stakeholders, which could or could not be used in the future. I cannot highlight how important it is to have an honest discussion with all your stakeholders. And sometimes just listening to people is all you need to do.

It is up to you of course how would you like to approach the scoping exercise.

Benefits of Video Measurement Framework

Benefits of digital video measurement framework are as follows:

  • Clear structure of your data
  • Measuring what’s right
  • Providing full picture into video usage
  • Data from the data layer can be passed on into other systems like marketing Customer Data Platforms (CDP) or for SEO purposes.

Naming Conventions Used

At this point of the time I’m leaning towards snake_case naming conventions with all names of variables and values lowercase. This should provide consistency and won’t impair the readability especially of very long variables’ names.

Feel free to modify the framework for your needs.

The Framework

Here is the framework - it consists of events, and static and dynamic attributes.

Events

  • Video Play and Video Pause
  • Milestones - 0%, 25%, 75%, 95% and 100% - 95% milestone is the proxy for when the credits appear on the screen, feel free to replace it with the real event if you can access it
  • Video interactions - Language / Subtitles change, Bit rate change
  • Errors

Attributes

Dynamic attributes are highlighted with an asterix *, so they can change based on the video events; static will stay the same over the course of the all video interactions - like video_name.

Attribute nameAttribute formatAttribute description
video_nameStringVideo name displayed to a user
video_idStringInternal Video ID
video_descStringVideo description displayed to a user
video_thumbnail_urlArray of URL Strings []Video thumbnail URLs
video_thumbnail_url_stringStringConcatenated value of video_thumbnail_url with a pipe delimiter
video_upload_dateString - Date in ISO 8601
video_duration_isoString - Duration in ISO 8601Video duration excluding adverts
video_content_urlURL StringExternal URL of the video file with file format
video_embed_urlURL StringExternal URL of the video
video_user_interaction_countNumberNumber of user interactions i.e. likes
video_genresObject of Strings {}
video_genres_stringConcatenated value of video_genres with a pipe delimiter
video_player_typeString
video_player_nameString
video_player_versionString
video_media_typeStringValues series or film, so either video_series_ or video_film_ nodes are expected
video_series_show_nameString
video_series_episode_noString
video_series_season_noString
video_film_nameString
video_content_typeStringIf the content is premium or free, i.e. accessible or not behind the login or a paywall
video_tv_channelString
video_certificateStringThe rating of the video
video_audio_languageObject of Strings {}Language versions available for the user
video_audio_language_stringStringConcatenated value of video_audio_language with a pipe delimiter
* video_audio_language_usedStringCurrently used language version
video_accessibilityObject of Strings {}Accessibility settings avaiable for the user
video_accessibility_stringStringConcatenated value of video_accessibility with a pipe delimiter
* video_accessibility_usedStringCurrenlty used accessibility settings
video_release_dateString - DateDate of the release
video_duration_secNumberDuration of the video in seconds excluding adverts
* video_playtime_secNumberPlaytime duration in seconds
* video_qualityStringCurrent video quality
video_autoplayBooleanIf the video was auto played

It is up to you if you would like to repeat all the static attributes in the consecutive events for a certain video. Some tag management systems with a bit of custom code can do this for you.

Of course the situation may be more complicated if there is more than one video on the page, or the website you work on is a single page app (SPA). I believe it is still possible albeit requires much more testing.

Examples

I will use one of the latest episodes Britain's Got Talent from ITV Hub https://www.itv.com/watch/britains-got-talent/1a7470/1a7470a0195 as an example. Attributes are for the Video Start event and I assume that the video duration was 30 minutes and 5 seconds.

Attribute nameExample
video_name"Britain's Got Talent Series 16 - Episode 2"
video_id"1_7470_0195_18"
video_desc"The nation's favourite TV talent show, Britain's Got Talent, returns to our screens for a fun-filled 14th series packed full of variety."
video_thumbnail_url[ "https://hubimages.itv.com/episode/1_7470_0195?w={width}&h={height}&q={quality}&blur={blur}&bg={bg}" ]
video_thumbnail_url_string"https://hubimages.itv.com/episode/1_7470_0195?w={width}&h={height}&q={quality}&blur={blur}&bg={bg}"
video_upload_date"2020-05-09T21:05:01+01:00"
video_duration_iso"T00H30M5S"
video_content_url"https://magni.itv.com/playlist/itvonline/ITV/1_7470_0195.001.mpeg"
video_embed_url"https://www.itv.com/hub/britains-got-talent/1a7470a0195"
video_user_interaction_count23890
video_genres{"entertainment"}
video_genres_string"entertainment"
video_player_type"html5"
video_player_name"desktop"
video_player_version"2.5"
video_media_type"series"
video_series_show_name"Britain's Got Talent"
video_series_episode_no"E02"
video_series_season_no"S16"
video_film_name""
video_content_type"premium"
video_tv_channel"itv hub"
video_certificate"tv-pg"
video_audio_language{"english"}
video_audio_language_string"english"
* video_audio_language_used"english"
video_accessibility{}
video_accessibility_string""
* video_accessibility_used""
video_release_date"2023-04-16"
video_duration_sec1805
* video_playtime_sec0
* video_quality"720p"
video_autoplayfalse

Caveats of Video Measurement Framework

There are a couple of things you need to watch out

  • Mistakes with the value of video play time - here is a really good post explaining these caveats by Charles Farina - his post is entitled Video Tracking (The Right Way) for Google Analytics but applicable not only for GA
  • Not aligning the framework for your needs - when the right balance between what’s possible and business stakeholders needs is not struck and devs struggle to get the data right that can answer the questions never required by business.

Summary

I hope this post about Video Measurement Framework gives you enough insights to start building your own analytics specification.

Would you like to find out more or you have some questions or feedback? Please feel free to leave comments under this post or email me directly.

If you like this post, and found it useful, please share.

Thanks for reading and sharing the post!

Happy measuring!