Workflow: Spotify Sync Liked Songs to Playlist
Integrations: compareDatasets, filter, gotify, manualTrigger, merge, noOp, scheduleTrigger, set, sort, splitInBatches, spotify, stickyNote, stopAndError, summarize

{"id": "gemC8tYGZk3LtBHG", "meta": {"instanceId": "workflow-61b7a640", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:52.178124", "updatedAt": "2025-09-29T07:07:52.178135", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "Spotify Sync Liked Songs to Playlist", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "7767a08e-43f0-4c07-968c-06dab188bf86", "name": "Start", "type": "n8n-nodes-base.manualTrigger", "position": [160, 220], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow."}, {"id": "9193f532-335e-4a6a-886e-64849f6fab55", "name": "Schedule Trigger", "type": "n8n-nodes-base.scheduleTrigger", "position": [180, -100], "parameters": {"rule": {"interval": [{}]}}, "typeVersion": 1.1, "notes": "This scheduleTrigger node performs automated tasks as part of the workflow."}, {"id": "41cffeb0-9dd5-4f71-8519-19f7339e2102", "name": "Sort first added to first item", "type": "n8n-nodes-base.sort", "position": [1480, -60], "parameters": {"options": {}, "sortFieldsUi": {"sortField": [{"fieldName": "added_at"}]}}, "typeVersion": 1, "notes": "This sort node performs automated tasks as part of the workflow."}, {"id": "ed77edb1-25d4-4330-a6ad-3864117172e3", "name": "Gotify Send deleted n from x", "type": "n8n-nodes-base.gotify", "position": [3540, 220], "parameters": {"message": "=### Sync of Lieblingssongs to {{ $('Edit set Vars').item.json.varplaylistto }} finished.\n#### Deleted {{ $json.count_del }} Songs in {{ (($now.toUnixInteger()-$('Edit set intern vars').item.json.timestart)/60).toFixed(1) }} Minutes from {{ $('Edit set Vars').item.json.varplaylistto }}.", "options": {"contentType": "text/markdown"}, "additionalFields": {}}, "typeVersion": 1, "notes": "This gotify node performs automated tasks as part of the workflow."}, {"id": "f9e03838-03ea-44de-b3d5-6adb94f2324b", "name": "Loop delete old", "type": "n8n-nodes-base.splitInBatches", "position": [2560, 300], "parameters": {"options": {}}, "typeVersion": 3, "notes": "This splitInBatches node performs automated tasks as part of the workflow."}, {"id": "2aa10aab-fd65-4be3-95da-2471bacde57c", "name": "Spotify delete old", "type": "n8n-nodes-base.spotify", "position": [2820, 320], "parameters": {"id": "={{ $('Set pluri').item.json.setpluri }}", "trackID": "={{ $json.track.uri }}", "resource": "playlist", "operation": "delete"}, "typeVersion": 1, "alwaysOutputData": false, "notes": "This spotify node performs automated tasks as part of the workflow."}, {"id": "71a4391d-280b-4cbc-be5b-16f9bb02c161", "name": "Edit set Vars", "type": "n8n-nodes-base.set", "position": [480, 100], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "1bacf493-c2bf-47f8-bcb4-a83010d8da57", "name": "varplaylistto", "type": "string", "value": "CHANGE MEEEEEEEEE"}]}}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "b0f18395-2bee-4e92-8905-a2faf8b8617b", "name": "Edit success to del", "type": "n8n-nodes-base.set", "position": [3180, 240], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "2aab653d-b7ee-4d50-b8e5-fcae0c0da1f4", "name": "del", "type": "string", "value": "={{ $json.success }}"}]}}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "d205de9e-fefd-4a9b-933b-932e19873ee3", "name": "Filter Playlist x", "type": "n8n-nodes-base.filter", "position": [1480, 160], "parameters": {"options": {}, "conditions": {"options": {"version": 1, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "0665f0f3-fb32-4391-b1a9-ce1dee887392", "operator": {"name": "filter.operator.equals", "type": "string", "operation": "equals"}, "leftValue": "={{ $json.name }}", "rightValue": "={{ $('Edit set Vars').item.json.varplaylistto }}"}]}}, "typeVersion": 2, "notes": "This filter node performs automated tasks as part of the workflow."}, {"id": "5f81aa3f-631d-41c8-aaf7-0bced69ecb7a", "name": "Compare Datasets", "type": "n8n-nodes-base.compareDatasets", "position": [2260, 20], "parameters": {"options": {}, "mergeByFields": {"values": [{"field1": "track.uri", "field2": "track.uri"}]}}, "typeVersion": 2.3, "notes": "This compareDatasets node performs automated tasks as part of the workflow."}, {"id": "7c86ca31-1e78-47d2-8c97-b796aa9b3eff", "name": "count added", "type": "n8n-nodes-base.summarize", "position": [3320, -280], "parameters": {"options": {}, "fieldsToSummarize": {"values": [{"field": "added"}]}}, "typeVersion": 1, "notes": "This summarize node performs automated tasks as part of the workflow."}, {"id": "80e6c5f5-6ca1-44a5-8f6a-2181854f3ad8", "name": "Loop add missing", "type": "n8n-nodes-base.splitInBatches", "position": [2560, -240], "parameters": {"options": {}}, "executeOnce": false, "typeVersion": 3, "notes": "This splitInBatches node performs automated tasks as part of the workflow."}, {"id": "399c4489-82d3-4ca4-b875-5a3988cc1e56", "name": "Spotify add Missing to x", "type": "n8n-nodes-base.spotify", "position": [2740, -200], "parameters": {"id": "={{ $json.setpluri }}", "trackID": "={{ $json.track.uri }}", "resource": "playlist", "additionalFields": {}}, "retryOnFail": true, "typeVersion": 1, "alwaysOutputData": false, "notes": "This spotify node performs automated tasks as part of the workflow."}, {"id": "598693f1-9716-45b7-a53b-d4b16a9dbd5d", "name": "Edit snapshot to added", "type": "n8n-nodes-base.set", "position": [3160, -280], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "2aab653d-b7ee-4d50-b8e5-fcae0c0da1f4", "name": "added", "type": "string", "value": "={{ $json.snapshot_id }}"}]}}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "29b6f2c3-7c03-4c22-9c40-12224adc36a9", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [2480, -380], "parameters": {"color": 7, "width": 552.0433138756023, "height": 424.7557420711291, "content": "### Spotify add all missing song from your Liked Songs to the Playlist."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "2e6b61ee-67dd-473f-aca6-4bf81d348474", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [2480, 140], "parameters": {"color": 7, "width": 526.4961431470259, "height": 334.0270849934536, "content": "### Spotify remove all songs that aren't in your Liked Songs anymore."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "a7a32504-0805-4898-a054-3a9d1cbfdf00", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [120, -180], "parameters": {"color": 7, "width": 208.40632224018503, "height": 218.09160104224037, "content": "Run the workflow every 24h at 0 o'clock"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "240bb516-434c-4050-af5c-8ecf3c270077", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [1280, -202], "parameters": {"color": 7, "width": 961.006341450897, "height": 611.5473181162548, "content": "## Compare the content of your Liked Songs and the target Playlist "}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "cd4fe1c5-88da-4925-b95e-a03c9cfb14fc", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [420, -80], "parameters": {"color": 3, "width": 365.4656320955345, "height": 271.1720790719926, "content": "# Edit here!"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "aa447ed6-9522-4f25-b0b6-7c8592b3d71a", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [380, -20], "parameters": {"width": 362.28928697919184, "height": 267.99573395564994, "content": "## Change the value to the name of your target playlist."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "a7fd9f12-3f06-4613-9797-2cd754af4e44", "name": "Cound deleted", "type": "n8n-nodes-base.summarize", "position": [3320, 231], "parameters": {"options": {}, "fieldsToSummarize": {"values": [{"field": "del"}]}}, "typeVersion": 1, "notes": "This summarize node performs automated tasks as part of the workflow."}, {"id": "ebdc4b9d-09a9-4a41-b2a3-f9488decafd7", "name": "Sort", "type": "n8n-nodes-base.sort", "position": [2100, 160], "parameters": {"options": {"disableDotNotation": false}, "sortFieldsUi": {"sortField": [{"fieldName": "added_at"}]}}, "typeVersion": 1, "notes": "This sort node performs automated tasks as part of the workflow."}, {"id": "1285f8fd-423a-418f-9ba0-b2e43f3f55d7", "name": "Set pluri", "type": "n8n-nodes-base.set", "position": [1680, 160], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "f1589697-556f-451d-aada-55d2b0892eb2", "name": "setpluri", "type": "string", "value": "={{ $json.uri }}"}]}}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "55e994d9-cb66-4a30-9cda-ec373f5135a7", "name": "Merge", "type": "n8n-nodes-base.merge", "position": [1700, -60], "parameters": {"mode": "combine", "options": {}, "combinationMode": "multiplex"}, "typeVersion": 2.1, "notes": "This merge node performs automated tasks as part of the workflow."}, {"id": "83e47b30-dc30-4978-9de4-087f711f05b3", "name": "Gotify", "type": "n8n-nodes-base.gotify", "position": [3520, -300], "parameters": {"message": "=### Sync of Liked Songs to {{ $('Edit set Vars').item.json.varplaylistto }} finished.\n#### Added {{ $('count added').item.json.count_added }} Songs in {{ (($now.toUnixInteger()-$('Edit set intern vars').item.json.timestart)/60).toFixed(1) }} Minutes to {{ $('Edit set Vars').item.json.varplaylistto }}.", "options": {"contentType": "text/markdown"}, "additionalFields": {}}, "typeVersion": 1, "notes": "This gotify node performs automated tasks as part of the workflow."}, {"id": "d58f4a88-d760-4d6f-a43f-d38575b5fa64", "name": "Edit set intern vars", "type": "n8n-nodes-base.set", "position": [880, 80], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "88b47bd3-d1b6-4c7d-bec2-1606d8c39bde", "name": "timestart", "type": "string", "value": "={{ $now.toUnixInteger()}}"}]}}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "5bfaaa09-5310-49af-be6b-df0495eebefc", "name": "Sticky Note6", "type": "n8n-nodes-base.stickyNote", "position": [1120, -150], "parameters": {"color": 3, "width": 326.5743290776694, "height": 513.8509299486715, "content": "# Edit here!"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "0e47be4b-668b-4167-a191-2680f5750798", "name": "Sticky Note7", "type": "n8n-nodes-base.stickyNote", "position": [1080, -87], "parameters": {"width": 331.1762445648999, "height": 481.41944245487934, "content": "### You need to add your own spotify account here."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "b15d1e35-03bc-4ee9-b425-38b73f832807", "name": "END", "type": "n8n-nodes-base.noOp", "position": [2580, 0], "parameters": {}, "typeVersion": 1, "notes": "This noOp node performs automated tasks as part of the workflow."}, {"id": "2ea585b8-645b-499d-8bef-9579f7283a38", "name": "Sticky Note8", "type": "n8n-nodes-base.stickyNote", "position": [3140, 131], "parameters": {"color": 5, "width": 322.2176178216457, "height": 271.6789308744022, "content": "## (Optional) \n### Count the number of songs that were deleted"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "bec19dea-11f6-4ac3-96c2-5b0b13079cab", "name": "Sticky Note9", "type": "n8n-nodes-base.stickyNote", "position": [3120, -400], "parameters": {"color": 5, "width": 322.2176178216457, "height": 271.6789308744022, "content": "## (Optional) \n### Count the number of songs that were added"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "44731884-1a40-49ca-bdc8-08f135e97fba", "name": "Sticky Note10", "type": "n8n-nodes-base.stickyNote", "position": [1840, 37], "parameters": {"color": 3, "width": 210.26363071246638, "height": 252.15185862696416, "content": "# Edit here!"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "e9654402-2c58-458e-a235-ed1dd09bbc61", "name": "Sticky Note11", "type": "n8n-nodes-base.stickyNote", "position": [1800, 100], "parameters": {"width": 223.1734532257829, "height": 240.4901386983871, "content": "### You need to add your own spotify account here."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "2d924a96-a313-448d-b563-abd4c56e8af9", "name": "Sticky Note12", "type": "n8n-nodes-base.stickyNote", "position": [2800, 180], "parameters": {"color": 3, "width": 210.26363071246638, "height": 252.15185862696416, "content": "# Edit here!"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "9cbe2e02-7e5d-47b8-a333-5d09767790d6", "name": "Sticky Note13", "type": "n8n-nodes-base.stickyNote", "position": [2760, 240], "parameters": {"width": 223.1734532257829, "height": 240.4901386983871, "content": "### You need to add your own spotify account here."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "f1d30def-79d5-4efe-9f24-d36866e971ee", "name": "Sticky Note14", "type": "n8n-nodes-base.stickyNote", "position": [2740, -340], "parameters": {"color": 3, "width": 210.26363071246638, "height": 252.15185862696416, "content": "# Edit here!"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "957dc82b-6fe0-4018-add9-d904b8a1af9f", "name": "Sticky Note15", "type": "n8n-nodes-base.stickyNote", "position": [2700, -280], "parameters": {"width": 223.1734532257829, "height": 240.4901386983871, "content": "### You need to add your own spotify account here."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "b63c2dcc-da0c-4074-bfa5-69aaeaa9e1db", "name": "Spotify get Liked Songs", "type": "n8n-nodes-base.spotify", "position": [1160, -20], "parameters": {"resource": "library", "returnAll": true}, "typeVersion": 1, "notes": "This spotify node performs automated tasks as part of the workflow."}, {"id": "808389ac-65a8-444f-99a7-08eab4b48b3e", "name": "Spotify get all playlists", "type": "n8n-nodes-base.spotify", "position": [1160, 200], "parameters": {"resource": "playlist", "operation": "getUserPlaylists", "returnAll": true}, "typeVersion": 1, "notes": "This spotify node performs automated tasks as part of the workflow."}, {"id": "6232b653-27ba-4986-9f53-b5d9dfa2e6b8", "name": "Spotify get Tracks of X", "type": "n8n-nodes-base.spotify", "position": [1880, 160], "parameters": {"id": "={{ $json.setpluri }}", "resource": "playlist", "operation": "getTracks", "returnAll": true}, "typeVersion": 1, "alwaysOutputData": false, "notes": "This spotify node performs automated tasks as part of the workflow."}, {"id": "error-83e245c7", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "active": false, "pinData": {}, "settings": {"timezone": "UTC", "callerPolicy": "workflowsFromSameOwner", "executionOrder": "v1", "saveManualExecutions": true, "errorWorkflow": null, "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "04d88525-7f76-435b-b70c-a7ace2517815", "connections": {}, "description": "Automated workflow: Spotify Sync Liked Songs to Playlist. This workflow integrates 13 different services: filter, stickyNote, gotify, scheduleTrigger, merge. It contains 40 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Spotify Sync Liked Songs to Playlist. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}