Dina Spotify ”Gilla-markeringar” ska vara ett skyddsnät. I stället blir det snabbt som en rörig vind. Bra låtar åker in och försvinner, och en månad senare minns du varken vad du sparade eller varför.
Det här drabbar upptagna marknadsförare som använder musik för att hålla fokus, men byråägare och soloentreprenörer känner av det också. Spotify Sheets-automatisering ger dig en sökbar lyssningshistorik och håller spellistorna rena utan att du ständigt behöver sortera manuellt.
Det här flödet arkiverar dina gillade spår till Google Sheets, hämtar Spotifys ljudegenskaper och använder sedan AI för att klassificera låtar till rätt spellistor i bulk. Du får se vad det gör, vad du behöver och var team oftast kör fast.
Så fungerar automatiseringen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: Spotify till Google Sheets, ordning i spellistor
flowchart LR
subgraph sg0["Monthly Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Retrieve relevant info", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Batch preparation"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Track details"]
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n4@{ icon: "mdi:brain", form: "rounded", label: "Anthropic Chat Model", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/spotify.svg' width='40' height='40' /></div><br/>Get Playlist"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/spotify.svg' width='40' height='40' /></div><br/>Get Tracks"]
n7@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Playlists informations", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter my playlist", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out1", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Batch preparation1"]
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge"]
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Simplify Tracks informations", pos: "b", h: 48 }
n14@{ icon: "mdi:cog", form: "rounded", label: "Limit", pos: "b", h: 48 }
n15@{ icon: "mdi:database", form: "rounded", label: "Get logged tracks", pos: "b", h: 48 }
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Excluding logged tracks"]
n17@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter", pos: "b", h: 48 }
n18@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out2", pos: "b", h: 48 }
n19["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Manual Verification"]
n20["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/spotify.svg' width='40' height='40' /></div><br/>Spotify"]
n21["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Aggregate by 200 tracks"]
n22@{ icon: "mdi:play-circle", form: "rounded", label: "Monthly Trigger", pos: "b", h: 48 }
n23@{ icon: "mdi:database", form: "rounded", label: "Get logged playlists", pos: "b", h: 48 }
n24@{ icon: "mdi:database", form: "rounded", label: "Log new tracks", pos: "b", h: 48 }
n25@{ icon: "mdi:database", form: "rounded", label: "Log new playlists", pos: "b", h: 48 }
n26["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Excluding logged playlists"]
n27@{ icon: "mdi:cog", form: "rounded", label: "Limit2", pos: "b", h: 48 }
n28@{ icon: "mdi:cog", form: "rounded", label: "Classify new tracks", pos: "b", h: 48 }
n29@{ icon: "mdi:robot", form: "rounded", label: "Basic LLM Chain - AI Classif..", pos: "b", h: 48 }
n14 --> n15
n12 --> n13
n17 --> n11
n27 --> n23
n3 --> n12
n6 --> n0
n10 --> n18
n10 --> n17
n18 --> n19
n5 --> n9
n22 --> n5
n22 --> n6
n1 --> n2
n2 --> n3
n15 --> n16
n11 --> n20
n9 --> n8
n28 --> n21
n28 --> n19
n4 -.-> n29
n23 --> n26
n8 --> n26
n8 --> n27
n0 --> n1
n0 --> n12
n21 --> n29
n16 --> n24
n16 --> n28
n7 -.-> n29
n26 --> n25
n13 --> n14
n13 --> n16
n29 --> n10
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n22 trigger
class n7,n29 ai
class n4 aiModel
class n5,n6,n9,n17,n20 decision
class n15,n23,n24,n25 database
class n2 api
class n1,n11,n21 code
class n18 disabled
class n19 disabled
classDef customIcon fill:none,stroke:none
class n1,n2,n5,n6,n11,n12,n16,n19,n20,n21,n26 customIcon
Problemet: ”Gilla-markeringar” blir snabbt oanvändbart
Det är lätt att spara spår. Det irriterande är att hitta dem senare. Spotify ger dig ”Gilla-markeringar”, men ingen riktig arkivvy som du kan söka i, tagga, granska eller analysera. Så du hamnar i små städsessioner som känns oskyldiga, tills du inser att du lagt en timme på att scrolla, provlyssna intros och fråga dig själv ”var hörde jag den här?”. Sedan försöker du sortera in i spellistor och då blir det ännu värre, eftersom du behöver sammanhang (mood, energi, genre, användningsfall) och inte bara spårnamnet.
Det summeras snabbt. Här är var det fallerar i verkligheten.
- Manuell sortering blir en månatlig syssla som är lätt att hoppa över, och högen växer.
- Utan en kalkylbladslogg kan du inte söka tillförlitligt på datum, artistmönster eller vilken ”fas” du var i när du sparade den.
- Spotifys inbyggda organiseringsverktyg använder inte ljudegenskaper på det sätt du önskar, så spellistorna glider bort från temat.
- Om du gillar mycket musik (några hundra spår i månaden är vanligt) glömmer du det mesta innan du ens hinner återvända till det.
Lösningen: autoarkivera spår och klassificera sedan till spellistor
Det här n8n-flödet körs enligt schema (månatligt som standard, men du kan göra det veckovis) och hämtar dina senaste spår i Spotify-biblioteket. Det tar in spårdetaljerna du faktiskt bryr dig om, och hämtar sedan Spotifys ljudegenskaper i batcher så att du får låtens ”form”, inte bara titeln. Därefter kontrollerar det ditt Google Sheet och tar bort allt du redan har loggat, vilket håller arkivet strukturerat. Nya spår läggs till i ditt sheet, och metadata för spellistor sparas också så att du har en levande referens för vad varje spellista är till för. Sedan kliver AI in, läser de där spellistebeskrivningarna och klassificerar varje spår till en eller flera spellistor. Till sist lägger n8n till spår i rätt Spotify-spellistor i bulk, med säker chunking (så att du inte slår i begränsningar).
Flödet startar med en schemalagd trigger i n8n. Spotify-noder hämtar dina spellistor och biblioteksspår, sedan hämtar HTTP-anrop ljudegenskaper som slås ihop till en dataset. Efter en snabb avduplicering mot Google Sheets mappar en AI-klassificeringskedja spår till spellistor, och Spotify-uppdateringar körs i grupperade batcher.
Det här får du: automatisering vs. resultat
| Vad det här flödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du gillar ungefär 300 spår under en månad och att du har 12 temaspellistor (fokus, sömn, träning, äldre decennier och så vidare). Manuellt, även med ”bara 30 sekunder per spår” för att bestämma placering, blir det ungefär 2,5 timmar, och det inkluderar inte att leta i spellistor eller att tveka. Med det här flödet lägger du cirka 10 minuter på att sätta upp sheetet och spellistebeskrivningarna en gång, och sedan körs månadsjobbet i bakgrunden. Kostnaden för AI-klassificeringen är cirka 20 cent för 300 spår, och spellisteuppdateringarna körs i bulk så att du slipper sitta och övervaka.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger fungerar bra)
- Spotify för att läsa gillade låtar och uppdatera spellistor
- Google Sheets för att lagra ditt spårarkiv
- Anthropic- eller OpenAI-API-nyckel (hämta den i din Anthropic/OpenAI-dashboard)
Kunskapsnivå: Medel. Du kopplar konton, skapar ett sheet och justerar spellistebeskrivningar så att AI:n får bra ”regler” att följa.
Vill du inte sätta upp det här själv? Prata med en automatiseringsexpert (gratis 15-minuters konsultation).
Så fungerar det
En månatlig (eller veckovis) trigger kör jobbet. n8n startar på en schematrigger, så arkiveringen sker automatiskt utan att du behöver komma ihåg att göra den.
Spotify-data samlas in och berikas. Flödet hämtar dina spellistor (och filtrerar sedan till de du äger) och drar spår från ditt bibliotek. Det anropar också Spotify API för ljudegenskaper och slår sedan ihop allt till en korrekt formaterad dataset.
Google Sheets blir din ”source of truth”. Innan något läggs till hämtar n8n det du redan har loggat och exkluderar dubbletter. Nya spår läggs till i Tracks-loggen, och spellistedetaljer kan läggas till i en Playlists-logg, så att du behåller en historik över namn och beskrivningar över tid.
AI tilldelar spår till spellistor och Spotify uppdateras i bulk. Spår grupperas (upp till 200 åt gången), skickas till en AI-klassificeringskedja och expanderas tillbaka till spår-URI:er per spellista. Därefter sker Spotify-uppdateringar med chunking så att stora månader fortfarande rullar på utan problem.
Du kan enkelt ändra spellistebeskrivningarna efter din smak eller justera schemat från månad till vecka beroende på hur snabbt gilla-markeringarna staplas på. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-implementeringsguide
Steg 1: konfigurera schematriggaren
Ställ in månadsschemat så att automatiseringen körs återkommande och förgrenar till hämtning av spellistor och bibliotek.
- Öppna Monthly Schedule Trigger och ställ in intervallet för Rule till månader (det ska visas som ett månadsschema).
- Bekräfta att Monthly Schedule Trigger skickar utdata till både Retrieve Playlists och Retrieve Library Tracks parallellt.
- Behåll valfritt Flowpast Branding som en referensnotering för ert team.
Steg 2: anslut Spotify-spellistor och bibliotekskällor
Hämta era spellistor och bibliotekslåtar, filtrera sedan till endast era egna spellistor och mappa nödvändiga fält för spellistor.
- Öppna Retrieve Playlists och ställ in Resource till
playlistoch Operation tillgetUserPlaylists. Credential Required: anslut era spotifyOAuth2Api-uppgifter. - Öppna Retrieve Library Tracks och ställ in Resource till
libraryoch Return All tilltrue. Credential Required: anslut era spotifyOAuth2Api-uppgifter. - I Filter Owner Playlists ställer ni in villkoret så att
{{$json.owner.display_name}}är lika med[YOUR_NAME]. - I Playlist Info Mapper ställer ni in JSON Output till
{ "playlist_name": "{{ $json.name }}", "playlist_description": "{{ $json.description }}", "playlist_spotify_uri": "{{ $json.uri }}" }. - Bekräfta att Playlist Info Mapper skickar utdata till både Exclude Existing Playlists och Cap Playlist Count parallellt.
[YOUR_NAME] inte matchar ert Spotify-visningsnamn exakt kommer Filter Owner Playlists att filtrera bort alla spellistor.Steg 3: berika låtdata med audio features
Extrahera biblioteksdetaljer för låtar, batcha Spotify-ID:n och hämta audio feature-data för klassificering.
- I Extract Track Details ställer ni in Mode till
rawoch JSON Output till{ "track" : "{{ $json.track.name.replaceAll('\"',\"'\") }}", "artist": "{{ $json.track.artists[0].name }}", "album" :"{{ $json.track.album.name }}", "track_spotify_uri" : "{{ $json.track.uri }}", "track_spotify_id" : "{{ $json.track.id }}", "external_urls": "{{ $json.track.external_urls.spotify }}", "track_popularity" : "{{ $json.track.popularity }}", "album_release_date" : "{{ $json.track.album.release_date.toDateTime().year }}" }. - Behåll det parallella flödet från Extract Track Details till både Prepare ID Batches och Combine Track Data.
- I Prepare ID Batches behåller ni den medföljande JavaScript-koden som chunkar
trackSpotifyIdsi grupper om 100. - Öppna Fetch Audio Features och ställ in URL till
https://api.spotify.com/v1/audio-featuresmed query ids satt till{{$json.trackSpotifyIds.join(",")}}. Credential Required: anslut era spotifyOAuth2Api-uppgifter. - I Expand Features List ställer ni in Field to Split Out till
audio_featuresoch bekräftar att den matar Combine Track Data. - I Combine Track Data behåller ni Mode som
combinemed Join ModeenrichInput2och slår ihop viaidtilltrack_spotify_id.
Steg 4: minska fält och avduplicera mot Google Sheets-loggar
Trimma track-payloaden, begränsa antal poster och jämför mot er loggade historik för att undvika dubbletter.
- I Reduce Track Fields ställer ni in Include till
except, Exclude Fields tilltrack_spotify_id, external_urls, id, uri, track_href, analysis_urloch lägger till date_added med värdet{{$now.format('yyyy-MM-dd')}}. - Bekräfta att Reduce Track Fields skickar utdata till både Cap Record Count och Exclude Existing Tracks parallellt.
- Öppna Fetch Logged Tracks och ställ in Document ID till
[YOUR_ID], Sheet Name tilltracks listingoch Range tillA:B. Credential Required: anslut era googleSheetsOAuth2Api-uppgifter. - I Exclude Existing Tracks behåller ni Join Mode som
keepNonMatchesoch Fields to Match satt tilltrack_spotify_uri. - Säkerställ att Exclude Existing Tracks skickar utdata till både Append Tracks Log och Route Tracks to AI parallellt.
Steg 5: konfigurera AI-klassificering och parsning
Chunk:a låtar för modellen, kör LLM-klassificeringen och parsa den strukturerade utdatan.
- I Group Tracks by 200 behåller ni JavaScript-koden som bygger
chunk-arrayer med 200 låtar. - Öppna LLM Classification Chain och ställ in Text till
=#### Tracks to Analyze:.{{ JSON.stringify($json.chunk) }} - Säkerställ att den långa prompten i LLM Classification Chain refererar till spellistor via
{{ JSON.stringify($('Playlist Info Mapper').all()) }}. - Verifiera att Anthropic Chat Engine är ansluten som språkmodell för LLM Classification Chain. Credential Required: anslut era anthropicApi-uppgifter.
- Använd Structured Result Parser som output parser för LLM Classification Chain med det medföljande JSON-schemat. Lägg till credentials i Anthropic Chat Engine (inte i parsern).
- Bekräfta att LLM Classification Chain skickar utdata till Expand AI Output.
Steg 6: bygg utdata för uppdatering av spellistor
Dela upp AI-utdata i spellistor och låtlistor, validera data, chunk:a track-URI:er och uppdatera Spotify-spellistor.
- I Expand AI Output ställer ni in Field to Split Out till
output. - Bekräfta att Expand AI Output skickar utdata till både Expand Track URIs och Filter Nonempty Tracks parallellt.
- I Filter Nonempty Tracks behåller ni villkoret
{{$json.trackUris}}notEmptyför att undvika tomma uppdateringar. - I Chunk Playlist Tracks behåller ni JavaScript-koden som delar
trackUrisi chunkar om 100. - Konfigurera Update Spotify Playlist med ID
{{$json.uri}}och Track ID{{$json.trackUris.join(",")}}. Credential Required: anslut era spotifyOAuth2Api-uppgifter. - I Append Tracks Log ställer ni in Document ID till
[YOUR_ID]och Sheet Name tilltracks listing. Credential Required: anslut era googleSheetsOAuth2Api-uppgifter.
Steg 7: logga spellistor och slutför avduplicering
Logga nya spellistor till Google Sheets och begränsa hur många spellistor som bearbetas varje månad.
- I Fetch Logged Playlists ställer ni in Document ID till
[YOUR_ID]och Sheet Name tillplayslists listing. Credential Required: anslut era googleSheetsOAuth2Api-uppgifter. - Behåll Exclude Existing Playlists med Join Mode
keepNonMatchesoch Fields to Matchplaylist_spotify_uri. - I Append Playlists Log ställer ni in Document ID till
[YOUR_ID]och Sheet Name tillplayslists listing. Credential Required: anslut era googleSheetsOAuth2Api-uppgifter. - Justera Cap Playlist Count om ni vill begränsa hur många spellistor som loggas per körning.
Steg 8: testa och aktivera ert workflow
Kör ett manuellt test för att bekräfta att spellistor klassificeras och uppdateras, och aktivera sedan schemat.
- Klicka på Execute Workflow och verifiera att Monthly Schedule Trigger skickar utdata till Retrieve Playlists och Retrieve Library Tracks parallellt.
- Kontrollera att LLM Classification Chain returnerar strukturerad data och att Expand AI Output skapar items med
playlistName,uriochtrackUris. - Bekräfta att nya rader läggs till i Append Tracks Log och Append Playlists Log, och att Update Spotify Playlist lyckas skriva låtar.
- När testet är lyckat, växla workflowet till Active för att köra det månadsvis.
Vanliga fallgropar
- Spotify OAuth-inloggningar kan löpa ut eller sakna scopes för att redigera spellistor. Om uppdateringar misslyckas, kontrollera din Spotify-inloggning i n8n och bekräfta att den har behörighet att ändra spellistor.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du redigera utdata för alltid.
Vanliga frågor
Cirka 30 minuter om dina Spotify- och Google-konton är redo.
Ingen kodning krävs. Du kopplar främst inloggningar, skapar Google Sheetet och justerar spellistebeskrivningarna som används för klassificering.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna med API-kostnader för AI-modellen, som ligger runt 20 cent för cirka 300 spår i en månads-körning (baserat på flödets uppskattning).
Två alternativ: n8n Cloud (hanterat, enklast att sätta upp) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, men du bör också justera inställningar för avduplicering och batching. Ändra schematriggern och granska sedan logiken för ”Cap Record Count” och ”Group Tracks by 200” så att mindre veckokörningar fortfarande är effektiva. De flesta justerar också AI-prompten i ”LLM Classification Chain” så att den prioriterar färre spellisteplaceringar när batchen är liten.
Oftast handlar det om utgången Spotify OAuth eller att scopes saknas för att ändra spellistor. Återanslut Spotify-inloggningen i n8n och bekräfta att du har godkänt åtkomst för att redigera spellistor (inte bara läsa). Om det bara fallerar vid stora körningar kan du slå i rate limits, så minska batchstorleken vid hämtning av ljudegenskaper eller sakta ner spellisteuppdateringarna.
Hundratals per körning är normalt, och 300 spår är vad kostnadsuppskattningen baseras på.
Ofta, ja, eftersom det här flödet behöver batching, avduplicering, sammanslagning av dataset och en AI-klassificeringsloop som är klumpig i enklare verktyg. n8n ger dig också ett self-host-alternativ, vilket spelar roll när du vill köra stora månadsjobb utan att betala per steg. Zapier eller Make kan fortfarande fungera om du bara vill ha en enkel ”Gilla-markeringar till Google Sheets”-logg och kan hoppa över ljudegenskaper och spellisteuppdateringar. När du vill ha pålitliga bulkändringar i spellistor blir de snabbt pilliga. Enkelt uttryckt: titta på hur många spellistor du hanterar och hur noggrann du är med klassificeringskvalitet. Prata med en automatiseringsexpert om du vill ha en snabb rekommendation utifrån din setup.
När det här väl rullar slutar din lyssningshistorik vara ett svart hål. Flödet sköter sortering och loggning i bakgrunden, så du kan bara njuta av musiken.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.