This workflow corresponds to n8n.io template #7396 — we link there as the canonical source.
This workflow follows the Agent → Emailsend 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "88ced829-6881-4846-93b1-b2f7d1779841",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
768,
80
],
"parameters": {
"width": 380,
"height": 460,
"content": "## Weekly Email Newsletter Generator\n\n**What it does:**\n- Fetches your latest WordPress posts every Friday\n- AI creates engaging newsletter content\n- Sends formatted emails to your subscriber list\n- Tracks which posts were included to avoid duplicates\n\n**Setup Required:**\n1. Configure WordPress credentials to fetch posts\n2. Set up SMTP email credentials (Gmail, SendGrid, Mailgun, etc.)\n3. Replace email addresses in Send Newsletter node with your subscriber list\n4. Set up Google Gemini API credentials for AI\n\n**Customization:**\n- Change schedule (currently Friday 10 AM)\n- Adjust number of posts to include\n- Modify email template and styling\n- Add custom intro/outro messages\n\n**Need Help?**\nFor n8n coaching or one-on-one consultation:\nmailto:david@daexai.com"
},
"typeVersion": 1
},
{
"id": "c6dd067a-b2b4-4fc4-b14d-d300aa789437",
"name": "Weekly Friday 10AM",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
976,
192
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 10 * * 5"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "396b5f52-a71c-4235-9409-25850114eda3",
"name": "Fetch Recent Posts",
"type": "n8n-nodes-base.wordpress",
"position": [
1168,
192
],
"parameters": {
"options": {},
"operation": "getAll"
},
"typeVersion": 1
},
{
"id": "08ae5166-ef2d-47db-9138-6de7a1621d95",
"name": "Check Posts Exist",
"type": "n8n-nodes-base.if",
"position": [
1376,
192
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "c0a1b2c3-d4e5-f6g7-h8i9-j0k1l2m3n4o5",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{$json.length}}",
"rightValue": 0
}
]
}
},
"typeVersion": 2
},
{
"id": "97d30b53-49ab-4e86-910e-a23550a9cb4e",
"name": "AI Newsletter Creator",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1568,
192
],
"parameters": {
"options": {
"systemMessage": "You are an email newsletter writer. Create an engaging weekly newsletter based on the provided blog posts. Include: 1) Catchy subject line, 2) Personal greeting, 3) Brief intro about this week's content, 4) Formatted summaries of each post with compelling descriptions, 5) Call-to-action to read full posts, 6) Friendly sign-off. Keep it conversational and engaging. Format in HTML for email."
}
},
"typeVersion": 2.2
},
{
"id": "aa3ee18d-2858-456b-a3de-c3ec6888d87f",
"name": "Parse Newsletter Content",
"type": "n8n-nodes-base.code",
"position": [
1952,
192
],
"parameters": {
"jsCode": "const items = $input.all();\n\nreturn items.map(item => {\n // Remove markdown code blocks and parse JSON\n let aiOutput = item.json.output;\n \n // Remove ```json and ``` markers if present\n aiOutput = aiOutput.replace(/```json\\s*/, '').replace(/```\\s*$/, '');\n \n // Try to parse as JSON, fallback to plain text\n let parsedOutput;\n try {\n parsedOutput = JSON.parse(aiOutput.trim());\n } catch (e) {\n // If not JSON, treat as plain text\n parsedOutput = {\n subject: \"Weekly Newsletter - \" + new Date().toLocaleDateString(),\n content: aiOutput\n };\n }\n \n return {\n json: {\n subject: parsedOutput.subject || \"Weekly Newsletter - \" + new Date().toLocaleDateString(),\n content: parsedOutput.content || aiOutput,\n date: new Date().toISOString()\n }\n };\n});"
},
"typeVersion": 2
},
{
"id": "759e35de-6eaa-4b3e-b1a1-94d9d029a4d3",
"name": "Send Newsletter",
"type": "n8n-nodes-base.emailSend",
"position": [
2144,
192
],
"parameters": {
"html": "={{$json.content}}",
"options": {},
"subject": "={{$json.subject}}",
"toEmail": "=subscribers@yourlist.com,subscriber2@email.com,subscriber3@email.com",
"fromEmail": "user@example.com",
"emailFormat": "html"
},
"credentials": {
"smtp": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "48dc6212-0580-40f5-94ba-5f6dc3f207d8",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
1472,
384
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
}
],
"connections": {
"Check Posts Exist": {
"main": [
[
{
"node": "AI Newsletter Creator",
"type": "main",
"index": 0
}
]
]
},
"Fetch Recent Posts": {
"main": [
[
{
"node": "Check Posts Exist",
"type": "main",
"index": 0
}
]
]
},
"Weekly Friday 10AM": {
"main": [
[
{
"node": "Fetch Recent Posts",
"type": "main",
"index": 0
}
]
]
},
"AI Newsletter Creator": {
"main": [
[
{
"node": "Parse Newsletter Content",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Newsletter Creator",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Parse Newsletter Content": {
"main": [
[
{
"node": "Send Newsletter",
"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.
googlePalmApismtp
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Overview: This automation automatically converts your latest WordPress posts into beautifully formatted email newsletters using AI, then sends them to your subscriber list every Friday.
Source: https://n8n.io/workflows/7396/ — 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 automates the process of creating technical tutorials for your blog. It runs on a weekly schedule, automatically identifies trending GitHub repositories, uses an AI to generate a detaile
This workflow is for beauty salons who want consistent, high‑quality social media content without writing every post manually. It also suits agencies and automation builders who manage multiple beauty
An end-to-end Cyber Threat Intelligence pipeline that turns raw DNS traffic into actionable security verdicts — without manual triage, without leaking credentials, and without alert fatigue.
N8N. Uses lmChatGoogleGemini, toolCode, httpRequest, emailSend. Scheduled trigger; 27 nodes.
The system uses a three-stage pipeline architecture: automated paper retrieval from ArXiv's API AI-powered relevance filtering and analysis via Google Gemini Intelligent summarization with HTML format