Tracearr: The Universal Playback Tracker for Jellyfin, Emby, and Plex (2026)
Every media server has its own playback tracking: Jellyfin has the Playback Reporting plugin, Plex has Tautulli, Emby has its built-in activity log. But what if you run multiple servers? What if you want one unified view of all viewing activity across platforms? What if you want playback data that survives server rebuilds and migrations?
Tracearr is a standalone playback tracking application that connects to Jellyfin, Emby, and Plex simultaneously, recording all viewing activity into a single database with a unified API.
What Tracearr Does
Tracearr is a dedicated playback history service:
- Multi-platform - tracks Jellyfin, Emby, and Plex from one instance
- Unified database - all history in one place regardless of source server
- Long-term retention - keeps history indefinitely (not limited by server plugin retention)
- API-first - REST API for integration with other tools
- Webhook receiver - receives real-time playback events from media servers
- User mapping - maps users across platforms (same person on Jellyfin and Plex)
Why Use Tracearr Instead of Built-In Tracking?
| Feature | Server plugins | Tracearr |
|---|---|---|
| Cross-platform | No (one server only) | Yes (all servers) |
| Survives server rebuild | No (lost with config) | Yes (independent database) |
| Unified user view | No | Yes (user mapping) |
| Long-term retention | Limited (plugin settings) | Unlimited |
| API for integrations | Varies | Consistent REST API |
| Works with Emby Wrapped | Indirect | Direct integration |
| Works with Reclaimerr | No | Yes (watch data source) |
How It Works
[Jellyfin] --webhook--> [Tracearr] --stores--> [Database]
[Emby] --webhook--> [Tracearr]
[Plex] --webhook--> [Tracearr]
|
v
[API for integrations]
[Emby Wrapped, Reclaimerr, custom scripts]
Tracearr receives webhook events from your media servers whenever playback starts, pauses, stops, or completes. It stores this data with full metadata: user, title, duration, completion percentage, device, client app, and playback method.
Docker Setup
services:
tracearr:
image: ghcr.io/tracearr/tracearr:latest
container_name: tracearr
ports:
- "7600:7600"
volumes:
- ./tracearr/data:/data
environment:
- TZ=Europe/Paris
restart: unless-stopped
docker compose up -d
Access at http://your-server:7600.
Step 1: Connect Your Media Servers
Jellyfin
- Install the Webhook plugin in Jellyfin
- Add a Generic Destination:
- URL:
http://tracearr:7600/api/webhook/jellyfin - Events: Playback Start, Playback Stop, Item Added
- URL:
- Save
Emby
- Dashboard > Webhooks (requires Premiere)
- Add webhook:
- URL:
http://tracearr:7600/api/webhook/emby - Events: Playback events
- URL:
- Save
Plex
- Settings > Webhooks
- Add webhook:
http://tracearr:7600/api/webhook/plex - Save
Step 2: User Mapping
If the same person has accounts on multiple servers:
- Open Tracearr dashboard
- Navigate to Users
- Link accounts: "john" on Jellyfin = "john_doe" on Plex = "john" on Emby
- All their history appears under one unified profile
Step 3: Historical Import
Tracearr can import existing history from your servers:
From Jellyfin (Playback Reporting plugin)
curl -X POST http://tracearr:7600/api/import/jellyfin \
-H "Content-Type: application/json" \
-d '{"url": "http://jellyfin:8096", "apiKey": "your_key"}'
From Plex (Tautulli database)
curl -X POST http://tracearr:7600/api/import/tautulli \
-H "Content-Type: application/json" \
-d '{"url": "http://tautulli:8181", "apiKey": "your_key"}'
This gives you historical data going back as far as your existing tracking tools have recorded.
Integrations
Emby Wrapped
Emby Wrapped can use Tracearr as its data source instead of the Emby Playback Reporting plugin:
# In Emby Wrapped docker-compose.yml
environment:
- TRACEARR_URL=http://tracearr:7600
- TRACEARR_API_KEY=trr_pub_your_key_here
This gives Emby Wrapped access to longer history and cross-platform data.
Reclaimerr
Reclaimerr uses Tracearr to determine what has been watched across all platforms before flagging content for deletion:
- A movie watched on Plex is not flagged as "unwatched" just because Jellyfin users have not seen it
- Tracearr provides the unified view Reclaimerr needs for accurate cleanup decisions
Custom Scripts and Dashboards
The Tracearr API provides endpoints for:
/api/history- all playback events with filters/api/users/{id}/stats- per-user statistics/api/items/{id}/plays- play count and history for specific content/api/stats/overview- global statistics
Build custom Grafana dashboards, Discord bots, or automation scripts using this API.
Tracearr vs Jellystat vs Tautulli
| Feature | Tracearr | Jellystat | Tautulli |
|---|---|---|---|
| Jellyfin support | Yes | Yes | No |
| Emby support | Yes | No | No |
| Plex support | Yes | No | Yes |
| Multi-platform | Yes (all three) | No (Jellyfin only) | No (Plex only) |
| Web dashboard | Basic | Full | Full |
| Historical graphs | API-based | Yes | Yes |
| Push notifications | No | No | Yes |
| Emby Wrapped integration | Yes | No | No |
| Reclaimerr integration | Yes | No | No |
| Purpose | Data collection + API | Analytics dashboard | Analytics dashboard |
Tracearr is not a replacement for Jellystat or Tautulli. It is a data layer that other tools consume. Use Tracearr for unified data collection, Jellystat/Tautulli for visualization.
Data Retention and Storage
Tracearr stores all events indefinitely by default:
- Storage usage: ~1 MB per 1,000 playback events
- Typical server (5 users, daily use): ~50-100 MB per year
- Large server (20 users): ~200-500 MB per year
Storage is negligible. There is no reason to purge historical data.
API Key Types
Tracearr uses two types of API keys:
- Public keys (
trr_pub_*) - read-only access for integrations (Emby Wrapped, Reclaimerr) - Private keys (
trr_prv_*) - full access for administration
Always use public keys for third-party integrations. Never expose private keys.
FAQ
Does Tracearr replace the Jellyfin Playback Reporting plugin? No. The Playback Reporting plugin provides data within Jellyfin itself (for JellyWatch statistics, for example). Tracearr is an external system for cross-platform tracking and long-term retention.
Can I run Tracearr without webhooks? Tracearr can also poll media server APIs on a schedule, but webhooks provide real-time tracking with lower latency.
Does Tracearr affect playback performance? No. Tracearr receives webhook events asynchronously. It does not sit in the playback path.
Is Tracearr free? Yes. Open source and free to self-host.
Does JellyWatch use Tracearr? JellyWatch connects directly to the Jellyfin API for real-time session data. It does not use Tracearr. They serve different purposes: JellyWatch for real-time monitoring, Tracearr for historical data collection.
Track history with Tracearr. Monitor sessions with JellyWatch. Download JellyWatch on Google Play - real-time session monitoring and push notifications for Jellyfin.
On Emby? Download EmbyWatch on Google Play




Comments
No comments yet. Be the first to share your thoughts.
Leave a comment