Skip to Content
Getting StartedImport Data

Import Watch History

Tracearr can import your existing watch history from Tautulli (for Plex), the Playback Reporting plugin, or Jellystat (the last two for Jellyfin/Emby). This lets you keep your historical data when migrating to Tracearr.

Access the import feature at SettingsImport.

Before importing, make sure you’ve synced your media server in Settings → Servers. Tracearr matches imported sessions to existing users by their media server user ID. Sessions for users that don’t exist in Tracearr will be skipped.

Import from Tautulli

Tautulli import connects directly to your Tautulli instance via API — no file export needed.

Step 1: Connect to Tautulli

  1. Enter your Tautulli URL (e.g., http://localhost:8181)
  2. Enter your API Key
    • Find this in Tautulli: SettingsWeb InterfaceAPI Key
  3. Click Test Connection to verify

Step 2: Configure Import

Once connected, you’ll see import options:

OptionDescription
Target ServerSelect which Plex server to import sessions to
Overwrite friendly namesReplace existing user nicknames with names from Tautulli
Include detailed stream dataFetch codec, bitrate, and resolution data for each session. Enables bandwidth/quality stats but significantly increases import time. (Beta)

Step 3: Start Import

Click Start Import to begin. You’ll see real-time progress showing:

  • Processed — Total records checked
  • Page — Current page of results being fetched
  • Imported — Successfully imported sessions
  • Skipped — Records that weren’t imported
  • Errors — Records that failed to import

Tautulli import fetches data in pages via the API. Large libraries may take several minutes depending on your history size and network speed.

Why Records Are Skipped

Records may be skipped for these reasons:

  • User not found — The Plex user doesn’t exist in Tracearr. Sync your server first.
  • Duplicate session — The session was already imported in a previous run.
  • In-progress session — Active or incomplete sessions without a reference ID are skipped.

Import from Jellystat

Jellystat import uses a JSON backup file that you export from Jellystat.

Step 1: Export from Jellystat

  1. In Jellystat, go to SettingsBackup
  2. Under Options, deselect everything except “Activity” — selected options appear in purple, deselected options appear in red

Jellystat backup options with only Activity selected

  1. Go back to SettingsSettings and scroll down to the Tasks section
  2. Find “Backup Jellystat” and click the Start button on the far right
  3. Return to SettingsBackup — you should see a new backup with the current timestamp in the file name

The Date column in Jellystat’s backup list is a known bug and always shows an incorrect date. Use the File Name timestamp to identify your backup.

  1. On the far right of your new backup, click ActionsDownload to save the JSON file

You must export an Activity backup specifically. Full backups are not supported — only the Activity backup contains the playback history needed for import.

Step 2: Upload and Configure

  1. In Tracearr, go to SettingsImport
  2. Select your Target Server (Jellyfin or Emby)
  3. Drag and drop your downloaded JSON file, or click to select it
  4. Configure import options:

For large backup files, it’s recommended to access Tracearr directly via local IP or through a WireGuard/Tailscale connection. Reverse proxies may impose upload size limits that cause the import to fail.

OptionDescription
Enrich with media metadataFetches season/episode numbers and artwork from your server. Slower but provides better data quality. (Recommended)
Update existing recordsUpdates previously imported sessions with codec, bitrate, and transcode data from the backup. Useful when re-importing to backfill new fields.

Step 3: Start Import

Click Start Import to begin. Progress shows:

  • Processed — Records parsed from the backup
  • Imported — Successfully imported sessions
  • Skipped — Records that weren’t imported
  • Enriched — Records enhanced with additional metadata (if enabled)
  • Errors — Records that failed

Why Records Are Skipped

Records may be skipped for these reasons:

  • User not found — The Jellyfin/Emby user doesn’t exist in Tracearr. Sync your server first.
  • Duplicate session — The session was already imported in a previous run.

If many records are skipped due to “user not found”, ensure you’ve synced your server recently in Settings → Servers.

Import from Playback Reporting Plugin

Tracearr can import history directly from the Playback Reporting plugin , available in the official plugin catalog for both Jellyfin and Emby. No file export and no separate Jellystat installation are needed. Tracearr talks to the plugin’s API directly, using the server connection already configured in Settings → Servers.

The plugin only records history from the point it was installed onward. Sessions from before that aren’t recoverable through this import.

Step 1: Check the Plugin

  1. In Tracearr, go to SettingsImport, then the Jellyfin/Emby tab
  2. In the Playback Reporting Plugin section, above Jellystat’s, select your Target Server
  3. Click Check Plugin

Tracearr queries the plugin’s admin SQL endpoint with that server’s existing connection details. A successful check reports how many records the plugin holds and the date range they span. If the plugin isn’t detected, either it isn’t installed or Tracearr can’t reach it with the server’s current connection settings.

If the check says the plugin isn’t installed and shows 500 Internal Server Error, but Playback Reporting is installed and working, your Jellyfin has a plugin build that predates an API change in 10.11.9. Uninstall and reinstall the plugin from the catalog; the updater won’t offer the fix on its own. See the FAQ entry for why.

Playback Reporting runs a scheduled “Trim Db” task that deletes records older than its Max Data Age setting. History the plugin has already trimmed cannot be imported. If the check reports fewer records than you expect, look at the plugin’s settings on your media server before importing.

Step 2: Configure Import

OptionDescription
Server TimezoneThe timezone of the machine running Jellyfin or Emby. Defaults to your browser’s timezone, which is often not the same machine.
Enrich with media metadataFetches season/episode numbers, year, artwork, and runtime from your server. (Recommended)
Import the full date rangeBy default, rows whose timestamps fall inside the range Tracearr already tracks for this server are skipped as overlapping. Enable this to re-scan the entire plugin history regardless of overlap, for a Tracearr history that has gaps. Duplicate rows are still skipped either way.

The plugin stores every timestamp in the media server host’s local time, with no timezone marker attached. If Server Timezone doesn’t match the host, every imported session shifts by the difference between the two zones.

Step 3: Start Import

Click Start Import. Progress shows:

  • Processed — Records read from the plugin
  • Imported — Successfully imported sessions
  • Skipped — Records not imported, including duplicates and rows that overlap history Tracearr already has
  • Enriched — Records enhanced with metadata (if enabled)
  • Errors — Records that failed

Re-running the import is safe. Once a server’s history is in Tracearr, later runs land in the duplicate and overlap counters instead of creating new sessions.

Why Records Are Skipped

Records may be skipped for these reasons:

  • User not found — The Jellyfin/Emby user doesn’t exist in Tracearr. Sync your server first to add all users.
  • Duplicate record — The row was already imported, either directly or through a prior Jellystat import of the same plugin data.
  • Overlapping record — The row’s timestamp falls inside a date range Tracearr already has for this server. Enable Import the full date range to import it anyway.

Emby’s Playback Reporting plugin also logs client IP addresses and pause duration, so Emby imports carry location data and pause time alongside each session. Jellyfin’s plugin records neither field, so Jellyfin imports have no IP or location data.

Neither plugin records codec or bitrate. Imported sessions have no stream-detail data on either server, and it can’t be backfilled later since the plugin never captured it.

Falling Back to Jellystat

If the plugin has already been removed from your server, or you’d rather not reinstall it, Jellystat can still bridge the gap. Use this path only for history the direct import cannot reach: a Jellystat backup import that covers the same plays as an earlier direct import will insert them again, because the Jellystat importer checks only its own record IDs.

  1. Install Jellystat temporarily alongside your Jellyfin or Emby server
  2. Import your Playback Reporting data into Jellystat — in Jellystat, go to Settings, then TaskComplete Sync with Jellyfin, then TaskImport Playback Reporting Plugin Data
  3. Export from Jellystat — follow the export steps above to create and download an Activity backup
  4. Import into Tracearr — follow the Jellystat import steps above

This is a one-time migration path. Once your data is in Tracearr, you can uninstall both the Playback Reporting plugin and Jellystat if you’d like.

Some users have reported issues with TV show metadata when importing from the Playback Reporting plugin to Jellystat. Movies typically import cleanly, but TV episodes may show incomplete data. This is a limitation of the plugin’s data format, not Tracearr.

After Importing

After import completes, you may want to run some maintenance jobs in Settings → Jobs:

JobWhen to Run
Normalize PlayersIf device names appear inconsistent (e.g., “AndroidTV” vs “Android TV”)
Fix Imported ProgressIf imported sessions show 0% progress
Backfill User DatesIf users show “Never” for last activity despite having history
Full Aggregate RebuildIf charts or statistics look incorrect

See the FAQ for more details on these jobs.

Re-importing Data

You can run imports multiple times safely:

  • Duplicate detection — Sessions already in Tracearr are automatically skipped
  • Incremental updates — Only new sessions since the last import are added
  • Stream details update — Use the “Update existing records” option (Jellystat) to backfill codec/bitrate data on previously imported sessions
  • Playback Reporting overlap guard — Rows whose timestamps fall inside the range Tracearr already tracks for a server are skipped as overlapping, on top of duplicate detection. Rows that already arrived through a prior Jellystat import of the same plugin data are caught by duplicate detection instead. Enable Import the full date range to re-scan a server’s entire plugin history; duplicate detection still keeps any row from landing twice.
Last updated on