Analytics Discrepancies

It is not uncommon to see analytic data discrepancies with between third party reporting systems and JW Analytics, with per media variances ranging up to 20%. To better understand what may be causing these discrepancies we recommend reviewing the following;.

 

Discrepancies may result from:
 

Latency: Lag between an initial request and the media loading can lead to differences in counts. Viewers often navigate away after the video embeds but before the third party responds with the requested line item.

 

Blocking software: Additional software like Ad blockers can prevent pings from being delivered by the third party or JWPlayer.
 

Tracking methodologies: JWPlayer defines its analytics via its ping definitions, but a third party may record dimensions differently or trigger them at a different time.
 

Filtering: Third party analytics have different methods for filtering pings from various sources dropping values from spammers, bots, spiders etc.
 

Troubleshooting

Should you want to troubleshoot these discrepancy here are some suggested steps;

 

Define issue

  1. How big is the discrepancy?

    1. Sub 10% is acceptable

  2. How long has this discrepancy occurred?

    1. If central to a day, what changed that day? (Player updates, custom code, new pages, etc.)

  3. Is it across all media and domains or isolated?

    1. If isolated what is special about that page/media/setup/ad?

  4. Has the discrepancy remained constant or changed over time?

    1. If changed drastically over time have measurement definitions changed? Player updates? Custom code? etc.

  5. What player setup is being used? Is there any additional code or scripts?

 

Check pings on page

  1. Pull up an example page and open the Dev Console

  2. Check for errors while the content loads and plays

  3. Search for ping.gif to view JWPlayer pings

    1. Ensure events align with corresponding actions

    2. Certain events will only fire with Media ID’s and Ad Schedule ID’s

  4. Compare with third party pings

    1. Ensure events align with corresponding actions

    2. Compare with JWPlayer events to determine if events align

 

Build test pages

  1. Test page #1 (Only JW Player)

    1. Build a test page with JW Player, customer content and nothing else

    2. Capture JW Analytics

    3. Capture GA Analytics

    4. Compare results

  2. Test page #2 (+Custom Code)

    1. Build a test page with JW Player, customer content and include added customer Player Code

    2. Capture JW Analytics

    3. Capture GA Analytics

    4. Compare results

  3. Test page #3 (Base JW player code + 3rd party Analytics)

    1. Build a test page with JW Player, customer content and include added customer Player Code

    2. Capture JW Analytics

    3. Capture GA Analytics

    4. Compare results

  4. Test page #4 (Base JW player code + 3rd party Analytics + JW Analytics/GA)

    1. Build a test page with JW Player, customer content and include added customer Player Code

    2. Capture JW Analytics

    3. Capture GA Analytics

    4. Compare results

  5. Test page #5 (Customer player code + 3rd party Analytics + JW Analytics/GA)

    1. Build a test page with JW Player, customer content and include added customer Player Code

    2. Capture JW Analytics

    3. Capture GA Analytics

    4. Compare results



 

Definitions of JW Analytics Metrics                            

Updated: 8.29.17

 

Metri

Definition

Calculation

Content

Any video or audio content object with a unique Media ID

An 8 character code (ex: RltV8MtT) that uniquely identifies the media asset. This can be found on the video detail page in the dashboard.

Embeds

A player has been embedded on the page. One of these is fired for each player embedded on a given page

One of these is fired for each player embedded on a given page
 

Re-setting up the player also fires this ping

Plays

Video starts across all embedded players.

The first frame of a video that has been prepped to play has been displayed

Completes

Videos watched to completion

If the ping currently being parsed has an `pw` param equal to `128` (all watched) this column is a 1. Otherwise is 0

Daily unique viewers

Unique users who have played at least one video

Hashing the ip together with the user agent

hll(case when plays > 0 then viewer_id end)

Plays per Unique

The number of plays divided by the number of unique viewers on specific day

NVL(sum(plays)/NULLIF(hll(case when plays > 0 then viewer_id end),0),0)

Complete Rate

The number of plays divided by the number of completes, as a percentage

NVL(sum(completes)/NULLIF(sum(plays),0),0)

Time Watched

Total time watched across all your players (Does not calculate for External Live Streams)

sum(watched_duration)

Sent with retention pings (e=ret) - 10, 30, and 60 seconds

Ad Impressions

The first frame of an ad has been shown to the user

Player does not have to be visible for this to fire

25% Complete

The number of times a view hit the 25% mark of a video.  Only available for videos over 30 seconds

sum(case when watched_pct >= 25 then plays else 0 end)

50% Complete

The number of times a view hit the 50% mark of a video.  Only available for videos over 30 seconds

sum(case when watched_pct >= 50 then plays else 0 end)

75% Complete

The number of times a view hit the 75% mark of a video.  Only available for videos over 30 seconds

sum(case when watched_pct >= 75 then plays else 0 end)

Complete Percent

The percentage of plays that ended in a complete

NVL(sum(completes)/NULLIF(sum(plays),0),0)

Play per Viewer

The average number of plays for each unique viewer

NVL(sum(plays)/NULLIF(hll(case when plays > 0 then viewer_id end),0),0)

Time Watched per Viewer

The average amount of time watched for a unique viewer

NVL(sum(watched_duration)/NULLIF(hll(case when plays > 0 then viewer_id end),0),0)

Ad Impressions per Viewer

The average number of ad impressions for a unique viewer

NVL(sum(ad_impressions)/NULLIF(hll(case when plays > 0 then viewer_id end),0),0)

Ad Requests (Beta)

The number of times a video ad request was detected in the player. Just requests not fullfillment.

This does not mean the request was successful, only that the req was sent


One of these is sent for every ad break


The only time we can get an ad request event from the Google IMA client is an ad schedule with a single pre-roll ad

Ad Clicks (Beta)

The number of times a video ad was clicked in the player

 

Ad Skips (Beta)

The number of times a video ad was skipped in the player. An ad that was playing has been skipped by the user

Closing a static banner on top of the video also produces this ping.

Ad Completes (Beta)

The number of times a video ad was completed in the player

 
 

SEGMENTATION

Country

The country code this user was accessing the video from

Using a geolocator to take the ip address and determine the correct country

Region

The region this ping came from

Location parser determines the region

City

The city the user accessed the video from

Using a geolocator to take the ip address and determine the correct city

Device

The device this user was using

Parsing the user agent for the applicable device

Domain

Domain this ping came from

Taking the page url, grabbing the domain and then determining if we can get rid of the subdomain

Video

The title of the video this ping is for

 

Playlist

   

Player

   

Platform

SDK Platform

 

Page URL

The url of the page this ping came from

 

Ad Schedule

   



 

Did you find this article helpful?

Please log in to rate this article.