AutomationFlows β€Ί Marketing & Ads β€Ί Automate Lead Management From Website Forms to Google Sheets and Slack

Automate Lead Management From Website Forms to Google Sheets and Slack

ByDavid Olusola @dae221βœ“ on n8n.io

Automates lead management by: πŸ”— Webhook Trigger: Captures form data from your website. 🧼 Code Node: Standardizes the data format. πŸ“„ Google Sheets: Appends a new row with lead info. πŸ”” Slack Notification: Alerts your team instantly. In n8n, go to Workflows β†’ + New β†’ Import from…

Webhook triggerβ˜…β˜…β˜…β˜…β˜† complexity5 nodesGoogle SheetsSlack
Marketing & Ads Trigger: Webhook Nodes: 5 Complexity: β˜…β˜…β˜…β˜…β˜† Added:

This workflow corresponds to n8n.io template #6723 β€” we link there as the canonical source.

This workflow follows the Google Sheets β†’ Slack 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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "4cdc8f9c-6197-437d-92c3-b12100a790d9",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        -208,
        128
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\n\nconst updatedItems = items.map((item) => {\n \u00a0const { name, email, businessName, message, timeline, budget } =\n \u00a0 \u00a0item.json.body;\n \u00a0return {\n \u00a0 \u00a0name,\n \u00a0 \u00a0email,\n \u00a0 \u00a0businessName,\n \u00a0 \u00a0\"project intent/need\": message,\n \u00a0 \u00a0timeline,\n \u00a0 \u00a0budget,\n \u00a0};\n});\n\nreturn updatedItems;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "b64a3c66-72a0-4661-84c5-27eab0af3105",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        0,
        128
      ],
      "parameters": {
        "columns": {
          "value": {
            "full name": "={{ $json.name }}",
            "Budget Range": "={{ $json.budget }}",
            "Business name": "={{ $json.businessName }}",
            "Email Address": "={{ $json.email }}",
            "Project Timeline": "={{ $json.timeline }}",
            "Project Intent/Needs": "={{ $json['project intent/need'] }}"
          },
          "schema": [
            {
              "id": "full name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "full name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Address",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email Address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Project Intent/Needs",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Project Intent/Needs",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Project Timeline",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Project Timeline",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Budget Range",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Budget Range",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Business name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Business name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Preferred Communication Channel",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Preferred Communication Channel",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "How they heard about DAEX AI",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "How they heard about DAEX AI",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone Number",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Phone Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1OBxt6TX3edgxiSYnsULCuSM5OL7GYlA6W3DjNYBEpfo/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1OBxt6TX3edgxiSYnsULCuSM5OL7GYlA6W3DjNYBEpfo",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1OBxt6TX3edgxiSYnsULCuSM5OL7GYlA6W3DjNYBEpfo/edit?usp=drivesdk",
          "cachedResultName": "client intake form"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "d1adffe8-b7fd-46e7-aa37-ef0d910dda0d",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -416,
        128
      ],
      "parameters": {
        "path": "34e9fb3f-f6bd-4a44-bb58-6fe58ffe4a78",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "4dbd211d-9db5-4567-b092-0111e9512e03",
      "name": "Send a message",
      "type": "n8n-nodes-base.slack",
      "message": "*New Website Lead Alert!* :zap:\n\nA new project inquiry has been received and logged to the Google Sheet.\n\n*Details:*\n- *Name:* {{ $('Code').item.json.name }}\n- *Email:* {{ $('Code').item.json.email }}\n- *Business Name:* {{ $('Code').item.json.businessName || 'N/A' }}\n- *Project Intent/Need:* {{ $('Code').item.json['project intent/need'] }}\n- *Timeline:* {{ $('Code').item.json.timeline || 'Not specified' }}\n- *Budget:* {{ $('Code').item.json.budget || 'Not specified' }}\n\n:clipboard: *Google Sheet Link:* https://docs.google.com/spreadsheets/d/1OBxt6TX3edgxiSYnsULCuSM5OL7GYlA6W3DjNYBEpfo/edit#gid=0\n:alarm_clock: *Received At:* {{ new Date().toLocaleString() }}\n\n:point_right: *Action:* Please review the details in the Google Sheet and follow up with the lead as soon as possible!",
      "position": [
        208,
        128
      ],
      "parameters": {
        "text": "=*New Website Lead Alert!* :zap:\\n\\nA new project inquiry has been received and logged to the Google Sheet.\\n\\n*Details:*\\n- *Name:* {{ $('Code').item.json.name }}\\n- *Email:* {{ $('Code').item.json.email }}\\n- *Business Name:* {{ $('Code').item.json.businessName || 'N/A' }}\\n- *Project Intent/Need:* {{ $('Code').item.json['project intent/need'] }}\\n- *Timeline:* {{ $('Code').item.json.timeline || 'Not specified' }}\\n- *Budget:* {{ $('Code').item.json.budget || 'Not specified' }}\\n\\n:clipboard: *Google Sheet Link:* https://docs.google.com/spreadsheets/d/1OBxt6TX3edgxiSYnsULCuSM5OL7GYlA6W3DjNYBEpfo/edit#gid=0\\n:alarm_clock: *Received At:* {{ new Date().toLocaleString() }}\\n\\n:point_right: *Action:* Please review the details in the Google Sheet and follow up with the lead as soon as possible!\"     },     {",
        "user": {
          "__rl": true,
          "mode": "list",
          "value": "U08UNT9F5E2",
          "cachedResultName": "daevo_workforce"
        },
        "select": "user",
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "6696d004-c56f-4e9c-8f8e-9d5355561eb0",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -976,
        -368
      ],
      "parameters": {
        "color": 7,
        "width": 1056,
        "height": 896,
        "content": "Website Contact Form to Google Sheet & Slack Notification\n\nThis document provides a complete guide to setting up and configuring the n8n workflow that captures website contact form submissions, logs them to a Google Sheet, and sends real-time notifications to Slack.\n\n### Workflow Overview\n\nThis workflow automates lead management by:\n\n1. **Capturing Submissions:** A webhook or form trigger receives data from your website's contact form.\n\n2. **Transforming Data:** A Code node processes the incoming data into a clean, standardized format.\n\n3. **Logging to Google Sheet:** The processed data is appended as a new row in a designated Google Sheet, acting as your lead database.\n\n4. **Notifying Team on Slack:** A detailed alert message is sent to a specified Slack channel, ensuring immediate team awareness and prompt follow-up.\n\n### Step-by-Step Setup Guide\n\nFollow these steps to set up and activate your n8n workflow:\n\n#### 1. Import the Workflow\n\n* Copy the entire JSON content of your n8n workflow from the Canvas.\n\n* In your n8n instance, go to \"Workflows\" (left sidebar).\n\n* Click the \"New\" button (or \"+\" icon) and select \"Import from JSON.\"\n\n* Paste the copied JSON and click \"Import.\"\n\n#### 2. Configure Credentials\n\nBefore activating the workflow, you need to set up the necessary credentials for Google Sheets and Slack.\n\n* **Google Sheets Account:**\n\n  1. In n8n, go to \"Credentials\" (left sidebar).\n\n  2. Click \"New Credential\" and search for \"Google Sheets API.\"\n\n  3. Choose \"OAuth2\" authentication.\n\n  4. Follow the on-screen prompts to connect your Google Account and grant access to Google Sheets.\n\n  5. Once created, note down its ID (e.g., `b0RUCwZZREhRN85o`).\n\n* **Slack Account:**\n\n  1. In n8n, go to \"Credentials\" (left sidebar).\n\n  2. Click \"New Credential\" and search for \"Slack API.\"\n\n  3. Choose \"OAuth2\" authentication.\n\n  4. You will likely need to create a Slack App in your workspace (`api.slack.com/apps`).\n\n  5. Configure \"Bot Token Scopes\" (e.g., `chat:write`, `channels:read`).\n\n  6. Install the app to your workspace.\n\n  7. Follow the n8n authentication steps to connect your Slack workspace.\n\n  8. Once created, note down its ID (e.g., `rCOUwK3276xqTfQi`).\n\n#### 3. Prepare Your Google Sheet\n\nYou need a Google Sheet to store your form submissions.\n\n* **Create a New Google Sheet:** Go to Google Sheets and create a new spreadsheet.\n\n* **Name the Sheet:** Ensure the first sheet tab is named `Sheet1`.\n\n* **Add Column Headers:** In the first row of `Sheet1`, add the following column headers exactly as listed below:\n\n  * `Full Name`\n\n  * `Email Address`\n\n  * `Business Name`\n\n  * `Project Intent/Needs`\n\n  * `Project Timeline`\n\n  * `Budget Range`\n\n  * `Received At` (This column will automatically record the submission timestamp)\n\n#### 4. Configure Each Node in n8n\n\nNow, go back to your imported workflow in n8n and configure each node:\n\n* **Webhook1 (Webhook Trigger):**\n\n  * This node receives data from your website form.\n\n  * **Path:** `34e9fb3f-f6bd-4a44-bb58-6fe58ffe4a78` (This is unique to your workflow; do not change it unless you intend to generate a new webhook URL).\n\n  * After activating the workflow, you will get a \"Webhook URL\" from this node. This URL is what you'll use in your website's contact form submission settings (e.g., as the action URL for your HTML form, or in your form builder's webhook integration).\n\n* **Code (Code Node):**\n\n  * This node transforms the incoming webhook data into a standardized JSON format.\n\n  * No configuration is typically needed here unless your incoming form fields differ significantly from `name`, `email`, `businessName`, `message`, `timeline`, `budget`.\n\n  * The code maps `item.json.body` fields to a cleaner output:\n\n    ```\n    const items = $input.all();\n    const updatedItems = items.map((item) => {\n      const { name, email, businessName, message, timeline, budget } = item.json.body;\n      return {\n        name,\n        email,\n        businessName,\n        \"project intent/need\": message, // Renames 'message'\n        timeline,\n        budget,\n      };\n    });\n    return updatedItems;\n    \n    ```\n\n* **Google Sheets1 (Google Sheets Node):**\n\n  * **Operation:** `Append`\n\n  * **Credentials:** Select your \"Google Sheets Account\" credential (e.g., `b0RUCwZZREhRN85o`).\n\n  * **Spreadsheet ID:** Replace `1OBxt6TX3edgxiSYnsULCuSM5OL7GYlA6W3DjNYBEpfo` with *your actual Google Sheet ID*. You can find this in the URL of your Google Sheet.\n\n  * **Sheet Name:** `Sheet1` (or your chosen sheet name).\n\n  * **Columns Mapping:** Ensure the mapping is correct. It should look like this:\n\n    * `full name`: `={{ $json.name }}`\n\n    * `Email Address`: `={{ $json.email }}`\n\n    * `Project Intent/Needs`: `={{ $json['project intent/need'] }}`\n\n    * `Project Timeline`: `={{ $json.timeline }}`\n\n    * `Budget Range`: `={{ $json.budget }}`\n\n    * `Business name`: `={{ $json.businessName }}`\n\n    * `Received At`: `={{ new Date().toLocaleString() }}` (Manually add this mapping if not present, using the expression)\n\n* **Send a message (Slack Node):**\n\n  * **Operation:** `Send a message`\n\n  * **Credentials:** Select your \"Slack Account\" credential (e.g., `rCOUwK3276xqTfQi`).\n\n  * **Channel ID:** Replace `YOUR_SLACK_CHANNEL_ID` with the actual ID of the Slack channel where you want the alerts to appear (e.g., `C0123456789`). You can get this by right-clicking the channel in Slack and selecting \"Copy link\" - the ID is the last part of the URL.\n\n  * **Message:** This is the detailed alert message:\n\n    ```\n    *New Website Lead Alert!* :zap:\n    \n    A new project inquiry has been received and logged to the Google Sheet.\n    \n    *Details:*\n    - *Name:* {{ $('Code').item.json.name }}\n    - *Email:* {{ $('Code').item.json.email }}\n    - *Business Name:* {{ $('Code').item.json.businessName || 'N/A' }}\n    - *Project Intent/Need:* {{ $('Code').item.json['project intent/need'] }}\n    - *Timeline:* {{ $('Code').item.json.timeline || 'Not specified' }}\n    - *Budget:* {{ $('Code').item.json.budget || 'Not specified' }}\n    \n    :clipboard: *Google Sheet Link:* [https://docs.google.com/spreadsheets/d/1OBxt6TX3edgxiSYnsULCuSM5OL7GYlA6W3DjNYBEpfo/edit#gid=0](https://docs.google.com/spreadsheets/d/1OBxt6TX3edgxiSYnsULCuSM5OL7GYlA6W3DjNYBEpfo/edit#gid=0)\n    :alarm_clock: *Received At:* {{ new Date().toLocaleString() }}\n    \n    :point_right: *Action:* Please review the details in the Google Sheet and follow up with the lead as soon as possible!\n    \n    ```\n\n#### 5. Activate the Workflow\n\n* Once all credentials and node parameters are configured, click the \"Activate\" toggle in the top right corner of the n8n workflow editor.\n\n#### 6. Test the Workflow\n\n* Copy the \"Production Webhook URL\" from the \"Webhook1\" node.\n\n* Use a tool like Postman, Insomnia, or a simple HTML form on a test page to send a `POST` request to this URL with a JSON body containing your test data (e.g., `{\"name\": \"Test User\", \"email\": \"test@example.com\", \"businessName\": \"Test Co\", \"message\": \"I need automation!\", \"timeline\": \"ASAP\", \"budget\": \"$1000-$2000\"}`).\n\n* Alternatively, if you're integrating with an existing website form, submit a test entry through your website.\n\n* Verify that a new row appears in your Google Sheet and a message is posted in your designated Slack channel.\n\nThis comprehensive guide should help you and others set up this high-ROI automation efficiently"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Code": {
      "main": [
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets": {
      "main": [
        [
          {
            "node": "Send a message",
            "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

Automates lead management by: πŸ”— Webhook Trigger: Captures form data from your website. 🧼 Code Node: Standardizes the data format. πŸ“„ Google Sheets: Appends a new row with lead info. πŸ”” Slack Notification: Alerts your team instantly. In n8n, go to Workflows β†’ + New β†’ Import from…

Source: https://n8n.io/workflows/6723/ β€” original creator credit. Request a take-down β†’

More Marketing & Ads workflows β†’ Β· Browse all categories β†’

Related workflows

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

Marketing & Ads

This n8n workflow automates the generation of personalized marketing content for events, including emails, social media posts, and advertisements. Leveraging AI, it tailors content based on event deta

HTTP Request, Google Sheets, Email Send +1
Marketing & Ads

AI Lead Qualification & Follow-Up. Uses httpRequest, slack, googleSheets, gmail. Webhook trigger; 18 nodes.

HTTP Request, Slack, Google Sheets +2
Marketing & Ads

This workflow automates the entire lead management lifecycle, from initial capture and qualification to agent assignment and personalized nurturing, ensuring no lead is left behind and agents focus on

Google Sheets, Gmail, Slack
Marketing & Ads

Automated Social Media Lead Processing with AI Summaries, Slack Alerts & Jira Ticketing. Uses slack, jira, stickyNote, scheduleTrigger. Webhook trigger; 18 nodes.

Slack, Jira, Google Sheets +1
Marketing & Ads

AI Lead Scoring + Routing. Uses openAi, httpRequest, slack, googleSheets. Webhook trigger; 10 nodes.

OpenAI, HTTP Request, Slack +1