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

Instantly reach new leads on WhatsApp when they submit a form (Typeform, JotForm, Google Forms, or any webhook-enabled form) using MoltFlow (https://molt.waiflow.app). Leads are also logged to Google

HTTP Request, Google Sheets
Marketing & Ads

MELANO INC - Lead Capture. Uses supabase, whatsApp, httpRequest. Webhook trigger; 7 nodes.

Supabase, WhatsApp, HTTP Request
Marketing & Ads

Capture client inquiries from any webform and send them straight into Google Sheets — automatically. No code. No headaches.

Google Sheets
Marketing & Ads

Manual exporting or copying of leads and newsletter signups from web forms to spreadsheets is time-consuming, error-prone, and delays follow-ups or marketing activities. Traditional workflows can lose

Google Sheets