This workflow follows the Executecommand → Readwritefile 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 →
{
"name": "Steuer-Radar \u2014 BMF-Meldungen klassifizieren und vorlegen",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "days",
"triggerAtHour": 7
}
]
}
},
"id": "a1000000-0000-4000-8000-000000000001",
"name": "T\u00e4glich 07:00",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
0,
0
]
},
{
"parameters": {
"command": "node /repo/bin/radar.mjs"
},
"id": "a1000000-0000-4000-8000-000000000002",
"name": "Radar ausf\u00fchren",
"type": "n8n-nodes-base.executeCommand",
"typeVersion": 1,
"position": [
220,
0
],
"notes": "Ruft die getestete Bibliothek auf. Keine nachgebaute Logik in n8n."
},
{
"parameters": {
"fileSelector": "/repo/data/protokoll.jsonl",
"options": {}
},
"id": "a1000000-0000-4000-8000-000000000003",
"name": "Protokoll lesen",
"type": "n8n-nodes-base.readWriteFile",
"typeVersion": 1,
"position": [
440,
0
]
},
{
"parameters": {
"jsCode": "// Nur der aktuelle Lauf, und nur was einem Menschen vorgelegt wird.\nconst text = Buffer.from($input.first().binary.data.data, 'base64').toString('utf8');\nconst heute = new Date().toISOString().slice(0, 10);\nreturn text.trim().split('\\n')\n .filter(Boolean)\n .map((z) => JSON.parse(z))\n .filter((e) => e.zeitpunkt.startsWith(heute))\n .filter((e) => e.vorlage !== 'archiv')\n .map((json) => ({ json }));"
},
"id": "a1000000-0000-4000-8000-000000000004",
"name": "Vorzulegendes filtern",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
660,
0
]
},
{
"parameters": {
"jsCode": "// FREIGABESCHRITT \u2014 hier wird nichts automatisch wirksam.\n//\n// Ersetze diesen Node durch den Kanal, \u00fcber den DU entscheidest:\n// E-Mail, Slack, oder n8n \"Send and Wait for Response\" f\u00fcr Zustimmen/Ablehnen.\n// Die Freigabefelder im Protokoll (freigabe, freigegeben_von, freigegeben_am)\n// sind daf\u00fcr vorgesehen und bleiben bis dahin null.\nreturn $input.all().map((i) => ({ json: {\n betreff: `[Steuer-Radar] ${i.json.vorlage === 'unklar' ? 'Unklar' : 'Relevant'}: ${i.json.titel}`,\n text: [\n i.json.titel,\n '',\n i.json.modellausgabe?.was_aendert_sich ?? '(keine g\u00fcltige Modellausgabe)',\n i.json.modellausgabe?.bereiche?.length ? `Bereiche: ${i.json.modellausgabe.bereiche.join(', ')}` : '',\n i.json.modellausgabe?.wirksam_ab ? `Wirksam ab: ${i.json.modellausgabe.wirksam_ab}` : '',\n `Einstufung: ${i.json.vorlage} \u2014 ${i.json.grund}`,\n '',\n i.json.link,\n ].filter(Boolean).join('\\n'),\n link: i.json.link,\n} }));"
},
"id": "a1000000-0000-4000-8000-000000000005",
"name": "Zur Freigabe aufbereiten",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
880,
0
],
"notes": "Platzhalter f\u00fcr den Freigabekanal \u2014 bewusst nicht automatisiert."
}
],
"connections": {
"T\u00e4glich 07:00": {
"main": [
[
{
"node": "Radar ausf\u00fchren",
"type": "main",
"index": 0
}
]
]
},
"Radar ausf\u00fchren": {
"main": [
[
{
"node": "Protokoll lesen",
"type": "main",
"index": 0
}
]
]
},
"Protokoll lesen": {
"main": [
[
{
"node": "Vorzulegendes filtern",
"type": "main",
"index": 0
}
]
]
},
"Vorzulegendes filtern": {
"main": [
[
{
"node": "Zur Freigabe aufbereiten",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Steuer-Radar — BMF-Meldungen klassifizieren und vorlegen. Uses executeCommand, readWriteFile. Scheduled trigger; 5 nodes.
Source: https://github.com/gunterk1/steuer-radar/blob/1421cf1f3bcde2ea4c7dfa2d3da668c6432ca6c6/workflows/steuer-radar.json — 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.
Complete backup solution that saves both workflows and credentials to local/server disk with optional FTP upload for off-site redundancy.
Calendar to Obsidian. Uses readWriteFile, googleCalendar, executeCommand, googleDrive. Scheduled trigger; 14 nodes.
Perfect for content publishing with organic scheduling patterns, social media automation, API systems that need to avoid rate limiting, or any automation requiring randomised timing control across mul
Perfect for disaster recovery or migrating between environments, this workflow automatically identifies your most recent FTP backup and provides a manual restore capability that intelligently excludes
This n8n workflow template uses community nodes and is only compatible with the self-hosted version of n8n.