AutomationFlowsMarketing & Ads › Website Lead Management: Send Contact Form Submissions to Whatsapp & Google…

Website Lead Management: Send Contact Form Submissions to Whatsapp & Google…

Original n8n title: Website Lead Management: Send Contact Form Submissions to Whatsapp & Google Sheets

ByRoshan Ramani @rawsun007 on n8n.io

Business owners, marketers, and web developers who want to instantly respond to website contact form submissions and maintain organized lead records without manual monitoring.

Webhook trigger★★★★☆ complexity5 nodesWhatsAppGoogle Sheets
Marketing & Ads Trigger: Webhook Nodes: 5 Complexity: ★★★★☆ Added:

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

This workflow follows the Google Sheets → WhatsApp 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": false
  },
  "nodes": [
    {
      "id": "5b107486-adfa-4430-be2d-2df453153abe",
      "name": "Contact Form Trigger",
      "type": "n8n-nodes-base.webhook",
      "position": [
        0,
        96
      ],
      "parameters": {
        "path": "get_data",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "dc65e52c-41f6-4335-8b76-2cfb72406a1b",
      "name": "Format Lead Data",
      "type": "n8n-nodes-base.code",
      "position": [
        224,
        96
      ],
      "parameters": {
        "jsCode": "// Process all incoming webhook items\nconst items = $input.all().map(item => {\n  const data = item.json.body || item.json || {};\n\n  // Helper function to clean and format values\n  const clean = (val) => (val || \"\").toString().trim() || \"N/A\";\n\n  const name = clean(data.name);\n  const email = clean(data.email);\n  const phone = clean(data.phone);\n  const service = clean(data.service);\n  const message = clean(data.message);\n\n  // Add timestamp for context\n  const receivedAt = new Date().toLocaleString(\"en-IN\", {\n    timeZone: \"Asia/Kolkata\"\n  });\n\n  // Format the WhatsApp message\n  const formattedText =\n    `\ud83d\udce9 *New Contact Form Submission*\\n` +\n    `\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\\n` +\n    `\ud83d\udc64 *Name:* ${name}\\n` +\n    `\ud83d\udce7 *Email:* ${email}\\n` +\n    `\ud83d\udcf1 *Phone:* ${phone}\\n` +\n    `\ud83d\udee0 *Service:* ${service}\\n` +\n    `\ud83d\udcac *Message:* ${message}\\n` +\n    `\ud83d\udd52 *Received At:* ${receivedAt}`;\n\n  return {\n    json: {\n      name,\n      email,\n      phone,\n      service,\n      message,\n      receivedAt,\n      formattedText\n    }\n  };\n});\n\nreturn items;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "c4bc9fb0-897d-4945-abfa-01d48aa0c593",
      "name": "WhatsApp Alert",
      "type": "n8n-nodes-base.whatsApp",
      "position": [
        448,
        0
      ],
      "parameters": {
        "textBody": "={{ $json.formattedText }}",
        "operation": "send",
        "phoneNumberId": "YOUR_PHONE_NUMBER_ID",
        "additionalFields": {},
        "recipientPhoneNumber": "YOUR_MOBILE_NUMBER"
      },
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a5f08d80-3448-4f2f-b811-4f2e01c6e2aa",
      "name": "Log to Database",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        448,
        192
      ],
      "parameters": {
        "columns": {
          "value": {
            "date": "={{ $json.receivedAt }}",
            "name": "={{ $json.name }}",
            "email": "={{ $json.email }}",
            "phone": "={{ $json.phone }}",
            "message": "={{ $json.message }}",
            "service": "={{ $json.service }}"
          },
          "schema": [
            {
              "id": "date",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "phone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "service",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "service",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "message",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "date"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_SPREADSHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit",
          "cachedResultName": "Lead Database"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "939dac5d-3cd0-4716-8185-f0bfd125e9ea",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -624,
        -336
      ],
      "parameters": {
        "width": 1392,
        "height": 864,
        "content": "## \ud83c\udfaf Website Lead Management: Send Contact Form Submissions to WhatsApp & Google Sheets\n\n### **Purpose:** Convert website inquiries into instant alerts + organized data  \n### **Flow:** Website Form \u2192 Clean Data \u2192 WhatsApp Alert + Google Sheets Log  \n### **Result:** Never miss a lead, always have organized records\n\n---\n\n## \ud83d\udce5 CONTACT FORM TRIGGER\n* Receives POST requests from website contact forms\n* Path: */get_data*\n* Copy webhook URL and add to your website form action\n* Triggers whenever someone submits the contact form\n\n## \ud83d\udd27 FORMAT LEAD DATA\n* Cleans incoming form data (handles empty fields)\n* Formats WhatsApp message with **emojis and structure**\n* Adds *Indian timezone timestamp*\n* Prepares data for both WhatsApp and Google Sheets\n\n## \ud83d\udcf1 WHATSAPP ALERT\n* Sends formatted message to your WhatsApp\n* Phone: **YOUR_MOBILE_NUMBER** *(update with your number)*\n* Phone Number ID: **YOUR_PHONE_NUMBER_ID** *(from WhatsApp Business API)*\n* Delivers lead details immediately when form is submitted\n\n## \ud83d\udcca LOG TO DATABASE\n* Saves all form submissions to Google Sheets\n* Document: **YOUR_SPREADSHEET_ID** *(replace with your sheet ID)*\n* Required columns: date, name, email, phone, service, message\n* Creates permanent record for follow-up and analysis\n\n## \ud83d\udee0\ufe0f SETUP REQUIREMENTS\n* **Google Sheets:** Create sheet with columns: date, name, email, phone, service, message\n* **WhatsApp API:** Business API credentials and phone number ID\n* **Website Form:** POST fields: name, email, phone, service, message"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Format Lead Data": {
      "main": [
        [
          {
            "node": "WhatsApp Alert",
            "type": "main",
            "index": 0
          },
          {
            "node": "Log to Database",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Contact Form Trigger": {
      "main": [
        [
          {
            "node": "Format Lead Data",
            "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

Business owners, marketers, and web developers who want to instantly respond to website contact form submissions and maintain organized lead records without manual monitoring.

Source: https://n8n.io/workflows/7424/ — 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

Ad agencies needing automated lead capture. Sales teams fighting fraud and scoring leads. B2B SaaS companies nurturing prospects. Marketing pros boosting sales pipelines. Captures leads via Webhook fr

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

This workflow captures real estate property inquiries via a webhook, validates and normalizes lead details, upserts the lead into Google Sheets, sends an auto-reply through Gmail, and notifies your te

Google Sheets, Gmail, Slack +1
Marketing & Ads

This workflow captures real estate property inquiries via a webhook, saves the lead to Google Sheets, sends an auto-reply email through Gmail, and posts a notification to a Slack channel before return

Google Sheets, Gmail, Slack +1
Marketing & Ads

Capture inbound leads via webhook, validate and sanitize the data, deduplicate against Google Sheets, and store only clean leads ready to feed an AI-powered email/SMS nurture sequence. Webhook receive

Google Sheets
Marketing & Ads

This workflow captures shoe-shopping leads via a Tally form webhook, matches products from Google Sheets, uses a local Llama model (Ollama HTTP API) to score the lead and draft recommendations, then e

Google Sheets, HTTP Request, Gmail +1