How duplicates are handled across services
Say you played Xanny Bar by Porches on Spotify in 2019, and your Spotify account was scrobbling to Last.fm at the time. Import both your Last.fm CSV and your Spotify extended history, and that one listen arrives twice, once as a scrobble timestamped when the track started, once as a native play timestamped when it ended, possibly with the album written differently. Count both and every stat on your profile inflates by the overlap. Multiply by years of listening and the numbers become fiction.
Layer 1: exact duplicates at import
The simplest case first. When you import a file, every row is checked against your library for an exact match on artist + track + timestamp. Exact matches are counted and skipped, this is what makes re-importing a newer version of the same export completely safe. The pre-import scan shows you these counts before anything is written.
This layer also respects your deletions: if you deleted a listen by hand, Stick remembers, and a re-import won't quietly resurrect it. Deleted rows surface in their own "Previously deleted" tab during the scan, where you can restore them on purpose if you want.
Layer 2: cross-service reconciliation
The Porches case above isn't an exact match, the timestamps differ by a few minutes and the metadata may differ cosmetically. So at import time, Stick runs a second pass: a play from a native source (Spotify or Apple Music) that lands within ten minutes of an existing Last.fm scrobble of the same song is treated as the same listen recorded twice. The native play wins, its timestamp is authoritative, and the scrobble is retired into the deleted-plays record rather than double-counted.
The reverse order works too: import Last.fm after your native data, and a scrobble matching an existing native play is recognized as already covered and skipped, leaving the native row untouched. Crucially, a scrobble that no native file claims is always kept, your foobar2000 plays, vinyl scrobbles and defunct-app history only exist on Last.fm, and for those the scrobble is the record.
Apple Music live tracking gets its own reconciliation: live-recorded plays carry approximated timestamps, so when you later import an Apple Music Play Activity file, matching file rows correct the timestamps in place instead of importing as new plays. See the live tracking guide.
Layer 3: the MusicBrainz duplicate scanner
Some duplicates survive both layers, usually when two services spell things differently enough ("Xanny Bar - Live" vs "Xanny Bar") that text matching can't safely connect them at import time. This is where MusicBrainz matching pays off: once both plays are matched to the same MusicBrainz recording, they can be compared by identity instead of by spelling.
On the MusicBrainz page, Scan for duplicates clusters plays of the same recording from different sources within a five-minute window and shows you the clusters for review. Confirm, and the redundant copies are removed in the background, keeping the play from the dominant source, with each removal recorded so nothing is ever silently lost. You can close the confirmation dialog and navigate away; the deletion finishes on its own and reports what it removed.
What this means in practice
- Import your files in any order, scrobbles first, native exports first, it doesn't matter.
- Re-import newer exports over older ones freely; only genuinely new plays are added.
- Run the duplicate scanner once after a big multi-service import, and occasionally after that.
- Your Last.fm-only history is never collateral damage, it's only ever superseded by a native record of the same listen.