Understanding Analytics Tracking For Embedded Media And Webinar Forms
How Wistia Counts Analytics for Embedded Media and Webinar Forms
When you embed a Wistia player or a webinar registration form on your own page, the Wistia player is what records analytics — not your server, and not the page itself. Every signal is measured client-side and sent back to Wistia as the visitor loads and interacts with your embed. That's why an implementation detail on your page (how you inject the embed, whether the visitor blocks tracking, whether you're logged in) can change what shows up in your analytics even when the page is clearly getting traffic.
This guide explains what each analytics signal actually counts, when it updates, and the implementation factors that can suppress data so you can debug an embed before it becomes a support ticket.
What each signal counts
These definitions are what Wistia measures on an embedded player. They match the numbers you see on a media's Analytics → Embed tab.
| Signal | What it counts |
|---|---|
| Visits | The number of times the media was loaded on the page, including repeat loads from the same viewer. A visit is recorded when the player initializes — a play is not required. |
| Unique visitors | The number of distinct individuals who loaded your content at least once in the selected timeframe. |
| Plays | The number of times the media was played, including replays. A play is counted from the initial play (the first frame begins to play), not from a hover or a load. |
| Play rate | Of the people who loaded the media on a page, the percentage who played it. Play rate is computed from unique plays and unique loads, so it can differ from total plays. |
| Heatmaps | A per-view recording of exactly what one viewer watched, skipped, and rewatched. A heatmap only exists for a play that Wistia successfully tracked from the Wistia player — see the suppression factors below. |
| Time played / Engagement | Total and average time viewers spent watching or listening within the timeframe. |
| Form submissions | For videos, the number of Wistia Form (in-video lead capture) submissions. |
A visit without a play is normal and expected: it means the player loaded but the visitor didn't press play. A visit and a play but no heatmap almost always points to a tracking-suppression factor (below), not a bug.
Page views are not player loads are not plays
The single most common analytics question is some version of "my page gets way more traffic than Wistia shows plays — is tracking broken?" Usually it isn't. It's a units mismatch. There are three distinct steps, and traffic drops at each one:
- Page view → player load. A page view is counted by your own site or CMS analytics. A Wistia visit/load is only counted when the Wistia player actually initializes on the page. Every page view that never initializes the player — a visitor who bounces before the embed loads, a lazy-loaded embed that never scrolls into view, a blocked player script, or a bot — is a page view with no Wistia load.
- Player load → play. A load records that the player appeared; a play records that the video actually started. Many loads never convert to a play (the visitor didn't press play, or autoplay was blocked — see below).
- Play → counted play. Even a real play can be excluded from public analytics by the suppression factors further down (logged-in users, IP filters, tracking blockers,
doNotTrack).
The practical consequence: play rate is plays ÷ player loads, not plays ÷ page views. If you divide Wistia plays by your CMS's page-view count you will always get a number that looks alarmingly low, because the denominators are measuring different things. To sanity-check a play rate, compare plays against Wistia loads on the Analytics → Embed tab — not against an external page-view number.
Autoplay does not guarantee a counted play
Setting a video to autoplay does not mean every page load produces a play. Autoplay is subject to browser policy, so a configured-correctly autoplay embed routinely converts only a fraction of loads to plays:
- Browsers block autoplay with sound. Modern browsers block sound-on autoplay by default and only allow it after the visitor has interacted with the site (or, on desktop, has a history of playing media there). Until that bar is met the browser holds the video back — the player still loads, but no play fires.
- Use silent (muted) autoplay. Muted autoplay is what browsers reliably allow, so if you want autoplay to fire for the largest share of visitors, configure silent autoplay — the player starts muted and unmutes on the viewer's first click. (Even muted autoplay can still be deferred in narrower cases, such as data-saver / low-power modes on some mobile devices.)
- Below-the-fold embeds. An autoplay player that loads below the fold is intersection-gated: it records a load but the play only fires if the player scrolls into view. A video can be above the fold on desktop and below it on mobile, so this often shows up as a device-specific gap.
- Play rate can read over or under 100% for autoplay embeds. This is a documented stats behavior, not a bug — replays/loops and load/play event timing can push the ratio past 100%.
How to confirm autoplay behavior rather than broken tracking: filter the media's analytics by device. If plays are lower on mobile relative to desktop, that's the fingerprint of browser autoplay behavior (and below-the-fold gating) — expected, not lost data. A meaningful gap between loads and plays on autoplay traffic is normal; make sure you're using muted autoplay before assuming the numbers are wrong.
Wistia analytics vs. your CMS or external analytics
Wistia only counts playback that happens through the Wistia player. Your CMS, site analytics, or an OTT/app platform can legitimately report far higher numbers because they count things Wistia never sees:
- Off-player playback isn't counted. Wistia has no native mobile-app or OTT/TV SDK. If a native iOS/Android app, a smart-TV/OTT app, or any integration pulls the video file or HLS stream directly instead of rendering the Wistia player, that playback never reaches Wistia and never appears in Wistia analytics. A CMS that aggregates web + mobile-app + TV consumption is counting a superset of what the Wistia player can see.
- A "view" is not a "play." Many CMS and analytics tools define a "view" as a page impression or a video load, while a Wistia "play" requires the video to actually start. Even on web-only traffic, an impression-based "view" count will run well above Wistia plays. Before reconciling a gap, confirm how the other tool defines its metric.
So a large CMS-vs-Wistia gap (thousands of CMS "views" against hundreds of Wistia plays) is usually explained by off-player consumption plus a view-vs-play definition mismatch — not by a tracking failure. Reconciling the CMS-side definition and any native/OTT delivery path is on the customer's end; Wistia analytics answer the question "how much playback happened through the Wistia player."
When analytics update
Plays are tracked in real time. If a tracked play doesn't appear on the analytics page immediately, wait a minute and refresh — there is a short processing delay, not a batch window. If you're verifying a fix, that means you can play the embed and confirm the result within a minute or two.
For live/webinar registration analytics, impressions and registrations also update on the Registration analytics page in near real time.
Why plays or heatmaps can be missing even when the page has traffic
If your page is getting visits but plays or heatmaps are missing, one of these is almost always the cause. Rule them out in this order:
- You're logged in to Wistia. Wistia excludes plays from logged-in account users (Owner, Manager, Standard User) from audience analytics — they're bucketed as private sessions instead. Test in a logged-out session — an incognito/private window is the reliable way, since it starts with no Wistia session, no cached cookies, and third-party extensions disabled by default.
- Your own IP is filtered. If you've set up IP filtering on the account, your own plays are excluded even in incognito. Check that your address isn't on the filter list before concluding tracking is broken.
- The visitor blocks tracking. The player relies on client-side tracking calls to record play events. Ad blockers, tracking-blockers, and privacy-hardened browsers (e.g. Brave, Epic) can block those calls, so the play is never recorded. A VPN doesn't block the play but can misattribute the viewer's location.
doNotTrackis set on the embed. The embed accepts adoNotTrackoption. When it's on, the player deliberately reports nothing — no visits, plays, or heatmaps. Confirm your embed config doesn't set it.- The play didn't come from the Wistia player. Heatmaps are only generated for plays initiated from the Wistia player. Plays that happen off-platform (for example, podcast episodes played in Apple Podcasts or Spotify) count differently and never produce a heatmap.
If you've ruled all of these out and a tracked play still doesn't appear, check status.wistia.com for an analytics incident before opening a ticket.
Debugging: the same embed tracks on one page but not another
When one page records plays and another with the same media doesn't, the media and the account are ruled out (anything account-wide — IP filtering, plan, a global outage — would hit both equally). The difference is in the page or the embed. Work through it in this order:
-
Confirm the player actually loads and plays on the broken page — in a logged-out incognito window, with no ad blocker. If the player doesn't initialize (wrong hashed ID, a JS/CSS conflict, a hidden container, a blocked script), no load or play is recorded.
-
Compare the two embed snippets side by side. A page that was built from an older or hand-edited embed is the usual culprit. Look specifically for a
doNotTrack(ordo-not-track="true") flag on the non-tracking embed — it lets the player load but suppresses tracking. Confirm both embeds reference the same hashed ID and load the player the same way. -
Watch for the play beacon, not just playback traffic. HLS segment requests, third-party pixel events, and generic player-metrics traffic fire on both working and broken pages — they tell you the video played, not that Wistia recorded a play. Filter the browser network tab and confirm a Wistia stats request fires on the broken page at play start, the same as on the working one.
-
Check where you're reading "no plays." Wistia attributes each play to an embed location — the page's domain and path, parsed from the URL the beacon reports. If the broken page sends a different, empty, or unexpected page URL (for example a strict
Referrer-Policythat strips the path), the play is filed under a different embed-location bucket than the one you're filtering by. So cross-check two views:- Analytics → Engagement shows total plays for the media, regardless of embed location. If the play is present here but missing from the per-page embed report, it's an attribution difference (compare the page URL / referrer the two embeds report), not lost tracking.
- Analytics → Embed filters by embed domain and path. A misattributed play is absent from the broken page's row but still present in the Engagement total.
These two tabs read from different stores and can legitimately lag or disagree — which tab shows the gap is what localizes the problem. If a play is missing from both even after the processing delay, and status.wistia.com is clear, that's worth a ticket with the page URL and the steps you tried.
Embedded webinar registration forms
An embedded webinar registration form reports its own analytics, separate from media plays. On the webinar's Analytics → Registration tab you'll see:
- Impressions — a form-load count: the number of times the registration form rendered. It is not an interaction/action metric.
- Registrations — the number of visitors who submitted the form.
- Registration rate — registrations divided by impressions.
Two behaviors developers most often ask about:
- When an impression fires. An impression is recorded when the registration form itself renders, not when the host page loads. For a plain inline embed those happen at effectively the same moment. But if you defer the form — rendering it inside a popup, modal, tab, or any container that mounts later — the impression fires when the form actually renders, not on initial page load. A form that never renders (e.g. a popup the visitor never opens) records no impression even though the page loaded. Impressions are also de-duped per visitor session, so re-showing the same form to the same visitor won't double-count. So if impressions look low, confirm the form is actually rendering when you expect it to. Note that a custom popup on your own page (your own JS deciding when to mount the form) fires its impression whenever that element mounts — which can drift from the standard behavior if your code mounts it eagerly or never.
- Real-time updates. Impressions and registrations update on the Registration analytics page in near real time, the same as media plays.
An embedded registration form behaves exactly like the Wistia-hosted form: it fires connected integrations, sends confirmation emails, and populates registrations in Wistia. If you register a test lead through the embed and it doesn't appear, check that the form actually rendered and submitted before assuming a tracking bug.
Verifying your embed is tracking
To confirm an embed is recording analytics as expected:
- Open an incognito/private window (no Wistia session, no cached cookies, extensions off).
- Make sure your own IP isn't on the account's IP filter list.
- Load the page with the embed and play the media (a few seconds is enough), or view and submit the registration form.
- Return to the media's Analytics → Embed tab (or the webinar's Registration tab) and refresh after ~1 minute.
If the play/impression appears, your embed is tracking correctly. If it doesn't — and status.wistia.com is clear — reach out to Support with the page URL and the steps you tried.
Reading the numbers. This guide covers what and why Wistia counts, aimed at debugging an embed. For a walkthrough of the analytics dashboards themselves, see the Help Center: Media Embed Analytics, Account Overview Analytics, Analytics Troubleshooting, and Webinar Registration Analytics.
Updated 2 days ago