SmarterPlaylists by the Numbers — A Decade in Review

SmarterPlaylists launched on July 25, 2015 as a side project — a visual programming tool that let anyone wire together Spotify sources, filters, and combiners to build playlists that no single Spotify feature could create on its own. No ads, no business model, no growth team. Just a tool I thought was cool, shared on a few subreddits, and then left running on a single server for over ten years.

Now, as I’m retiring the old system and replacing it with a ground-up rewrite, I cracked open the database one last time to see what a decade of quiet, organic usage actually looks like. The data only goes back to early 2016 (the first ~6 months predate the current database), but even so, the numbers surprised me.

The headline stats: 262,000 people logged in over the years. Nearly 70,000 of them built something. They created 278,600 programs and ran them over 9 million times. More than 50,000 scheduled jobs were still marked “active” when I pulled the plug — playlists that were meant to refresh themselves daily, weekly, or monthly, faithfully updating for years.

Not bad for a weekend project that never got a v1.0.


The Big Picture

MetricValue
Total programs created278,600
Total unique users who built programs69,562
Users who ever authenticated262,181

That gap between “authenticated” (262K) and “built something” (70K) is interesting — nearly 75% of visitors logged in with Spotify, poked around, and left without saving a program. The visual programming interface was powerful but had a steep learning curve. That’s one of the biggest things the rewrite aims to fix.


Run Statistics

MetricValue
Total program runs (all time)9,029,034
Total errors643,645
Error rate7.1%
Programs run at least once205,984 (74%)
Programs never run72,616 (26%)
Mean runs per program (of those run)43.8
Median runs per program4
Max runs (single program)68,351

Nine million runs. That’s roughly 2,500 playlist generations per day on average, every day, for ten years — all from a single server.

The median of 4 runs tells the real story though: most people built a program, ran it a few times to get it right, then either scheduled it or moved on. Meanwhile the mean of 43.8 is dragged way up by power users running programs tens of thousands of times via the scheduler. The gap between mean and median is the signature of a long-tail product.

A 7.1% error rate sounds high, but most errors were transient Spotify API issues — rate limits, expired tokens, playlists that got deleted. The system was designed to shrug these off and retry on the next scheduled run.


Sharing & Discovery

MetricValue
Shared programs (marked public)4,707
Programs imported at least once2,488
Total imports across all programs53,879

Sharing was always a secondary feature — there was no feed, no recommendations, just a “shared programs” page and the occasional Reddit post. Despite that, 53,879 imports means the average shared program that got any traction was imported about 22 times. The most popular one was imported over 5,000 times. Word of mouth carried the whole thing.


Scheduler

MetricValue
Total scheduled jobs ever created56,629
Currently active scheduled jobs50,234
Total scheduled runs1,914,294

This is the feature that kept SmarterPlaylists alive. Nearly 2 million automated playlist updates — your “Discover Weekly Archive” growing every Monday, your “Daily Mix minus songs I’ve already heard” refreshing every morning. Over 50,000 jobs were still marked “active” when I shut things down, though many of those had stale tokens. The scheduler was the heartbeat of the app.


User Distribution

Programs per UserUsers%
147,03168%
2–518,59527%
6–102,4744%
11–501,3502%
50+1120.2%

A classic power-law distribution. Two thirds of users built exactly one program. But that top 0.2% — 112 users with 50+ programs each — they were prolific. The most prolific user created 693 programs. That’s not a user, that’s a hobbyist playlist factory.


Activity Timeline

SmarterPlaylists launched July 25, 2015. The database only goes back to early 2016, so the first ~6 months of activity aren’t captured here.

Earliest recorded run2016-01-03
Latest recorded run2026-03-05

Programs Last Active by Year

YearPrograms% of Total
20164,7511.7%
20179,1853.3%
201813,0164.7%
201912,1764.4%
202021,0327.5%
202116,2905.8%
202215,4635.6%
202313,0944.7%
202411,7404.2%
202512,7214.6%
20265,3021.9%

The COVID bump is unmistakable — 2020 saw a 73% jump over 2019. People stuck at home, listening to more music, and apparently building more elaborate playlists. Usage never quite returned to that peak, but it stabilized at a healthy plateau from 2021 onward rather than falling off a cliff. Even in 2025, over 12,000 programs were still actively running — ten years after launch.

Monthly Active Users (last 36 months)

Note: “MAU” here represents users whose program’s most recent run falls in that month. True monthly active usage was likely higher, since this only captures the last run timestamp per program — a program run daily all year only shows up in its final month.

MonthUsersPrograms
2023-047611,086
2023-058841,324
2023-067251,137
2023-077801,338
2023-08660981
2023-096941,069
2023-107171,051
2023-117131,028
2023-12383611
2024-016381,134
2024-026621,046
2024-03586847
2024-04669941
2024-056561,010
2024-066641,005
2024-07579960
2024-08652959
2024-096391,022
2024-10674938
2024-11627885
2024-12693993
2025-017061,266
2025-02587961
2025-036931,096
2025-04683966
2025-05691939
2025-067241,633
2025-076911,112
2025-08638900
2025-096581,012
2025-106431,096
2025-11509926
2025-12351814
2026-01232547
2026-029082,917
2026-035391,838

The remarkably steady ~600-700 MAU through 2024-2025 is striking for a project with zero marketing. December always dips (holiday lull?), and February 2026 spikes because I started publicly talking about the retirement and migration, which brought a wave of people back.


Top 25 Most Prolific Users (by program count)

RankUserProgramsTotal Runs
1User A6932,115
2User B3877,183
3Julio3794,690
4User C36736,068
5User D35359,331
6User E26825,662
7User F221661
8User G19611,901
9Hunter1904,393
10User H172477
11Nipun16310,078
12Thomas15411,994
13User I1488,149
14User J14418,153
15User K1429,867
16User L142229,198
17User M139800
18User N13632,002
19User O1354,583
20User P1351,054
21User Q1345,682
22plamere1311,404
23User R127169,251
24User S1269,436
25User T11938,211

There’s a fascinating split here between “builders” and “runners.” User A created 693 programs but only ran them 2,115 times — about 3 runs each on average. They were a tinkerer, endlessly experimenting. User L, on the other hand, had 142 programs but ran them 229,198 times — these were workhorse playlists, scheduled and running daily for years. Two very different ways to love the same tool.

Top 25 Power Users (by total runs)

RankUserTotal RunsProgramsErrors
1Tim330,99711035,122
2User L229,1981423,567
3User R169,2511277,963
4User D59,3313533,622
5User U49,040201,090
6Kjell39,445421,397
7User T38,2111191,517
8User V37,3861092,940
9User W37,248331,374
10User C36,068367928
11User X35,765291,851
12User N32,0021363,520
13User Y31,507831,206
14User Z29,75364721
15User AA28,050141,103
16User BB27,16741381
17User CC27,02342796
18Fredrik26,5781151,782
19User DD26,17792567
20User EE25,72531908
21User E25,6622681,260
22User FF25,201121,421
23John24,378711,208
24Roger24,02419733
25User GG22,456331,120

Tim is in a league of his own: 330,997 total runs across 110 programs. That’s roughly 90 program runs per day sustained over years. His top 5 programs alone account for nearly 280,000 runs. Whatever Tim was doing with his music, he was serious about it.

User AA is the efficiency champion — only 14 programs, but 28,050 runs. That’s 2,004 runs per program on average. Build it once, run it forever.

Top 25 Most Run Programs

RankProgramOwnerRuns
1#random.selectTim68,351
2#random.bucketTim68,265
3#random.listening.yearTim66,119
4#nineTim39,852
5#random.release.yearTim36,953
6(unnamed)(unknown)29,850
7(unnamed)(unknown)27,741
8moetjehoren002User U24,510
9(unnamed)(unknown)22,160
10(unnamed)(unknown)19,337
11(unnamed)(unknown)16,626
12(unnamed)(unknown)16,067
13(unnamed)(unknown)13,020
14Today ArtistsUser R11,908
15Songs V2aUser HH10,617
16A listUser GG10,399
17(unnamed)(unknown)10,203
18Combined ListsUser AA10,131
19(unnamed)(unknown)10,048
20(unnamed)(unknown)9,660
21Made For YouUser AA9,526
22(unnamed)(unknown)9,206
23(unnamed)(unknown)8,823
24(unnamed)(unknown)8,150
25my super mixRodolfo8,123

Tim’s top 5 programs owned the leaderboard so completely that the next contender had less than half his #1’s run count. The #random.* naming convention suggests he built a suite of randomization programs — different ways to shuffle his listening by bucket, era, or mood.

A lot of the heavy hitters are “(unnamed) / (unknown)” — these are programs from early in the app’s life, before I started tracking names and owners in metadata. The programs themselves still exist, but the metadata was lost. Ghost playlists, faithfully running for years with no name attached.

Top 25 Most Popular Shared Programs (by imports)

RankProgramOwnerImportsRuns
1My forgotten tracksUser II5,0548
2My Discovery Weekly Archiverplamere4,85360
3yesterday and todayplamere3,40027
4The daily dozenplamere3,2921
5All Time Top TracksAbhishek2,32697
6Combine two playlistsplamere2,18620
7True Release RadarJames1,529244
8Ultimate Coffee Houseplamere1,2877
9Less Teen-Oriented New Musicplamere1,0961
10My forgotten tracksplamere987116
11My Top Played Tracks of All-TimeUser JJ787149
12ShufflerUser KK7695
13BigMixUser LL743351
14Recommended Daily (posted)User J68429
15DailyRecUser LL663469
16Daily DiscoverUser MM641277
17Gothic Metal front-loaded with Ravenscryplamere6154
18RELAXING MUSIC PLAYLIST GENERATORUser NN55316
19My Discovery Weekly ArchiverUser OO50651
20Bot-MixUser J5020
21Will they make it?User PP455448
22My Top TracksUser J4221
23WorkoutUser QQ4153
24recently playedplamere4112
25Cleaning ListUser RR39181

The sharing leaderboard tells you what people actually wanted from Spotify that they couldn’t get natively. The top hits are all utilities: archive your Discover Weekly before it disappears, combine playlists, deduplicate, filter out songs you’ve already heard. “My forgotten tracks” — a program that surfaces songs from your library you haven’t played in a long time — was the single most imported program at 5,054 imports, and User II only ever ran it 8 times themselves. They built it, shared it, and the community ran with it.

I’m a little proud that so many of my example programs (plamere) made it into the top 25. “Gothic Metal front-loaded with Ravenscry” at #17 is a personal favorite — 615 people apparently also wanted their gothic metal playlist to lead with Ravenscry. Niche appeal is still appeal.

25 Biggest Programs (by component count)

RankProgramOwnerComponents
1bing-shortDylan401
2h10User SS305
3h80User SS305
4h90User SS305
5hOldUser SS305
6h20User SS305
7h00User SS305
8h70User SS305
9Nirvana Radio v26User TT289
10Nirvana Radio v26User UU287
11import of Nirvana Radio v26User VV287
12Nirvana Radio v24User UU283
13Nirvana Radio v22User UU282
14Nirvana Radio v23User UU270
15Nirvana Radio v20User UU270
16Nirvana Radio v27.02User TT268
17Nirvana Radio v18User UU267
18Nirvana Radio v21User UU266
19Nirvana Radio v25User UU265
20Nirvana Radio v17 saturdayUser UU261
21Nirvana Radio v17User UU261
22Nirvana Radio v19User UU257
23Rock FavouritesTom254
24Groovy ArtistsUser WW252
25Die drei SchlafezeichenUser XX249

The biggest programs are a testament to user dedication (or obsession). Dylan’s “bing-short” tops the chart at 401 components — that’s a visual program with 401 nodes wired together on a canvas. I can barely imagine what that looks like.

But the real star here is User UU and their “Nirvana Radio” saga. They iterated through at least 27 versions of the same program, each one with 250-290 components, growing and refining it over time. Versions 17 through 27, spanning years. It was popular enough that User TT and User VV imported copies of it. That’s someone who turned SmarterPlaylists into an art form.

Most Used Component Types (across all programs)

RankComponentUsage Count
1SpotifyPlaylist352,807
2Sample59,253
3Shuffler59,138
4PlaylistSave53,270
5MyTopTracks52,261
6Concatenate49,843
7SpotifyArtistRadio44,560
8DeDup43,162
9ArtistTopTracks41,066
10MySavedTracks38,764
11AlbumSource37,538
12Sorter35,645
13comment34,670
14TrackFilter30,325
15Alternate28,736
16RelativeDatedSpotifyPlaylist28,338
17First25,567
18Mixer22,342
19AttributeRangeFilter20,625
20PlaylistSaveToNew17,150
21MyFollowedArtists15,442
22MixIn13,035
23RandomSelector12,129
24Energy11,675
25ReleaseDateFilter11,501
26ArtistDeDup11,219
27SeparateArtists9,974
28Tempo9,850
29Weighted Shuffler9,728
30DatedSpotifyPlaylist9,286

SpotifyPlaylist dominates at 352K uses — almost every program starts with “take this playlist as input.” The rest of the top 10 reads like a recipe: take a playlist, sample some tracks, shuffle them, remove duplicates, and save. That’s the core loop.

The “comment” component at #13 with 34,670 uses warms my heart. It does nothing — it’s just a sticky note on the canvas. But 34,000 times, people felt the need to annotate their programs with explanations. They were documenting their work, even in a visual tool, even when nobody else would see it.


Looking Back

Ten years, nine million runs, seventy thousand users, zero revenue. SmarterPlaylists was never a business — it was a proof of concept that escaped into the wild and found an audience of people who cared about their music enough to program their playlists.

The data tells a story of a long-tail product: most people tried it once, but those who got it really got it. Tim with his 330,000 runs. User UU with 27 versions of Nirvana Radio. The 50,000 scheduled jobs humming away in the background. The person who imported “My forgotten tracks” and rediscovered songs they’d loved and lost.

The new version aims to keep everything that made the old one special — the power, the flexibility, the “I can’t believe I can do this” moments — while making it approachable enough that more than 27% of visitors actually build something.

Here’s to the next decade.

(Thanks to Claude and Gemini for helping me write this post)

Leave a comment

Migrate your legacy SmarterPlaylists programs to the new system.

If you used the original SmarterPlaylists, your programs are still out there — and now you can bring them into the new system.

r/smarterplaylists - Get ready to migrate your old programs into the new system!

How it works

When you log in, you’ll see an Import tab if you have legacy programs. This gives you a browsable list of all your old programs with metadata like run count, last run date, and component count.

From here you can:

  • Browse your old programs in a sortable table
  • Preview any program to see its dataflow graph before importing
  • Selectively import just the ones you want — check a few boxes and hit Import
  • Bulk import everything at once if you prefer

Imported programs show up in your regular Programs list, ready to edit and run. Once you’ve imported everything you need, hit “Done Importing” to hide the tab. You can always bring it back later from the Programs page.

Some things to know

Deprecated components. The original SmarterPlaylists had EchoNest-based components (Artist Radio, Genre Radio, etc.). EchoNest was shut down years ago, so these components are marked as deprecated in the migration. Programs that use them will still import, but those nodes will show a warning and won’t run. You can open the program in the editor and swap them out for Spotify equivalents.

Layout differences. The old editor used a horizontal left-to-right flow. The new editor uses a vertical top-to-bottom layout. The migration tool rotates and rescales your node positions automatically, so your programs should look reasonable in the new editor — though you may want to tidy up the layout after importing.

Expect some rough edges

Here’s the thing: with this migration tool, we’re going to have a lot more variety in the programs people are running. The alpha has been tested with programs built in the new editor, but legacy programs exercise the system in ways we haven’t necessarily anticipated — unusual component combinations, edge cases in filters and sorters, parameter values we didn’t think to test.

This is a good thing. It means we’ll find and fix bugs faster. But it also means you might hit errors that nobody has seen before. If something breaks, please report it in the bugs thread — and if you include the program name and your spotify username it will be easier for me to chase down the bugs.

SmarterPlaylists is still in alpha. Your patience and bug reports are what make it better.

Leave a comment

Better runtime stats in SmarterPlaylists

Like any other programming environment, SmarterPlaylists needs to help its programmers debug their programs, otherwise, the only debugging tool will have is thinking. And that’s often not good enough. With this in mind, I’ve pushed out an update to SmarterPlaylists that gives you detailed info on your run including: how many API calls were made across the whole run and for each component; how many tracks flowed through each component, cache hits, time spent waiting for the API to return, and more.

Here’s a screenshot of a simple program that grabs tracks from 3 playlists, combines them into a single alternating list of tracks, filtering them to keep only those that were released in this decade, and have lower energy. The stats section shows all the details – like the ‘alternate’ component is responsible for the most API calls since it is responsible for decorating the tracks.

With these stats I’ve already found and fix bugs in the engine – so its already paying off.

Leave a comment

SmarterPlaylists Alpha 0.1 is ready to make your playlists

Hey everyone — SmarterPlaylists is back online at smarterplaylists.playlistmachinery.com

As some of you know, the old version went offline a while back due to Spotify’s API auth changes. Rather than patch the old system, I’ve done ground-up rewrite with a modern stack.

What works:

  • The visual graph editor for building programs
  • Most of the components you know — sources, filters, combiners, sorters, conditionals, and outputs (51 components total)
  • Running programs and auto-saving output to Spotify playlists
  • Scheduling programs for automatic updates

What’s missing:

  • Program sharing/importing
  • Documentation and tutorials (but y’all know how it works, so you won’t need these …)
  • General polish

What about my old programs?

I still have the old program data and the plan is to migrate them over, but I haven’t written the migration scripts yet. The component system has changed enough that it’ll take some careful work to convert old programs correctly. I’ll post an update when that’s ready. In the meantime, you’ll need to recreate any programs you want to use.

Important caveats — this is an alpha:

  • Programs you create now may not survive into the final release. The data model is still evolving and I may need to wipe the database before 1.0.
  • Expect rough edges and the occasional bug
  • If something breaks, let me know here.

That said, the core functionality is solid and the app is secure (proper OAuth, encrypted tokens, HTTPS). If you’ve been missing SmarterPlaylists, give it a spin and let me know how it goes.

Special thanks to all the folks who’ve pinged me on musicmachinery, twitter, bluesky, github, reddit, and email to tell me how much they’ve relied on SP over the years. It helped me decide it was worth the update.

Leave a comment

Sort Your Music Gets an Update.

Sort Your Music has been helping people sort their Spotify playlists since 2012. Millions of playlists later, the app just got its first major rewrite. The core idea is the same — pick a playlist, sort by tempo or energy or danceability, save it back — but pretty much everything else is new.


Sort Your Music

Why Now?

Spotify updated their auth API to require HTTPS for all redirect URIs. Fair enough — it’s 2026, everything should be HTTPS. But that meant I needed a proper TLS setup, and the server Sort Your Music had been running on was a 10-year-old Linode instance that was getting increasingly painful to maintain. Upgrading the OS, patching dependencies, coaxing ancient packages into working with modern TLS — at some point it’s easier to just start fresh.

So that’s what happened. Spanking new server, spic and span secure endpoints. And once I was in there anyway, I figured the app itself deserved a refresh too. The original code was written in a single sitting in 2012 and it showed. The rewrite was also written in a single sitting — but this time Claude wrote all the code. I described what I wanted, reviewed what came back, and nudged things along. The whole thing came together in an afternoon.

Playlist Filtering


playlist picker

The biggest new feature is filtering. If you’re like me and have hundreds of playlists, scrolling through all of them to find the right one is a drag. Now you can filter by category:

  • Mine — playlists you created
  • Personalized — Spotify’s algorithmic playlists like Discover Weekly, Daily Mixes, and Release Radar
  • Spotify — editorial playlists like Today’s Top Hits and RapCaviar
  • Others — playlists by other users
  • Collaborative — multi-user playlists

There’s also a search box for filtering by name, and a counter showing how many playlists match.

Podcast Episode Support

Spotify playlists can contain podcast episodes alongside tracks now. The old version choked on these. The new version handles them fine — episodes show up in the table (in italics), audio attributes like BPM and energy are just omitted since they don’t apply, and episodes are preserved when you save.

Richer Playlist Metadata

When you open a playlist, the header now shows cover art alongside the title, owner, track count, category, and creation date. Public and collaborative playlists get badges. If the playlist has a description, that shows up too. There’s also a new “Added” column showing when each track was added to the playlist.

Smarter Save Behavior

The save workflow got smarter. The app detects when a playlist is read-only (Spotify editorial playlists, Discover Weekly, etc.) and hides the “Overwrite” option, showing only “Save as New.” When you do save, the new playlist’s description notes how it was sorted. The button gives you a spinner during the save and a confirmation when it’s done.

Progressive Loading

Both playlists and tracks load incrementally now. A progress bar shows how far along things are, and items appear on screen as they arrive. Navigate away mid-load and the request gets properly cancelled — no more zombie API calls.

Modern Landing Page

The landing page makes it clear the app is open source and runs entirely in your browser. No data goes to any server other than Spotify’s.

Comprehensive FAQ

The FAQ got a big expansion — privacy policy, detailed explanations of each audio attribute, guidance on playlist categories, and a screenshot so you can see what the app looks like before committing to a login.

Under the Hood

The original was a product of its era: everything crammed into a single index.html, jQuery, Bootstrap 3, Underscore, DataTables, Q.js for promises. It worked, but it was very much 2012.

The rewrite is vanilla ES modules with zero runtime dependencies. The code is split into proper modules — views, utilities, API helpers, state management — but there’s still no build step or bundler. Edit a file, refresh the browser. Some things don’t need to change.

Auth moved from Spotify’s now-deprecated implicit grant flow to Authorization Code with PKCE, which is more secure and supports refresh tokens. No more re-authenticating every hour.

The CSS uses custom properties for theming with a Spotify-inspired dark palette, and the layout is responsive down to mobile.

Try It

Sort Your Music is live at sortyourmusic.playlistmachinery.com. The source is on GitHub.

, , , , ,

1 Comment

Playing with strudel

I’ve been lurking in the live coding world for a few years. I’ve been re-inspired by Strudel. It’s a no-install javascript-centric version of Tidal Cycles that fits into my brain better than the Haskell-derived Tidal every did. I’ll be posting some of my experiments at Music Machinery on the Bear Blog.

Leave a comment

Music Machinery on Substack

I fondly recall the Google Reader days when lots of folks were reading long form content. With the demise of Google Reader, and the rise of Twitter, TikTok and Instagram, long form content drifted into the background. But it may be coming back, thanks at least in part, to Substack. I’m going to give Substack a try, so you’ll find new content posted at musicmachinery.substack.com.

Leave a comment

My favorite blog post of all time

I’ve been reading blogs seemingly forever. I’ve read lots of great posts .. but there’s one blog post that I still think about all the time even though it is nearly 5 years old. It’s by Sascha Judd and its all boy bands and the diversity crisis in tech. It’s a must read: How The Tech Sector Could Move In One Direction.

The gendered aspect of it kept bugging me.  It seemed like it was okay to be hysterical about some things, but not others.

Someday I may get back to organizing tech events – and when I do, I’ll be thinking about better ways to engage with fan armies.

Leave a comment

Duke Listens! returns (again)

A few months ago, we finally shutdown the final remnants of the old Echo Nest infrastructure. One of casualties of this final shutdown was the archive of my old blog Duke Listens! that I authored while I was a researcher at Sun Labs. However, I did manage to have a backup sitting on an old backblaze disk, so this morning I took a bit of time to re-host it on one of my personal servers. You can find it at:

http://dukelistens.playlistmachinery.com/

The blog serves as a reminder of the history of music recommendation and discovery during the iPhone era. Some notable posts:



, ,

Leave a comment

The World’s First MachineLearning-enabled musical keyboard !?!

Today Amazon released AWS DeepComposer which is a keyboard that will let you “create a melody that will transform into a completely original song in seconds”.

AWS DeepComposer keyboard

To me it looks like an Arturia Keystep knock-off.  I’m still puzzling over whether or not there’s any special ML-related features – or is it just a MIDI keyboard that comes with some AWS credits. Anyone with any insights, please let me know.

1 Comment