How to Capture Analytics with Vocal Video Embeds

Embed Architecture

Vocal Video embeds are based on iframes. Here's a typical example:

The two divs wrapping the iframe are configurable to ensure the iframe fits the space available (while maintaining the proper aspect ratio). You can use our Embed Builder to customize these parameters.

The trailing ld+json script tag is a standard used by search engines to help indexing your videos. You can learn more here.

iframe Constraints

An iframe effectively wraps a contained version of Vocal Video in your site. In earlier days of the web, iframes had a number of issues and could be used for nefarious purposes. Thankfully web browsers have come a long way and are now enforcing security measures that make iframes a great solution for embedding videos.

These security restriction do require a small bit of effort, but nothing a few lines of Javascript can't solve. Plus, you'll have complete control over how data flows to and from your site.

All communication between iframes and your site are mediated by the postMessage API. This API is supported by all modern browsers (96.82% of global users).

postMessage enforces the origin policy of both your parent window and the Vocal Video controlled iframe. In general, Vocal Video will only operate on its primary domain,, but postMessage provides a mechanism for Vocal Video to send data to your domain.

Registering the Origin of an Embed

As the parent window, you know that the Vocal Video iframe will be hosted on, but Vocal Video doesn't know your domain. To setup the secure cross-domain communication, you'll need to send us a message to start the process.

To begin, we load the iframe element using querySelector. You can target our iframe based on their name, or add a unique ID use any other Javascript based method (e.g. jquery).

The first parameter of the postMessage method call, start, will instruct our Javascript to begin the process of sending analytics data to you.

By including as the second parameter, you are explicitly allowing the message to be received by our iframe. In turn, our iframe will capturing the originating domain of this message and begin sending Javascript events to your parent window.

Should you ever want to stop delivery of analytics messages from our iframe, just send the vocal-video:analytics-stop message.

Capturing Messages for Analytics

Once your origin domain is registered, we'll begin delivering analytics via postMessage. To receive these messages, you'll need to set up an event listener on your window:

Note: you should always verify that the message are coming from

The Analytics Object

Analytics information from Vocal Video iframes will be contained in the data attribute of the event object. The data object has the following attributes:

action: The type of interaction that occurred. Valid values are: play, pause, and seeked

currentTime: The current timestamp of the video

duration: The total duration of the video

id: The numeric ID of the video. This is a fixed value and is used in the src attribute of the iframe.

slug: The customizable url variable used to identify the video on public pages (should you have the visibility setting enabled) and inside the Vocal Video application

title: The current public title of the video (customizable inside Vocal Video)

Putting It All Together

Now that you're receiving the analytics event objects, it's just a matter of sending the necessary data to your analytics platform. Your particular needs and data format may vary, but here are some examples:

Keep in mind your analytics endpoint (e.g. ga in the case of Google Analytics) may be defined in a variety of places or using different aliases. These examples are meant to be a jumping off point. You'll need to decide what metrics are important to your business and your nomenclature of events.