Skip to content
WbizTool

Send bulk WhatsApp messages from Google Sheets, no code

Published

You can send WhatsApp messages from a Google Sheet without writing code by connecting the sheet to WbizTool with a Google Sheets trigger. Each row you add gets its own message, filled in from its columns and sent from your own WhatsApp number, at once or at a date in the row. This post walks through one example: payment reminders for a small tutoring business.

The example#

Maple Street Tutoring bills parents each month and keeps its invoices in a Google Sheet. It wants each parent to get a WhatsApp reminder two days before an invoice is due, and it adds new invoices every week. Rows that keep arriving are what a trigger is for.

You need three things:

  • A WhatsApp number connected to WbizTool.
  • A paid plan. Lite has 1 Google Sheets trigger, Standard 3, Advanced 5 and Enterprise 10. The free trial has none (see other ways below).
  • The Owner or Editor role in the workspace.

Step 1: Plan the sheet#

Create a new worksheet (tab) for the reminders. A trigger sends only rows added after you create it, so starting from an empty tab means nothing old goes out by surprise. Put the column names in row 1 and keep everything in columns A to Z, which are the only ones read.

WhatsAppNameInvoiceAmountDueSend onTime
+1 415 555 0142OliviaINV-1042$120.00Jan 82027-01-0610:00
1 (212) 555-0187DanielINV-1043$95.00Jan 82027-01-0610:00
415-555-0110PriyaINV-1044$120.00Jan 112027-01-0910:00

Due is for people to read, so write it however you like: values go into the message exactly as the sheet shows them. Send on and Time are for WbizTool, so they must follow a format it reads (step 2).

Step 2: Format phone numbers and dates#

Get these right before you add customers:

  1. Write numbers with the country code where you can. Spaces, dashes, brackets, dots, + and a leading 00 don't matter, so the first two rows work as written.
  2. Know what happens without one. A number like 415-555-0110 gets the country code of the number that sends it. If that can't be worked out, the workspace's country for numbers without a country code is used.
  3. Format the phone column as plain text (Format → Number → Plain text) so long numbers aren't rounded into something like 9.19877E+11. Rows whose phone isn't 7 to 15 digits are skipped.
  4. Write dates as 2027-01-06 and times as 10:00 (24-hour). A date WbizTool can't read, such as Jan 6, 2027, or an empty one, is sent right away, and a row whose date and time have passed is skipped.

Step 3: Connect Google and create the trigger#

In WbizTool, open Google Sheets under Integrations and click Connect Google. WbizTool only reads your sheets and writes nothing back to them. Then click New trigger and:

  1. Click Choose a sheet and pick the spreadsheet in Google Drive.
  2. Choose the Worksheet (tab) and, under Send when, A row is added.
  3. Type a Trigger name, pick the number under Send from (it sends every row, its country code completes numbers without one, and while it's disconnected the rows wait), and check the Phone number column (a column named WhatsApp is picked for you).
  4. Tick Send at a date from the sheet and choose Send on as the Date column, Time as the Time column, and the Time zone of those dates.
  5. Write the message (step 4), then click Create trigger.

Pick A row is added: with A row is added or changed, every edit sends the row again, so marking an invoice as paid would message the parent twice. The Google Sheets integration docs cover images, files and every other option.

Step 4: Write the message with personal fields#

Click a column name below the message box to insert it. Names go in double braces, spelled exactly as in row 1, capitals and spaces included:

Hi {{Name}}, this is Maple Street Tutoring. Invoice {{Invoice}} for {{Amount}} is due on {{Due}}. If you've already paid, thank you, and please ignore this. Reply STOP if you'd rather not get reminders here.

Olivia gets: "Hi Olivia, this is Maple Street Tutoring. Invoice INV-1042 for $120.00 is due on Jan 8. …"

Preview with the first row shows the message filled in from row 2. An empty cell leaves a gap, and a {{…}} that isn't a column is sent as typed. Say who you are and give people a way out: someone who can reply STOP is less likely to report you.

Step 5: Test on yourself#

Before any customer row goes in:

  1. Add one row with your own number, today's date in Send on and a time about 15 minutes ahead.
  2. On the trigger's card, click Test, type your number under Send the test to and click Send test. The test goes only to that number and starts with [TEST].
  3. Within a few minutes your row shows in Reports as Waiting. If it arrives at the time you set, the date format and time zone are right.

Step 6: Send at a safe pace#

Now paste the customer rows at the bottom of the tab, whole rows at a time.

  • A trigger has no pace setting like a campaign's. Rows with the same date and time are all due together, and one number sends its messages one at a time, so a big batch goes out over a while rather than all at once. We advise about 150 to 200 messages per number per day, so spread a long list over several Send on dates and stagger the times.
  • The daily fair-use limit is 1,000 messages per number in any 24 hours. A row over it fails in Reports with "Daily limit reached: …". Treat 1,000 as a ceiling, not a target.
  • Sending hours. A workspace Owner can turn on sending hours and tick Google Sheets, so nothing goes out at night. Messages made outside the hours wait for them.
  • Who you message. Send only to people who expect to hear from you. WhatsApp can restrict any number that people block and report, and no tool can promise it won't. Can my WhatsApp number get banned? explains the risk, and how to grow WhatsApp opt-ins covers getting permission first.

Step 7: Handle replies and opt-outs#

Replies come to your WhatsApp number like any other chat. When a parent says they've paid, find their waiting reminder in Reports and cancel it.

When someone asks you to stop, opt them out on Contacts: click Opt out on their row, or add numbers on the Opted out tab. Nothing is sent to an opted-out number from your workspace again, Google Sheets triggers included. If your number is in the Unibox inbox (an add-on), someone who replies only STOP is opted out automatically.

A list you send once#

A trigger suits rows that keep arriving. For a list you'll message once, download the sheet as .xlsx or .csv and upload it instead:

  • Template messages fill {{Name}} and other columns into one message, for up to 5,000 rows per send from one number. They need a paid plan.
  • Campaigns send each row's own finished Message, with no variables. They work on every plan, the free trial too. You pick a pace (Careful, Normal or Quick), several numbers can take turns, and Before you send warns about common problems.

The bulk messages from Excel page compares the two. If you already run automations in Pabbly Connect, Albato or Make, a new-row step there can also call WbizTool's API (HTTP request integrations).

Questions people ask#

Will the trigger message the rows already in my sheet?#

No. Only rows added after you create it are sent. To message an existing list with a trigger, paste it into a new tab after creating the trigger, or upload it as template messages or a campaign.

Can I send the invoice as a PDF?#

Yes. Under Message type, choose File and give a public link, or a column that holds one. The message becomes the caption.

Does WbizTool change my sheet?#

No. It only reads it. Each message's status and any failure reason are in Reports.

Do I need Zapier?#

No. The trigger runs inside WbizTool and sends when Google reports a change to the spreadsheet, usually within a few minutes.

Try it#

The free trial has 50 messages in any 30 days and needs no card. It includes campaigns but not Google Sheets triggers, so try a small campaign first. Sign up, then see plans: Lite, with 1 trigger, is $25 a month in the US. The Google Sheets integration page and the payment reminders page show what else the trigger can do.