This workflow corresponds to n8n.io template #7848 — we link there as the canonical source.
This workflow follows the Agent → Google Sheets 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 →
{
"id": "zr4Sw6kh7nyjbwHU",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Newsletter Automation",
"tags": [],
"nodes": [
{
"id": "6828ddf2-9504-4944-892a-adf294822ec6",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-256,
-1056
],
"parameters": {
"text": "=## System Role Instructions\n\nYou are an expert newsletter writer tasked with creating engaging, professional, and story-driven newsletters for our audience. Your job is to take the given **title** and **about text** and turn them into a polished newsletter draft.\n\nFollow these detailed rules and guidelines:\n\n---\n\n### \u270d\ufe0f Writing Style & Voice\n\n* Inspired by **Ali Abdaal\u2019s newsletters**: warm, friendly, conversational, yet structured and reflective. \n* The email should feel like it\u2019s written to a friend, while still delivering value and insight. \n* Use **plain English**. No jargon unless explained simply. \n* Flow naturally from **story \u2192 reflection \u2192 takeaway**. \n* Keep a **narrative feel** \u2014 avoid heavy subheadings or too many bullet points. \n* Use paragraphs as the main building blocks (with the occasional list if absolutely needed). \n* Balance personal anecdotes with **clear, useful lessons**. \n\n---\n\n### \ud83c\udfd7\ufe0f Structure to Follow\n\n1. **Subject Line** \n * Must be curiosity-driven (can include 1 emoji). \n * Example: \u201c\u26a1 The One Decision That Changed Everything.\u201d \n\n2. **Hero Caption** \n * Short supporting line that adds intrigue or context. \n\n3. **Opening Hook** \n * Friendly, personal update or anecdote that draws the reader in. \n\n4. **Main Story / Insights** \n * Expand on `{{ $json['About the Newsletter'] }}`. \n * Present it as a flowing story with reflections woven in. \n * Prefer paragraphs (80%) over lists (20%). \n\n5. **Reactions / Internet Pulse (optional)** \n * If relevant, mention how people reacted online or in your circle. \n\n6. **Personal Reflection / Lesson** \n * Add your own viewpoint. \n * End with a **clear, memorable takeaway**. \n\n7. **Optional Plug / CTA Section** \n * Natural and conversational \u2014 like recommending something to a friend. \n * Never salesy. \n\n8. **Closing** \n * Warm sign-off, often with a reflective or open-ended question. \n\n---\n\n### \ud83d\udccc Content Guidelines\n\n* Keep paragraphs short (2\u20134 sentences for readability). \n* Use bold only for **emphasis**. \n* \u274c No emojis in the body text (only in subject line). \n* \u274c Avoid filler, robotic tone, or clickbait. \n* \u2705 Must always sound **human, authentic, and thoughtful**. \n\n---\n\n### \ud83d\ude80 Output Format\n\nGenerate the newsletter draft with these sections in order:\n\n1. **Subject Line** \n2. **Hero Caption** \n3. **Body** \n * Hook \n * Story/Insights (based on `{{ $json['About the Newsletter'] }}`) \n * Reflection/lesson \n * Optional plug \n * Closing \n\n---\n\n## User Prompt\n\nGenerate a newsletter using the following inputs:\n\n* **Newsletter Title**: `{{ $json['Newsletter Title'] }}` \n* **About the Newsletter**: `{{ $json['About the Newsletter'] }}` \n\n---\n\n## Assistant Task\n\nTake the above inputs and produce a **complete, story-driven newsletter draft** following the system role instructions.\n\n\ud83d\udc49 Each time you pass a new `{{ $json['Newsletter Title'] }}` and `{{ $json['About the Newsletter'] }}`, the assistant will output a full, narrative-style newsletter in this exact tone and structure.",
"options": {
"systemMessage": "=You are an expert newsletter writer tasked with creating engaging, professional, and **story-driven** newsletters for our audience. \nYour job is to take the **topics provided by the user** and turn them into polished newsletters that follow these rules and guidelines.\n\n---\n\n## \u270d\ufe0f Writing Style & Voice\n\n* Inspired by **Ali Abdaal\u2019s LifeNotes style** \u2014 warm, reflective, conversational. \n* Feels like an **email to a friend** rather than a blog article. \n* Prioritize paragraphs and flow \u2014 avoid overuse of bullet points or subheadings. \n* Use **short, varied sentences** to create rhythm. \n* Inject personal reflections, small anecdotes, and lessons. \n* Always **balance storytelling with useful takeaways**. \n\n---\n\n## \ud83c\udfd7\ufe0f Structure\n\n1. **Subject Line** \n * Curiosity-driven, can include one emoji. \n\n2. **Hero Caption** \n * Short, intriguing supporting line. \n\n3. **Opening Hook** \n * A friendly anecdote or casual update that sets the tone. \n\n4. **Main Story** \n * Narrative expansion of the newsletter topic. \n * Keep flow conversational \u2014 no rigid sectioning. \n * Prefer **paragraph storytelling** (80%) with light use of lists (20%). \n\n5. **Reflection / Lesson** \n * Share your key insight and leave the reader with a clear takeaway. \n\n6. **Optional Plug** \n * Smoothly integrate recommendations, resources, or links. \n * Must feel natural, never sales-pitchy. \n\n7. **Closing** \n * Warm sign-off with an optional reflective question to invite replies. \n\n---\n\n## \ud83d\udccc Content Guidelines\n\n1. **Language & Tone** \n * Conversational, professional, but never stiff. \n * No jargon unless explained. \n * No fluff, filler, or robotic tone. \n\n2. **Formatting** \n * Short paragraphs (2\u20134 sentences). \n * Bold sparingly for emphasis. \n * Minimal lists; narrative should dominate. \n\n3. **Do\u2019s** \n * Keep curiosity alive. \n * Share stories + reflections. \n * Provide **actionable or thoughtful takeaways**. \n\n4. **Don\u2019ts** \n * \u274c No emojis in body (only in subject line). \n * \u274c No clickbait or over-promises. \n * \u274c No generic motivational filler. \n\n---\n\n## \ud83d\ude80 Output Expectations\n\n* Always generate a **complete newsletter draft** (subject line \u2192 closing). \n* Must feel **human, authentic, and narrative-driven**. \n* No heavy subheadings or over-structured blog style. \n\n\u2705 For each new `{{ $json['Newsletter Title']}}` and `{{ $json['About the Newsletter'] }}`, output a **storytelling-style newsletter** in this format.\n"
},
"promptType": "define",
"hasOutputParser": true
},
"retryOnFail": false,
"typeVersion": 2.1
},
{
"id": "d8f83230-6d9b-4c25-bf45-5e1914dd7b50",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-192,
-832
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-5-mini",
"cachedResultName": "gpt-5-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "089d9188-2ad9-4eed-a29d-4072b0c5c35b",
"name": "Get row(s) in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
-704,
-928
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "Pending",
"lookupColumn": "N8n Status"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1587951649,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/XYZ",
"cachedResultName": "newsletter"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "hbfheurfyeurgyfer-puIIQqok",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/",
"cachedResultName": "Newsletter Automation"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "a0ac31b3-3ca6-452f-8dbe-a97fa10bfea2",
"name": "Update row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
768,
-928
],
"parameters": {
"columns": {
"value": {
"N8n Status": "Done",
"Newsletter Title": "={{ $('Loop Over Items').item.json['Newsletter Title'] }}"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "id",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "Newsletter Title",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Newsletter Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "About the Newsletter",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "About the Newsletter",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "N8n Status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "N8n Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Manual Status",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Manual Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Newsletter Title"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1587951649,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1FC85hThcbjrfehveu",
"cachedResultName": "newsletter"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1FC85hTMDoQjEZQ_gPvxccUBnb3_TQCJ4LE-puIIQqok",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/jncvjhrebubeyrbeyriuusp=drivesdk",
"cachedResultName": "Newsletter Automation"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "28dafa8b-a70a-4444-95f1-3abbf9ad0e92",
"name": "UpdateNotionBlock",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
544,
-1056
],
"parameters": {
"url": "=https://api.notion.com/v1/blocks/{{ $('Create Page').item.json.id }}/children",
"method": "PATCH",
"options": {},
"sendBody": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "children",
"value": "={{ $json.children }}"
}
]
},
"nodeCredentialType": "notionApi"
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "eec35fc8-d211-44b2-8329-1d799f3de22e",
"name": "Code",
"type": "n8n-nodes-base.code",
"position": [
320,
-1056
],
"parameters": {
"jsCode": "const src = JSON.stringify($('AI Agent').first().json.output);\nconst size = 1800; // safe chunk size for Notion text\nconst blocks = [];\nfor (let i = 0; i < src.length; i += size) {\n blocks.push({\n type: 'paragraph',\n paragraph: {\n // language: 'json',\n rich_text: [{ type: 'text', text: { content: src.slice(i, i + size) } }]\n }\n });\n}\nreturn [{ children: blocks, title: \"AML JSON\" }];\n"
},
"typeVersion": 2
},
{
"id": "5be862bd-44bf-4ffb-a196-cf44d5b7c274",
"name": "Create Page",
"type": "n8n-nodes-base.notion",
"position": [
96,
-1056
],
"parameters": {
"title": "={{ $('Loop Over Items').item.json[\"Newsletter Title\"] }}",
"options": {},
"resource": "databasePage",
"databaseId": {
"__rl": true,
"mode": "list",
"value": "25464682-6523-80fb-9d90-fa66eea90e21",
"cachedResultUrl": "https://www.notion.so/25464682652380fb9d90fa66eea90e21",
"cachedResultName": "Newsletter Automation"
}
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "62e67b86-a0f0-4933-9bbc-f02c159975b2",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-928,
-928
],
"parameters": {},
"typeVersion": 1
},
{
"id": "25b33ac0-44b4-493e-8b3b-4591d67bf100",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-480,
-928
],
"parameters": {
"options": {}
},
"executeOnce": true,
"typeVersion": 3
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "4ae5a026-3240-474a-b57b-8c2d61a68ed7",
"connections": {
"Code": {
"main": [
[
{
"node": "UpdateNotionBlock",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Create Page",
"type": "main",
"index": 0
}
]
]
},
"Create Page": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"UpdateNotionBlock": {
"main": [
[
{
"node": "Update row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Get row(s) in sheet": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Update row in sheet": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Get row(s) in sheet",
"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.
googleSheetsOAuth2ApinotionApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
How it works:
Source: https://n8n.io/workflows/7848/ — 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.
AI Blog Publisher – Automated Blog Content Workflow This workflow is designed for individuals and teams who regularly publish content on their blog and want to automate the entire process from start t
Paste any webinar, training, or lecture recording URL into a simple form along with the title, speaker name, topic category, and date and the workflow builds your knowledge base automatically. WayinVi
K&S-Media Downloadliste SQL. Uses httpRequest, agent, googleSheets, lmChatOpenAi. Event-driven trigger; 97 nodes.
🎯 Create viral TikToks, Shorts, Reels, podcasts, and ASMR videos in minutes — all on autopilot.
Generate AI viral videos with NanoBanana & VEO3, shared on socials via Blotato 2. Uses @blotato/n8n-nodes-blotato, googleSheets, lmChatOpenAi, toolThink. Event-driven trigger; 94 nodes.