AutomationFlowsGeneral › Spotify: Discover Weekly Archive

Spotify: Discover Weekly Archive

ByJYLN @jyln on n8n.io

This updated workflow will automatically archive your Spotify tracks to another manually created playlist, without the nuisance of duplicate tracks. It utilizes the latest verisons of n8n's [](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/),…

Cron / scheduled trigger★★★★☆ complexity11 nodesSpotify
General Trigger: Cron / scheduled Nodes: 11 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #2044 — we link there as the canonical source.

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": "b605b875-85cf-4210-8027-ce7b9b7069b9",
      "name": "CRON",
      "type": "n8n-nodes-base.scheduleTrigger",
      "notes": "Every Monday @ 8:30am",
      "position": [
        820,
        360
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "30 8 * * MON"
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 1.1
    },
    {
      "id": "edd9d7b6-9ac4-4acf-8f4b-4cbe943dfd34",
      "name": "Get User's Playlists",
      "type": "n8n-nodes-base.spotify",
      "position": [
        1060,
        360
      ],
      "parameters": {
        "resource": "playlist",
        "operation": "getUserPlaylists",
        "returnAll": true
      },
      "credentials": {
        "spotifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "98cf8fdc-556a-452a-8df6-16a98c17613e",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "notes": "Find Discover and Archive playlist by name",
      "position": [
        1280,
        360
      ],
      "parameters": {
        "rules": {
          "rules": [
            {
              "value2": "Discover Weekly",
              "outputKey": "disc"
            },
            {
              "value2": "Discover Weekly Archive",
              "outputKey": "arch"
            }
          ]
        },
        "value1": "={{ $json.name }}",
        "dataType": "string"
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "d27ee5c1-86d8-4a6a-adcb-90bf59280550",
      "name": "Get Discover Tracks",
      "type": "n8n-nodes-base.spotify",
      "position": [
        1560,
        240
      ],
      "parameters": {
        "id": "={{ $json.uri }}",
        "resource": "playlist",
        "operation": "getTracks",
        "returnAll": true
      },
      "credentials": {
        "spotifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e276dce6-d3d2-41a0-96b6-68e115ed198e",
      "name": "Get Archive Tracks",
      "type": "n8n-nodes-base.spotify",
      "position": [
        1560,
        460
      ],
      "parameters": {
        "id": "={{ $json.uri }}",
        "resource": "playlist",
        "operation": "getTracks",
        "returnAll": true
      },
      "credentials": {
        "spotifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c619085b-424d-4ff5-b3eb-fa0eed05ce0d",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        1840,
        360
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "joinMode": "keepNonMatches",
        "mergeByFields": {
          "values": [
            {
              "field1": "track.uri",
              "field2": "track.uri"
            }
          ]
        },
        "outputDataFrom": "input1"
      },
      "typeVersion": 2.1,
      "alwaysOutputData": true
    },
    {
      "id": "6981f3b3-e1d4-415b-b2c2-d05646271270",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1760,
        180
      ],
      "parameters": {
        "color": 7,
        "width": 262,
        "height": 354,
        "content": "#### Purpose\n\nCompares tracks using `Combine` operation to output **non-matching** Discover Weekly tracks to ensure that duplicates are not appended to the Archive playlist"
      },
      "typeVersion": 1
    },
    {
      "id": "65a9ef93-afac-4f86-9203-73e24bcdb500",
      "name": "Check if tracks to add is NOT empty",
      "type": "n8n-nodes-base.if",
      "position": [
        2100,
        360
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "81f9e3a7-eef0-462c-9d82-db894b19a110",
              "operator": {
                "type": "object",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "604717ae-90ab-412b-bc83-15399d18c0d4",
      "name": "Add tracks to Archive playlist",
      "type": "n8n-nodes-base.spotify",
      "position": [
        2360,
        220
      ],
      "parameters": {
        "id": "={{ $('Switch').all(1).first().json.uri }}",
        "trackID": "={{ $json.track.uri }}",
        "resource": "playlist",
        "additionalFields": {}
      },
      "credentials": {
        "spotifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "34ddb49e-ebfe-46ff-a348-959befe5e86c",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2580,
        280
      ],
      "parameters": {
        "color": 7,
        "width": 634,
        "height": 190,
        "content": "### Do anything else here\n\nFor example, in my personal workflow, after the tracks have been added to to my Archive playlist, I send a `POST` request to my self-hosted [NTFY](https://docs.ntfy.sh) server to notify me that my Discover Weekly playlist has refreshed, and I also provide the links to easily open the playlists within the notification that is sent.\n\nThe possibilities are endless with n8n!"
      },
      "typeVersion": 1
    },
    {
      "id": "c5c18f22-2c1f-4e65-83fc-7f89c5e44828",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        820,
        -418.42807424594014
      ],
      "parameters": {
        "color": 4,
        "width": 605.1751740139206,
        "height": 733.4280742459401,
        "content": "## README\n\nThis workflow will automatically archive your Spotify `Discover Weekly` playlist to a separate playlist. One additional caveat this workflow addresses is it will compare the refreshed `Discover Weekly` tracks against your archive playlist's existing tracks to ensure only unique tracks are added to your archive playlist. This helps reduce clutter within the archive playlist. \n\n### Setup Instructions (Required)\n1. **Within your Spotify account, create a new playlist**\n  You may name this playlist whatever you like. The default name within the workflow is `Discover Weekly Archive`. If you decide on another name, ensure you update the `Switch` node output with the key of `arch` to the name of the playlist you set.\n\n2. **Create your Spotify credential(s) and update each Spotify node with your created credential**\n  Follow the instructions within the [n8n docs](https://docs.n8n.io/integrations/builtin/credentials/spotify/) to create your Spotify credential, then select the credential in the `Get User's Playlists`, `Get Discover Tracks`, `Get Archive Tracks`, and `Add tracks to Archive playlist` nodes.\n\n3. **Activate the workflow to run workflow based on the Cron expression set in the `Schedule` trigger node.**\n\n### Optional Setup\n- Update the Cron expression within the `Schedule` trigger node with an earlier or later time if your `GENERIC_TIMEZONE` is set. You may also consider setting the workflow timezone as well. For assistance with Cron expressions, refer to the [n8n docs](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/#generate-a-custom-cron-expression).\n- Add nodes to the end of the workflow to send notifications, update a spreadsheet, or any other operation/action you'd like to perform in conjunction with archiving your Discover Weekly tracks\n- Setup a error workflow to handle any thing that goes wrong within the workflow. You can find an example [here](https://n8n.io/workflows/696-send-email-via-gmail-on-workflow-error/) or more information concerning handling errors within the [n8n docs](https://docs.n8n.io/courses/level-two/chapter-4/).\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "CRON": {
      "main": [
        [
          {
            "node": "Get User's Playlists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Check if tracks to add is NOT empty",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "Get Discover Tracks",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Archive Tracks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Archive Tracks": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Get Discover Tracks": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get User's Playlists": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if tracks to add is NOT empty": {
      "main": [
        [
          {
            "node": "Add tracks to Archive playlist",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This updated workflow will automatically archive your Spotify tracks to another manually created playlist, without the nuisance of duplicate tracks. It utilizes the latest verisons of n8n's [](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/),…

Source: https://n8n.io/workflows/2044/ — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

General

Schedule Spotify. Uses scheduleTrigger, spotify, stickyNote. Scheduled trigger; 11 nodes.

Spotify
General

Archive Spotify S Discover Weekly Playlist. Uses spotify, scheduleTrigger. Scheduled trigger; 7 nodes.

Spotify
General

This workflow will archive your Spotify Discover Weekly playlist to an archive playlist named "Discover Weekly Archive" which you must create yourself. If you want to change the name of the archive pl

Spotify
General

Spotify Sync Liked Songs to Playlist. Uses manualTrigger, scheduleTrigger, sort, gotify. Event-driven trigger; 40 nodes.

Gotify, Spotify
General

This template creates a nightly backup of all n8n workflows and saves them to a Google Drive folder. Each night, the previous night's backups are moved to an “n8n_old” folder and renamed with the corr

Move Binary Data, Google Drive, Item Lists +1