AutomationFlowsGeneral › Add Liked Songs To A Spotify Monthly Playlist

Add Liked Songs To A Spotify Monthly Playlist

Add Liked Songs To A Spotify Monthly Playlist. Uses stickyNote, spotify, nocoDb, noOp. Scheduled trigger; 30 nodes.

Cron / scheduled trigger★★★★★ complexity30 nodesSpotifyNoco Db
General Trigger: Cron / scheduled Nodes: 30 Complexity: ★★★★★

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "nodes": [
    {
      "id": "f418ae01-01ea-4794-8903-d5709a29c735",
      "name": "Get current date",
      "type": "n8n-nodes-base.code",
      "position": [
        240,
        2460
      ],
      "parameters": {
        "jsCode": "const monthNames = [\n  'January',\n  'February',\n  'March',\n  'April',\n  'May',\n  'June',\n  'July',\n  'August',\n  'September',\n  'October',\n  'November',\n  'December',\n]\n\nconst date = new Date()\nconst year = date.getFullYear()\nconst month = date.getMonth()\n\nlet currentDate = {\n  month: month,\n  year: year,\n  text: `${monthNames[month]} '${year.toString().slice(-2)}`\n}\n\nitems[0].json.currentDate = currentDate\n\nreturn items\n\n// Month > Number e.g. July = 6, December = 11\n// Year > Text\n// Text > Playlist name\n\n// let currentDate = {\n//   month: 8, \n//   year: '2024',\n//   text: `September '23`\n// }\n\n// items[0].json.currentDate = currentDate\n\n// return items\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "855e493a-a232-45ef-8fdd-4a8225065c95",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        460,
        2580
      ],
      "parameters": {
        "width": 1290.936043660723,
        "height": 407.6508589002549,
        "content": "## Check if the song is present in the database"
      },
      "typeVersion": 1
    },
    {
      "id": "672ef06c-b812-41c8-8501-cde8b61a4aef",
      "name": "Get last 10 liked tracks",
      "type": "n8n-nodes-base.spotify",
      "position": [
        500,
        2680
      ],
      "parameters": {
        "limit": 10,
        "resource": "library"
      },
      "credentials": {
        "spotifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "da13c571-6af4-49bf-b8ff-2d54245f6d3e",
      "name": "Check if track is saved",
      "type": "n8n-nodes-base.nocoDb",
      "position": [
        940,
        2780
      ],
      "parameters": {
        "table": "m0dm2y304t7vmuk",
        "options": {
          "where": "=(uri,eq,{{ $json.track.uri }})",
          "fields": [
            "uri"
          ]
        },
        "operation": "getAll",
        "projectId": "pepq760y5lwt5tm",
        "returnAll": true,
        "authentication": "nocoDbApiToken"
      },
      "credentials": {
        "nocoDbApiToken": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3,
      "alwaysOutputData": true
    },
    {
      "id": "9144cda9-f18f-46d9-be2d-9fca4b192dbb",
      "name": "Is not saved",
      "type": "n8n-nodes-base.if",
      "position": [
        1160,
        2780
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "dbb259d9-e2ec-4a7b-b375-601346dc2571",
              "operator": {
                "type": "object",
                "operation": "empty",
                "singleValue": true
              },
              "leftValue": "={{ $json }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "66b430e2-f46c-43b2-84e7-35c85d2b4403",
      "name": "Create song entry",
      "type": "n8n-nodes-base.nocoDb",
      "position": [
        1380,
        2700
      ],
      "parameters": {
        "table": "m0dm2y304t7vmuk",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldName": "uri",
              "fieldValue": "={{ $('For each tracks in liked song').item.json.track.uri }}"
            },
            {
              "fieldName": "added_at",
              "fieldValue": "={{ $('For each tracks in liked song').item.json.added_at }}"
            },
            {
              "fieldName": "playlistName",
              "fieldValue": "={{ $('Get current date').item.json.currentDate.text }}"
            }
          ]
        },
        "operation": "create",
        "projectId": "pepq760y5lwt5tm",
        "authentication": "nocoDbApiToken"
      },
      "credentials": {
        "nocoDbApiToken": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "9bd883ea-2e87-45aa-b8a0-b361ba7c5d9f",
      "name": "Get all user playlist",
      "type": "n8n-nodes-base.spotify",
      "position": [
        500,
        2220
      ],
      "parameters": {
        "resource": "playlist",
        "operation": "getUserPlaylists",
        "returnAll": true
      },
      "credentials": {
        "spotifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "3a0dad98-4571-4fb7-b366-0060d35b65fe",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        460,
        2080
      ],
      "parameters": {
        "width": 1481.5336029736159,
        "height": 416.7665808180022,
        "content": "## Check if the playlist present in the database"
      },
      "typeVersion": 1
    },
    {
      "id": "e793b97c-cc29-47b0-8aa7-015fa631bc37",
      "name": "Get monthly playlist",
      "type": "n8n-nodes-base.filter",
      "position": [
        720,
        2220
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "56173299-d774-4cb4-b26f-4dca294dda1d",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.name }}",
              "rightValue": "={{ $('Get current date').item.json.currentDate.text }}"
            }
          ]
        }
      },
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "502ea9e2-7f03-4a8a-860e-90d63e42ee33",
      "name": "Get playlist in DB",
      "type": "n8n-nodes-base.nocoDb",
      "position": [
        1160,
        2120
      ],
      "parameters": {
        "table": "mchan0xys9h7h7e",
        "options": {
          "where": "=(name,eq,{{ $('Get current date').item.json.currentDate.text }})"
        },
        "operation": "getAll",
        "projectId": "pepq760y5lwt5tm",
        "returnAll": true,
        "authentication": "nocoDbApiToken"
      },
      "credentials": {
        "nocoDbApiToken": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3,
      "alwaysOutputData": true
    },
    {
      "id": "3d2bece0-8096-4ee1-a3b9-ae91b83f0957",
      "name": "Monthly playlist exist in Spotify ?",
      "type": "n8n-nodes-base.if",
      "position": [
        940,
        2220
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a2d9e3e0-a906-4ed9-9e23-166f781c86b1",
              "operator": {
                "type": "object",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "d983b940-2f8d-4823-aaaf-d1bfa4428b41",
      "name": "Playlist exist  in DB ?",
      "type": "n8n-nodes-base.if",
      "position": [
        1380,
        2120
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "9485c9d4-ecdc-4d0e-a576-c7db5787c069",
              "operator": {
                "type": "object",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "c694ab19-bca7-4dd4-8d10-cf8a1adab341",
      "name": "Create playlist in Spotify",
      "type": "n8n-nodes-base.spotify",
      "position": [
        1160,
        2320
      ],
      "parameters": {
        "name": "={{ $('Get current date').item.json.currentDate.text }}",
        "resource": "playlist",
        "operation": "create",
        "additionalFields": {
          "description": "Monthly playlist"
        }
      },
      "credentials": {
        "spotifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "dc9dc3b5-cef7-412b-b3f8-5ec011c2746d",
      "name": "Create playlist in DB1",
      "type": "n8n-nodes-base.nocoDb",
      "position": [
        1380,
        2320
      ],
      "parameters": {
        "table": "mchan0xys9h7h7e",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldName": "uri",
              "fieldValue": "={{ $json.uri }}"
            },
            {
              "fieldName": "name",
              "fieldValue": "={{ $json.name }}"
            },
            {
              "fieldName": "description",
              "fieldValue": "={{ $json.description}}"
            }
          ]
        },
        "operation": "create",
        "projectId": "pepq760y5lwt5tm",
        "authentication": "nocoDbApiToken"
      },
      "credentials": {
        "nocoDbApiToken": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "0356c3a4-dc20-42b0-b069-045048768939",
      "name": "Create playlist in DB",
      "type": "n8n-nodes-base.nocoDb",
      "position": [
        1600,
        2200
      ],
      "parameters": {
        "table": "mchan0xys9h7h7e",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldName": "uri",
              "fieldValue": "={{ $('Get monthly playlist').item.json.uri }}"
            },
            {
              "fieldName": "name",
              "fieldValue": "={{ $('Get monthly playlist').item.json.name }}"
            },
            {
              "fieldName": "description",
              "fieldValue": "={{ $('Get monthly playlist').item.json.description }}"
            }
          ]
        },
        "operation": "create",
        "projectId": "pepq760y5lwt5tm",
        "authentication": "nocoDbApiToken"
      },
      "credentials": {
        "nocoDbApiToken": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "e2c86f04-725c-4af7-b3c2-9c22e2dc64bf",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        2040,
        2460
      ],
      "parameters": {
        "mode": "chooseBranch",
        "output": "empty"
      },
      "typeVersion": 2.1
    },
    {
      "id": "036e0d74-3383-44e9-991d-7e062b982b51",
      "name": "Clean op",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1820,
        2200
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "323c9746-f713-4a3d-9af5-9579ec767fca",
      "name": "Clean op2",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1600,
        2800
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "3b0be7ca-c47b-4524-b72a-c37f25c5e4d0",
      "name": "Get this month playlist in DB",
      "type": "n8n-nodes-base.nocoDb",
      "position": [
        2260,
        2460
      ],
      "parameters": {
        "table": "mchan0xys9h7h7e",
        "options": {
          "where": "=(name,eq,{{ $('Get current date').item.json.currentDate.text }})"
        },
        "operation": "getAll",
        "projectId": "pepq760y5lwt5tm",
        "returnAll": true,
        "authentication": "nocoDbApiToken"
      },
      "credentials": {
        "nocoDbApiToken": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "733077e4-c474-4c95-ba05-d0b2375475ad",
      "name": "Get this month tracks in DB",
      "type": "n8n-nodes-base.nocoDb",
      "position": [
        2480,
        2460
      ],
      "parameters": {
        "table": "m0dm2y304t7vmuk",
        "options": {
          "where": "=(playlistName,eq,{{ $('Get current date').item.json.currentDate.text }})"
        },
        "operation": "getAll",
        "projectId": "pepq760y5lwt5tm",
        "returnAll": true,
        "authentication": "nocoDbApiToken"
      },
      "credentials": {
        "nocoDbApiToken": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "6c8ef70f-542d-4454-9ae6-8f4e9778beb0",
      "name": "Add song to the playlist",
      "type": "n8n-nodes-base.spotify",
      "position": [
        3580,
        2460
      ],
      "parameters": {
        "id": "={{ $('Get this month playlist in DB').item.json.uri }}",
        "trackID": "={{ $('For each monthly tracks in DB').item.json.uri }}",
        "resource": "playlist",
        "additionalFields": {}
      },
      "credentials": {
        "spotifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "034cd38d-4800-4f9c-9b67-453fdb2afa3c",
      "name": "For each tracks in liked song",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        720,
        2680
      ],
      "parameters": {
        "options": {
          "reset": false
        }
      },
      "typeVersion": 3
    },
    {
      "id": "90ff5c0b-e842-437f-be85-a5938288c513",
      "name": "For each monthly tracks in DB",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        2700,
        2460
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "decf36a4-fb8c-41eb-ae15-7ba36d621ad7",
      "name": "Get this month tracks in Spotify",
      "type": "n8n-nodes-base.spotify",
      "position": [
        2920,
        2560
      ],
      "parameters": {
        "id": "={{ $('Get this month playlist in DB').item.json.uri }}",
        "resource": "playlist",
        "operation": "getTracks",
        "returnAll": true
      },
      "credentials": {
        "spotifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "d322a655-e80b-4277-87d9-93e927b2f372",
      "name": "Filter1",
      "type": "n8n-nodes-base.filter",
      "position": [
        3140,
        2560
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a11640e1-f22a-4ce9-abff-976efc57e1d3",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $('For each monthly tracks in DB').item.json.uri }}",
              "rightValue": "={{ $json.track.uri }}"
            }
          ]
        }
      },
      "executeOnce": false,
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "5027f98d-b973-405f-81cf-534df794325f",
      "name": "Song is not present in the playlist ?",
      "type": "n8n-nodes-base.if",
      "position": [
        3360,
        2560
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "1beb843e-53da-48ce-9717-d7797232e4ae",
              "operator": {
                "type": "object",
                "operation": "empty",
                "singleValue": true
              },
              "leftValue": "={{ $json }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "cd2e3a28-24c1-47d7-ad30-c836e08ad40f",
      "name": "Clean op1",
      "type": "n8n-nodes-base.noOp",
      "position": [
        3800,
        2560
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "56bbb0e9-3ee5-48e3-b0bf-48e8d026daa9",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2220,
        2400
      ],
      "parameters": {
        "width": 1733.785946789966,
        "height": 351.94195615011336,
        "content": "## Check if the song is in the Spotify playlist. If not, add it."
      },
      "typeVersion": 1
    },
    {
      "id": "9834163b-0991-4910-bb4f-cf4557bfa0d5",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        20,
        2460
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "72a3c48f-a759-4e0c-b7bb-9f69a5f4377e",
      "name": "End",
      "type": "n8n-nodes-base.noOp",
      "position": [
        4100,
        2260
      ],
      "parameters": {},
      "typeVersion": 1
    }
  ],
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Get this month playlist in DB",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter1": {
      "main": [
        [
          {
            "node": "Song is not present in the playlist ?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean op": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean op1": {
      "main": [
        [
          {
            "node": "For each monthly tracks in DB",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean op2": {
      "main": [
        [
          {
            "node": "For each tracks in liked song",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is not saved": {
      "main": [
        [
          {
            "node": "Create song entry",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Clean op2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get current date": {
      "main": [
        [
          {
            "node": "Get all user playlist",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get last 10 liked tracks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get current date",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create song entry": {
      "main": [
        [
          {
            "node": "Clean op2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get playlist in DB": {
      "main": [
        [
          {
            "node": "Playlist exist  in DB ?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get monthly playlist": {
      "main": [
        [
          {
            "node": "Monthly playlist exist in Spotify ?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create playlist in DB": {
      "main": [
        [
          {
            "node": "Clean op",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get all user playlist": {
      "main": [
        [
          {
            "node": "Get monthly playlist",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create playlist in DB1": {
      "main": [
        [
          {
            "node": "Clean op",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if track is saved": {
      "main": [
        [
          {
            "node": "Is not saved",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Playlist exist  in DB ?": {
      "main": [
        [
          {
            "node": "Clean op",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create playlist in DB",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add song to the playlist": {
      "main": [
        [
          {
            "node": "Clean op1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get last 10 liked tracks": {
      "main": [
        [
          {
            "node": "For each tracks in liked song",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create playlist in Spotify": {
      "main": [
        [
          {
            "node": "Create playlist in DB1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get this month tracks in DB": {
      "main": [
        [
          {
            "node": "For each monthly tracks in DB",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "For each monthly tracks in DB": {
      "main": [
        [
          {
            "node": "End",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get this month tracks in Spotify",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "For each tracks in liked song": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ],
        [
          {
            "node": "Check if track is saved",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get this month playlist in DB": {
      "main": [
        [
          {
            "node": "Get this month tracks in DB",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get this month tracks in Spotify": {
      "main": [
        [
          {
            "node": "Filter1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Monthly playlist exist in Spotify ?": {
      "main": [
        [
          {
            "node": "Get playlist in DB",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create playlist in Spotify",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Song is not present in the playlist ?": {
      "main": [
        [
          {
            "node": "Add song to the playlist",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Clean op1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

About this workflow

Add Liked Songs To A Spotify Monthly Playlist. Uses stickyNote, spotify, nocoDb, noOp. Scheduled trigger; 30 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More General workflows → · Browse all categories →