AutomationFlowsEmail & Gmail › Send Automatic Welcome Emails to New Kit Subscribers with Gmail and Slack

Send Automatic Welcome Emails to New Kit Subscribers with Gmail and Slack

ByZiad Karim @ziadkarim on n8n.io

Kit only automates welcome emails on paid plans. This workflow sends one within seconds of every confirmed subscriber, from your own Gmail or SMTP, then optionally tags them in Kit and pings Slack. Works on the free plan. Kit calls this workflow's webhook the moment a subscriber…

Webhook trigger★★★★☆ complexity12 nodesGmailHTTP Request
Email & Gmail Trigger: Webhook Nodes: 12 Complexity: ★★★★☆ Added:

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

This workflow follows the Gmail → 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": "KitWelcomeFree00001",
  "name": "Send automatic welcome emails to new newsletter subscribers (works on Kit's free plan)",
  "nodes": [
    {
      "id": "d7e8f9a0-0001-4c3b-8e22-cc0000000001",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1180,
        -260
      ],
      "parameters": {
        "width": 520,
        "height": 1360,
        "content": "## Send automatic welcome emails to new newsletter subscribers (works on Kit's free plan)\n\n### How it works\n\nAutomated welcome sequences are a paid feature on most email platforms \u2014 on Kit (ConvertKit) they start at $25/mo. This workflow restores the part that actually matters on the free plan: the moment someone confirms their subscription, Kit calls this workflow's webhook, and a personalised welcome email goes out within seconds from your own Gmail (or any SMTP server), so it lands in the inbox rather than the Promotions tab.\n\nTwo optional steps follow the email: tag the subscriber as `welcomed` in Kit so you can segment on it later, and post a line to Slack so you watch the list grow without opening a dashboard.\n\nA separate one-click branch registers the webhook with Kit for you \u2014 run it once and Kit calls your production URL for every new confirmed subscriber from then on.\n\n### Setup steps\n\nTakes \u224810 minutes. Works the same on n8n Cloud and self-hosted.\n\n- Open **Kit Subscriber Trigger** and replace `CHANGE-ME` in the webhook path with a long random string. Kit does not sign its webhooks, so the secret URL is the authentication \u2014 keep it private.\n- Connect your Gmail account in **Send Gmail Welcome Email** (one click on n8n Cloud) and rewrite the subject and body in your own voice. The subscriber's first name and email are available as `{{ $json.first_name }}` and `{{ $json.email }}`.\n- Create a *Header Auth* credential named `X-Kit-Api-Key` with your Kit API key (Kit \u2192 Settings \u2192 Developer) and select it in **Post Subscriber Tag to Kit** and **Register Kit Webhook via API**.\n- **Activate the workflow**, then open the **Register Kit Webhook via API** branch and click *Execute workflow* once. It subscribes your production URL to Kit's `subscriber.subscriber_activate` event \u2014 one click, done forever.\n- Test by subscribing to your own form with a spare address and confirming the email.\n\n### Customization\n\n- **Self-hosting n8n?** Swap the Gmail node for the *Send Email* (SMTP) node \u2014 any provider works, including your domain's SMTP or a Brevo/Mailjet free tier.\n- **Don't want the extras?** Delete **Post Subscriber Tag to Kit** and **Post New Subscriber to Slack**; the email path keeps working on its own.\n- **Tag ID** for the tagging node: Kit \u2192 Grow \u2192 Tags (the ID is in the URL), or `GET https://api.kit.com/v4/tags`.\n- **Want a multi-email sequence?** Duplicate the email node and put *Wait* nodes between the copies (day 2, day 5, \u2026) \u2014 a free-plan onboarding drip.\n- Using beehiiv, Mailchimp or Buttondown instead? Point the webhook at their equivalent subscriber-created event and adjust the field names in **Parse Subscriber Data**."
      },
      "typeVersion": 1
    },
    {
      "id": "d7e8f9a0-0009-4c3b-8e22-cc0000000009",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -600,
        -260
      ],
      "parameters": {
        "color": 7,
        "width": 500,
        "height": 400,
        "content": "## Receive subscriber event\n\nKit calls this secret webhook URL the moment a subscriber confirms. The next node pulls out the fields the email needs."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-03-2",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -64,
        -260
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 420,
        "content": "## Welcome and tag subscriber\n\nSends your welcome message from your own mailbox seconds after the subscriber confirms, then tags them as welcomed in Kit so you can segment on it later."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-03-3",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        472,
        -260
      ],
      "parameters": {
        "color": 7,
        "width": 260,
        "height": 420,
        "content": "## Notify team in Slack\n\nPosts a line to Slack so you watch the list grow without opening a dashboard. Optional \u2014 delete this node and the tagging node if you only want the email."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-03-4",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -580,
        320
      ],
      "parameters": {
        "color": 7,
        "width": 500,
        "height": 360,
        "content": "## Register Kit webhook\n\nActivate the workflow first, then execute this branch a single time. It tells Kit to call your production URL for every new confirmed subscriber."
      },
      "typeVersion": 1
    },
    {
      "id": "d7e8f9a0-0002-4c3b-8e22-cc0000000002",
      "name": "Kit Subscriber Trigger",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -521,
        -37.80000000000001
      ],
      "parameters": {
        "path": "kit-new-subscriber-CHANGE-ME-to-a-long-random-string",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "d7e8f9a0-0003-4c3b-8e22-cc0000000003",
      "name": "Parse Subscriber Data",
      "type": "n8n-nodes-base.code",
      "position": [
        -281,
        -37.80000000000001
      ],
      "parameters": {
        "jsCode": "// Kit posts { subscriber: { id, first_name, email_address, state, ... } }\nconst body = $input.first().json.body ?? $input.first().json;\nconst s = body.subscriber ?? {};\nif (!s.email_address) {\n  throw new Error('No subscriber in payload \u2014 was this called by Kit? Payload: ' + JSON.stringify(body).slice(0, 300));\n}\nreturn [{\n  json: {\n    subscriber_id: s.id ?? null,\n    email: s.email_address,\n    first_name: (s.first_name ?? '').trim(),\n    greeting: (s.first_name ?? '').trim() || 'there',\n  },\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "d7e8f9a0-0004-4c3b-8e22-cc0000000004",
      "name": "Send Gmail Welcome Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2,
        -37.80000000000001
      ],
      "parameters": {
        "sendTo": "={{ $json.email }}",
        "message": "=<p>Hey {{ $json.greeting }},</p><p>Thanks for subscribing \u2014 you're in!</p><p>Here's what to expect: one email a week, five minutes to read, no fluff. While you wait for the next issue, here are two favourites from the archive:</p><ul><li><a href=\"https://YOUR-SITE.example/best-issue\">A reader favourite</a></li><li><a href=\"https://YOUR-SITE.example/another-issue\">Another good one</a></li></ul><p>Hit reply anytime \u2014 replies land in my actual inbox.</p><p>\u2014 YOUR NAME</p>",
        "options": {},
        "subject": "Welcome aboard \ud83d\udc4b"
      },
      "typeVersion": 2.1
    },
    {
      "id": "d7e8f9a0-0005-4c3b-8e22-cc0000000005",
      "name": "Post Subscriber Tag to Kit",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        242,
        -37.80000000000001
      ],
      "parameters": {
        "url": "https://api.kit.com/v4/tags/REPLACE_WITH_TAG_ID/subscribers",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ JSON.stringify({ email_address: $('Parse Subscriber Data').item.json.email }) }}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "d7e8f9a0-0006-4c3b-8e22-cc0000000006",
      "name": "Post New Subscriber to Slack",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        552,
        -37.80000000000001
      ],
      "parameters": {
        "url": "https://hooks.slack.com/services/PASTE/YOUR/SLACK_WEBHOOK",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "=\ud83c\udf89 New subscriber: {{ $('Parse Subscriber Data').item.json.email }} \u2014 welcome email sent."
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d7e8f9a0-0007-4c3b-8e22-cc0000000007",
      "name": "Manual Execution Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -514,
        476.2
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "d7e8f9a0-0008-4c3b-8e22-cc0000000008",
      "name": "Register Kit Webhook via API",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -274,
        476.2
      ],
      "parameters": {
        "url": "https://api.kit.com/v4/webhooks",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ JSON.stringify({ target_url: 'PASTE_THE_PRODUCTION_URL_OF_THE_WEBHOOK_NODE_ABOVE', event: { name: 'subscriber.subscriber_activate' } }) }}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    }
  ],
  "settings": {
    "executionOrder": "v1"
  },
  "connections": {
    "Parse Subscriber Data": {
      "main": [
        [
          {
            "node": "Send Gmail Welcome Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Kit Subscriber Trigger": {
      "main": [
        [
          {
            "node": "Parse Subscriber Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Execution Trigger": {
      "main": [
        [
          {
            "node": "Register Kit Webhook via API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Gmail Welcome Email": {
      "main": [
        [
          {
            "node": "Post Subscriber Tag to Kit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post Subscriber Tag to Kit": {
      "main": [
        [
          {
            "node": "Post New Subscriber to Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

Kit only automates welcome emails on paid plans. This workflow sends one within seconds of every confirmed subscriber, from your own Gmail or SMTP, then optionally tags them in Kit and pings Slack. Works on the free plan. Kit calls this workflow's webhook the moment a subscriber…

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

More Email & Gmail workflows → · Browse all categories →

Related workflows

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

Email & Gmail

This workflow receives tax document PDFs from a Lovable form webhook, extracts and parses the Tax ID with Groq, validates and matches it against a Google Sheets “TaxID_Database,” logs results to Googl

Google Sheets, HTTP Request, Gmail
Email & Gmail

This workflow receives new signup events, enriches each contact with Twain (and optionally a LinkedIn lookup), drafts a personalized welcome email in Gmail, and posts review-ready previews to Slack, w

Slack, HTTP Request, Gmail +2
Email & Gmail

Receive orders via webhook with automatic payment verification, stock checking, inventory reservation, shipping label generation, confirmation emails, and Slack notifications.

HTTP Request, Gmail, Slack +1
Email & Gmail

OTP Verification System. Uses googleSheets, gmail. Webhook trigger; 23 nodes.

Google Sheets, Gmail
Email & Gmail

A comprehensive n8n workflow template for automating e-commerce return processes with fraud prevention and professional document generation. E-commerce businesses preventing fraudulent returns Custome

N8N Nodes Verifiemail, Stop And Error, N8N Nodes Htmlcsstopdf +2