The problem
He has been “writing and recording music for over 20 years and last year just started publishing it.” He says “the biggest source of friction was the promotional grind that comes with it.” He compares the usual approach to gambling: “Most independent artists submit their music to playlists the same way they buy lottery tickets.” He also writes that “Playlist curators receive hundreds of submissions.” He says there is “no standard process, no guaranteed feedback,” and no systematic way to match a track to a playlist. He started with spreadsheets. He says they broke down once he asked relational questions such as which of his tracks had the best shot at a given playlist. He built most of the system “in the margins of a full-time job and life as a father of two.”
The blueprint (as he describes it)
- Start with a submission tracker. The first version was a custom Salesforce application to track his music catalogue and a workflow to “find a playlist, submit a track, log the outcome.” Over time he saw patterns, for example: “Acceptance rates varied by genre, tempo, energy.” He says extracting that signal by hand did not scale.
- Model the catalog relationally in Salesforce. He chose Salesforce because he wanted “a relational database with a UI that doesn’t require writing SQL.” He also wanted its bulk APIs, workflow engine and Agentforce. The data model has five custom objects:
- Release__c: an album or single.
- Track__c: a song, holding audio feature scores, composite scores and submission metrics.
- Release_Track__c: a junction between the two. It also stores “release-specific metadata like track number and Spotify popularity”.
- Playlist__c: a Spotify playlist with synced metadata.
- Playlist_Submission__c: a submission recording date, method, status (Draft, Submitted, then Successful or Unsuccessful) and notes.
- Compute audio features himself. He planned to use Spotify’s Audio Features endpoint. “Then Spotify deprecated it.” He built an analysis pipeline instead. It downloads a 30-second preview, runs a librosa pass and writes thirteen features back to Salesforce. The features include energy, danceability, valence, acousticness, tempo and key. The track pipeline runs once a month against his catalog.
- Condense features into three composite scores. Energy Adjusted, Mood Score and Rhythm Score sit on the same 0 to 1 scale for both tracks and playlists. He credits the Circumplex Model with catching mood mismatches that genre tags miss.
- Profile every playlist incrementally. Each track on each playlist gets a snapshot record with the same thirteen fields. Each run compares existing snapshots with what Spotify currently shows. Only new tracks without a snapshot are analyzed. His example: “A playlist with 80 tracks that gets 5 new additions this week costs 5 analysis passes, not 80.” A playlist’s profile is the average of its snapshots’ composite scores.
- Order the queue and handle missing playlists. Playlists are processed by last sync time, oldest first. Never-synced playlists always go to the front. Clearing a playlist’s sync timestamp forces a re-process on the next run.
- A 404 is treated as a soft delete. The playlist is marked inactive but kept in the queue. It is restored automatically if Spotify returns tracks again.
- A 403 means a private account. The pipeline skips it silently.
- Run it unattended on two schedules. A daily pass fetches metadata, adds new tracks as stubs, prunes removed tracks and stamps timestamps. A monthly pass runs audio analysis on stubs, up to a set limit. Both write back to Salesforce with no supervision.
- Combine signals into one Fit Score. His formula is: “Fit Score = (Audio Similarity × 0.5) + (Popularity Score × 0.2) + (Recency Score × 0.15) + (Trend Score × 0.15)”.
- Audio Similarity is one minus the average of the three absolute deltas between track and playlist scores.
- Popularity rewards a match to the playlist’s tier, not higher popularity (“Proximity is the right model.”). Missing values default to the midpoint.
- Recency “decays linearly to zero over 365 days”.
- Trend measures the direction of a track’s Spotify popularity.
- He rejected weighting all 13 raw features, an artist affinity signal and a playlist’s past acceptance history.
- Put the agent where he works. The Agentforce agent (his Recommendation Engine) is “embedded directly in the CRM on both the Track and Playlist record pages.” He describes three layers:
- Playlist intelligence: it filters out playlists he has already pitched. It “accounts for playlists where I was rejected recently, and prioritizes based on a combination of audio fit and curator responsiveness.” He can ask it to explain its reasoning.
- Catalog-level intelligence: from a playlist page he can ask “which of my tracks is the best fit for this?” It can flag a track he hasn’t been promoting that fits better than the one he has been pitching. It also ranks playlists by ROI: “The agent weighs follower count against historical acceptance difficulty”.
- Fit scoring intelligence: it breaks a score down by energy, mood and rhythm delta, popularity mismatch and BPM range. It can also compare a track against recently added songs rather than the playlist average, to account for curator taste drift.
- Keep the pitch himself. The posts describe the agent recommending and explaining. They do not describe it sending pitches. Submissions are logged on Playlist_Submission__c.
Stated results
- None stated for acceptances, streams or followers.
- On the playlist layer he says: “This alone eliminates hours of manual cross-referencing.” No hour count is given.
- He calls the system “a significant upgrade from a spreadsheet.”
- Output: every track can be sorted against all 3,500 playlists by Fit Score. With “~150 scored tracks and ~3,500 active playlists” he estimates “roughly 525,000 score records”.
- In the April 16 intro post he wrote: “Two of these are already live.” The third component was still unfinished at that point. The May 7 post describes the agent in use.
Caveats
- This is his own first-person series on his personal site. It is not hosted by a vendor and does not sell a product, course or kit. The site is also his professional profile as a Salesforce architect, and the final post invites developers to “feel free to reach out.”
- The series is a companion to his talk at True North Dreamin’ (a Salesforce community conference) in Toronto in May 2026. The intro post gives the talk title as “How Agentforce Helped Me Go Punk (And Viral)”. No virality or stream figures appear anywhere in the source.
- This is not a no-code build. He is a professional Salesforce architect, and he says Salesforce “costs money, has a steep learning curve”.
- The trend signal is described two ways. The Fit Score post says it is “Computed nightly”. The agent post says connecting trend scoring to streaming analytics is “next on the roadmap.”
- Learning from outcomes is future work. He will test it “once there are enough resolved submissions to work with.” The number of submissions made so far is not stated.
- The source does not say how the roughly 3,500 playlists got into his database. It does not explain how curator responsiveness or acceptance difficulty is calculated.
- The hub page calls it “a three-component system” and then describes “two core components”.
- Handles: LinkedIn linkedin.com/in/mcguirematthew and X @McGuireTO (verified 2026-10-21: both linked from mattmcguire.ca). Bluesky: no matching account found. Threads, Instagram, Mastodon, TikTok: not checked.
Sources
- https://mattmcguire.ca/salesforce/the-agent-three-layers-of-intelligence-for-smarter-playlist-pitching/ (primary: first-person post on the agent, published May 7)
- https://mattmcguire.ca/music-intelligence-engine/ (primary: series hub)
- https://mattmcguire.ca/salesforce/how-i-used-salesforce-to-try-to-make-it-in-music-and-why-i-ended-up-building-something-way-more-interesting/ (primary: intro post, published April 16)
- https://mattmcguire.ca/salesforce/the-data-model-why-i-put-my-music-catalog-in-salesforce/ (primary: data model)
- https://mattmcguire.ca/salesforce/3500-moving-targets-building-the-playlist-snapshot-pipeline/ (primary: snapshot pipeline)
- https://mattmcguire.ca/salesforce/the-fit-score-ranking-3500-playlists-so-you-dont-have-to/ (primary: Fit Score)
- https://mattmcguire.ca/about-matt/ (primary: About page)
Want agents like these working your distribution? See the Agent Stack Teardown. Get new teardowns weekly: subscribe (double opt-in).
Get one teardown a week.
Same format, a new operator every issue. Double opt-in.