Skip to main content
BeyondWords analytics events can be sent to multiple destinations, allowing you to track user engagement wherever is convenient. If you’re using the BeyondWords player, events are sent to the analytics dashboard by default. You can also send events to Google Analytics or a custom analytics endpoint. If you’re using a custom player, you can send events to BeyondWords so they appear in the analytics dashboard.

Send analytics to Google Analytics

To send events from the BeyondWords player to a configured Google Analytics account:
  1. Go to Analytics → Preferences in your project dashboard
  2. Enable Send data to Google Analytics
  3. Enter your Google Analytics Measurement ID or Google Tag Manager Container ID in the Identifier field
  4. Click Save changes

Send analytics to a custom endpoint

To send events from the BeyondWords player to a custom endpoint:
  1. Go to Analytics → Preferences in your BeyondWords dashboard
  2. Enter the custom analytics URL to send player events to
  3. Click Save changes
The BeyondWords player will send analytics events to your endpoint as JSON POST requests using the event schema below.

Send analytics to BeyondWords

To send analytics from a custom player to BeyondWords, send a POST request to https://metrics.beyondwords.io using the event schema below. We recommend sending as many fields as possible so events can be aggregated accurately, although sensible defaults will be applied for some missing fields. Some fields may not apply to your implementation. These can be omitted and will be ignored. When testing custom events, it may take up to an hour for data to appear in the BeyondWords dashboard. If you need help, contact support.

Example event

The following example shows a typical analytics event payload. To inspect analytics events, search for metrics.beyondwords.io in your browser’s Network tab.
Example event
{
  "event_type": "play",
  "device_type": "desktop",
  "media_type": "content",
  "media_variant": "article",
  "project_id": 123,
  "content_id": "3f57001d-cb30-42c1-ad6f-047e813c360f",
  "source_id": "example-source-id",
  "analytics_id": 333,
  "ad_id": null,
  "media_id": 555,
  "media_format": "audio",
  "local_storage_id": "bef9218d-3871-450e-a7fa-5da65102f532",
  "listen_session_id": "839ff785-0cb8-4e74-a061-506f571c79ce",
  "session_created_at": 1672531200000,
  "duration": 123.45,
  "listen_length_seconds": 0.2,
  "listen_length_percent": 0.1620089105,
  "speed": 1,
  "segment_playback_enabled": true,
  "location": "https://example.com",
  "referrer": "https://example.com",
  "player_version": "1",
  "player_npm_version": "1.2.3"
}

Event schema

event_type
string
The type of analytics event. There are four types:
  • load: content loaded successfully and the media’s duration is known
  • play: the media started playing for the current content item
  • play_progress: playback reached the next 10% of the audio’s duration
  • ad_link_click: the user clicked on the click-through URL for an advert
device_type
string
The type of device that emitted the event. There are three types:
  • phone: the width of the browser was between 0px and 499px
  • tablet: the width of the browser was between 500px and 999px
  • desktop: the width of the browser was 1000px or greater
  • ios: the event was sent from a native ios app (e.g. )
  • android: the event was sent from a native android app (e.g. )
media_type
string
The type of media loaded in the player. There are two types:
  • content: the event was emitted during content playback
  • ad: the event was emitted during advert playback
media_variant
string
The variant of media loaded in the player. There are two types:
  • article: the media is for the original article
  • summary: the media is for a summary of the article
project_id
integer | null
The numeric ID of the project whose content is loaded into the player. This field might be null if content wasn’t fetched from the API and is instead set manually in the player.
content_id
string | integer | null
The string UUID or numeric ID of the content currently loaded into the player. This field might be null if content wasn’t fetched from the API and is instead set manually in the player.
source_id
string | null
The string ID that can optionally be associated with the content currently loaded into the player. This field might be null if the source_id ID wasn’t set in the BeyondWords API.
analytics_id
integer | null
A numeric ID used by BeyondWords for associating this event with your project. This field might be null if content wasn’t fetched from the API and is instead set manually in the player.
ad_id
integer | null
The numeric ID of the advert that is currently loaded into the player. This field is null when an advert isn’t playing, i.e. when content is playing.
media_id
integer | null
The numeric ID of the content or advert media field that is currently loaded into the player. This field is null when VAST adverts are playing.
media_format
string
The format of media loaded in the player. There are two formats:
  • audio: the player is playing audio (or will play audio)
  • video: the player is playing video (or will play video)
local_storage_id
string | null
A string UUID associated with the current user and stored in local storage under the ‘beyondwords’ key. This field is null if advertConsent is set to ‘without-local-storage’.
listen_session_id
string
A string UUID associated with the current player instance. This ID changes after the page is reloaded and is different for each player instance.
session_created_at
integer
The unix time in milliseconds at which the first analytics event was sent from the current player instance, as reported by the user’s browser.
duration
float
The duration in seconds of the content or advert media currently loaded into the player.
listen_length_seconds
float
The duration in seconds that the user has listened to of the currently loaded media.
listen_length_percent
float
The percentage that the user has listened to of the currently loaded media.
speed
float
The speed at which the user is listening to the media, e.g. 0.5, 1 or 2.
segment_playback_enabled
boolean
Whether playback from segments is enabled, i.e. whether the clickableSections player setting is anything other than “none”.
location
string
The value of window.location.href when the event was emitted.
referrer
string
The value of document.referrer when the event was emitted.
player_version
string
This will always be the string “1” but we may use this later, e.g. to run A/B tests.
player_npm_version
string
The version of the NPM package as specified in the package.json file.