Google Sheets Add-on
Message the rows of a Google Sheet on WhatsApp — approved templates with per-row personalisation, free-form text/media, and bulk contact import — without leaving the spreadsheet.
What you can do
- Pick a phone-number column and message selected rows or all rows.
- Map spreadsheet columns to template {{1}}, {{2}} … variables — every recipient gets a personalised message.
- Personalise the header too: a text header's own {{1}} maps to a column, and an image/video/document header can take its link from a column, so every row gets its own picture, PDF, or video.
- Map a dynamic link button's value to a column — each recipient's button opens their own URL.
- Send free-form text, image, or document messages (media/text within Meta's 24-hour customer-service window).
- Upload media for template headers or free-form messages.
- Bulk-import rows as CRM contacts — map columns to contact fields, create or update in one click.
Every send is logged in your dashboard under Integrations → Google Sheets & Excel → Activity and appears in Live Chat and Sent History like any other outbound message.
Prerequisites
- A MotherBot account with at least one connected WhatsApp number.
- A plan that includes the Google Sheets & Excel integration.
- A Google account with edit access to the sheet you want to message from.
Step 1 — Generate your access token
Open the integration
Copy the token
sext_ is shown. Copy it now — it is displayed only once. You can rotate it any time from the same card.Step 2 — Install the add-on
If you installed from the Google Workspace Marketplace, skip to Step 3. To add it manually to a single sheet:
Open a Google Sheet first
Warning
Add the files
Code.gs and an HTML file named Sidebar, then paste in the code from each file. Grab the code from Dashboard → Integrations → Google Sheets & Excel → Install (Copy / Download buttons), or directly:- Code.gs — https://motherbot.io/google-sheets-addon/Code.gs
- Sidebar.html — https://motherbot.io/google-sheets-addon/Sidebar.html
Reload & authorize
Note
appsscript.json— the default manifest auto-detects the permissions the code needs. Only add one if you're packaging the add-on for the Marketplace.Troubleshooting
"PERMISSION_DENIED — reading from storage"
- Open the sheet in an Incognito window signed into ONE Google account, then try again.
- Re-authorize: at myaccount.google.com/permissions remove the add-on, reload the sheet, open it again, and Allow.
- Make sure the script was created from Extensions → Apps Script inside the sheet — not from script.google.com (a standalone Drive script can't read the sheet).
- Do not paste a custom appsscript.json with a narrow oauthScopes list — delete that block and let scopes auto-detect.
The menu never appears
Use it in all your sheets
The steps above add the add-on to one spreadsheet — a container-bound script lives inside that single file, like a macro, so no other sheet can see it. Don't paste the code into every spreadsheet; install it to your account instead:
Install it for your whole account
Give it to your team or customers
Tip
Warning
/u/1), and Google blocks that mismatch. Fix: open the sheet in an Incognito window signed into only that account, or make it your default (sign out of all Google accounts, then sign in with it first). This is a Google limitation, not a MotherBot one.Step 3 — Connect
Open the sidebar
Enter your details
https://motherbot.io) and the sext_ access token, then click Connect. Your organization name and WhatsApp number appear on success.Tip
Step 4 — Send messages
Choose your rows
Pick a message type
Map your columns
{{1}}, {{2}} variable to a column. For free-form, type your message with the same {{1}} placeholders and map them below.Column: Name | City | Phone
Row 2: Priya | Mumbai | 9812345678
Template body: Hi {{1}}, your {{2}} order is ready!
{{1}} → Name {{2}} → City
Priya receives: Hi Priya, your Mumbai order is ready!Personalise the header and buttons (optional)
- Text header with {{1}} — map it to a column, exactly like a body variable. It is counted separately from the body's {{1}}.
- Image / video / document header — choose Same for every row (paste a link or upload one file) or From a column (every row's cell holds its own link).
- Link button — map its value to a column; it is added to the end of the button's approved URL, so each recipient gets their own destination.
Column: Name | Phone | Ticket PDF
Row 2: Priya | 9812345678 | https://cdn.you.com/tickets/priya.pdf
Row 3: Amit | 9898989898 | https://cdn.you.com/tickets/amit.pdf
Header media: From a column → Ticket PDF
Priya gets her ticket attached, Amit gets his.Send
Warning
Tip
https:// link to the file — not a Google Drive or Dropbox sharing page, and not a filename. The add-on checks every row before anything is sent and tells you how many cells are unusable, so a bad column never costs you messages. If your template was approved with a sample image, rows with an empty cell fall back to it; if it wasn't, every row needs a link.Tip
Import rows as contacts
Switch to the Import tab
Map fields and import
Admin controls
Everything below is controlled from the dashboard card — no re-install needed:
- Turn individual features on/off (templates, free-form, uploads, bulk send, import).
- Set a daily send limit and a maximum number of rows per send.
- Set a default country code for local numbers with no country code.
- Restrict which WhatsApp numbers the add-on may send from.
- Limit which template categories (Marketing / Utility / Authentication) are allowed.
Tip