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 →
{
"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 '&': '&',\n '<': '<',\n '>': '>',\n \"'\": ''',\n '\"': '"'\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
}
]
]
}
}
}
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Pulling Data From Services That N8N Doesnt Have A Pre Built Integration For. Uses manualTrigger, stickyNote, itemLists, htmlExtract. Event-driven trigger; 14 nodes.
Workflow 1748. Uses itemLists, htmlExtract, httpRequest. Event-driven trigger; 14 nodes.
Create An Rss Feed Based On A Website S Content. Uses manualTrigger, itemLists, htmlExtract, httpRequest. Event-driven trigger; 12 nodes.
extract_swifts. Uses manualTrigger, httpRequest, htmlExtract, splitInBatches. Event-driven trigger; 23 nodes.
FL Hazards -> OpenWebUI KB (hazards) - FIXED. Uses itemLists, httpRequest. Event-driven trigger; 11 nodes.