AutomationFlowsSlack & Telegram › Custom Discord Notifications for Radarr, Sonarr, Bazarr Etc.

Custom Discord Notifications for Radarr, Sonarr, Bazarr Etc.

ByPawel @labm0nkey on n8n.io

This is a simple temlate that will allow you to customise the notifications in Radarr, Sonarr, Bazarr and similar. By default the notifications are configured to be sent to discord and look similar to the default ones but are just minimalistic.

Webhook trigger★★★★☆ complexity28 nodesHTTP RequestEvaluationEvaluation Trigger
Slack & Telegram Trigger: Webhook Nodes: 28 Complexity: ★★★★☆ Added:
Custom Discord Notifications for Radarr, Sonarr, Bazarr Etc. — n8n workflow card showing HTTP Request, Evaluation, Evaluation Trigger integration

This workflow corresponds to n8n.io template #4628 — 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
{
  "id": "DuPvLu9nGwryNe1H",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Radarr Notifications",
  "tags": [],
  "nodes": [
    {
      "id": "9c0dffb3-46b5-4408-a4e7-31ffeacc8f15",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        240,
        60
      ],
      "parameters": {
        "path": "radarr",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "2d5536bc-86cf-434b-9a68-9cd00e70cccf",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        460,
        -40
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Bazarr",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "253ec7a1-89c0-4308-818a-aa82ce02ee4b",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.body.title }}",
                    "rightValue": "Bazarr"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Radarr",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "ce9a2e5b-62b3-4e27-85d0-4f92ee85f49f",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.body.instanceName }}",
                    "rightValue": "Radarr"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Sonarr",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "52b206b1-39c0-43ae-8316-c27e754b8246",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.body.instanceName }}",
                    "rightValue": "Sonarr"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "5b9bc9ee-573b-47d5-9459-25040f4a8b76",
      "name": "Notify Discord",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2440,
        60
      ],
      "parameters": {
        "url": "https://discord.com/api/webhooks/...",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $json.body }}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "retryOnFail": true,
      "typeVersion": 4.2
    },
    {
      "id": "6daba0b8-2e7b-4156-bc51-748e84f2f3d7",
      "name": "Set subtitle properties",
      "type": "n8n-nodes-base.set",
      "position": [
        1340,
        -240
      ],
      "parameters": {
        "include": "selected",
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "74b33e39-12e3-4cbf-a8a2-5701a5298a74",
              "name": "title",
              "type": "string",
              "value": "={{ $json.body.message.replace(/\\((\\d{4})\\) \\(\\d{4}\\)/, '($1)').match(/^(.+? \\(\\d{4}\\))(?: - (S\\d{2}E\\d{2}))?/)[0].trim()\n }}"
            },
            {
              "id": "6c294ae1-7ab6-43aa-b255-cf63e91c2884",
              "name": "language",
              "type": "string",
              "value": "={{ $json.body.message.match(/: ([A-Za-z ]+) subtitles/)[1].trim() }}"
            },
            {
              "id": "a4890d25-d3cd-4cc2-9d27-ca6a6acc87c7",
              "name": "provider",
              "type": "string",
              "value": "={{ $json.body.message.match(/from ([a-zA-Z0-9]+) with/)[1].trim() }}"
            },
            {
              "id": "9b79ec44-d32b-48c1-9439-56018deb3fe7",
              "name": "score",
              "type": "string",
              "value": "={{ $json.body.message.match(/score of ([\\d.]+%)/)[1].trim() }}"
            },
            {
              "id": "32b133db-fdd8-418c-be68-25566bc09d3c",
              "name": "=description",
              "type": "string",
              "value": "={{ $json.body.message.match(/ : .+ (subtitles .+) from/)[1].trim() }}"
            },
            {
              "id": "ed0b2761-f2ab-4ff2-adf2-c9157d8dd7e3",
              "name": "image",
              "type": "string",
              "value": ""
            }
          ]
        },
        "includeFields": "color,avatar,username",
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "4640e2d4-0b30-44e0-ab4e-0ce8422bfea5",
      "name": "Set subtitle fields",
      "type": "n8n-nodes-base.code",
      "position": [
        1560,
        -240
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "$input.item.json.fields = [\n  {\n    name: \"Language\",\n    value: $json.language,\n    inline: true,\n  },\n  {\n    name: \"Score\",\n    value: $json.score,\n    inline: true,\n  },\n];\n\nreturn $input.item;"
      },
      "typeVersion": 2
    },
    {
      "id": "eddbc733-db49-4989-b15d-5db1a3f65cb5",
      "name": "Set Radarr properties",
      "type": "n8n-nodes-base.set",
      "position": [
        1120,
        -40
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d0f12d48-229a-4ac7-a1a8-2bdca6fedcfe",
              "name": "color",
              "type": "number",
              "value": 16761392
            },
            {
              "id": "79103f6e-82bd-4d8c-980f-f8efe3b49523",
              "name": "avatar",
              "type": "string",
              "value": "https://raw.githubusercontent.com/YOUR_AWS_SECRET_KEY_HERE.png"
            },
            {
              "id": "88744f9f-afd8-4d20-9c5a-c788ffd9e725",
              "name": "username",
              "type": "string",
              "value": "Radarr"
            },
            {
              "id": "a51e865e-cc57-406e-8173-a2b359101794",
              "name": "body",
              "type": "object",
              "value": "={{ $json.body }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "c04f35b2-9811-4c56-9600-781c2e8ba275",
      "name": "Set Bazarr properties",
      "type": "n8n-nodes-base.set",
      "position": [
        1120,
        -240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d0f12d48-229a-4ac7-a1a8-2bdca6fedcfe",
              "name": "color",
              "type": "number",
              "value": 16777215
            },
            {
              "id": "79103f6e-82bd-4d8c-980f-f8efe3b49523",
              "name": "avatar",
              "type": "string",
              "value": "https://raw.githubusercontent.com/morpheus65535/YOUR_AWS_SECRET_KEY_HERE/images/logo64.png"
            },
            {
              "id": "88744f9f-afd8-4d20-9c5a-c788ffd9e725",
              "name": "username",
              "type": "string",
              "value": "Bazarr"
            },
            {
              "id": "7b5b586d-b9f6-4f6e-afd9-c8a5ec68d19a",
              "name": "body",
              "type": "object",
              "value": "={{ $json.body }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "3ab117bc-a6bc-429a-b26b-932799423767",
      "name": "Set Sonarr properties",
      "type": "n8n-nodes-base.set",
      "position": [
        680,
        235
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d0f12d48-229a-4ac7-a1a8-2bdca6fedcfe",
              "name": "color",
              "type": "number",
              "value": 52479
            },
            {
              "id": "79103f6e-82bd-4d8c-980f-f8efe3b49523",
              "name": "avatar",
              "type": "string",
              "value": "https://raw.githubusercontent.com/Sonarr/Sonarr/refs/heads/main/Logo/64.png"
            },
            {
              "id": "88744f9f-afd8-4d20-9c5a-c788ffd9e725",
              "name": "username",
              "type": "string",
              "value": "Sonarr"
            },
            {
              "id": "cf9ecba3-39ab-42b5-8669-cfee2ceb64b7",
              "name": "body",
              "type": "object",
              "value": "={{ $json.body }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "5fbd3d74-d325-4f39-8c01-83a3f850acd7",
      "name": "Set movie properties",
      "type": "n8n-nodes-base.set",
      "position": [
        1340,
        -40
      ],
      "parameters": {
        "include": "selected",
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a5fdeaf9-2e12-4906-8145-3ca90421563f",
              "name": "title",
              "type": "string",
              "value": "={{ $json.body.movie.title }} ({{ $json.body.movie.year ? $json.body.movie.year : $json.body.remoteMovie.year }})"
            },
            {
              "id": "a032bd92-5343-417e-94ed-cf677f18c3bb",
              "name": "description",
              "type": "string",
              "value": "={{ $json.body.eventType }}{{ $json.body.deleteReason ? $json.body.deleteReason : \"\" }}"
            },
            {
              "id": "d05f9e95-7fa3-48c2-93a2-10b7415362eb",
              "name": "quality",
              "type": "string",
              "value": "={{ ($json.body.movieFile ? $json.body.movieFile.quality : $json.body.downloadInfo.quality) }}"
            },
            {
              "id": "8a9b51f7-3d67-43d6-9836-f78be6d48fa4",
              "name": "size",
              "type": "string",
              "value": "={{ (($json.body.movieFile ? $json.body.movieFile.size : $json.body.release.size) / (1024 * 1024 * 1024)).toFixed(1) }} GB"
            },
            {
              "id": "824ec3a3-b396-4cbf-bbd9-d56c501b3a05",
              "name": "release",
              "type": "string",
              "value": "={{ $json.body.release ? $json.body.release.releaseTitle : $json.body.movieFile.sceneName }}"
            },
            {
              "id": "2039dc49-1fe0-4313-955c-6b2b546fc4ff",
              "name": "image",
              "type": "string",
              "value": "={{ $json.body.movie.images.find(item => item.coverType === 'poster').remoteUrl }}"
            },
            {
              "id": "1d322b7a-c635-409a-bc7c-89c693539db0",
              "name": "subtitles",
              "type": "string",
              "value": "={{ $json.body.movieFile.mediaInfo.subtitles.join('/') }}"
            }
          ]
        },
        "includeFields": "color,avatar,username",
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "d33e55bf-873d-47a7-9b09-ace2994f1e01",
      "name": "Set series properties",
      "type": "n8n-nodes-base.set",
      "position": [
        1340,
        235
      ],
      "parameters": {
        "include": "selected",
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a5fdeaf9-2e12-4906-8145-3ca90421563f",
              "name": "title",
              "type": "string",
              "value": "={{ $json.body.series.title }} - S{{$json.body.episodes[0].seasonNumber.toString().padStart(2, '0') }}E{{ $json.body.episodes[0].episodeNumber.toString().padStart(2, '0')}}"
            },
            {
              "id": "a032bd92-5343-417e-94ed-cf677f18c3bb",
              "name": "action",
              "type": "string",
              "value": "={{ $json.body.eventType }}"
            },
            {
              "id": "d05f9e95-7fa3-48c2-93a2-10b7415362eb",
              "name": "quality",
              "type": "string",
              "value": "={{ $json.body.episodeFile ? $json.body.episodeFile.quality : $json.body.release.quality }}"
            },
            {
              "id": "8a9b51f7-3d67-43d6-9836-f78be6d48fa4",
              "name": "size",
              "type": "string",
              "value": "={{ (($json.body.episodeFile ? $json.body.episodeFile.size : $json.body.release.size) / (1024 * 1024 * 1024)).toFixed(1) }} GB"
            },
            {
              "id": "824ec3a3-b396-4cbf-bbd9-d56c501b3a05",
              "name": "release",
              "type": "string",
              "value": "={{ $json.body.episodeFile ? $json.body.episodeFile.sceneName : $json.body.release.releaseTitle }}"
            },
            {
              "id": "2039dc49-1fe0-4313-955c-6b2b546fc4ff",
              "name": "image",
              "type": "string",
              "value": "={{ $json.body.series.images.find(item => item.coverType === 'poster').remoteUrl }}"
            },
            {
              "id": "b9e2aaac-f53e-4c97-a51a-c7ec49a581d2",
              "name": "description",
              "type": "string",
              "value": "={{ $json.body.eventType }}{{ $json.body.deleteReason ? $json.body.deleteReason : \"\" }}"
            },
            {
              "id": "f42fdba2-dea4-4d7b-99cc-838909a2930c",
              "name": "subtitles",
              "type": "string",
              "value": "={{ $json.body.episodeFile && $json.body.episodeFile.mediaInfo && $json.body.episodeFile.mediaInfo.subtitles ? $json.body.episodeFile.mediaInfo.subtitles.join('/') : 'None' }}"
            }
          ]
        },
        "includeFields": "color,avatar,username",
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "47489049-0f54-41aa-a9ac-28549ee5c8ac",
      "name": "Set movie fields",
      "type": "n8n-nodes-base.code",
      "position": [
        1560,
        -40
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "$input.item.json.fields = [];\n\n$input.item.json.fields.push({\n  \"name\": \"Quality\",\n  \"value\": $json.quality,\n  \"inline\": true\n});\n\n$input.item.json.fields.push({\n  \"name\": \"Size\",\n  \"value\": $json.size,\n  \"inline\": true\n});\n\nif ($json.subtitles && $json.subtitles != \"\") {\n  $input.item.json.fields.push({\n    \"name\": \"Subtitles\",\n    \"value\": $json.subtitles,\n    \"inline\": true\n  });\n}\n\n$input.item.json.fields.push({\n  \"name\": \"Release\",\n  \"value\": \"```\" + $json.release + \"```\"\n});\n\nreturn $input.item;"
      },
      "typeVersion": 2
    },
    {
      "id": "7f07ae01-cea0-4c65-9a3a-7cf18328eeae",
      "name": "Set series fields",
      "type": "n8n-nodes-base.code",
      "position": [
        1560,
        235
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "$input.item.json.fields = [\n  {\n    \"name\": \"Quality\",\n    \"value\": $json.quality,\n    \"inline\": true\n  },\n  {\n    \"name\": \"Size\",\n    \"value\": $json.size,\n    \"inline\": true\n  },\n  {\n    \"name\": \"Subtitles\",\n    \"value\": $json.subtitles && $json.subtitles !== 'None' ? `${$json.subtitles.split('/')[0]}/... (${$json.subtitles.split('/').length})` : $json.subtitles\n,\n    \"inline\": true\n  },\n  {\n    \"name\": \"Release\",\n    \"value\": \"```\" + $json.release + \"```\"\n  }\n];\n\nreturn $input.item;"
      },
      "typeVersion": 2
    },
    {
      "id": "d2d94c62-9083-45e7-b766-c9838316c0e5",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1120,
        160
      ],
      "parameters": {
        "include": "allOtherFields",
        "options": {
          "destinationFieldName": "body.episodeFile"
        },
        "fieldToSplitOut": "body.episodeFiles"
      },
      "typeVersion": 1
    },
    {
      "id": "8814e90e-5a5f-40ae-ba2b-95dce6ededac",
      "name": "Is multiple",
      "type": "n8n-nodes-base.if",
      "position": [
        900,
        235
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "406df52e-e05b-4c77-b704-ec447596dbf8",
              "operator": {
                "type": "array",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.body.episodeFiles }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "c1ba73f3-7e28-43c5-a893-9803a694e0d4",
      "name": "Translate Bazarr description",
      "type": "n8n-nodes-base.code",
      "position": [
        1780,
        -240
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "switch ($json.description) {\n  case \"subtitles downloaded\":\n    $json.description = \"Subtitles downloaded\";\n    break;\n}\n\nreturn $input.item;"
      },
      "typeVersion": 2
    },
    {
      "id": "d9c13a65-82fe-4c6d-a3a5-f2066ef3dd3c",
      "name": "Translate Radarr description",
      "type": "n8n-nodes-base.code",
      "position": [
        1780,
        -40
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "switch ($json.description) {\n  case \"MovieFileDeleteupgrade\":\n    $json.description = \"Movie upgraded\";\n    break;\n  case \"MovieFileDeletemanual\":\n    $json.description = \"Movie file deleted\";\n    break;\n  case \"Download\":\n    $json.description = \"Movie imported\";\n    break;\n  case \"ManualInteractionRequired\":\n    $json.description = \"Manual interaction required\";\n    break;\n}\n\nreturn $input.item;"
      },
      "typeVersion": 2
    },
    {
      "id": "54f24e3b-d753-4f25-887f-8901d98ccabb",
      "name": "Translate Sonarr description",
      "type": "n8n-nodes-base.code",
      "position": [
        1780,
        235
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "switch ($json.description) {\n  case \"EpisodeFileDeleteupgrade\":\n    $json.description = \"Episode upgraded\";\n    break;\n  case \"EpisodeFileDeletemanual\":\n    $json.description = \"Episode file deleted\";\n    break;\n  case \"Download\":\n    $json.description = \"Episode Imported\";\n    break;\n  case \"ManualInteractionRequired\":\n    $json.description = \"Manual interaction required\";\n    break;\n}\n\nreturn $input.item;"
      },
      "typeVersion": 2
    },
    {
      "id": "3d23dd8f-e53c-4da7-90ea-08a542685f4c",
      "name": "Evaluation",
      "type": "n8n-nodes-base.evaluation",
      "position": [
        2440,
        -140
      ],
      "parameters": {
        "outputs": {
          "values": [
            {
              "outputName": "actual_output",
              "outputValue": "={{ $json.body }}"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Sco9nfetll-LH3g4fplcGOs5TedL0NrDjPLiXAo8oX4/edit#gid=0",
          "cachedResultName": "Radarr"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Sco9nfetll-LH3g4fplcGOs5TedL0NrDjPLiXAo8oX4",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Sco9nfetll-LH3g4fplcGOs5TedL0NrDjPLiXAo8oX4/edit?usp=drivesdk",
          "cachedResultName": "n8n tests"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "9dadae42-c6c8-480b-82aa-6894b55358e3",
      "name": "Is Test",
      "type": "n8n-nodes-base.evaluation",
      "position": [
        2220,
        -40
      ],
      "parameters": {
        "operation": "checkIfEvaluating"
      },
      "typeVersion": 4.6
    },
    {
      "id": "59b286d5-e7d2-414a-a460-8dba71027079",
      "name": "Run Tests",
      "type": "n8n-nodes-base.evaluationTrigger",
      "position": [
        -200,
        -140
      ],
      "parameters": {
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Sco9nfetll-LH3g4fplcGOs5TedL0NrDjPLiXAo8oX4/edit#gid=0",
          "cachedResultName": "Radarr"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Sco9nfetll-LH3g4fplcGOs5TedL0NrDjPLiXAo8oX4",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Sco9nfetll-LH3g4fplcGOs5TedL0NrDjPLiXAo8oX4/edit?usp=drivesdk",
          "cachedResultName": "n8n tests"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "8995967a-058d-4cc5-bae6-894432bda437",
      "name": "Test is enabled",
      "type": "n8n-nodes-base.filter",
      "position": [
        20,
        -140
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "75c6f304-f4ea-4206-aba0-fb3b0a9605e4",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.input }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "baf45f74-a84d-4121-83d6-7dc40c940285",
      "name": "Prepare notification JSON",
      "type": "n8n-nodes-base.code",
      "position": [
        2000,
        -40
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "var content = {\n  username: $json.username,\n  avatar_url: $json.avatar,\n  embeds: [\n    {\n      title: $json.title,\n      description: $json.description,\n      author: {\n        name: $json.username,\n        icon_url: $json.avatar,\n      },\n      thumbnail: {\n        url: $json.image\n      },\n      color: $json.color,\n      fields: $json.fields,\n    },\n  ],\n};\n\nreturn { json: { body: content } };\n"
      },
      "typeVersion": 2
    },
    {
      "id": "684c7848-ce07-4b3f-8087-124f89b23c52",
      "name": "Convert to JSON",
      "type": "n8n-nodes-base.code",
      "position": [
        240,
        -140
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "let item = JSON.parse($json.input);\nreturn item;"
      },
      "typeVersion": 2
    },
    {
      "id": "5693766d-8739-4fbf-bb8b-8f3310a0f5ef",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        820,
        -240
      ],
      "parameters": {
        "height": 100,
        "content": "Bazarr events:\n- subtitle downloaded\n- subtitle upgraded"
      },
      "typeVersion": 1
    },
    {
      "id": "935e4ec1-378c-44a2-93d8-3b2c5d7b7c9c",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        820,
        -40
      ],
      "parameters": {
        "content": "Radarr events:\n- File Import\n- Movie File Delete\n- Movie File Delete for Upgrade\n- Manual Interaction Required"
      },
      "typeVersion": 1
    },
    {
      "id": "434b22ed-f8e3-4c97-ae6e-de6baa45962b",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        220
      ],
      "parameters": {
        "content": "Sonarr events:\n- File Import\n- Movie File Delete\n- Movie File Delete for Upgrade\n- Manual Interaction Required"
      },
      "typeVersion": 1
    },
    {
      "id": "297a568f-99ad-4b34-a466-c0a43471a62e",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -680,
        -560
      ],
      "parameters": {
        "width": 380,
        "height": 780,
        "content": "### Custom Radarr / Sonarr / Bazarr notifications\n\nIf you are self hosting Radarr / Sonarr / Bazarr or similar you might want to customise the notifications. This workflow allows you to easily make them look like anything you want.\n\nFor my use case I wanted the notifications to look like the default ones but with less data (simplified). Only few event types were tested since I also did not want to have too many notifications per event. Still, it is easy to add more event types and more fields. Feel free to play around.\n\nConfiguring this workflow:\n1. Change your Webhook trigger endpoint in the first node\n2. Change the Discord channel Webhook URL in the last node (or use a bot if you prefer)\n3. You can ignore the Evaluation triggers. I am just using them to test all notification types.\n\n\nConfiguring your *arr:\n1. Go to Settings > Connect\n2. Add Webhook connection and point it to the one you configured here (remember to use production Webhook)\n3. Select File Import, Movie File Delete, Movie File Delete for Upgrade, Manual Interaction Required (Other types should also work. I just did not test them)\n\n\nNote about Bazarr:\nIt is using ultra simple configuration compared to others. There are no event types at all. You also have to use \"JSON\" (there is no Webhook type) and in url use jsons instead of https like \"jsons://n8n.com/webhook/radarr\"\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9238365a-5b12-4e5e-a969-9d43c790de83",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1980,
        -300
      ],
      "parameters": {
        "height": 240,
        "content": "### Output\nDiscord format of notification.\n\n- Title (Year) - Episode\n- What happened\n- Thumbnail\n- Quality\n- Size\n- Subtitle count\n- Release name"
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "98cc24c8-5aba-4b3c-8e5c-e8c358d085cd",
  "connections": {
    "Switch": {
      "main": [
        [
          {
            "node": "Set Bazarr properties",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set Radarr properties",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set Sonarr properties",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Test": {
      "main": [
        [
          {
            "node": "Evaluation",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Notify Discord",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run Tests": {
      "main": [
        [
          {
            "node": "Test is enabled",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Set series properties",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is multiple": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set series properties",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify Discord": {
      "main": [
        []
      ]
    },
    "Convert to JSON": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Test is enabled": {
      "main": [
        [
          {
            "node": "Convert to JSON",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set movie fields": {
      "main": [
        [
          {
            "node": "Translate Radarr description",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set series fields": {
      "main": [
        [
          {
            "node": "Translate Sonarr description",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set subtitle fields": {
      "main": [
        [
          {
            "node": "Translate Bazarr description",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set movie properties": {
      "main": [
        [
          {
            "node": "Set movie fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Bazarr properties": {
      "main": [
        [
          {
            "node": "Set subtitle properties",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Radarr properties": {
      "main": [
        [
          {
            "node": "Set movie properties",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Sonarr properties": {
      "main": [
        [
          {
            "node": "Is multiple",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set series properties": {
      "main": [
        [
          {
            "node": "Set series fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set subtitle properties": {
      "main": [
        [
          {
            "node": "Set subtitle fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare notification JSON": {
      "main": [
        [
          {
            "node": "Is Test",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Translate Bazarr description": {
      "main": [
        [
          {
            "node": "Prepare notification JSON",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Translate Radarr description": {
      "main": [
        [
          {
            "node": "Prepare notification JSON",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Translate Sonarr description": {
      "main": [
        [
          {
            "node": "Prepare notification JSON",
            "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 is a simple temlate that will allow you to customise the notifications in Radarr, Sonarr, Bazarr and similar. By default the notifications are configured to be sent to discord and look similar to the default ones but are just minimalistic.

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

More Slack & Telegram workflows → · Browse all categories →

Related workflows

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

Slack & Telegram

HR teams, IT Operations, and System Administrators managing employee onboarding at scale. It’s perfect if you use Odoo 18 to trigger account requests and need Redmine + GitLab accounts created instant

HTTP Request, Slack
Slack & Telegram

This workflow is a complete, production-ready solution for recovering abandoned carts in Shopify stores using a multi-channel, multi-touch approach. It automates personalized follow-ups via Email, SMS

HTTP Request, Shopify, SendGrid +5
Slack & Telegram

This workflow automates end-to-end research analysis by coordinating multiple AI models—including NVIDIA NIM (Llama), OpenAI GPT-4, and Claude to analyze uploaded documents, extract insights, and gene

HTTP Request, Postgres, Slack +1
Slack & Telegram

Are you tired of the repetitive dance between git push, creating a pull request in GitHub, updating the corresponding task in JIRA, and then manually notifying your team in Slack, or Notion?

HTTP Request, Stop And Error, Jira +2
Slack & Telegram

This workflow automatically detects changes in the .env.staging file in a GitHub repository and keeps Android configuration files (build.gradle and gradle.properties) in sync.It creates a new Git bran

GitHub, HTTP Request, Slack