Analytics & Logs
The Analytics and Activity Logs panels 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.
Admin only
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
📦 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:
| Metric | What it shows |
|---|---|
Watch Time | Total hours watched across all users and content for the selected period |
Session Count | Total number of watch sessions in the selected period |
Top Users | Ranked list of users by total watch time |
Top Titles | Ranked list of most-watched content |
Stream Type Breakdown | Distribution chart showing Direct Play vs Direct Stream vs Transcode sessions |
Time-Series Chart | Daily watch time plotted over time, showing usage trends |
CSV Export | Download all analytics data as a CSV file |
Overview filters
| Filter | Options |
|---|---|
Media type | All, Movies, Episodes, Live TV |
Server type | All, Emby, Jellyfin |
Play method | Direct Play, Direct Stream, Transcode (Overview tab only) |
Time range is a global setting
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.
Trending
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
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:
| Signal | Weight | What it measures |
|---|---|---|
Completion Rate | 35% | Do viewers finish what they start? |
Direct Play Rate | 25% | Can most devices play the file natively without transcoding? |
Playback Stability | 20% | How rarely do viewers abandon within the first 10%? |
Rewatch Engagement | 10% | Do viewers come back to watch again? |
Audience Breadth | 10% | Is the content watched by many different users or just one? |
Score interpretation
| Score Range | Rating | What it means |
|---|---|---|
80–100 | Excellent | Well-encoded, engaging content that plays natively on most devices |
60–79 | Good | Minor issues or niche appeal — generally healthy |
40–59 | Fair | Noticeable issues worth investigating — transcoding or engagement problems |
20–39 | Poor | Significant problems with encoding or engagement |
0–19 | Critical | Likely 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
Trending Score
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.
Activity Logs
The Activity Logs panel shows a paginated table of all streaming actions logged by the dashboard.
Logged actions
| Action | What was recorded |
|---|---|
Play | A user started watching content |
Pause | Playback was paused (by user or admin) |
Resume | A paused session was resumed |
Notify | A message was sent to a viewer's device |
Stop | Playback was stopped gracefully |
Disconnect | A 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.
| Setting | Default | Range | What it controls |
|---|---|---|---|
Analytics Time Range | 30 days | 1–3650 days, or All Time | Global time window applied to all analytics and intelligence views — controls how far back data is included in dashboards |
Completion Threshold | 80% | 50–100% | Minimum completion percentage for a viewing to count as "completed" |
Abandonment Threshold | 10% | 1–50% | Maximum completion percentage for a session to be classified as "abandoned" |
Minimum Watch Time | 10 seconds | 0–300 seconds | Sessions shorter than this duration are excluded from all analytics |
Missing Session Threshold | 4 poll cycles (20 seconds) | 2–10 cycles | How long the dashboard waits before considering a session disconnected |
Minimum watch time filtering
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
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 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
You can exclude up to 200 users. Each username can be up to 100 characters.
Advanced settings
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.
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:
| Field | What it provides |
|---|---|
Video codec | Original video codec (e.g., H.264, HEVC/H.265) |
Audio codec | Original audio codec (e.g., TrueHD, EAC3, AAC) |
Container | Container format (e.g., MKV, MP4) |
Resolution | Video resolution (e.g., 1920x1080, 3840x2160) |
Bitrate | Original bitrate of the video stream |
Library name | Which 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
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
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, 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 rely on the Streaming Dashboard for Plex analytics — use Tautulli instead
FAQ
Related pages
Join the Community
Media server operators sharing configs, getting support, and shaping the future of QuickBox Pro.