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 name Attribute format Attribute description
video_name String Video name displayed to a user
video_id String Internal Video ID
video_desc String Video description displayed to a user
video_thumbnail_url Array of URL Strings [] Video thumbnail URLs
video_thumbnail_url_string String Concatenated value of video_thumbnail_url with a pipe delimiter
video_upload_date String - Date in ISO 8601
video_duration_iso String - Duration in ISO 8601 Video duration excluding adverts
video_content_url URL String External URL of the video file with file format
video_embed_url URL String External URL of the video
video_user_interaction_count Number Number of user interactions i.e. likes
video_genres Object of Strings {}
video_genres_string Concatenated value of video_genres with a pipe delimiter
video_player_type String
video_player_name String
video_player_version String
video_media_type String Values series or film, so either video_series_ or video_film_ nodes are expected
video_series_show_name String
video_series_episode_no String
video_series_season_no String
video_film_name String
video_content_type String If the content is premium or free, i.e. accessible or not behind the login or a paywall
video_tv_channel String
video_certificate String The rating of the video
video_audio_language Object of Strings {} Language versions available for the user
video_audio_language_string String Concatenated value of video_audio_language with a pipe delimiter
* video_audio_language_used String Currently used language version
video_accessibility Object of Strings {} Accessibility settings avaiable for the user
video_accessibility_string String Concatenated value of video_accessibility with a pipe delimiter
* video_accessibility_used String Currenlty used accessibility settings
video_release_date String - Date Date of the release
video_duration_sec Number Duration of the video in seconds excluding adverts
* video_playtime_sec Number Playtime duration in seconds
* video_quality String Current video quality
video_autoplay Boolean If 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 name Example
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_count 23890
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_sec 1805
* video_playtime_sec 0
* video_quality "720p"
video_autoplay false

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!