This workflow corresponds to n8n.io template #5953 — we link there as the canonical source.
This workflow follows the Agent → Gmail 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": "P6LeLqxzbkO3FiPE",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "10 Track Email Campaign Performance",
"tags": [],
"nodes": [
{
"id": "75f14163-7400-49fe-aeb9-1f983dfe0c5e",
"name": "\u23f0 Daily Campaign Check Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-60,
0
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 9
}
]
}
},
"typeVersion": 1.2
},
{
"id": "3d85c239-8871-48ce-aecc-581a4a4be75c",
"name": "\u270f\ufe0f Set Campaign Input Fields",
"type": "n8n-nodes-base.set",
"position": [
160,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "04df454e-d477-4dd4-a029-2c97cfd1bf8f",
"name": "url",
"type": "string",
"value": "=https://www.mailchimp.com/campaigns/123/report"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "197f6678-606d-4e9d-91b9-2ed48fe6799c",
"name": "\ud83e\udd16 Agent: Scrape & Analyze Campaign Performance",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
520,
0
],
"parameters": {
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2
},
{
"id": "0fa379ec-3e22-4f69-97dc-c45e244121c6",
"name": "\ud83e\udde0 LLM: Summarize & Format",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
500,
300
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "d1a27651-f1b3-412e-8452-563eba14c7d0",
"name": "\ud83c\udf10 Bright Data MCP: Scrape Report",
"type": "n8n-nodes-mcp.mcpClientTool",
"position": [
680,
300
],
"parameters": {
"toolName": "scrape_as_markdown",
"operation": "executeTool",
"toolParameters": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Tool_Parameters', ``, 'json') }}"
},
"credentials": {
"mcpClientApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "fb814c29-e412-4332-ae43-b5f8ce4f0783",
"name": "\ud83d\udd0e IF: Open \u226530% & CTR <10%?",
"type": "n8n-nodes-base.if",
"position": [
1100,
0
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "d5c41a60-cadf-47a6-9685-9bead865346d",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ $json.open_rate }}",
"rightValue": 20
},
{
"id": "7a251b0b-a122-418d-8b0c-6714ebfa6018",
"operator": {
"type": "number",
"operation": "lt"
},
"leftValue": "={{ $json.ctr }}",
"rightValue": 130
}
]
}
},
"typeVersion": 2.2
},
{
"id": "b77a5854-6882-47ac-8dba-9af0bdcc0e1f",
"name": "\ud83d\udce7 Send Follow-Up Engagement Email",
"type": "n8n-nodes-base.gmail",
"position": [
1340,
-100
],
"parameters": {
"sendTo": "user@example.com",
"message": "Hi [First Name], \nWe noticed you opened our recent email \u2014 thank you for staying connected! \n\ud83d\ude4c But we think you might have missed the best part\u2026 \n\ud83d\udc49 [Big Benefit or Offer \u2014 e.g., \u201cGet 20% off your next order \u2014 today only!\u201d] \nWe don\u2019t want you to miss out \u2014 just click below and grab your exclusive [deal / resource / upgrade]. \n[CTA Button: \u201cClaim Your Offer\u201d] Still not sure? We\u2019re here to help if you have any questions. Just hit reply \u2014 we love hearing from you! Talk soon, [Your Name] [Your Company]",
"options": {},
"subject": "Did you miss this? Here\u2019s something special for you!",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "1259660d-e04c-4708-9319-22749360bdc3",
"name": "\ud83d\udeab Skip \u2014 No Action Needed",
"type": "n8n-nodes-base.noOp",
"position": [
1340,
100
],
"parameters": {},
"typeVersion": 1
},
{
"id": "6e673900-d27b-4aba-be1d-8d9149fa6ceb",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-120,
-1180
],
"parameters": {
"color": 6,
"width": 420,
"height": 1360,
"content": "## \ud83c\udfaf **\ud83d\udd39 SECTION 1: Schedule & Prepare Inputs**\n\n### \u2705 **Nodes in this Section**\n\n| Node | Name |\n| ---- | -------------------------------- |\n| \u23f0 | **Daily Campaign Check Trigger** |\n| \u270f\ufe0f | **Set Campaign Input Fields** |\n\n---\n\n### \ud83d\udca1 **What Happens Here**\n\n* **\u23f0 Daily Campaign Check Trigger:**\n This node automatically **starts the workflow on a schedule** \u2014 for example, every morning at 9\u202fAM.\n It makes sure you **don\u2019t have to run it manually** every time. The goal is to check your email campaign performance **regularly and consistently**.\n\n* **\u270f\ufe0f Set Campaign Input Fields:**\n This node **defines any input values** that your Agent needs.\n For example:\n\n * Campaign ID\n * ESP URL\n * Date range\n * Any dynamic variables\n\n It acts like **filling in a form** that the rest of the workflow will use.\n You can **edit it easily** without changing the whole workflow.\n\n---\n\n### \ud83c\udfaf **Why It\u2019s Important**\n\n\u2705 Automates the whole thing on autopilot.\n\u2705 Ensures the Agent always has the **right data**.\n\u2705 Makes the workflow easy to maintain for non-tech users \u2014 just change a value in **Edit Fields**, done!\n\n---\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "d722faa7-9304-4145-9e22-f90b71b02053",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
440,
-1300
],
"parameters": {
"color": 3,
"width": 420,
"height": 1480,
"content": "## \ud83e\udd16 **\ud83d\udd39 SECTION 2: Scrape & Analyze with AI Agent**\n\n### \u2705 **Nodes in this Section**\n\n| Node | Name |\n| ---- | ------------------------------------------------ |\n| \ud83e\udd16 | **Agent: Scrape & Analyze Campaign Performance** |\n| \ud83e\udde0 | **LLM: Summarize & Format** |\n| \ud83c\udf10 | **Bright Data MCP: Scrape Report** |\n| \ud83d\uddc2\ufe0f | **Parse Scrape Output** |\n\n---\n\n### \ud83d\udca1 **What Happens Here**\n\n* **\ud83e\udd16 Agent: Scrape & Analyze Campaign Performance**\n This is your **AI Agent** \u2014 it does the smart part:\n\n * Talks to the **Bright Data MCP Tool** to scrape the ESP report page.\n * Uses an **LLM** (OpenAI Chat Model) to process the scraped data.\n * Passes the result to an **Output Parser** to turn messy text into clean, structured data.\n\n* **\ud83c\udf10 Bright Data MCP: Scrape Report**\n Bright Data logs in, navigates to your campaign report page, and **scrapes live open/click numbers**.\n\n* **\ud83e\udde0 LLM: Summarize & Format**\n The Chat Model turns raw scraped info into easy-to-read Markdown or JSON.\n This is like having a mini data analyst!\n\n* **\ud83d\uddc2\ufe0f Parse Scrape Output**\n This node extracts the final numbers (open rate, CTR, bounces) so the logic can understand them.\n\n---\n\n### \ud83c\udfaf **Why It\u2019s Important**\n\n\u2705 You don\u2019t have to log in manually to get reports.\n\u2705 The AI cleans up messy scraped data.\n\u2705 Makes follow-up decisions possible without human effort.\n\u2705 Works for **any ESP** \u2014 if the layout changes, just adjust the scraper.\n\n---\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "031503cb-3fa4-46b6-9b57-529b10553ec2",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1060,
-840
],
"parameters": {
"color": 5,
"width": 420,
"height": 1100,
"content": "## \ud83d\udcc8 **\ud83d\udd39 SECTION 3: Decide & Act Automatically**\n\n### \u2705 **Nodes in this Section**\n\n| Node | Name |\n| ---- | ----------------------------------- |\n| \ud83d\udd0e | **IF: Open \u226530% & CTR <10%?** |\n| \ud83d\udce7 | **Send Follow-Up Engagement Email** |\n| \ud83d\udeab | **Skip \u2014 No Action Needed** |\n\n---\n\n### \ud83d\udca1 **What Happens Here**\n\n* **\ud83d\udd0e IF: Open \u226530% & CTR <10%?**\n This node checks:\n\n * Is the open rate good? (\u226530%)\n * But is the click-through rate low? (<10%)\n If **true**, it triggers follow-up to re-engage the audience.\n\n* **\ud83d\udce7 Send Follow-Up Engagement Email**\n If the condition is true, this node sends a **personalized follow-up email** automatically.\n For example: \u201cHey, you opened but didn\u2019t click \u2014 here\u2019s your special offer!\u201d\n\n* **\ud83d\udeab Skip \u2014 No Action Needed**\n If the condition is **false** (e.g. CTR is healthy), do nothing. The workflow ends safely.\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "4502ee4c-219e-4495-b4ff-c8b3beec55e8",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1560,
-920
],
"parameters": {
"color": 7,
"width": 380,
"height": 240,
"content": "## I\u2019ll receive a tiny commission if you join Bright Data through this link\u2014thanks for fueling more free content!\n\n### https://get.brightdata.com/1tndi4600b25"
},
"typeVersion": 1
},
{
"id": "07751162-2ade-4591-93bc-a3dc2414553d",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1980,
-1180
],
"parameters": {
"color": 4,
"width": 1300,
"height": 320,
"content": "=======================================\n WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n - YouTube: https://www.youtube.com/@YaronBeen/videos\n - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
},
"typeVersion": 1
},
{
"id": "6c9e1f76-b6d0-4915-8f05-ada92abfcd89",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1980,
-840
],
"parameters": {
"color": 4,
"width": 1289,
"height": 3118,
"content": "# Dynamic Email Re-Engagement Automation\n---\n\n## \ud83c\udfaf **\ud83d\udd39 SECTION 1: Schedule & Prepare Inputs**\n\n### \u2705 **Nodes in this Section**\n\n| Node | Name |\n| ---- | -------------------------------- |\n| \u23f0 | **Daily Campaign Check Trigger** |\n| \u270f\ufe0f | **Set Campaign Input Fields** |\n\n---\n\n### \ud83d\udca1 **What Happens Here**\n\n* **\u23f0 Daily Campaign Check Trigger:**\n This node automatically **starts the workflow on a schedule** \u2014 for example, every morning at 9\u202fAM.\n It makes sure you **don\u2019t have to run it manually** every time. The goal is to check your email campaign performance **regularly and consistently**.\n\n* **\u270f\ufe0f Set Campaign Input Fields:**\n This node **defines any input values** that your Agent needs.\n For example:\n\n * Campaign ID\n * ESP URL\n * Date range\n * Any dynamic variables\n\n It acts like **filling in a form** that the rest of the workflow will use.\n You can **edit it easily** without changing the whole workflow.\n\n---\n\n### \ud83c\udfaf **Why It\u2019s Important**\n\n\u2705 Automates the whole thing on autopilot.\n\u2705 Ensures the Agent always has the **right data**.\n\u2705 Makes the workflow easy to maintain for non-tech users \u2014 just change a value in **Edit Fields**, done!\n\n---\n\n---\n\n## \ud83e\udd16 **\ud83d\udd39 SECTION 2: Scrape & Analyze with AI Agent**\n\n### \u2705 **Nodes in this Section**\n\n| Node | Name |\n| ---- | ------------------------------------------------ |\n| \ud83e\udd16 | **Agent: Scrape & Analyze Campaign Performance** |\n| \ud83e\udde0 | **LLM: Summarize & Format** |\n| \ud83c\udf10 | **Bright Data MCP: Scrape Report** |\n| \ud83d\uddc2\ufe0f | **Parse Scrape Output** |\n\n---\n\n### \ud83d\udca1 **What Happens Here**\n\n* **\ud83e\udd16 Agent: Scrape & Analyze Campaign Performance**\n This is your **AI Agent** \u2014 it does the smart part:\n\n * Talks to the **Bright Data MCP Tool** to scrape the ESP report page.\n * Uses an **LLM** (OpenAI Chat Model) to process the scraped data.\n * Passes the result to an **Output Parser** to turn messy text into clean, structured data.\n\n* **\ud83c\udf10 Bright Data MCP: Scrape Report**\n Bright Data logs in, navigates to your campaign report page, and **scrapes live open/click numbers**.\n\n* **\ud83e\udde0 LLM: Summarize & Format**\n The Chat Model turns raw scraped info into easy-to-read Markdown or JSON.\n This is like having a mini data analyst!\n\n* **\ud83d\uddc2\ufe0f Parse Scrape Output**\n This node extracts the final numbers (open rate, CTR, bounces) so the logic can understand them.\n\n---\n\n### \ud83c\udfaf **Why It\u2019s Important**\n\n\u2705 You don\u2019t have to log in manually to get reports.\n\u2705 The AI cleans up messy scraped data.\n\u2705 Makes follow-up decisions possible without human effort.\n\u2705 Works for **any ESP** \u2014 if the layout changes, just adjust the scraper.\n\n---\n\n---\n\n## \ud83d\udcc8 **\ud83d\udd39 SECTION 3: Decide & Act Automatically**\n\n### \u2705 **Nodes in this Section**\n\n| Node | Name |\n| ---- | ----------------------------------- |\n| \ud83d\udd0e | **IF: Open \u226530% & CTR <10%?** |\n| \ud83d\udce7 | **Send Follow-Up Engagement Email** |\n| \ud83d\udeab | **Skip \u2014 No Action Needed** |\n\n---\n\n### \ud83d\udca1 **What Happens Here**\n\n* **\ud83d\udd0e IF: Open \u226530% & CTR <10%?**\n This node checks:\n\n * Is the open rate good? (\u226530%)\n * But is the click-through rate low? (<10%)\n If **true**, it triggers follow-up to re-engage the audience.\n\n* **\ud83d\udce7 Send Follow-Up Engagement Email**\n If the condition is true, this node sends a **personalized follow-up email** automatically.\n For example: \u201cHey, you opened but didn\u2019t click \u2014 here\u2019s your special offer!\u201d\n\n* **\ud83d\udeab Skip \u2014 No Action Needed**\n If the condition is **false** (e.g. CTR is healthy), do nothing. The workflow ends safely.\n\n---\n\n### \ud83c\udfaf **Why It\u2019s Important**\n\n\u2705 Takes action **only when needed**, saving time.\n\u2705 Boosts click rates without extra manual work.\n\u2705 Protects your audience from spam by not sending unnecessary follow-ups.\n\n---\n\n## \ud83c\udf1f **\u2728 Why This Whole Flow is Powerful**\n\n* Runs daily \u2014 **no manual checks**.\n* Scrapes live data \u2014 **no API? No problem!**\n* Uses AI to process messy data \u2014 **no coding required!**\n* Makes smart decisions \u2014 **no human micromanagement**.\n* Sends the right email to the right audience at the right time \u2014 **better engagement, better ROI!**\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "237aeaf4-64f1-411b-a013-9209f46fa320",
"name": "Auto-fixing Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserAutofixing",
"position": [
840,
300
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "f86d1724-c0c3-4820-9699-44f2d4101054",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
800,
560
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "41e646ea-effa-40c0-8513-7fecd83762ee",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
980,
560
],
"parameters": {
"jsonSchemaExample": "{\n \"campaign_name\": \"Summer Promo Blast\",\n \"campaign_id\": \"123456789\",\n \"date_sent\": \"2025-06-29\",\n \"unique_opens\": 1230,\n \"total_opens\": 1590,\n \"open_rate\": 47,\n \"unique_clicks\": 530,\n \"total_clicks\": 670,\n \"ctr\": 20,\n \"soft_bounces\": 25,\n \"hard_bounces\": 10,\n \"bounce_rate\": 1.8,\n \"unsubscribed\": 15,\n \"unsubscribe_rate\": 0.6\n}\n"
},
"typeVersion": 1.2
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "226f422b-33c6-4834-8653-5f7a501d9955",
"connections": {
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Auto-fixing Output Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Auto-fixing Output Parser",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Auto-fixing Output Parser": {
"ai_outputParser": [
[
{
"node": "\ud83e\udd16 Agent: Scrape & Analyze Campaign Performance",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"\ud83e\udde0 LLM: Summarize & Format": {
"ai_languageModel": [
[
{
"node": "\ud83e\udd16 Agent: Scrape & Analyze Campaign Performance",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"\u23f0 Daily Campaign Check Trigger": {
"main": [
[
{
"node": "\u270f\ufe0f Set Campaign Input Fields",
"type": "main",
"index": 0
}
]
]
},
"\u270f\ufe0f Set Campaign Input Fields": {
"main": [
[
{
"node": "\ud83e\udd16 Agent: Scrape & Analyze Campaign Performance",
"type": "main",
"index": 0
}
]
]
},
"\ud83d\udd0e IF: Open \u226530% & CTR <10%?": {
"main": [
[
{
"node": "\ud83d\udce7 Send Follow-Up Engagement Email",
"type": "main",
"index": 0
}
],
[
{
"node": "\ud83d\udeab Skip \u2014 No Action Needed",
"type": "main",
"index": 0
}
]
]
},
"\ud83c\udf10 Bright Data MCP: Scrape Report": {
"ai_tool": [
[
{
"node": "\ud83e\udd16 Agent: Scrape & Analyze Campaign Performance",
"type": "ai_tool",
"index": 0
}
]
]
},
"\ud83e\udd16 Agent: Scrape & Analyze Campaign Performance": {
"main": [
[
{
"node": "\ud83d\udd0e IF: Open \u226530% & CTR <10%?",
"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.
gmailOAuth2mcpClientApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Source: https://n8n.io/workflows/5953/ — 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.
Note: This template is for self-hosted n8n instances only
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
This workflow automatically monitors social media advertising performance across platforms to track campaign effectiveness and ROI. It saves you time by eliminating the need to manually check multiple
This workflow automatically monitors competitor pricing across multiple products and services to track market positioning and pricing strategies. It saves you time by eliminating the need to manually