Personalise bulk WhatsApp messages with names from a sheet
Personalise bulk WhatsApp messages by mapping sheet columns to placeholders, one message per row. How it works, examples, and the mistakes to catch first.
- Written by
- By WavesFlo team
- Published
- Published
- Reading time
- 6 min read
To personalise a bulk WhatsApp message, keep one recipient per row in a sheet, give each column a plain header such as first_name or due_date, and write the message with matching placeholders. The tool then builds one message per row, swapping each placeholder for that row's value. Fix blank cells and odd names before anything is sent.
Tools call these placeholders merge fields, variables or tags, and mark them differently: Gmail's mail merge uses @firstname, and many messaging tools use double braces, such as {{first_name}}. The idea is the same everywhere. This guide covers why it's worth doing, how columns map to placeholders, examples for Indian businesses, and the mistakes that turn "Hi Priya" into "Hi ,".
Why personalise bulk WhatsApp messages?
Because WhatsApp is built around messages people expect, and it listens to the people who didn't. Its Business Messaging Policy says users should expect the messages they receive, and that unsolicited ones lead people to block a business. It also says WhatsApp may limit how many messages a business can send, based on blocks and reports. People can tap Not interested on business offers, and when they block a business they can say why, for example that they never signed up.
A message that uses the name someone gave you, and the thing they asked about, reads as the next step in a conversation they started. The same words blasted to a whole list are easier to ignore, mute or report. Personalisation isn't permission, though: it only helps with people who agreed to hear from you.
How does a sheet column become a placeholder?
Mail merge works the same way in most tools. The first row of the sheet holds the column headers, and every row below is one recipient. Each placeholder in the message names a header, and for each row the tool swaps the placeholder for the value in that column. Gmail's help centre describes its own mail merge exactly so: the merge tags come from your spreadsheet's column headers.
phone,first_name,course,batch_start,first_instalment
+919876543210,Ananya,JEE 2027 weekend batch,12 October,"₹18,000"
+919876543211,Rohan,NEET 2027 evening batch,19 October,"₹21,500"Hi {{first_name}}, your seat in the {{course}} is confirmed. Classes start on {{batch_start}}, and the first instalment of {{first_instalment}} is due a week before. Reply here with any questions.Hi Ananya, your seat in the JEE 2027 weekend batch is confirmed. Classes start on 12 October, and the first instalment of ₹18,000 is due a week before. Reply here with any questions.- Headers are names, not sentences. Keep them short, unique and plain, such as first_name or due_date, without spaces or punctuation your tool might reject. Check what your tool accepts: Gmail, for one, gives a named tag only to headers made of letters and numbers and refers to any other column, first_name included, by its position.
- One row, one person. Don't merge cells or squeeze two people into a row; every placeholder must find exactly one value.
- A placeholder copies the cell exactly, capitals, spaces and all, so fix the data rather than the message.
What can you personalise besides the name?
| Column | Example value | Use it for |
|---|---|---|
| first_name | Ananya | The greeting. First name only; a full name reads like a form. |
| enquiry | 2BHK in Wakad, Pune | Showing you remember what they asked about |
| due_date | 10 October | Fee, rent or EMI reminders, with the date written out |
| amount | ₹4,500 | Quotes and reminders, typed as text so the ₹ sign and commas survive |
| invoice_no | INV-2026-0412 | GST invoice reminders a customer can match to their records |
| agent | Rahul | Saying who will follow up |
| link | A brochure or payment page | Something specific to that person |
Leave out anything sensitive. WhatsApp's business policy says not to share, or ask people to share, full payment card numbers, financial account numbers or ID card numbers, so an Aadhaar or account number never belongs in a placeholder.
Examples of personalised WhatsApp messages
Hi {{first_name}}, this is {{agent}} from Sunrise Realty. Your visit to the {{project}} sample flat is on {{visit_date}} at {{visit_time}}. The site office is beside the main gate; call me on this number if you're running late.Hello {{first_name}}, thank you for your IndiaMART enquiry about {{product}}. For {{quantity}}, the price is {{price}} plus GST, delivered to {{city}}. Shall I send a formal quotation?Hi {{first_name}}, a gentle reminder that invoice {{invoice_no}} for {{amount}} was due on {{due_date}}. If it's already paid, thank you, and please ignore this. If not, the UPI and bank details are on the invoice.Each names something only that person would recognise. Read a few filled-in messages aloud: if one sounds odd spoken, it will read oddly too. For the follow-up side of these, see real estate follow-up messages and IndiaMART leads on WhatsApp; the WhatsApp text formatter previews bold and lists before you paste.
Common mistakes, and how to catch them
| Mistake | What the customer sees | Fix |
|---|---|---|
| Blank cell | "Hi ," or a stray placeholder | Count blanks with Google Sheets' COUNTBLANK, fill them, or set a fallback word such as "there" |
| Names in capitals or with titles | "Hi MR. A. SHARMA" | Keep a separate first_name column; PROPER fixes capitals, but check names it gets wrong, such as McLeod |
| A company in the name column | "Hi Sharma Traders Pvt Ltd" | Put the contact person's first name in its own column |
| Extra spaces | "Hi Ananya" with a double space | TRIM removes leading, trailing and repeated spaces; non-breaking spaces pasted from websites need replacing separately |
| Sorting one column on its own | Ananya's fee sent to Rohan | Always sort the whole table, never a single column |
| Numbers stored as numbers | A phone number shown as 9.19877E+11, or a lost leading zero | Format phone and ID columns as text before typing or importing |
| Stale values | Last month's due date | Refresh the sheet before every send |
| Duplicate rows | Two copies of the same message | Remove duplicate phone numbers first |
Excel is the usual culprit with numbers: Microsoft notes that it drops leading zeros and shows long numbers, phone numbers included, in scientific notation unless the cells are formatted as text. Then run the same checks before every send:
- Count blanks in every column the message uses, not just the name column. A blank due date is as visible as a blank name.
- Check the phone column: every number with its country code, 91 for India, and none turned into scientific notation.
- Preview five real rows, including the longest name, the shortest and the oddest, and read each filled-in message as the customer would.
- Send a test to your own phone, and look at it on a small screen.
- Note the date of the data. If the sheet is more than a day old for anything with a due date or a price, refresh it first.
How do you send personalised WhatsApp messages at scale?
A WavesFlo campaign sends one personalised message to each person on a contact list imported from a CSV, filled in from that person's row. It can run once, on a schedule or on a recurring schedule, with quiet hours, an optional approval step and the opt-out register checked at the moment of sending. Results come back per message from delivery receipts. Keep names and phone numbers in that import, not in a Google Sheet shared by link: Google Sheets to WhatsApp explains why a sheet should hold offers instead.
Two limits apply whichever tool you use. A group post is one message that every member sees, so personal details belong in one-to-one messages, not group posts. And a placeholder can't make an unexpected message welcome: send only to people who gave you their number and agreed to hear from you.
If you want evidence for your own customers rather than anyone's averages, split a list in two, send each half a version, and compare replies over the following days. Compare replies rather than reads: recipients can switch read receipts off, so a read rate is a floor, as campaign metrics explains.
Questions
How do I add a customer's name to a bulk WhatsApp message?
Put each customer on their own row in a sheet with a first_name column, write the message with a placeholder such as {{first_name}} where the name goes, and send it with a tool that builds one message per row. Check the name column for blanks first.
What happens if a name cell is empty in a mail merge?
It depends on the tool. Some stop with an error, as Gmail's mail merge does, and ask for a default value; others send the message with a gap, such as "Hi ,". Fill the blanks or set a fallback word such as "there" before you send.
Can I personalise a message to a WhatsApp group?
Not per member. A group post is one message that every member sees, so it can only carry details that apply to the whole group. Send personal details in one-to-one messages instead.
Does personalising messages stop my WhatsApp number being restricted?
No. Relevant messages help, but WhatsApp may limit businesses based on blocks and reports, and bans accounts that send unwanted automated messages. Consent, honoured opt-outs and a sensible pace matter more than names.
Can I personalise WhatsApp messages from Excel?
Yes, with a tool that reads the workbook or a CSV saved from it. Format phone and ID columns as text first, because Excel drops leading zeros and shows long numbers in scientific notation.
Sources
- WhatsApp Business Messaging Policy (checked 5 Oct 2026)
- Meta Newsroom: Ways to manage your business chats on WhatsApp (3 Apr 2025)
- WhatsApp Help Center: How to use WhatsApp responsibly
- Gmail Help: Send personalized emails with mail merge
- Google Docs Editors Help: TRIM function
- Google Docs Editors Help: PROPER
- Google Docs Editors Help: COUNTBLANK
- Microsoft Support: Keeping leading zeros and large numbers in Excel