This workflow follows the Emailsend → HTTP Request 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": "Boerma Media - Blog generator (elke 3 dagen)",
"active": false,
"settings": {
"executionOrder": "v1"
},
"nodes": [
{
"id": "n1",
"name": "Elke 3 dagen",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
0,
300
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 9 */3 * *"
}
]
}
}
},
{
"id": "n2",
"name": "Genereer 10 ideeen (Claude)",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
220,
300
],
"parameters": {
"method": "POST",
"url": "https://api.anthropic.com/v1/messages",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "anthropic-version",
"value": "2023-06-01"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "{\n \"model\": \"claude-sonnet-4-6\",\n \"max_tokens\": 2000,\n \"system\": \"Je bent contentstrateeg voor Boerma Media, een studio voor video en fotografie (bruiloften en zakelijke opdrachten). Bedenk praktische, nuchtere blogonderwerpen waar een klant echt iets aan heeft. Denk aan hoe-werkt-het en stap-voor-stap onderwerpen.\\n\\nVoorbeelden van het soort onderwerp: hoe ik me voorbereid op een bruiloft, hoe een kennismakingsgesprek verloopt, hoe een detailgesprek verloopt, de vijf dingen die ik nodig heb om jouw bruiloft te filmen, hoe je een goede Instagram-advertentiecampagne opzet, hoe wij een zakelijke opdracht aanpakken. Geen vage of zoetsappige onderwerpen, geen marketingpraat.\\n\\nGeef precies 10 ideeen als geldige JSON: een array van 10 objecten met de velden title en description, waarbij description in een zin uitlegt wat de blog behandelt. Zorg voor een mix van bruiloft en zakelijk. Geen tekst eromheen, geen markdown code fences.\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"Bedenk 10 nieuwe blogonderwerpen voor Boerma Media.\"\n }\n ]\n}",
"options": {}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"id": "n3",
"name": "Bouw ideeenmail",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
440,
300
],
"parameters": {
"jsCode": "const raw = $input.first().json;\n let text = raw.content?.[0]?.text ?? raw.text ?? '';\n text = text.trim().replace(/^```json\\s*/i, '').replace(/^```\\s*/, '').replace(/```$/, '').trim();\n const ideas = JSON.parse(text).map((b, i) => ({ index: i + 1, ...b }));\n const logoUrl = 'https://www.boerma.media/logos/logo_boerma_media_zwart.png';\n const rows = ideas.map((b) =>\n `<tr><td style=\"padding-bottom:16px;\"><p style=\"margin:0;color:#000000;font-size:14px;line-height:1.5;\"><strong>${b.index}.</strong> ${b.title}</p><p style=\"margin:4px 0 0;color:#666666;font-size:13px;line-height:1.5;\">${b.description}</p></td></tr>`\n ).join('');\n const message = `<!DOCTYPE html><html lang=\"nl\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"></head><body style=\"margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;background-color:#ffffff;\"><table role=\"presentation\" style=\"width:100%;border-collapse:collapse;\"><tr><td style=\"padding:48px 20px;\"><table role=\"presentation\" style=\"max-width:560px;margin:0 auto;border:1px solid #eaeaea;border-radius:8px;padding:40px;\"><tr><td style=\"text-align:center;padding-bottom:32px;\"><img src=\"${logoUrl}\" alt=\"Boerma Media\" style=\"height:28px;width:auto;\" /></td></tr><tr><td style=\"text-align:center;padding-bottom:24px;\"><h1 style=\"margin:0;color:#000000;font-size:24px;font-weight:400;line-height:1.4;\">10 <strong>blogideeen</strong></h1></td></tr><tr><td style=\"padding-bottom:24px;\"><p style=\"margin:0;color:#000000;font-size:14px;line-height:1.6;\">Hieronder tien onderwerpen. Klik op de knop onderaan deze mail en vul in het formulier je notities in: welke je uitgewerkt wilt hebben, in welke richting, en wat er anders moet. Niet terugmailen, alleen via de knop. Daarna krijg je de uitgewerkte blogs terug.</p></td></tr><tr><td><table role=\"presentation\" style=\"width:100%;\">${rows}</table></td></tr></table></td></tr></table></body></html>`;\n return [{ json: { ideas, message } }];"
}
},
{
"id": "n4",
"name": "Vraag notities",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2.1,
"position": [
660,
300
],
"parameters": {
"operation": "sendAndWait",
"fromEmail": "leads@boerma.media",
"sendTo": "paulboerma@live.nl",
"subject": "10 blogideeen - jouw notities",
"message": "={{ $json.message }}",
"responseType": "freeText",
"options": {}
},
"credentials": {
"smtp": {
"name": "<your credential>"
}
}
},
{
"id": "n5",
"name": "Bouw uitwerkverzoek",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
880,
300
],
"parameters": {
"jsCode": "const ideas = $('Bouw ideeenmail').first().json.ideas || [];\n const j = $input.first().json;\n const notes = String((j.data && (j.data.text ?? j.data)) ?? j.text ?? '').trim();\n const system = `Je schrijft blogs voor Boerma Media, een studio voor video en fotografie. Bruiloften en zakelijke opdrachten zijn de kern. Schrijf nuchter, concreet en praktisch, alsof je rustig uitlegt hoe iets werkt. Korte, heldere zinnen. Geen zoetsappigheid, geen poetische sfeerbeschrijvingen, geen verkooppraat.\n\nPerspectief:\n- Bij bruiloften schrijf je in de ik-vorm en spreek je de lezer aan met je.\n- Bij zakelijke onderwerpen schrijf je namens de studio in de wij-vorm.\n\nHarde regels, hier wijk je nooit van af:\n- Gebruik nooit een gedachtestreepje (de lange of de korte). Gebruik een komma of een punt.\n- Gebruik nooit de constructie niet X maar Y, of geen X maar Y. Schrijf gewoon op wat het is.\n- Geen cliches zoals: in een wereld waar, een reis, naadloos, tijdloos, tot leven brengen, het verhaal achter, een onvergetelijke ervaring, laten we eerlijk zijn.\n- Geen holle marketingtaal en geen onnodige Engelse woorden.\n- Geen samenvattende afsluiting met tot slot of kortom, en geen kopje conclusie.\n- Begin direct met de inhoud, geen brede inleiding.\n\nLengte: elke blog is tussen de 400 en 650 woorden.\n\nVorm: het veld content is HTML met p-tags, waar logisch een of twee h2-tussenkoppen, en waar het past een korte opsomming met ul en li.\n\nMaak van elke blog ook een Engelse vertaling. Vertaal natuurlijk en vlot, niet letterlijk, en houd je aan dezelfde stijlregels. De Engelse content behoudt exact dezelfde HTML-structuur.\n\nLever uitsluitend geldige JSON: een array van objecten met de velden title, excerpt, content (Nederlands) en title_en, excerpt_en, content_en (de Engelse vertaling). Geen tekst eromheen, geen markdown code fences.`;\n const user = 'Hieronder tien blogideeen en mijn notities daarover. Werk de blogs uit volgens mijn notities: welke ideeen ik wil, in welke richting, en welke aanpassingen. Werk alleen de ideeen uit die ik aanwijs. Houd je strikt aan alle regels.\\n\\nIDEEEN:\\n' + JSON.stringify(ideas, null, 2) + '\\n\\nMIJN NOTITIES:\\n' + notes;\n const anthropicBody = { model: 'claude-sonnet-4-6', max_tokens: 12000, system, messages: [{ role: 'user', content: user }] };\n return [{ json: { anthropicBody, ideas, notes } }];"
}
},
{
"id": "n6",
"name": "Werk blogs uit (Claude)",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1100,
300
],
"parameters": {
"method": "POST",
"url": "https://api.anthropic.com/v1/messages",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "anthropic-version",
"value": "2023-06-01"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify($json.anthropicBody) }}",
"options": {}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"id": "n7",
"name": "Parse blogs",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1320,
300
],
"parameters": {
"jsCode": "const raw = $input.first().json;\n let text = raw.content?.[0]?.text ?? raw.text ?? '';\n text = text.trim().replace(/^```json\\s*/i, '').replace(/^```\\s*/, '').replace(/```$/, '').trim();\n const blogs = JSON.parse(text);\n return blogs.map((b, i) => ({ json: { index: i + 1, ...b } }));"
}
},
{
"id": "n8",
"name": "Combineer blogs",
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"position": [
1540,
300
],
"parameters": {
"aggregate": "aggregateAllItemData",
"destinationFieldName": "blogs",
"options": {}
}
},
{
"id": "n9",
"name": "Bouw goedkeuringsmail",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1760,
300
],
"parameters": {
"jsCode": "const blogs = $input.first().json.blogs || [];\n const logoUrl = 'https://www.boerma.media/logos/logo_boerma_media_zwart.png';\n const label = (t) => `<p style=\"margin:0 0 4px;color:#666666;font-size:12px;text-transform:uppercase;letter-spacing:0.05em;\">${t}</p>`;\n const section = (b) =>\n `<tr><td style=\"padding-bottom:24px;\">${label('Concept ' + b.index)}<h2 style=\"margin:0 0 8px;color:#000000;font-size:18px;font-weight:500;line-height:1.4;\">${b.title}</h2><p style=\"margin:0 0 16px;color:#666666;font-size:14px;line-height:1.6;font-style:italic;\">${b.excerpt}</p><div style=\"color:#000000;font-size:14px;line-height:1.7;\">${b.content}</div></td></tr><tr><td style=\"padding-bottom:24px;\"><hr style=\"border:none;border-top:1px solid #eaeaea;margin:0;\" /></td></tr>`;\n const message = `<!DOCTYPE html><html lang=\"nl\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"></head><body style=\"margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;background-color:#ffffff;\"><table role=\"presentation\" style=\"width:100%;border-collapse:collapse;\"><tr><td style=\"padding:48px 20px;\"><table role=\"presentation\" style=\"max-width:560px;margin:0 auto;border:1px solid #eaeaea;border-radius:8px;padding:40px;\"><tr><td style=\"text-align:center;padding-bottom:32px;\"><img src=\"${logoUrl}\" alt=\"Boerma Media\" style=\"height:28px;width:auto;\" /></td></tr><tr><td style=\"text-align:center;padding-bottom:24px;\"><h1 style=\"margin:0;color:#000000;font-size:24px;font-weight:400;line-height:1.4;\">Uitgewerkte <strong>blogs</strong></h1></td></tr><tr><td style=\"padding-bottom:32px;\"><p style=\"margin:0;color:#000000;font-size:14px;line-height:1.6;\">Klik op de knop onderaan deze mail en vul in het formulier de nummers in die je wilt publiceren, bijvoorbeeld <strong>1,3</strong>. Niets publiceren? Vul <strong>0</strong> in of laat leeg. Niet terugmailen, alleen via de knop.</p></td></tr>${blogs.map(section).join('')}<tr><td><p style=\"margin:0;color:#666666;font-size:12px;line-height:1.6;\">Automatisch gegenereerd door de blog-workflow van Boerma Media.</p></td></tr></table></td></tr></table></body></html>`;\n return [{ json: { blogs, message } }];"
}
},
{
"id": "n10",
"name": "Goedkeuring per e-mail",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2.1,
"position": [
1980,
300
],
"parameters": {
"operation": "sendAndWait",
"fromEmail": "leads@boerma.media",
"sendTo": "paulboerma@live.nl",
"subject": "Uitgewerkte blogs - kies welke je publiceert",
"message": "={{ $json.message }}",
"responseType": "freeText",
"options": {}
},
"credentials": {
"smtp": {
"name": "<your credential>"
}
}
},
{
"id": "n11",
"name": "Filter gekozen blogs",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
2200,
300
],
"parameters": {
"jsCode": "const blogs = $('Bouw goedkeuringsmail').first().json.blogs || [];\n const j = $input.first().json;\n let ans = j.data;\n if (ans && typeof ans === 'object') ans = ans.text;\n if (ans == null) ans = j.text;\n ans = String(ans ?? '');\n const picks = (ans.match(/\\d+/g) || []).map(Number).filter((n) => n > 0);\n if (picks.length === 0) return [];\n const selected = blogs.filter((b) => picks.includes(b.index));\n return selected.map((b) => ({ json: b }));"
}
},
{
"id": "n12",
"name": "Publiceer op website",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
2420,
300
],
"parameters": {
"method": "POST",
"url": "https://www.boerma.media/api/blogs",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
}
],
"connections": {
"Elke 3 dagen": {
"main": [
[
{
"node": "Genereer 10 ideeen (Claude)",
"type": "main",
"index": 0
}
]
]
},
"Genereer 10 ideeen (Claude)": {
"main": [
[
{
"node": "Bouw ideeenmail",
"type": "main",
"index": 0
}
]
]
},
"Bouw ideeenmail": {
"main": [
[
{
"node": "Vraag notities",
"type": "main",
"index": 0
}
]
]
},
"Vraag notities": {
"main": [
[
{
"node": "Bouw uitwerkverzoek",
"type": "main",
"index": 0
}
]
]
},
"Bouw uitwerkverzoek": {
"main": [
[
{
"node": "Werk blogs uit (Claude)",
"type": "main",
"index": 0
}
]
]
},
"Werk blogs uit (Claude)": {
"main": [
[
{
"node": "Parse blogs",
"type": "main",
"index": 0
}
]
]
},
"Parse blogs": {
"main": [
[
{
"node": "Combineer blogs",
"type": "main",
"index": 0
}
]
]
},
"Combineer blogs": {
"main": [
[
{
"node": "Bouw goedkeuringsmail",
"type": "main",
"index": 0
}
]
]
},
"Bouw goedkeuringsmail": {
"main": [
[
{
"node": "Goedkeuring per e-mail",
"type": "main",
"index": 0
}
]
]
},
"Goedkeuring per e-mail": {
"main": [
[
{
"node": "Filter gekozen blogs",
"type": "main",
"index": 0
}
]
]
},
"Filter gekozen blogs": {
"main": [
[
{
"node": "Publiceer op website",
"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.
httpHeaderAuthsmtp
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Boerma Media - Blog generator (elke 3 dagen). Uses httpRequest, emailSend. Scheduled trigger; 12 nodes.
Source: https://github.com/Boerma-media/Boerma-Media/blob/1a60e510eba17152b3dab4b8d4502b59598c9ef9/n8n/boerma-blog-workflow.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.
This workflow is an improvement of this workflow by Greg Brzezinka.
N8N-Self-Updater. Uses ssh, emailSend, httpRequest. Scheduled trigger; 27 nodes.
> An automated n8n workflow originally built for DigitalOcean-based n8n deployments, but fully compatible with any VPS or cloud hosting (e.g., AWS, Google Cloud, Hetzner, Linode, etc.) where n8n ru
What if you could spot a major sales problem—or a winning campaign—the very next morning, instead of weeks later? Imagine receiving a beautiful, data-rich alert directly in your inbox the moment your
Track Changes Of Product Prices. Uses htmlExtract, functionItem, httpRequest, writeBinaryFile. Scheduled trigger; 25 nodes.