If you've been using Plan (Player Analytics), your old join history is useful for retention and churn analysis. You can bring completed Minecraft sessions into ServerStats from a Plan backup. The import keeps the same player UUID identity used by the ServerStats Minecraft agent, so subsequent live sessions belong to the same player.
The importer runs on your computer or server with Python 3. It reads the backup without changing it. The backup file itself stays there; only selected session fields are sent over HTTPS. This guide covers one Plan server at a time, which matters for networks with both a proxy and backend servers. An IP literal in Plan's join-address field is discarded on your machine rather than sent as a campaign source.
Step 1: Make a Plan backup
In the Plan server console, run:
/plan db backupFind the SQLite backup file Plan created and copy it to a machine with Python 3. Plan documents this command for both SQLite and MySQL installations. Keep the original backup in a safe place. Also add or claim your Minecraft server in ServerStats if you have not already.
Plan's database management guide explains where backups are created and how its backup command works. Use a backup rather than copying a live database file while Plan is writing to it. There is no need to disable Plan or stop collecting new activity to make a migration preview.
Step 2: Preview the sessions
Download the Plan importer, unzip it, and run:
python3 plan-import.py --db /path/to/your-plan-backup.db --dry-runThe preview shows Plan's source server, the number of completed sessions, invalid rows and sessions still open. If the backup contains more than one Plan server, the tool lists their IDs and asks you to specify one:
python3 plan-import.py --db /path/to/your-plan-backup.db --source-server 2 --dry-runChoose the Plan server that matches the ServerStats server you want to fill. Import one source per target. When the backup identifies a proxy, the preview counts proxy sessions that overlap completed backend sessions for the same player. The importer skips those proxy rows by default so network visits are not counted twice when you also import backend history. It still imports proxy sessions with no completed backend overlap. If you need full proxy-only history, add --include-proxy-overlaps to the preview and import commands. Older Plan backups without a proxy marker cannot be classified automatically; the importer warns when such a backup has multiple servers. A session without a close time is left for Plan; it is not imported as a made-up completed visit.
The preview does not sign in or send anything to ServerStats. It also does not predict the exact number ServerStats will store: the destination plan's history window and sessions already imported determine that. A backup with several servers needs an explicit --source-server even for a dry run, so you can see precisely which server's history would move. Proxy overlaps skipped by this version are not removed if you imported them previously.
Step 3: Sign in and choose the target
Remove --dry-run to start. The importer asks for the email and password of a ServerStats owner or admin. If your account uses two-factor sign-in, it also asks for the authenticator code. It then lists your Minecraft servers and asks you to confirm the target:
python3 plan-import.py --db /path/to/your-plan-backup.db --source-server 2The tool sends up to 100 completed sessions per request. It prints progress and the number added, enriched, already present and outside your plan's history window or overlapping a live ServerStats visit. You can rerun it after an interrupted transfer. It does not mark the target server as live or invent joins at the time of import.
If you run the command on a different computer from the one hosting Plan, transfer the backup file securely first. The importer opens it read-only; it does not need Plan's database password or a direct connection to Plan. Your ServerStats password is entered into the local terminal and used for session sign-in, not stored in the backup or in an importer configuration file. The target account needs the owner or admin role because this changes player history.
Step 4: Check imported history
Open your Minecraft server's player list and a player profile to see the historical sessions. If Plan recorded a first join older than those sessions, that player is still treated as returning; their missing original source stays unknown. Join-address history can fill a missing first-touch source when the first retained session really was the first visit, but an existing source stays as it is. Past join and playtime charts refresh in the background; a large two-year import can take hours to finish all chart buckets.
The import covers completed sessions, available first-join dates, join addresses and countries where Plan recorded one unambiguous country for a player. Plan records geolocation by player rather than by session, so the importer leaves countries empty for players with several recorded countries. It sends a country name, never an IP address, and ServerStats keeps only a recognised two-letter country code. The import does not include Bedrock markers, Plan's AFK adjustment, plugin extension data, web accounts or server performance metrics. Keep Plan's backup if you need those records. The Minecraft churn guide explains how to use the session history once it is in place.
What the history window changes
ServerStats keeps raw player and session data for 24 hours on Free, 90 days on Operator and two years on Network. The importer can read an older Plan backup, but the API skips sessions whose join time falls outside your current plan's window. Upgrading later does not restore rows that were skipped; rerun the importer after upgrading while the Plan backup is still available. Each rerun is safe because Plan's server UUID and session ID identify the same historical session each time.
Imported sessions can help answer whether a player came back on day 1, 7 or 30, how playtime changed, and which join address first brought them in. They do not recreate metrics Plan did not record as sessions, such as historical TPS, plugin-specific money events or detailed AFK corrections. Continue using the ServerStats agent for new activity and performance readings. For the full field layout, see Plan's database schema.
Minecraft
Modded Minecraft