WhatsApp + Google Sheets: shared reply queue that works
Your WhatsApp inbox was never meant to be a ticketing system. Messages pile up, two people reply to the same customer, and the “I’ll get back to them later” thread quietly becomes a lost lead.
Support leads feel it first, but a sales manager and a busy clinic owner end up dealing with the same mess. This WhatsApp Sheets automation gives you one shared reply queue, so nothing slips through and handoffs stop being guesswork.
Below, you’ll see how the workflow logs every incoming WhatsApp message, lets your team respond from Google Sheets, and sends replies automatically when they’re marked “Ready”.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: WhatsApp + Google Sheets: shared reply queue that works
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n3@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n5@{ icon: "mdi:database", form: "rounded", label: "Get new answers", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Reply to the user"]
n7@{ icon: "mdi:database", form: "rounded", label: "Update message status", pos: "b", h: 48 }
n8@{ icon: "mdi:cog", form: "rounded", label: "Wait 1 sec", pos: "b", h: 48 }
n8 --> n4
n5 --> n4
n4 --> n6
n3 --> n5
n6 --> n7
n7 --> n8
end
subgraph sg1["Get new entries Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Sent notification template"]
n10@{ icon: "mdi:play-circle", form: "rounded", label: "Get new entries", pos: "b", h: 48 }
n11@{ icon: "mdi:swap-horizontal", form: "rounded", label: "User consented for WA messag..", pos: "b", h: 48 }
n10 --> n11
n11 --> n0
end
subgraph sg2["WhatsApp Flow"]
direction LR
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>WhatsApp Trigger"]
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Is message?", pos: "b", h: 48 }
n9@{ icon: "mdi:database", form: "rounded", label: "New message from the user", pos: "b", h: 48 }
n2 --> n9
n1 --> n2
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n3,n10,n1 trigger
class n11,n2 decision
class n5,n7,n9 database
classDef customIcon fill:none,stroke:none
class n6,n0,n1 customIcon
The Problem: WhatsApp Replies Don’t Scale Across a Team
WhatsApp is fast, personal, and brutal when you’re handling it manually. One person can keep up… until they can’t. Then you add a second teammate and things get weird: replies get duplicated, important context lives in someone’s head, and customers follow up with “Hello??” because nobody knows who owns the thread. Meanwhile, you’re also trying to track consent, appointments, and outcomes, which means you’re copy-pasting chat snippets into a spreadsheet after the fact (when you remember).
It adds up fast. Here’s where it breaks down in real life:
- Messages get answered late because your “queue” is just a scrolling chat list.
- Handing off a conversation means screenshots, forwarding, and missing context.
- Reporting is painful because there’s no clean log of what came in and what went out.
- Following WhatsApp’s 24-hour messaging rules becomes risky when nobody can see the last user message time.
The Solution: A Shared Reply Queue Built on WhatsApp + Google Sheets
This workflow turns WhatsApp into a system your team can actually run. When a new message hits your WhatsApp Business number, n8n captures the text plus basic user data and logs it into Google Sheets as a new row. From there, your team replies inside the sheet, not inside personal inboxes. When someone fills in the ReplyText column and changes Status to “Ready,” n8n picks it up on a timed schedule, sends the message via the WhatsApp Business node, and then updates the sheet so it’s marked as sent. Clean history, clear ownership, and a queue that anyone can work.
The workflow also handles proactive messages. When a new Google Form submission lands in your sheet (or a connected trigger), it checks consent and sends an approved WhatsApp template notification, which keeps you compliant outside the 24-hour window.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your business gets about 40 WhatsApp messages a day. Manually logging even half of them into a sheet (name, number, message, time) can take 2 minutes each, so you’re already near an hour of admin work, plus the follow-ups and “did anyone reply?” checks. With this workflow, logging happens instantly, and replying is just filling in ReplyText and setting Status to Ready. In practice, the team spends time on the answer, not on the busywork, and the queue stays tidy without someone policing it.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- WhatsApp Business (Meta) to send and receive WhatsApp messages.
- Google Sheets for the shared reply queue and message log.
- Meta Access Token (get it from the Meta Developers Portal).
Skill level: Intermediate. You will connect Meta credentials, set a callback URL, and map a few Google Sheet columns.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Incoming WhatsApp messages trigger the workflow. When someone messages your WhatsApp Business number, the WhatsApp Trigger receives the event and passes the message details into n8n.
The workflow validates and logs the message. A quick check filters out noise and makes sure the payload has what you need. Then n8n writes the message text plus user info into Google Sheets, so your log becomes the source of truth.
Replies are sent from a timed “Ready” queue. On a schedule, n8n looks up rows where Status is “Ready,” loops through them in batches, and sends each ReplyText out through the WhatsApp Business node. A short wait helps prevent collisions and rate-limit headaches.
The sheet is updated so the queue stays clean. After sending, n8n marks the row as sent (or updates a status field), which means the same reply doesn’t go out twice.
You can easily modify the “Ready” status logic to fit your team, like adding an AssignedTo column or a priority flag based on message content. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Trigger Type
Set up the three triggers that start each branch: new form rows, inbound WhatsApp messages, and a scheduled polling cycle.
- Open Fetch New Form Rows and set Event to
rowAdded, and ensure Poll Times useseveryXminuteswithvalue5. - In Fetch New Form Rows, set Document ID to
[YOUR_ID]and Sheet Name toForm Responses 1. - Open Incoming WhatsApp Hook and confirm Updates includes
messages. - Open Timed Schedule Start and set the Interval to run every
minutes(as defined by the schedule rule). - Credential Required: Connect your
googleSheetsTriggerOAuth2Apicredentials in Fetch New Form Rows. - Credential Required: Connect your
whatsAppTriggerApicredentials in Incoming WhatsApp Hook.
Step 2: Connect Google Sheets
Configure the Sheets nodes that read and write WhatsApp message data and reply status.
- In Retrieve Ready Replies, set Document ID to
[YOUR_ID]and Sheet Name toWA-messages. - In Retrieve Ready Replies, add a filter where Lookup Column is
Statusand Lookup Value isReady. - In Log User Message, set Operation to
appendand map fields: UserName to{{ $json.contacts[0].profile.name }}, UserPhone to{{ $json.messages[0].from }}, UserMessage to{{ $json.messages[0].text.body }}, and Status toNew. - In Modify Reply Status, set Operation to
update, set Status toReplied, and map row_number to{{ $('Iterate Reply Batch').item.json.row_number }}. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials in Retrieve Ready Replies, Log User Message, and Modify Reply Status.
Step 3: Set Up Processing and Validation
Configure the logic nodes that validate inbound messages, consent, and batch processing.
- In Validate Incoming Message, set the condition to check that leftValue exists at
{{ $json.messages[0] }}. - In Check WA Consent, set the filter to require leftValue
{{ $json["I consent to receive WhatsApp notifications regarding my appointments"] }}equalsYes. - In Iterate Reply Batch, keep default batching options and ensure it connects from Retrieve Ready Replies and to Send User Reply on the second output.
- In Brief Delay, set Amount to
1to throttle reply cycles before returning to Iterate Reply Batch.
Step 4: Configure Output/Action Nodes
Set up WhatsApp sending actions and ensure the flow correctly routes to updates and logging.
- In Dispatch Template Notice, set Template to
test_appointment_button|en_USand Phone Number ID to=[YOUR_ID]. - In Dispatch Template Notice, set Recipient Phone Number to
{{ $json["Your mobile number"] }}and keep body parameters using expressions like{{ $json["Your name"] }}and{{ DateTime.fromFormat($json["Please pick a day and time of your appointment"], "M/d/yyyy HH:mm:ss").toLocaleString(DateTime.DATE_HUGE); }}. - In Send User Reply, set Operation to
send, Text Body to{{ $json.ReplyText }}, Phone Number ID to[YOUR_ID], and Recipient Phone Number to=+{{ $json.UserPhone }}. - Confirm the message logging path: Incoming WhatsApp Hook → Validate Incoming Message → Log User Message.
- Credential Required: Connect your
whatsAppApicredentials in Dispatch Template Notice and Send User Reply.
Step 5: Test and Activate Your Workflow
Validate each trigger path and confirm Sheets updates and WhatsApp messages before enabling production use.
- Click Execute Workflow and manually trigger Fetch New Form Rows by adding a new row with consent set to
Yesto confirm Dispatch Template Notice sends a template message. - Send a WhatsApp message to the connected number and verify Incoming WhatsApp Hook → Validate Incoming Message → Log User Message appends a row in
WA-messageswithStatusset toNew. - Mark a row’s Status as
Readyand confirm the scheduled flow sends a reply via Send User Reply and updates Status toRepliedin Modify Reply Status. - When tests succeed, toggle the workflow to Active to enable continuous WhatsApp notifications.
Common Gotchas
- WhatsApp (Meta) credentials can expire or need specific permissions. If things break, check your Meta Developers app token status and webhook subscriptions first.
- If you’re using Wait nodes or external processing, timing varies. Bump up the wait duration if downstream nodes fail because the sheet update hasn’t landed yet.
- Template messages have rules. If you’re outside WhatsApp’s 24-hour window, your custom text may fail unless you use an approved template, so keep that logic clear in the consent and notification path.
Frequently Asked Questions
About 45 minutes if your Meta app and Google Sheet are ready.
No. You’ll mainly connect accounts and map fields to your sheet columns.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Meta/WhatsApp Business costs (templates and messaging depend on your WhatsApp Business pricing and country).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s a common upgrade. Add columns like AssignedTo and Priority in Google Sheets, then update the “Retrieve Ready Replies” step to filter by agent (or route by a Switch rule based on keywords). You can also change the “Modify Reply Status” update to write back who sent the reply and when. If you want approvals, introduce a second status like “Needs Review” before “Ready.”
Usually it’s an expired token or the wrong permissions on your Meta app. Regenerate your access token, confirm the WhatsApp Business Account ID and phone number ID, and make sure the callback URL from the WhatsApp Trigger is still set correctly in the Meta Developers portal. Also check message type rules: outside the 24-hour window, custom text sends can fail unless you’re using an approved template message.
A lot. On n8n Cloud Starter, you’re limited by monthly executions, while self-hosting depends mostly on your server. In practice, WhatsApp rate limits and template rules matter more than n8n does, so if you’re sending hundreds of replies a day, plan on batching and adding slightly longer waits.
Often, yes. This workflow benefits from scheduled fetching, batching, and writing statuses back to the same sheet, and n8n handles that kind of branching without turning into a maze of separate Zaps or scenarios. n8n also gives you the option to self-host, which is handy when volume grows and you don’t want every poll or update to become a bill. Zapier or Make can still be fine for a very small setup, like logging messages only, but the shared queue pattern tends to want more control. If you want a second opinion, Talk to an automation expert.
This is the kind of workflow you set up once and then rely on daily. Your WhatsApp messages stop being chaos, and your team finally has a queue they can work together.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.