Skip to Content

Analytics & Logs

The Analytics and Activity Logs panels in WSDashboard give you visibility into viewing patterns, content popularity, and streaming history. Track watch time, identify trending content, discover encoding issues through health scores, and audit every play, pause, stop, and administrative action across your media servers. All analytics are computed from sessions WSDashboard tracks in real time, plus any historical data you choose to import.

Admin only
Info

Analytics and activity logs require administrator privileges and the wsdashboard feature flag enabled in Settings > General > Feature Flags.


Key features

Watch Analytics

Total watch time, session counts, top users, top titles, and stream type breakdowns with configurable time windows

Time-Series Charts

Daily watch time plotted over time to visualize usage trends across your selected period

Trending Content

Ranked list of currently popular content using time-decay scoring where recent views count more than older ones

Health Scores

Composite watchability metric (0-100) per item combining completion, direct play compatibility, stability, and engagement

Abandoned Streams

Identify content with high abandonment rates that may indicate encoding issues or poor metadata

Activity Logs

Paginated history of all streaming actions — play, pause, resume, stop, disconnect, and message events

CSV Export

Download analytics data as a CSV file for external analysis in spreadsheets or reporting tools

Filtering

Filter by media type, server type, play method, action type, user, and date range — with a global time range setting that controls the analysis window across all views

Live TV Programme Analytics

Optionally record each Live TV channel's viewing as programme segments so individual programmes join Top Titles and Trending with real per-programme completion

Historical Import

Import playback history from Emby or Jellyfin to populate analytics with historical data instead of starting from zero

Reset Analytics

Wipe all watch session history and start fresh — useful before a clean import or to clear test data


How to access

The Analytics and Activity Logs panels are flyout panels accessible from multiple locations:

  • Sidebar — click Watch Analytics or Activity Logs under the Streaming Dashboard section
  • Header buttons — click the Analytics or Logs buttons in the Streaming Dashboard page header

Both panels slide in from the side and can be used alongside the main streaming view.


Watch Analytics

The Analytics panel has two tabs: Overview and Intelligence.

Overview tab

The Overview tab provides aggregate viewing statistics across your media servers:

MetricWhat it shows
Watch TimeTotal hours watched across all users and content for the selected period
Session CountTotal number of watch sessions in the selected period
Top UsersRanked list of users by total watch time
Top TitlesRanked list of most-watched content. Live TV programmes join this list when Live TV programme analytics is on - see below
Stream Type BreakdownDistribution chart showing Direct Play vs Direct Stream vs Transcode sessions
Time-Series ChartDaily watch time plotted over time, showing usage trends
CSV ExportDownload all analytics data as a CSV file

Overview filters

FilterOptions
Media typeAll, Movies, Episodes, Live TV
Server typeAll, Emby, Jellyfin, Plex
Play methodDirect Play, Direct Stream, Transcode (Overview tab only)
Time range is a global setting
Info

The time window for all analytics views is controlled by the Analytics Time Range setting in the Streaming Dashboard Settings flyout, not by a per-view filter. See Analytics Time Range below.


Intelligence tab

The Intelligence tab provides deeper, item-level analytics with four sub-views:

Items

A searchable, sortable table of all tracked media items. Each row shows the title, series name (for episodes), media type, server, total plays, unique viewers, total watch time, average watch time, average completion percentage, health score, and trending score. Clicking any row expands detailed per-item analytics including play method breakdown, resolution breakdown, and recent plays with user and device details.

A ranked list of currently popular content. Trending uses a time-decay algorithm where recent views count more than older ones — a movie watched 5 times today ranks higher than one watched 50 times last month. Each entry shows rank number, server icon, media type icon, title, trending score, and play count.

Library

Per-library summary cards showing total plays, total watch time, average completion rate, and top genres for each of your media libraries.

Abandoned

Items with high abandonment rates — sessions ending below the configured abandonment threshold (default: 10% completion). This view is useful for identifying content with technical issues (buffering, codec problems) or poor metadata that causes viewers to stop watching almost immediately. Each entry shows the title, total plays, abandoned count, abandonment rate, and average completion.

Live TV excluded
Note

Live TV sessions are excluded from abandonment calculations because live streams have no defined duration, making completion percentage meaningless.


Health Score

The Health Score is a composite metric from 0 to 100 that measures the overall “watchability” of a media item. It combines five signals:

SignalWeightWhat it measures
Completion Rate35%Do viewers finish what they start?
Direct Play Rate25%Can most devices play the file natively without transcoding?
Playback Stability20%How rarely do viewers abandon within the first 10%?
Rewatch Engagement10%Do viewers come back to watch again?
Audience Breadth10%Is the content watched by many different users or just one?

Score interpretation

Score RangeRatingWhat it means
80–100ExcellentWell-encoded, engaging content that plays natively on most devices
60–79GoodMinor issues or niche appeal — generally healthy
40–59FairNoticeable issues worth investigating — transcoding or engagement problems
20–39PoorSignificant problems with encoding or engagement
0–19CriticalLikely unwatchable or universally abandoned — re-encode or replace

Low health score symptoms

  • Content consistently scores below 40
  • High transcode rate for specific items
  • Viewers frequently abandon within the first minutes
  • Only one user watches certain content

Possible actions

  • Re-encode the media file in a more compatible format (H.264 is widely supported)
  • Check audio codec compatibility — some devices cannot direct play certain audio formats
  • Review metadata and thumbnails — poor artwork or descriptions may deter viewers
  • Consider removing or replacing consistently abandoned content

The Trending Score indicates how popular content is right now. It uses exponential time-decay weighting with a 3-day half-life. Each viewing session contributes a score based on completion (completed sessions count more than abandoned ones) multiplied by a recency factor that halves every 3 days.

This means content must receive ongoing plays to maintain a high trending position. A title watched frequently this week will rank higher than one with many historical views but no recent activity.


Live TV programme analytics

A movie or an episode has a fixed runtime, so completion and ranking are straightforward. Live TV does not: one channel runs a different programme every half hour, and a single session can span several of them. By default the dashboard records a Live TV session as one long block with no programme breakdown, so Live TV is kept out of the Top Titles and Trending rankings - selecting the Live TV media type in Top Titles shows a hint pointing you to the TV Guide Trends instead.

You can turn on programme-level capture so Live TV joins those rankings. Enable Capture Live TV programme analytics on the Live TV analytics card in the Streaming Dashboard Settings flyout (see Settings - Live TV analytics). The card appears only when a guide source is present - IPTVBoss installed, or an enabled Dispatcharr connection - because the programme a channel is showing is read from that guide.

Once capture is on, the dashboard records what plays on each Live TV channel as individual programme segments, keyed by channel and programme start time. With that in hand:

  • Top Titles and Trending show individual Live TV programmes alongside movies and episodes, each with real per-programme completion rather than a channel-wide guess.
  • Each Live TV entry carries its programme artwork, the channel and provider it played on, its categories, the number of segments captured, its average completion, and the servers that watched it. When no segment has a known end time, completion is left blank rather than shown as 0%.
  • Recent plays for a Live TV channel expand into the individual programmes that aired during the session.
Capture starts when you turn it on
Note

Programme segments are captured from the moment you enable the setting. Live TV watched before then was stored as whole sessions with no programme data, so earlier Live TV history has no segments and is not backfilled - the guide providers only keep a short rolling window, so past programmes cannot be reconstructed. Leave the setting on to build the picture over time.

Abandonment still excludes Live TV
Info

Even with programme capture on, Live TV sessions stay out of the Abandoned view. Abandonment compares how far a viewer got against a fixed runtime, which Live TV does not have, so it would be meaningless there.


Activity Logs

The Activity Logs panel shows a paginated table of all streaming actions logged by the dashboard.

Logged actions

ActionWhat was recorded
PlayA user started watching content
PausePlayback was paused (by user or admin)
ResumeA paused session was resumed
NotifyA message was sent to a viewer's device
StopPlayback was stopped gracefully
DisconnectA session was forcefully killed (device disconnected)

Each log entry shows the timestamp, action type, username, device name, IP address, and media details.

Log filters

  • Action type — select specific action types to display
  • Username — filter by a specific user
  • Date range — from and to date pickers

Data retention

Activity logs are retained based on the configured analytics retention period (default 90 days). Older entries are automatically cleaned up.


Analytics data source

All analytics are computed from watch session records stored locally on your server. There are two ways data enters the analytics system:

  • Live tracking — the Streaming Dashboard automatically tracks every play session from start to finish while it is enabled and connected to your media server. This happens continuously in real time.
  • Historical import — administrators can import playback history from Emby or Jellyfin to backfill analytics with data from before the Streaming Dashboard was enabled. See the Historical Import section below.

Both live-tracked and imported sessions appear together in all analytics views and are treated identically by the analytics engine.


Analytics settings

Administrators can customize several thresholds that control how the analytics engine classifies viewing sessions, and exclude specific users from all analytics calculations. These settings are available in the Streaming Dashboard Settings flyout under the Analytics section.

SettingDefaultRangeWhat it controls
Analytics Time Range30 days1–3650 days, or All TimeGlobal time window applied to all analytics and intelligence views — controls how far back data is included in dashboards
Completion Threshold80%50–100%Minimum completion percentage for a viewing to count as "completed"
Abandonment Threshold10%1–50%Maximum completion percentage for a session to be classified as "abandoned"
Minimum Watch Time10 seconds0–300 secondsSessions shorter than this duration are excluded from all analytics
Missing Session Threshold4 poll cycles (20 seconds)2–10 cyclesHow long the dashboard waits before considering a session disconnected
Minimum watch time filtering
Tip

The minimum watch time filter applies globally across all analytics views. Sessions below the threshold (default: 10 seconds) are excluded from play counts, watch time totals, completion rates, and all Intelligence sub-views. This prevents accidental clicks or brief buffering from inflating your analytics. The raw session data is preserved — only the analytics queries filter it out.

Analytics Time Range

The Analytics Time Range is a global setting that controls the time window for all analytics views — Overview, Intelligence, and Media Portal item pages. Instead of selecting a time window on each individual view, administrators set a single range that applies everywhere.

The setting offers preset buttons for common ranges:

  • 30 days — recent activity focus (default)
  • 90 days — medium-term trend analysis
  • 180 days — half-year overview
  • All Time — includes every session ever recorded, with no time filtering

You can also enter a custom value between 1 and 3650 days using the text input field. The setting takes effect immediately across all analytics views.

Choosing a time range
Tip

Changing the Analytics Time Range affects what data is visible in all analytics views simultaneously. Shorter ranges load faster and highlight recent trends, while longer ranges provide broader historical context. The “All Time” option may be noticeably slower on servers with very large session histories spanning years of data.

Excluded users

Administrators can exclude specific media server users from all analytics calculations. This is useful for filtering out admin or test accounts that briefly sample media to verify quality — watching a few seconds, fast-forwarding through files — which would otherwise inflate abandonment rates, skew completion percentages, and appear in top user or item viewer lists.

To exclude users, open the Streaming Dashboard Settings flyout and scroll to the Analytics section. The Excluded Users picker lets you search and select users from your connected Plex, Emby, or Jellyfin servers. You can also type a username manually for users that have been deleted from your media server but still have historical sessions in the analytics data.

Excluded users are filtered at query time across every analytics view — overview stats, top users, trending, health scores, abandonment rates, item viewers, library summaries, geo breakdowns, and device breakdowns. The raw session data is preserved, so removing a user from the exclusion list immediately restores their data in all analytics views.

Exclusion limits
Info

You can exclude up to 200 users. Each username can be up to 100 characters.

Advanced settings
Warning

Most administrators will not need to change the default thresholds. Adjusting thresholds affects how existing and future session data is interpreted across all analytics views. Changes take effect immediately.

Historical Import

The Historical Import feature lets you import playback history from your Emby or Jellyfin server into the analytics database. This is useful for new QuickBox Pro installations where you have months or years of media server viewing history that you want reflected in your analytics dashboards immediately rather than waiting for the data to accumulate through live tracking.

To access the import feature, open the Streaming Dashboard Settings flyout and expand the Analytics section. The Historical Import panel appears below the threshold settings.

Server selection

Choose which media server to import from:

  • Emby — import from your Emby server only
  • Jellyfin — import from your Jellyfin server only
  • Both — import from both servers in sequence

Only servers that are configured and enabled in your Streaming Dashboard connection settings will appear as options.

Historical Import is for Emby and Jellyfin
Note

Historical Import reads playback history directly from your media server’s local SQLite database. Plex uses a different database architecture — historical import is not available for Plex servers. Plex session data is tracked in real time through live monitoring. For detailed historical Plex analytics, consider pairing Plex with Tautulli.

How it works

The import reads playback history directly from your media server’s local SQLite database. Since QuickBox Pro runs on the same server as your media server, the database files are always available locally. This approach is fast, reliable, and avoids any API timeout concerns with large libraries.

By default, the import captures your complete play history:

  • Play counts, titles, and series information
  • Users and their watch history
  • Dates played and item creation dates
  • Media type (Movie, Episode)
  • Genres and container format
  • Completion status and playback position

Stream quality enrichment

Optionally, you can enable the Enrich with media quality data toggle to also extract stream quality metadata from the database for each imported item. When enrichment is off, you still get all play history — just without the stream quality fields listed below.

Enrichment adds the following data to each imported session:

FieldWhat it provides
Video codecOriginal video codec (e.g., H.264, HEVC/H.265)
Audio codecOriginal audio codec (e.g., TrueHD, EAC3, AAC)
ContainerContainer format (e.g., MKV, MP4)
ResolutionVideo resolution (e.g., 1920x1080, 3840x2160)
BitrateOriginal bitrate of the video stream
Library nameWhich media library the item belongs to

Enable enrichment when

  • You want codec distribution charts, resolution statistics, and bitrate analysis in your analytics
  • You want library-level filtering and per-library summary cards with accurate library names
  • You want to identify items that need re-encoding based on historical codec data

Skip enrichment when

  • You only need play history — who watched what, when, how often
  • You want the fastest possible import without extra database reads per item
  • You plan to re-import later with enrichment once you see what data you need

Safety and idempotency

The import process is designed to be safe to run multiple times:

  • No duplicates — the import uses deterministic session identifiers. Re-running the import for the same server produces the same result without creating duplicate entries.
  • Readonly database access — QuickBox Pro opens the media server’s database files in strict readonly mode. Your media server’s data is never modified.
  • Cancellable — you can cancel a running import at any time. Sessions already inserted are kept; the import simply stops processing additional items.
  • Progress tracking — the import panel shows the current phase, which user is being processed, a progress bar, and counters for items processed, sessions inserted, and sessions skipped.
Supported content types
Tip

The import processes Movies and Episodes (TV shows). All play counts are imported — if a user watched a movie 26 times, all 26 viewings are created as individual sessions with interpolated timestamps.

Clearing imported data

After an import, the panel shows the number of imported sessions per server. You can clear imported data at any time using the Clear Imported Data button. This removes only the imported sessions — live-tracked sessions from real-time monitoring are not affected. Clearing requires confirmation.

Reset Analytics

Destructive action
Caution

Resetting analytics permanently deletes all watch session history from the analytics database, including both live-tracked sessions and imported historical data. This action cannot be undone.

The Reset Analytics feature completely wipes the analytics database and reclaims storage space. It is available at the bottom of the Analytics settings section in the Streaming Dashboard Settings flyout. Use it when you want to:

  • Start fresh before an import — clear all existing data, then run a historical import to build analytics from scratch
  • Recover from bad data — wipe analytics after importing incorrect historical data or if sessions have become unreliable
  • Remove test data — wipe sessions accumulated during initial setup, development, or testing
  • Hand over to a new admin — give a new server administrator a clean slate without inherited viewing history
  • Start over — discard all analytics history and begin tracking from zero

The reset button shows a confirmation dialog before proceeding. Once confirmed, all watch sessions are deleted and the database storage is reclaimed. This is an admin-only action.


Best practices

Do

  • Set the global Analytics Time Range in settings to match your monitoring needs — use 30 days for recent activity focus, 90–180 days for trend analysis, or All Time to see your complete viewing history
  • Start with the Overview tab to understand overall viewing patterns before diving into item-level Intelligence
  • Use the Abandoned sub-view to identify content with encoding or compatibility issues that cause viewers to stop watching
  • Export analytics data as CSV periodically if you want to keep historical records beyond the retention period
  • Review the Stream Type Breakdown regularly — a high transcode percentage may indicate your media library needs re-encoding for better device compatibility
  • Use activity logs to audit administrative actions like kill session and message sends
  • Review the analytics threshold settings if the default completion (80%) or abandonment (10%) thresholds don't match your viewing expectations
  • Exclude admin and test accounts from analytics to keep metrics accurate — accounts that briefly sample media to verify quality will skew abandonment rates and completion percentages
  • Use Historical Import to backfill analytics when first setting up the Streaming Dashboard — this gives you immediate visibility into viewing patterns
  • Enable stream quality enrichment during import to capture codec, resolution, bitrate, and library data — this significantly enriches your analytics with media quality information

Don't

  • Don't expect rich analytics immediately after enabling the Streaming Dashboard — use Historical Import to backfill (Emby/Jellyfin), or allow data to accumulate over time
  • Don't compare trending scores across long time periods — they are designed to surface what is popular right now
  • Don't interpret low health scores as a content quality judgment — they primarily reflect technical compatibility and engagement metrics
  • Don't expect Historical Import to work with Plex — the import reads Emby/Jellyfin SQLite databases directly; Plex data enters analytics through real-time live session tracking only

FAQ


Join the Community

Media server operators sharing configs, getting support, and shaping the future of QuickBox Pro.

  • Dedicated Support
  • Feature Previews
  • Community Configs
  • Active Discussions
Join Discord Server
Last updated on