How to send WhatsApp messages from Google Sheets
Google Sheets is where a lot of small teams actually keep their contacts, and it has its own set of habits that can quietly wreck a send. This guide covers the Google-Sheets-specific path: why there is no send button, the safe export, the traps that mangle phone numbers, a thirty-second cleanup recipe, and the errors that stop a row from sending. If you use desktop Excel instead, our Excel and CSV guide covers that side.
Why Google Sheets has no "send to WhatsApp" button
Sheets is a spreadsheet, not a messaging client. It has no connection to your WhatsApp account, and WhatsApp has no import feature that reads a spreadsheet. When you see a "send to WhatsApp" add-on, it is not WhatsApp listening to Sheets — it is the add-on reading your rows and then driving something else, usually the WhatsApp Web session already open in your browser. That means the whole job reduces to two steps you can control yourself: get the data out of Sheets cleanly, then hand it to a sender you trust. This guide is about doing the first step properly, because almost every failure downstream is a spreadsheet problem.
The safe export path
Google Sheets exports CSV well, and it does one thing better than desktop Excel: it writes CSV as UTF-8 by default, so accented names and other non-Latin characters survive without you hunting for a special option.
- Check the grid first. Your export is only as good as what is on screen, so remove blank rows, confirm the phone column, and make sure the header row names your columns.
- Choose File → Download → Comma-separated values (.csv, current sheet). Pick the single sheet you need rather than a workbook export.
- Open the downloaded file once and confirm the first column shows your headers and the numbers look intact. If the numbers already look wrong here, fix them in Sheets and re-export — do not try to repair them in the CSV.
The Google Sheets traps that break a send
These are the patterns that cause the most failed rows, and every one of them happens before you ever reach the sender.
| Trap | What it does to your data | How to avoid it |
|---|---|---|
A leading + typed into a cell |
Sheets reads it as the start of a formula and throws an error or strips the sign | Format the column as Plain text before entering numbers |
| A leading zero in a national number | Sheets drops it, because a leading zero means nothing in a number | Use international format without the trunk zero, and store as text |
| Long digit strings treated as numbers | The value is shown in scientific notation and the trailing digits are lost | Set the column to Plain text, or prefix with an apostrophe |
| Locale-dependent formatting | Dates and decimals are written in a format another tool misreads | Keep dates in one consistent written form, and check the file locale |
| Extra blank rows at the bottom | The importer counts them as contacts with empty values | Delete trailing rows, then re-export |
| Merged cells or a title row above the header | The importer reads the wrong row as your column names | Keep row 1 as the header, one column name per cell, no merged cells |
Clean the phone column in 30 seconds
If your numbers are already in shape, skip this. If they are not, this recipe rebuilds the whole column from what is there and leaves you with clean, consistent values. It assumes your numbers are in column A starting at A2 with a header in A1.
- Insert a helper column next to the phone column (say, column B).
- In B2, build the international form by stripping everything that is not a digit and adding the country code. For a US list that is
="1"®EXREPLACE(TO_TEXT(A2),"\D",""). Change the"1"to your own country code for other countries. - Drag the fill handle down to the last row so every row has a clean value.
- Select the helper column, copy it, then use Edit → Paste special → Values only to paste it back into the original phone column. This replaces the formula with the finished text.
- Delete the helper column, then set the phone column to Format → Number → Plain text so nothing reinterprets the values.
The point of the last two steps is that you end with static text, not formulas. If you export while the helper column is still a formula, the CSV contains the formula's result only for the current locale and the column may not line up with your header — always paste as values and delete the helper before exporting.
Import and send
- Install the extension and open web.whatsapp.com in the same browser, signed in. That tab is the account your messages will come from, so leave it open.
- Open the extension and import your exported CSV. It is read locally in your browser to build the contact list.
- Compare the number of contacts it reports against the number of rows in your sheet. A mismatch almost always means a blank row, a stray header or a row the importer could not parse.
- Write your message with placeholders, set a randomised interval and your daily cap, then run a small test batch to yourself before sending the full list.
- When the run finishes, export the delivery report and use the failing rows to clean next month's list.
Troubleshooting: why a row did not send
| Symptom | Likely cause | Fix |
|---|---|---|
| The whole batch failed at once | WhatsApp Web is logged out, still loading, or the tab was closed | Reopen web.whatsapp.com, sign in, wait for chats to load, then retry |
| One row failed, the rest sent | That number is not registered on WhatsApp, or is mistyped | Check the number by hand in a new chat; fix or remove the row |
Number shows as 1.2E+10 |
Sheets stored it as a number and truncated it before export | Recover the original digits from your source; store as Plain text next time |
| Only some rows in a column sent | Some cells are empty, so those rows have no number | Fill the gaps or delete those rows before importing |
{name} appears literally in the message |
The column header does not match the placeholder, or the column is missing | Rename the header to match, or remove the placeholder |
| "Hi ," with a blank where the name should be | The name column has empty cells | Fill the values or set a fallback word for missing data |
| Contact count is higher than your list | Blank rows or a duplicated header row were imported | Remove blank rows and re-export the CSV |
Personalise with {column} placeholders
The header row is what makes personalisation possible. Whatever you call a column becomes a placeholder you can use in the message: a name column feeds {name}, a company column feeds {company}, and any other column you keep — an order number, an appointment date, a membership tier — becomes its own variable. Each recipient's message is then assembled from their own row.
Before sending, it is worth seeing the finished messages rather than trusting the merge. The free WhatsApp Message Personaliser lets you paste your template and sample rows and preview exactly what each person will receive. Our guide to personalised WhatsApp messages goes deeper on structuring the sheet and the wording so the merge reads naturally.
Frequently asked questions
Is there a button in Google Sheets that sends to WhatsApp?
No. Google Sheets has no built-in connector to your WhatsApp account, and WhatsApp has no spreadsheet import. Any "send to WhatsApp" add-on is really exporting your data and handing it to a tool that automates the WhatsApp session you are signed into. The safe route is to export a CSV and import that file into the sender yourself.
Why do my phone numbers change when I export a Google Sheet?
Google Sheets treats anything starting with + as a formula, and long digit strings as numbers, which can round them or convert them to scientific notation. Format the phone column as Plain text before you type or paste numbers, or clean the column with the formula recipe above and paste the result back as values before exporting.
Which download format should I choose?
Comma-separated values (.csv, current sheet). Google Sheets writes CSV as UTF-8 by default, so accented names survive the export — a difference from desktop Excel, where you have to pick the CSV UTF-8 option deliberately. Export only the sheet you need, and make sure the phone numbers are already correct in the grid.
Can I personalise each message from a Google Sheet?
Yes. Give your columns header names such as name and company, then use matching placeholders like {name} and {company} in the message. The sender substitutes each row's values at send time, so every recipient gets a version built from their own row — the same idea as a mail merge.
From Google Sheets to WhatsApp in a few clicks
Export your sheet, import the CSV and send a personalised message to every row from the WhatsApp Web session you are already signed into. Start free with 20 text messages a day.
WhatsApp Auto Sender Studio is an independent tool and is not affiliated with, endorsed by, or certified by WhatsApp LLC or Meta.