malachite
Open source · Runs in your browser
Bring your listening history
back under your control.
Malachite imports your listening history into Teal — so your music data stays with you, not the streaming platforms.
What it does
Last.fm
Import your full scrobble history from a Last.fm CSV data export.
Spotify
Import extended streaming history from Spotify's JSON data export.
Apple Music
Import your library and play history from Apple Music CSV exports.
YouTube Music
Import your music history from YouTube Music (via Google Takeout).
ListenBrainz
Import your listens from a ListenBrainz JSON export.
Combined
Merge sources together with smart deduplication to avoid double-counting plays.
Sync
Only import records not already in Teal — safe to re-run any time.
Deduplicate
Find and remove duplicate records already in your Teal account.
Polish
Migrate legacy fm.teal.alpha scrobbles into the current fm.teal.feed.play collection.
How it works
- 1 Choose a mode
Pick a music service, or combined, sync, deduplicate, or polish.
- 2 Sign in with ATProto
Use your Bluesky handle and an app password. Nothing is stored.
- 3 Upload your export
Drop in your CSV or JSON files — everything is processed locally in your browser.
- 4 Import
Malachite publishes your records to your PDS with automatic rate-limit handling.
Ready?
No account needed. No data leaves your browser except to your own PDS.
Start importingMore tools like this one
Same idea, different platform — all free and open source.
Convert Twitter, Mastodon, Threads, and Nostr posts to Bluesky.
JasperImport Instagram photos and videos to Grain or Spark.
BismuthConvert ATProto richtext-block documents to Markdown.
TourmalineAnalyse your Teal.fm scrobbles and discover your listener archetype.
malachite is free, and staying that way
No ads, no accounts, no tracking — just a tool that does the job and gets out of the way. If it saved you an afternoon, chipping in helps keep it maintained.
Rather not? Star the repo or a word to someone who'd use it helps just as much.