AutomationFlowsAI & RAG › Send Behavior-based Marketing Emails with Openai Gpt-4o and Sendgrid

Send Behavior-based Marketing Emails with Openai Gpt-4o and Sendgrid

ByOneclick AI Squad @oneclick-ai on n8n.io

This intelligent workflow automates the entire lifecycle of behavior-driven email marketing — from real-time event capture to hyper-personalized campaign delivery. By continuously tracking user actions on your website and across email interactions, the system identifies…

Webhook trigger★★★★☆ complexityAI-powered19 nodesAgentHTTP RequestOpenAI Chat
AI & RAG Trigger: Webhook Nodes: 19 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #15615 — we link there as the canonical source.

This workflow follows the Agent → 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 →

Download .json
{
  "id": "FXoZ1pea8oPRdkwt",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Behavior-Based Email Marketing Automation",
  "tags": [],
  "nodes": [
    {
      "id": "938f1853-3177-4516-baa0-6e692331e664",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        240,
        -32
      ],
      "parameters": {
        "width": 980,
        "height": 696,
        "content": "## Behavior-Based Email Marketing Automation\n\nThis workflow tracks user website behaviors and email engagements, segments users into behavioral cohorts, generates highly personalized email campaigns, and sends them with smart timing and tracking.\n\n### Who\u2019s it for\n\u2022 E-commerce & SaaS marketers\n\u2022 Growth teams running behavioral campaigns\n\u2022 Companies with high website traffic and email lists\n\n### How it works\n1. Captures website events & email interactions via webhooks\n2. Enriches & segments user behavior\n3. Generates personalized email content\n4. Sends targeted campaigns with optimal timing\n5. Logs outcomes and updates user profiles\n\n### Setup\n1. Import workflow\n2. Configure credentials (Webhooks, SendGrid/Mailgun, Google Sheets/Airtable, AI)\n3. Update segmentation rules & email templates\n4. Connect tracking pixels & UTM parameters\n\n### Requirements\n\u2022 Website event webhooks (GA4, custom pixel, Segment.com)\n\u2022 Email service with webhook support\n\u2022 User database / CRM sync\n\u2022 AI model for personalization"
      },
      "typeVersion": 1
    },
    {
      "id": "af37238b-8a61-4af2-a4c3-184411465ea6",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1312,
        16
      ],
      "parameters": {
        "color": 4,
        "width": 884,
        "height": 520,
        "content": "## 1. Event Triggers & Intake"
      },
      "typeVersion": 1
    },
    {
      "id": "f34c8da4-dbca-4090-9ac0-f6a9dca69933",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2288,
        -32
      ],
      "parameters": {
        "color": 3,
        "width": 908,
        "height": 680,
        "content": "## 2. Behavior Analysis & Segmentation"
      },
      "typeVersion": 1
    },
    {
      "id": "9289ac00-5a05-4275-baac-c9e7d8ed6b68",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3280,
        16
      ],
      "parameters": {
        "color": 5,
        "width": 588,
        "height": 640,
        "content": "## 3. Personalization & Campaign Execution"
      },
      "typeVersion": 1
    },
    {
      "id": "d8bf51ee-d607-4c95-adcd-3d836b3aba81",
      "name": "Webhook - Website & Email Events",
      "type": "n8n-nodes-base.webhook",
      "position": [
        1376,
        128
      ],
      "parameters": {
        "path": "behavior-event-webhook",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 1.1
    },
    {
      "id": "190ca807-0885-4f66-9293-b898ba5b683a",
      "name": "Daily Behavior Digest",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        1376,
        320
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "*/15 * * * *"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8bd9a0c2-c084-4b06-b03c-ffbf6e257d4b",
      "name": "Prepare Event Context",
      "type": "n8n-nodes-base.set",
      "position": [
        1632,
        224
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "name": "userId",
              "type": "string",
              "value": "={{ $json.userId || $json.body?.userId || $json.email }}"
            },
            {
              "name": "eventType",
              "type": "string",
              "value": "={{ $json.event || $json.body?.event }}"
            },
            {
              "name": "pageUrl",
              "type": "string",
              "value": "={{ $json.pageUrl || $json.body?.pageUrl }}"
            },
            {
              "name": "productViewed",
              "type": "string",
              "value": "={{ $json.product || $json.body?.product }}"
            },
            {
              "name": "emailEngagement",
              "type": "string",
              "value": "={{ $json.action || $json.body?.action }}"
            },
            {
              "name": "timestamp",
              "type": "string",
              "value": "={{ new Date().toISOString() }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "29fdf0a7-c31c-4640-b3d0-f4bb94f52f33",
      "name": "Python - Segment Behavior",
      "type": "n8n-nodes-base.code",
      "position": [
        2016,
        224
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "language": "python"
      },
      "typeVersion": 2
    },
    {
      "id": "e64a29ed-fe9d-4332-8835-1bde2932b7ad",
      "name": "Filter High Intent",
      "type": "n8n-nodes-base.filter",
      "position": [
        2336,
        128
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "conditions": [
            {
              "value1": "={{ $json.segment }}",
              "value2": "high_intent",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "b91c8550-7ff7-4d51-a425-6d1787ceadc9",
      "name": "Filter Abandoned Cart",
      "type": "n8n-nodes-base.filter",
      "position": [
        2336,
        288
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "conditions": [
            {
              "value1": "={{ $json.segment }}",
              "value2": "abandoned_cart",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "d85911f9-33cc-4034-8a63-e82b96ba4d20",
      "name": "Filter Re-engagement",
      "type": "n8n-nodes-base.filter",
      "position": [
        2336,
        464
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "conditions": [
            {
              "value1": "={{ $json.segment }}",
              "value2": "re_engagement",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "3e1fd1b1-b7e1-4681-90b5-4f92a2ef9ad8",
      "name": "Wait - Rate Limit",
      "type": "n8n-nodes-base.wait",
      "position": [
        2576,
        224
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "cbcd1da7-17ee-4792-a3bb-d4ed65854843",
      "name": "AI - Generate Personalized Email",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2752,
        224
      ],
      "parameters": {
        "text": "=You are an expert email marketing copywriter. Create a highly personalized, persuasive email based on the user's behavior.\n\nUser Data:\n{{ $json.userProfile || 'Name: {{ $json.userId }}' }}\n\nBehavior:\nEvent: {{ $json.eventType }}\nProduct: {{ $json.productViewed }}\nPage: {{ $json.pageUrl }}\n\nSegment: {{ $json.segment }}\n\nWrite a compelling subject line and email body under 180 words. Use friendly, brand-aligned tone. Include clear CTA.",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 1.6
    },
    {
      "id": "437c03e5-8d66-4400-967e-f11ae167acef",
      "name": "JS - Format Campaign",
      "type": "n8n-nodes-base.code",
      "position": [
        3056,
        224
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const item = $input.item.json;\nreturn {\n  json: {\n    ...item,\n    subject: item.subject || `Great to see you interested in ${item.productViewed || 'our products'}!`,\n    emailBody: item.response || item.text || 'Default personalized content...',\n    campaignType: item.segment,\n    sendTime: new Date(Date.now() + 3600000).toISOString()\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "b94f327e-55f5-4982-b931-f9cf1c31aca2",
      "name": "Wait - Send Buffer",
      "type": "n8n-nodes-base.wait",
      "position": [
        3328,
        224
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "3bbb3349-db1a-4b6c-96d6-b03b0b77c864",
      "name": "Send Personalized Email",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3568,
        128
      ],
      "parameters": {
        "url": "https://api.sendgrid.com/v3/mail/send",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"personalizations\": [{\n    \"to\": [{\"email\": \"{{ $json.userId }}\"}],\n    \"dynamic_template_data\": {\n      \"subject\": \"{{ $json.subject }}\",\n      \"body\": \"{{ $json.emailBody }}\"\n    }\n  }],\n  \"from\": {\"email\": \"marketing@yourbrand.com\", \"name\": \"Your Brand\"},\n  \"template_id\": \"d-1234567890abcdef\"\n}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.2
    },
    {
      "id": "d49d4e72-828c-4aa6-b289-6d4f7b5ecb39",
      "name": "Log Campaign to Sheet",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3568,
        336
      ],
      "parameters": {
        "url": "https://sheets.googleapis.com/v4/spreadsheets/YOUR_CAMPAIGN_SHEET_ID/values/Behaviors!A1:append?valueInputOption=USER_ENTERED",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"values\": [[\"{{ $json.timestamp }}\", \"{{ $json.userId }}\", \"{{ $json.eventType }}\", \"{{ $json.segment }}\", \"Sent\", \"{{ $json.campaignType }}\", \"{{ new Date().toISOString() }}\"]]\n}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.2
    },
    {
      "id": "92bdb58b-c207-4318-8052-b591067dedfe",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        2656,
        416
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "dc0a5821-f329-45fc-af64-17abe4b40e6d",
      "name": "Wait For Result",
      "type": "n8n-nodes-base.wait",
      "position": [
        1840,
        224
      ],
      "parameters": {},
      "typeVersion": 1.1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "560944e0-f20f-4b87-adb1-844b281a3e63",
  "connections": {
    "Wait For Result": {
      "main": [
        [
          {
            "node": "Python - Segment Behavior",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI - Generate Personalized Email",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Wait - Rate Limit": {
      "main": [
        [
          {
            "node": "AI - Generate Personalized Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter High Intent": {
      "main": [
        [
          {
            "node": "Wait - Rate Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait - Send Buffer": {
      "main": [
        [
          {
            "node": "Send Personalized Email",
            "type": "main",
            "index": 0
          },
          {
            "node": "Log Campaign to Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Re-engagement": {
      "main": [
        [
          {
            "node": "Wait - Rate Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "JS - Format Campaign": {
      "main": [
        [
          {
            "node": "Wait - Send Buffer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Behavior Digest": {
      "main": [
        [
          {
            "node": "Prepare Event Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Abandoned Cart": {
      "main": [
        [
          {
            "node": "Wait - Rate Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Event Context": {
      "main": [
        [
          {
            "node": "Wait For Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Python - Segment Behavior": {
      "main": [
        [
          {
            "node": "Filter High Intent",
            "type": "main",
            "index": 0
          },
          {
            "node": "Filter Abandoned Cart",
            "type": "main",
            "index": 0
          },
          {
            "node": "Filter Re-engagement",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI - Generate Personalized Email": {
      "main": [
        [
          {
            "node": "JS - Format Campaign",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook - Website & Email Events": {
      "main": [
        [
          {
            "node": "Prepare Event Context",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This intelligent workflow automates the entire lifecycle of behavior-driven email marketing — from real-time event capture to hyper-personalized campaign delivery. By continuously tracking user actions on your website and across email interactions, the system identifies…

Source: https://n8n.io/workflows/15615/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

⏺ 🚀 How it works

Agent, Anthropic Chat, Output Parser Structured +6
AI & RAG

L&D_AgentsAI_ATIVO. Uses httpRequest, agent, googleCalendarTool, toolSerpApi. Webhook trigger; 93 nodes.

HTTP Request, Agent, Google Calendar Tool +9
AI & RAG

CLINICAINTEGRAL_secretary. Uses postgres, mcpClientTool, googleDriveTool, toolWorkflow. Webhook trigger; 89 nodes.

Postgres, Mcp Client Tool, Google Drive Tool +14
AI & RAG

Remi 1.1. Uses lmChatOpenAi, memoryPostgresChat, openAi, postgres. Webhook trigger; 89 nodes.

OpenAI Chat, Memory Postgres Chat, OpenAI +7
AI & RAG

This n8n workflow orchestrates a powerful suite of AI Agents and automations to manage and optimize various aspects of an e-commerce operation, particularly for platforms like Shopify. It leverages La

Google Sheets, HTTP Request, Slack +10