Help Center
Broadcasts & outreach10 min read

Send a message to a list

Got a spreadsheet of people to message, like a class list or a booking export? Upload it, write the message once, and each person gets their own details in it. Nothing has to be imported into your contacts first.
Before you begin
You need three things: a .CSV or .XLSX file with a column of phone numbers, a connected messaging channel, and, if you send from WhatsApp Business, an approved template (get it approved a day ahead). Then set aside ten minutes: there is no draft, so the whole thing has to be finished in one go.
Start here

What Send to a list does

You write one message. Wherever a person’s own details belong, you drop in a column from your spreadsheet. When it sends, each person’s row fills those gaps, so everyone reads a message made for them.

term-3-parents.xlsx
ABC
1Parent NameMobileStudent
2Mrs Tan9123 4567Ethan
3Mr Lim9876 5432Sara
4Mrs Ng9111 2233Kai
1Your spreadsheetOne row per person. The headings become variables.
app.exabloom.com/contacts
Send message to a list
Message
Hi Parent Name, just confirming Student’s lesson on Next lesson. See you then!
Chips fill in per recipient at send time
2You write it onceDrop a column in wherever someone’s own details go.
BMBright Minds
Hi Mrs Tan, just confirming Ethan’s lesson on Tue 4pm. See you then!10:02
3Mrs Tan reads hersHer row fills the gaps.
BMBright Minds
Hi Mr Lim, just confirming Sara’s lesson on Wed 5pm. See you then!10:02
4Mr Lim reads hisSame message, his row.
Read left to right. One spreadsheet and one message go in; every person on the list gets their own version.

The spreadsheet is only used for this send. Its columns are not saved to your contacts unless you ask for that (see Advanced). The one thing it does add by default: a phone number you don’t have yet becomes a new contact, so their reply lands in your Inbox.

Not sure this is the right tool? Pick by the job:

Keep these people in your CRM for good
Every mapped column is written onto the contact and stays there.
Import contacts
Message people who are already in Exabloom
Filter or tick the rows you want, then use Send message from the selection bar.
Tick them on Contacts
Message a one-off list, using its own columns
The spreadsheet is both the audience and the details. Nothing is saved to your CRM unless you ask.
Send to a list
Getting there

Open it from Contacts

Send to a list lives behind the Import button on the Contacts page. Three clicks.

1

Open Contacts

app.exabloom.com/contacts
BMBright MindsOrchard
Inbox
Leads
Calendars
1
Contacts
Bulk Actions
Win-back
Workflows
Analytics
Forms
Settings
Contacts
All contactsSearch by name or phoneFiltersColumnsExport
Import
New contact
First NameLast NamePhone No.Tags
AishaRahman+65 9012 3344Trial
BenKoh+65 8123 7788Enrolled
ClaraWong+65 9345 1200Enrolled
DevNair+65 8765 4321Trial
ElaineChua+65 9222 8101
① Contacts is in the top group of the left sidebar.
2

Click Import

app.exabloom.com/contacts
BMBright MindsOrchard
Inbox
Leads
Calendars
Contacts
Bulk Actions
Win-back
Workflows
Analytics
Forms
Settings
Contacts
All contactsSearch by name or phoneFiltersColumnsExport
1Import
New contact
First NameLast NamePhone No.Tags
AishaRahman+65 9012 3344Trial
BenKoh+65 8123 7788Enrolled
ClaraWong+65 9345 1200Enrolled
DevNair+65 8765 4321Trial
ElaineChua+65 9222 8101
① Import is in the toolbar above the table, just after Export.
3

Choose Send to a list

app.exabloom.com/contacts
BMBright MindsOrchard
Inbox
Leads
Calendars
Contacts
Bulk Actions
Win-back
Workflows
Analytics
Forms
Settings
Contacts
All contactsSearch by name or phoneFiltersColumnsExport
Import
Import contactsAdd or update people in your workspace.
1Send to a listNewMessage everyone in a spreadsheet, using its columns in the message.
New contact
First NameLast NamePhone No.Tags
AishaRahman+65 9012 3344Trial
BenKoh+65 8123 7788Enrolled
ClaraWong+65 9345 1200Enrolled
DevNair+65 8765 4321Trial
ElaineChua+65 9222 8101
① The second option. Import contacts, above it, is the other job: it adds people to your CRM.

A dialog titled Send message to a list opens over the page. Everything from here happens inside it, in three steps. The grey line under the title always tells you which step you’re on.

Step 1 of 3

Upload your spreadsheet

Drag your file onto the box, or click Browse files and pick it.

app.exabloom.com/contacts
Send message to a list
Step 1 of 3 - Upload your list
Drag & drop your list here
.CSV or .XLSX (max 20 MB) · one column must be a phone number
or
1Browse files

Every column becomes a variable you can drop into the message. Nothing is written to your contacts unless you choose to.

① Browse files, or drop the file anywhere on the dashed box.

A good file has just three things:

  • One heading row on top. Each heading becomes the name of a variable, so write Parent Name, not col_a.
  • One column of phone numbers. It’s the only column you must have. Exabloom finds it by its heading (phone, mobile, whatsapp, hp, contact no) or by what’s in it.
  • One row per message. Two children, two reminders: that’s two rows.

Files can be .csv, .xlsx, .xlsm or .xls, up to 20 MB.

The one that catches everyone
Excel likes to turn a long phone number into 6.59123E+10. Once saved that way, the real number is gone. Before you save, select the phone column and set its format to Text.

Check who gets it

Read the big line at the top, open anything amber, then click Next.

Once the file is read, the same step turns into a summary. Before you’ve written a word, it answers two questions: who is getting this? and why not everyone?

app.exabloom.com/contacts
Send message to a list
Step 1 of 3 - Upload your list
term-3-parents.xlsx128 rows · 5 columns Replace
1
125 people will get this message
2 duplicate rows skipped · 1 unreadable number
Show the 3 rows not being sent
How we read your file
Phone columnMobile · auto-detectedChange
Name for new contactsParent NameChange
Rows not in your workspaceCreate new contactsChange
Repeated numbersSend once per number · 2 rows will not receive a messageChange
First rowColumn headingsChange
SheetTerm 3 · 1 of 3 in this workbookChange
23 things to check in this file
Your columns

All 5 of these can be dropped into the message as variables. Nothing here is saved to your contacts.

Parent NameMobilematches contactsStudentClassNext lesson
Mrs Tan9123 4567EthanP5 MathsTue 4pm
Mr Lim+65 9876 5432SaraP5 MathsWed 5pm
Mrs Ng9111 2233KaiP4 Science

First 3 of 128 rows

Also save a column to a contact field
3Next
① How many people will get it, and a link to the rows left out. ② Anything odd about the file. ③ Next, once the count looks right.

Here are ① and ② opened up, at full size:

1 Rows not being sent, opened
125 people will get this message
2 duplicate rows skipped · 1 unreadable number
Hide the 3 rows not being sent

9123 4567 · Mrs Tan - rows 2, 47 · differ in Next lesson: sending “Tue 4pm”, not sending “Thu 4pm”

+65 9876 5432 · Mr Lim - rows 3, 88 · only the first row is sent

Row 63 · “6.59123E+10” - damaged by Excel

Every one of these comes back in the report with its reason.

2 Things to check, opened
3 things to check in this file
  • This file has 3 sheetsReading “Term 3”. Switch sheet above if that’s the wrong one.
  • 1 number damaged by ExcelValues like 6.59123E+10 can’t be read. Format the phone column as Text in your spreadsheet and re-save - these rows are excluded.
  • 97 numbers without a country codeRead using this workspace’s default country.
① Every row left out, with its row number in your own spreadsheet. ② Each thing to check says what Exabloom did about it.

A row is left out for one of three reasons:

  • Its number can’t be read, for example a blank cell or a number Excel damaged.
  • Its number already appeared on an earlier row. By default each number gets one message, and the first row in the file wins. The list shows what differs, so you can see which version goes out.
  • It isn’t a contact yet, and you chose to skip those. By default new numbers are created as contacts instead.

In between sits How we read your file: six decisions already made for you, each with a Change link. The defaults are right for most lists; if one isn’t, see Advanced. Below it, Your columns shows the first three rows of your own sheet, so you can see it was read the way you meant. The violet headings are the ones you can use in the message; the grey one is the phone column.

If the headline turns red
It means Exabloom can’t tell which column holds the phone numbers. Click Change next to Phone column, pick the right one, and the count comes back.
Step 2 of 3

Pick the sending number

Click the channel the messages should come from.

app.exabloom.com/contacts
Send message to a list
Step 2 of 3 - Choose channel
1Whatsapp Business
Facebook Messenger
Back
① Your connected channels are listed. Clicking one moves you straight on to step 3. Back returns to your list with nothing lost.

This choice decides what step 3 looks like. Whatsapp Business (the official WhatsApp API) can only start a conversation with an approved template, so you pick one and fill its blanks. Any other channel gives you a plain message box. If nothing is connected, you’ll see Connect a channel instead, which takes you to Settings.

Step 3 of 3

Write the message

On every channel it works the same way. Click the tag icon, pick a column, and it drops in as a violet chip like Student. A chip is one piece: Backspace removes all of it, never half. Most workspaces send from WhatsApp Business, so that path comes first.

Fill a WhatsApp template

On WhatsApp Business, step 3 has three tabs: 1. Select template, 2. Configure, 3. Schedule. You can’t skip ahead: Configure opens once a template is picked, and Schedule once every blank is filled.

Click your template, then Next.

app.exabloom.com/contacts
Send message to a list
Step 3 of 3 - Compose & schedule
1. Select template2. Configure3. Schedule
Create New Template
Search by name or content...
1
lesson_confirmationUtilityApproved

Hi {{1}}, just confirming {{2}}’s {{3}} lesson on {{4}}. See you then!

4 variablesVariables: 1, 2, 3, 4
term_fees_reminderUtilityApproved

Hi {{1}}, a friendly reminder that Term 4 fees are due on {{2}}.

2 variablesVariables: 1, 2
open_house_inviteMarketingPending

You’re invited to our open house this Saturday!

Back
2Next
① Only Approved templates can be picked; Pending ones are greyed out. ② Next opens Configure.
No template yet?
Create New Template is right there, but Meta has to approve it before you can send. It usually takes minutes and can take longer, so build it the day before. See WhatsApp message templates.

For each numbered blank, click its tag icon and pick the column that fills it.

You can’t change the words of an approved template. What you decide is what fills each numbered blank, like {{1}}. The template’s text sits at the top so you can see which blank is which.

app.exabloom.com/contacts
Send message to a list
Step 3 of 3 - Compose & schedule
1. Select template2. Configure3. Schedule
Template · lesson_confirmation

Hi {{1}}, just confirming {{2}}’s {{3}} lesson on {{4}}. See you then!

Body variables
{{1}}
Parent Name
If empty, usethere
{{2}}
1
Search fields...
From your list5
Contact12
Custom values4
Date & time3

Columns of term-3-parents.xlsx · used in this message only

Parent NameMrs Tan
Mobile9123 4567
2StudentEthan
ClassP5 Maths
Next lessonTue 4pm
{{3}}
{{4}}
BackNext
① The tag icon on the blank you’re filling. The menu opens on From your list, with row 1’s value under each column. ② Pick the column.

A blank can hold more than one thing: mix chips and typed words, like “Class (Term 3)”. Each blank is capped at 256 characters. The menu also has Contact fields, Custom values and Date & time, and the search box looks through all four. If the template has an image, video or document header, you can upload your own file or leave the template’s default.

Set “If empty, use”: don’t skip this

WhatsApp refuses a template message with an empty blank. So if a column is empty on some rows, those people get nothing, and the report marks them as errors. The fix takes one word per blank.

Under every blank you filled from a column, type a stand-in in If empty, use: “there”, “your child”, “your usual slot”.

app.exabloom.com/contacts
Send message to a list
Step 3 of 3 - Compose & schedule
1. Select template2. Configure3. Schedule
Body variables
{{1}}
Parent Name
If empty, usethere
{{2}}
Student
If empty, useyour child
{{3}}
Class
If empty, useclass
{{4}}
Next lesson
If empty, use1there

Leave this blank and the message will not send when this variable comes back empty.

2
Preview · row 3 of 50 · Mrs Ng · 9111 2233Row 3 · Mrs Ng
Hi Mrs Ng, just confirming Kai’s P4 Science lesson on empty. See you then!10:02

4 rows have an empty Next lesson - it will render blank.

4 rows will not send - a variable is empty and has no If empty text.

Back
3Next
① An If empty, use box still blank; the grey line under it says what happens. ② The preview shows a real row, here one with no Next lesson, and counts the rows that will fail. ③ Next, to schedule.

Here is ② at full size, before and after filling ①. The row stays the same; only what Mrs Ng would read changes.

2 No If empty text
Preview · row 3 of 50 · Mrs Ng · 9111 2233Row 3 · Mrs Ng
Hi Mrs Ng, just confirming Kai’s P4 Science lesson on empty. See you then!10:02

4 rows have an empty Next lesson - it will render blank.

4 rows will not send - a variable is empty and has no If empty text.

2 If empty, use: your usual slot
Preview · row 3 of 50 · Mrs Ng · 9111 2233Row 3 · Mrs Ng
Hi Mrs Ng, just confirming Kai’s P4 Science lesson on your usual slot. See you then!10:02
Without a stand-in, the empty cell shows as an amber “empty” and the red line counts the rows that won’t send. With one, the stand-in fills the gap (dotted underline) and the warnings are gone.

Page through rows with the arrows, or pick one from the list by name. You can page through the first 50 rows, but the warnings count every row in your file. Violet text is a value from the row: exactly what that person will read.

Tip
Before you move on, page through five or six rows and look for the one you’d be embarrassed to send. It’s the cheapest check there is. Contact fields, custom values and dates can’t be filled in the preview, so they stay as chips; they fill in normally when it sends.

Other channels: type it

On any channel other than WhatsApp Business, there are no templates and no tabs. You get one screen: the recipient card, a message box, the preview, and the schedule underneath.

app.exabloom.com/contacts
Send message to a list
Step 3 of 3 - Compose & schedule
125 contactswill receive this message ·from list term-3-parents.xlsx

2 rows will not receive a message - their number already appears on an earlier row.

New contacts will be created for numbers you do not have yet. 1 row excluded (no valid phone number).

Message
Hi Parent Name, just confirming Student’s Class lesson on Next lesson. See you then!
1
Chips fill in per recipient at send time
Preview · row 3 of 50 · Mrs Ng · 9111 2233Row 3 · Mrs Ng
Hi Mrs Ng, just confirming Kai’s P4 Science lesson on empty. See you then!10:02

4 rows have an empty Next lesson - it will render blank.

Action name
Term 3 lesson confirmations
Start on
21/08/2026 10:00 AM
Batch quantity
1

…then the interval, days and hours, as on WhatsApp Business.

Back
2Send message
Facebook Messenger, as an example. ① The tag icon under the message box opens the same variable menu; the column drops in where your cursor was. The schedule sits below the preview. ② Send message.

There’s no approval and no rule about empty values: an empty column just leaves a gap, so an amber “empty” in the preview is a warning about looks, not about delivery. You can attach an image or a document, and its caption takes chips too. The button at the bottom reads Send message.

Step 3 · finish

Schedule it and send

Give it a name, check the start time, then click Send.

The card at the top repeats the count from step 1, so you don’t have to go back and check. Below it, the schedule decides when and how fast it goes out. On other channels this sits under the message box.

app.exabloom.com/contacts
Send message to a list
Step 3 of 3 - Compose & schedule
1. Select template2. Configure3. Schedule
125 contactswill receive this message ·from list term-3-parents.xlsx

2 rows will not receive a message - their number already appears on an earlier row.

New contacts will be created for numbers you do not have yet. 1 row excluded (no valid phone number).

Action name
1
Term 3 lesson confirmations
Start on
2
21/08/2026 10:00 AM
Batch quantity
1
Time interval per batch
5Minutes
Perform this action on these days
MonTueWedThuFriSatSun
Perform this action between these hours
08:0020:00
Don’t send to contacts from past campaigns
Back
3Send
app.exabloom.com/contacts
Send message to a list
Scheduled

Your bulk message has been scheduled.

It will be sent over the next period based on your schedule.

Close
4View bulk actions
① Name it so you’ll recognise it next month. ② When the first batch goes out. ③ Send. ④ The confirmation that replaces it: View bulk actions takes you to where you track it.
  • Action name is how the send is listed on the Bulk Actions page. It starts as a date and time; “Term 3 lesson confirmations” is easier to find later.
  • Start on is when the first batch goes out. It starts one minute from now.
  • Batch quantity (up to 5) and Time interval per batch set the pace: by default, 1 message every 5 minutes.
  • Days and hours set when sending is allowed. Outside them it waits and carries on in the next allowed slot, which keeps a big send from arriving at 3am. The default is every day, 08:00 to 20:00.

On an official WhatsApp Cloud API number you’ll also see Enable high throughput? Switch it on to drop the pause between batches.

If Send fails
A red box says The blast could not be created. Nothing was sent. Your list, message and schedule are all still there. Fix anything it highlights and click Send again. Don’t close the dialog: that throws the list away.
After you send

Track it and get the report

Your send shows up on the Bulk Actions page as a Send Message action, under the name you gave it. Its status goes from Creating to Processing to Completed, and you can pause or cancel it from the same menu while it runs.

Click the ⋮ next to its name, then Download send message report.

app.exabloom.com/bulk-actions
BMBright MindsOrchard
Inbox
Leads
Calendars
Contacts
Bulk Actions
Win-back
Workflows
Analytics
Forms
Settings
Bulk actions

Monitor, pause, resume, and review large-scale operations across your contacts in a single place.

NameTypeStatusCreated
Term 3 lesson confirmations1
Rename
Show stats
2Download send message report
View details
View contacts
Send MessageCompleted21/08/26
Fee reminders - SeptSend MessageProcessing20/08/26
Open house follow-upAdd To WorkflowCompleted18/08/26
① The menu next to the send’s name. ② Download send message report appears once the report is ready. View details shows the file, how many rows were in it and how many were scheduled.

You get your own spreadsheet back, same columns in the same order, with Status and Reason added at the end. If your sheet already had a Status or Reason column, the new ones are called Exabloom Status and Exabloom Reason.

Your report, opened in a spreadsheet app
ABCDEF
1Parent NameMobileStudentNext lessonStatusReason
2Mrs Tan9123 4567EthanTue 4pmSUCCESS
3Mr Lim+65 9876 5432SaraWed 5pmSUCCESS
4Mrs Ng9111 2233KaiSUCCESS
5Mrs Tan9123 4567EthanThu 4pmSKIPPEDDuplicate of row 2
6Mr Ong6.59123E+10JunFri 3pmERRORInvalid phone number
The report opened in a spreadsheet app. The two shaded columns are the ones Exabloom added; row numbers in a Reason match your original file.

Every row ends up with one of these:

Status
What happened · Reason
SUCCESS
The message went out.
Reason: (blank)
SKIPPED
The number already appeared on an earlier row.
Reason: Duplicate of row 2
SKIPPED
Not a contact yet, and you chose to skip those rows.
Reason: Not in workspace
ERROR
The number could not be read.
Reason: Invalid phone number
ERROR
A template placeholder was empty and had no If empty text.
Reason: Empty value for {{list.Next lesson}} with no fallback
The clean-up loop
Filter the report on Status = ERROR, fix those rows in your original file, and upload just them as a second, small send.
Advanced · only if you need it

Change how the file is read, or keep a column

Most sends never need this section. It covers the Change links in step 1, saving a column onto your contacts, and what happens if you swap the file halfway.

1

Change a decision under How we read your file

Click Change next to any row and a control opens in its place; click Done to close it. The count at the top updates straight away.

app.exabloom.com/contacts
Send message to a list
Step 1 of 3 - Upload your list
125 people will get this message
How we read your file
Phone columnMobile · auto-detectedChange
Name for new contactsParent NameChange
Rows not in your workspaceCreate new contactsChange
Repeated numbers1Send once per numberOnly the first row of each repeated number is sent - the rest are listed in the report.2Done
First rowColumn headingsChange
Repeated numbers, opened. ① Untick Send once per number to send every row. ② Done.
  • Phone column: which column the messages are sent to.
  • Name for new contacts: used only when a number isn’t a contact yet. The value is split at the first space into first and last name. Not set, and the contact is named after the number.
  • Rows not in your workspace: Create new contacts (the default) or skip those rows. Leave it on for anything you want replies to. With it off, the headline says “Up to” because the exact count is only known once it sends.
  • Repeated numbers: Send once per number (the default, first row wins) or send every row.
  • First row: Column headings or Data, not headings. With no headings, columns are named Column 1, Column 2 and so on.
  • Sheet: only shown when the workbook has more than one. The first sheet is read unless you pick another.
2

Save a column onto your contacts

If a value is worth keeping, like a student’s name or a class, you can write it onto each contact as part of the send. It’s off for every column until you tick one, and it’s the only thing in the dialog that changes your contacts’ details.

app.exabloom.com/contacts
Send message to a list
Step 1 of 3 - Upload your list
Your columns
Parent NameMobilematches contactsStudentClassNext lesson
Mrs Tan9123 4567EthanP5 MathsTue 4pm
Mr Lim+65 9876 5432SaraP5 MathsWed 5pm
11 column also saved to contacts

Off for every column. Tick one to write that row’s value onto the contact when the blast is created - that is the only thing here that touches your CRM.

Parent Name
2Student
3
Student name · new

This field doesn’t exist yet - it’s created when you send.

Class
Next
① Also save a column to a contact field (it reads “1 column also saved to contacts” once one is ticked). ② Tick the column. ③ Pick the contact field it goes into.

You can pick a built-in contact field, one of your custom fields, or create a new custom field right there. A new one shows · new and is only created when you send; close the dialog and nothing is created. Each contact field takes one column.

Watch out
This overwrites whatever the contact already has in that field. If your spreadsheet is older than what’s in Exabloom, don’t tick it.
3

If you replace the file halfway

You can go Back to step 1 and click Replace at any point. Any chip that pointed at a column the new file doesn’t have turns into a red Deleted variable, and Send stays switched off until you remove it or pick the matching column. Otherwise someone would read a raw {{list.Term 3 grade}}.

Hi Parent Name, your child’s Deleted variable result is ready.

This message uses a column your file no longer has

Term 3 grade - remove it or pick the matching column from the variable menu before sending.

A message still pointing at a column the new file doesn’t have.

Behind every chip is a plain token like {{list.Parent Name}}. You can type or paste one, and it turns into a chip as soon as it matches a column.

Cookbook

Setups to copy

Four common jobs. The two settings that change most between them are Repeated numbers and Rows not in your workspace.

Lesson or appointment reminders
One row per booking, with the time written the way you want it read (“Tue 4pm”, not a raw Excel date). Set Repeated numbers to send every row: a parent with two children needs two reminders.
Payment or renewal chasers
Columns for the amount and the due date. Leave Send once per number on so nobody is chased twice, and open “rows not being sent” to see which row won each duplicate.
Event invite to a new list
Most numbers won’t be contacts yet. Leave Create new contacts on and set Name for new contacts to your name column, so replies land in your Inbox against a named contact.
Results or grades
A sensitive one. Page through several rows in the preview, and give every placeholder an If empty, use value. A results message with a hole in it is worse than a late one.
Before you rely on it

Good to know & pitfalls

  • There is no draft. The file, the settings and the message live in the dialog only. Closing it with the X, pressing Esc or clicking the dimmed page behind it throws everything away. Have your template approved and your file ready before you start.
  • Format the phone column as Text before you save the file. Excel turns long numbers into 6.59123E+10, and the real number is gone. Those rows are left out.
  • On WhatsApp Business, a blank placeholder stops the row. WhatsApp refuses a template with an empty value, so that person gets nothing and the report says Empty value for … with no fallback. Fill every If empty, use box.
  • “Don’t send to contacts from past campaigns” has no effect here. The button shows on the schedule, but a list send ignores it today. Use Repeated numbers and your own spreadsheet to decide who is on the list.
  • Sending starts at your Start on time, not instantly. It goes out in batches inside the days and hours you set. Watch it on the Bulk Actions page.
  • Your spreadsheet is not saved to your contacts. The columns exist for this send only, unless you tick one under Also save a column to a contact field. New numbers do become contacts while Create new contacts is on, so their replies reach your Inbox.
  • Numbers without a country code use your workspace’s default country. If the list mixes countries, write the code into every number (+6591234567).
  • Every column needs a heading. A column with a blank heading is ignored, a repeated heading gets a “(2)” added, and only the first 60 columns are read (headings up to 64 characters). Delete columns you don’t need before uploading; the variable menu gets easier to use too.

First big send coming up?

Send us the file and we’ll check it with you before it goes out. Our Singapore-based team is one message away.