AutomationFlowsWeb Scraping › ARD Audiothek Podcast RSS Feed Generator

ARD Audiothek Podcast RSS Feed Generator

Original n8n title: RSS Feed for Ard Audiothek Podcasts

Rss Feed For Ard Audiothek Podcasts. Uses manualTrigger, httpRequest, htmlExtract, itemLists. Event-driven trigger; 11 nodes.

Event trigger★★★★☆ complexity11 nodesHTTP RequestHtml ExtractItem Lists
Web Scraping Trigger: Event Nodes: 11 Complexity: ★★★★☆ Added:

This workflow follows the HTTP Request → Itemlists recipe pattern — see all workflows that pair these two integrations.

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": "35c4aa9f-7535-4315-9174-fe97afc6de2e",
      "name": "On clicking 'execute'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        240,
        300
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "ed1f4f78-733f-4dd5-9785-969c9ec0d637",
      "name": "Get overview page",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        460,
        300
      ],
      "parameters": {
        "url": "https://www.ardaudiothek.de/sendung/kalk-und-welk/10777871/",
        "options": {},
        "responseFormat": "string"
      },
      "typeVersion": 2
    },
    {
      "id": "28333c78-aa8f-401a-8033-2007a5e6991c",
      "name": "Extract links",
      "type": "n8n-nodes-base.htmlExtract",
      "position": [
        680,
        300
      ],
      "parameters": {
        "options": {},
        "extractionValues": {
          "values": [
            {
              "key": "links",
              "attribute": "href",
              "cssSelector": "a[href*=\"/episode/\"]",
              "returnArray": true,
              "returnValue": "attribute"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "58840494-4208-49ce-b82a-d7cf8abd3b29",
      "name": "Remove duplicate links",
      "type": "n8n-nodes-base.itemLists",
      "position": [
        1120,
        300
      ],
      "parameters": {
        "operation": "removeDuplicates"
      },
      "typeVersion": 1
    },
    {
      "id": "17efb905-b947-4538-ab34-d50bf7fdbd75",
      "name": "Split out lists",
      "type": "n8n-nodes-base.itemLists",
      "position": [
        900,
        300
      ],
      "parameters": {
        "options": {
          "destinationFieldName": "link"
        },
        "fieldToSplitOut": "links"
      },
      "typeVersion": 1
    },
    {
      "id": "59a69e64-ebba-42cb-b8d0-8dd73f0ae962",
      "name": "Get episode page",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1340,
        300
      ],
      "parameters": {
        "url": "=https://www.ardaudiothek.de{{ $json[\"link\"] }}",
        "options": {},
        "responseFormat": "string"
      },
      "typeVersion": 2
    },
    {
      "id": "68749bff-1499-4ef5-aefd-c4b6233d0fa7",
      "name": "Extract script",
      "type": "n8n-nodes-base.htmlExtract",
      "position": [
        1560,
        300
      ],
      "parameters": {
        "options": {},
        "extractionValues": {
          "values": [
            {
              "key": "script",
              "cssSelector": "script:nth-of-type(2)",
              "returnValue": "html"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "158e7b18-f58d-453f-80f8-97e65f0b1fde",
      "name": "Parse JSON",
      "type": "n8n-nodes-base.set",
      "position": [
        1780,
        300
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "data",
              "value": "={{ JSON.parse($json.script) }}"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "id": "a613c52e-395b-4d88-ab7d-b1cf2b664b43",
      "name": "Define feed items",
      "type": "n8n-nodes-base.function",
      "position": [
        2000,
        300
      ],
      "parameters": {
        "functionCode": "const escapeHTML = str => str.replace(/[&<>'\"]/g, \n  tag => ({\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      \"'\": '&#39;',\n      '\"': '&quot;'\n    }[tag]));\n\nlet feedItems = [];\nfor (item of items) {\n  feedItems.push(`<item>\n  <title>${escapeHTML(item.json.data.name)}</title>\n  <enclosure url=\"${item.json.data.associatedMedia.contentUrl}\" length=\"${item.json.data.timeRequired * 20 * 1000}\" type=\"${item.json.data.encodingFormat}\"/>\n  <guid isPermaLink=\"false\">${item.json.data.identifier}</guid>\n  <pubDate>${DateTime.fromISO(item.json.data.datePublished).toRFC2822()}</pubDate>\n  <description>${escapeHTML(item.json.data.description)}</description>\n</item>`);\n}\n\nreturn [{\n  data: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss version=\"2.0\" xmlns:itunes=\"http://www.itunes.com/dtds/podcast-1.0.dtd\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\">\n  <channel>\n    <title>${escapeHTML(items[0].json.data.partOfSeries.name)}</title>\n    <description>${escapeHTML(items[0].json.data.partOfSeries.about)}</description>\n    <itunes:image href=\"${escapeHTML(items[0].json.data.image)}\" />\n    <language>${items[0].json.data.inLanguage}</language>\n    <itunes:category text=\"Comedy\" />\n    <itunes:explicit>no</itunes:explicit>\n    <link>${items[0].json.data.partOfSeries.url}</link>\n    <copyright>\u00a9 ${$now.toFormat('yyyy')} ${escapeHTML(items[0].json.data.productionCompany)}</copyright>\n    <itunes:author>${escapeHTML(items[0].json.data.productionCompany)}</itunes:author>\n    ${feedItems.join('\\n')}\n  </channel>\n</rss>\n`\n}];\n"
      },
      "typeVersion": 1
    },
    {
      "id": "cbdc367d-a685-4f0b-a9f3-0aedc2c8b3c1",
      "name": "Feed",
      "type": "n8n-nodes-base.webhook",
      "position": [
        240,
        100
      ],
      "parameters": {
        "path": "3fbd94de-2fb3-4b32-a46e-c237865479b9.rss",
        "options": {},
        "responseMode": "responseNode"
      },
      "typeVersion": 1
    },
    {
      "id": "0dfb02cc-1944-4542-b5c5-9e0b198e143d",
      "name": "Serve feed",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        2220,
        300
      ],
      "parameters": {
        "options": {
          "responseCode": 200,
          "responseHeaders": {
            "entries": [
              {
                "name": "Content-Type",
                "value": "application/rss+xml"
              }
            ]
          }
        },
        "respondWith": "text",
        "responseBody": "={{ $json[\"data\"] }}"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Feed": {
      "main": [
        [
          {
            "node": "Get overview page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse JSON": {
      "main": [
        [
          {
            "node": "Define feed items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract links": {
      "main": [
        [
          {
            "node": "Split out lists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract script": {
      "main": [
        [
          {
            "node": "Parse JSON",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split out lists": {
      "main": [
        [
          {
            "node": "Remove duplicate links",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get episode page": {
      "main": [
        [
          {
            "node": "Extract script",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Define feed items": {
      "main": [
        [
          {
            "node": "Serve feed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get overview page": {
      "main": [
        [
          {
            "node": "Extract links",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On clicking 'execute'": {
      "main": [
        [
          {
            "node": "Get overview page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove duplicate links": {
      "main": [
        [
          {
            "node": "Get episode page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

How this works

This workflow delivers a reliable RSS feed of the latest podcasts from ARD Audiothek, sparing you the hassle of manually checking for new episodes and ensuring you never miss an update on your favourite German audio content. It's perfect for podcast enthusiasts, journalists, or content curators who rely on ARD's extensive library for news, culture, and entertainment. The key step involves fetching the overview page via HTTP Request, extracting episode links with htmlExtract, and then parsing each episode's details to compile a clean, structured feed using itemLists for deduplication and organisation.

Use this workflow when you need an automated, event-driven RSS stream to integrate into your podcast app or website, especially for real-time monitoring of ARD Audiothek releases. Avoid it if you're targeting non-German content or require advanced AI processing, as it focuses solely on basic web scraping. Common variations include adapting the HTML extraction rules for other podcast sites or adding email notifications for new episodes.

About this workflow

Rss Feed For Ard Audiothek Podcasts. Uses manualTrigger, httpRequest, htmlExtract, itemLists. Event-driven trigger; 11 nodes.

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

More Web Scraping workflows → · Browse all categories →

Related workflows

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

Web Scraping

Pulling Data From Services That N8N Doesnt Have A Pre Built Integration For. Uses manualTrigger, stickyNote, itemLists, htmlExtract. Event-driven trigger; 14 nodes.

Item Lists, Html Extract, HTTP Request
Web Scraping

Workflow 1748. Uses itemLists, htmlExtract, httpRequest. Event-driven trigger; 14 nodes.

Item Lists, Html Extract, HTTP Request
Web Scraping

Create An Rss Feed Based On A Website S Content. Uses manualTrigger, itemLists, htmlExtract, httpRequest. Event-driven trigger; 12 nodes.

Item Lists, Html Extract, HTTP Request +1
Web Scraping

extract_swifts. Uses manualTrigger, httpRequest, htmlExtract, splitInBatches. Event-driven trigger; 23 nodes.

HTTP Request, Html Extract, MongoDB +5
Web Scraping

FL Hazards -> OpenWebUI KB (hazards) - FIXED. Uses itemLists, httpRequest. Event-driven trigger; 11 nodes.

Item Lists, HTTP Request