How to Send Bulk SMS from Excel or CSV, Step by Step
Send bulk SMS from an Excel or CSV file: prepare the sheet, clean numbers, merge names, pick sender IDs, test, schedule by time zone and read delivery reports.
By OmniChannels.ai Editorial Team · Reviewed by BroadNet Messaging Solutions Team
SMS & OTP
Short answer
To send bulk SMS from Excel or CSV, put one phone number per row in international E.164 format, add a country column and merge fields such as first name, remove duplicates, invalid numbers and opted-out contacts, save as CSV, upload it to your messaging platform, preview the merged text, send a test to your own number, then send or schedule by time zone and export the delivery report.
On this page
- How do I send bulk SMS from an Excel or CSV file?
- How should I prepare the spreadsheet?
- How do I stop Excel from damaging phone numbers?
- How do I clean the list before sending?
- How do merge fields affect message length and encoding?
- Which sender ID should I use for each country?
- How do I test a bulk SMS before sending?
- How do I schedule by time zone?
- How do I read delivery reports and export them?
- Worked example: an order-update campaign
- What are the common mistakes?
- How OmniChannels.ai helps
Key takeaways
- One number per row in E.164 format (+ and country code, no spaces) is the single most important preparation step.
- Excel can silently damage numbers: it drops leading zeros and shows long numbers in scientific notation unless the column is formatted as Text.
- Merge fields change message length, and one Arabic or emoji character moves the whole SMS to Unicode, so preview the longest merged row before sending.
- Clean before you send: remove duplicates and opted-out numbers, and consider an HLR lookup for invalid or inactive numbers.
- Send a test to your own number first, schedule each country inside its own time window, and export the delivery report afterwards.
This guide is for marketing and operations teams that keep customer lists in Excel or CSV and want to send a personalised SMS campaign without writing code. It walks through preparing the sheet, cleaning it, handling encoding and sender IDs, testing, scheduling and reading the results.
How do I send bulk SMS from an Excel or CSV file?
You prepare a list, upload it to a messaging platform, write one message with merge fields, check a preview, and send or schedule. Excel only holds the data. The platform does the sending.
- Prepare the sheet: one number per row, in E.164 format, with a country column and merge fields.
- Clean it: remove duplicates, invalid numbers, landlines and opted-out contacts.
- Save as CSV if the platform requests it.
- Upload and map columns: tell the platform which column holds the number and which hold merge fields.
- Write the message and check length and encoding.
- Choose the sender ID for each country.
- Send a test to your own phone.
- Send or schedule the campaign.
- Read the delivery report and export it.
The sections below take these steps in turn.
How should I prepare the spreadsheet?
Use one row per recipient and one column per piece of information. A good layout looks like this:
| phone | country | first_name | order_no | language |
|---|---|---|---|---|
| +971501234567 | AE | Layla | 100245 | en |
| +966512345678 | SA | Omar | 100246 | ar |
| +254712345678 | KE | Amina | 100247 | en |
Rules that save trouble later:
- One number per cell, one number per row. Do not put two numbers in a cell.
- E.164 format. The ITU-T Recommendation E.164 defines the international number format: a country code followed by the national number, with at most 15 digits. Written for messaging, that means a plus sign, the country code and the digits, with no spaces, brackets or dashes. Our guide to the E.164 phone number format covers conversion rules, and the phone number formatter converts local numbers.
- A country column. It lets you pick sender IDs and schedule by country. Use ISO two-letter codes.
- Merge fields in their own columns, named without spaces, such as
first_name. - One header row, no merged cells, no blank rows and no totals underneath.
- A language column if you send Arabic and English variants.
How do I stop Excel from damaging phone numbers?
Format the phone column as Text before you type or paste numbers. Otherwise Excel treats them as numeric values.
Microsoft documents that Excel removes leading zeros and shows long numbers in scientific notation, because it stores up to 15 digits of numeric precision. A phone number such as 0501234567 can lose its zero, and a long number can turn into something like 9.71501E+11. Microsoft's own fixes are to apply the Text format to the cells before entering numbers, or to start an entry with an apostrophe. Numbers already entered must be typed again after the format is changed.
If you open a CSV file directly, Excel applies its default data formats to each column. Microsoft suggests the From Text/CSV import or the Text Import Wizard when you need to keep a column of numbers with leading zeros as text. A plus sign typed in a numeric cell may not survive either, so check the first characters of the column after any edit.
When you save, choose a CSV format. If your file contains Arabic or accented names, check that the platform reads the encoding correctly by previewing a few rows after upload; garbled names mean the encoding was lost.
How do I clean the list before sending?
Clean first, because every bad row costs money or damages your sender reputation. Work through this checklist:
- Normalise to E.164. The same person written as 050 123 4567 and +971501234567 is two rows until you convert both.
- Remove duplicates. Sort by the phone column and delete repeats. OmniChannels.ai also filters duplicates at upload, but a clean file is easier to audit.
- Remove invalid numbers. Too short, too long (over 15 digits), letters in the cell, or a country code that does not match the country column.
- Remove landlines that cannot receive SMS. An HLR or number lookup can tell active mobile numbers from inactive or fixed ones. See HLR lookup explained.
- Remove opted-out contacts. Check your suppression list for every send, not once a year. See opt-in consent for multichannel campaigns.
- Keep only consented contacts for promotional sends.
- Save a copy of the original so you can trace what you removed and why.
How do merge fields affect message length and encoding?
Merge fields make the final text longer or shorter per recipient, and an Arabic name or an emoji can change the encoding of the whole message.
An SMS carries 140 bytes of text. In the GSM 7-bit alphabet that is 160 characters, and in Unicode (UCS-2), which Arabic and emoji need, it is 70. Longer messages are split into linked segments of 153 GSM-7 or 67 Unicode characters, and each segment is billed. These figures come from 3GPP TS 23.038 and 23.040. Our SMS character limits guide explains them in full.
What this means for a spreadsheet send:
- A template that fits in 160 characters with a 5-letter name may spill into two segments with a 15-letter name.
- One row with an Arabic name moves that row's message to Unicode, so the same template needs 70 characters or fewer to stay in one segment. Plan separate English and Arabic templates using the language column.
- Smart quotes pasted from a word processor can also push text out of the GSM alphabet.
- Count the template with the longest realistic values. The SMS character counter shows encoding and segments.
Which sender ID should I use for each country?
The sender ID is what the recipient sees as the sender, and the rules differ by country. Some countries require an alphanumeric sender ID to be registered before it works, and some do not support alphanumeric senders on all networks. Use your country column to see which ID applies to each batch.
Check the sender ID hub for each destination's format and registration notes. Registration lead times apply, so start early. Our team prepares and files sender ID registrations with you, and approval stays with the operators and regulators. See sender ID types explained.
How do I test a bulk SMS before sending?
Send a test to your own number, and check what a recipient would see. A test catches problems that a spreadsheet hides.
- Add two or three of your own numbers as rows in a test file, one with a long name and one in Arabic if you use it.
- Upload the test file and check the preview of the merged message.
- Send it and read the message on a real handset.
- Check: the name is filled in, no
{first_name}placeholder is left, the sender ID is correct, the link opens, the opt-out wording is present for promotional sends, and the message arrived as one message rather than in parts. - Fix the sheet or template, then upload the real list.
Test access in OmniChannels.ai goes to your own verified numbers, so a test send fits the onboarding flow. There is no instant self-serve signup; our team sets your account up.
How do I schedule by time zone?
Split the sheet by country and schedule one batch per country, so each batch lands at a suitable local time. Use the country column to filter, save each filtered list as its own file, and upload each with its own schedule.
For promotional SMS, several regulators publish sending-hour limits, and the recipient's local time decides. For example, the UAE bars marketing messages from 21:00 to 07:00. See SMS sending hours by country for the markets we hold rules for. Transactional messages such as order confirmations are not usually bound by those promotional windows.
Leave a margin before the end of a window, because delivery is not instant.
How do I read delivery reports and export them?
Open the campaign's delivery report, filter it, and export it as CSV. OmniChannels.ai offers summary and advanced delivery reports with filters and CSV export.
The platform reports normalised statuses: SUBMITTED, SENT, DELIVERED, FAILED and REJECTED (READ applies only where the channel reports reads). See message delivery statuses explained and the delivery report decoder.
After each send:
- Join the export to your original sheet on the phone column.
- List FAILED and REJECTED rows, group them by reason and country, and fix the cause (wrong format, blocked sender ID, inactive number).
- Remove numbers that fail repeatedly from the next list.
- Add opt-out replies to your suppression list.
- Keep the CSV as a record of the send.
Worked example: an order-update campaign
"Souq Rafiq" (synthetic), a UAE retailer, wants to tell 3,000 customers in the UAE, Saudi Arabia and Kenya that a loyalty offer ends on Friday.
- The marketing manager exports customers from the CRM into Excel and formats the phone column as Text.
- She converts numbers to E.164 and adds a country column and a language column. The Arabic rows get an Arabic template; the rest get English.
- She removes duplicates, rows with invalid lengths and the opt-out list. An HLR lookup flags inactive numbers, which she also removes.
- She counts both templates with the longest first name. The English one fits one segment; the Arabic one is checked against 70 characters.
- Sender IDs are chosen per country from the sender ID hub.
- She uploads a three-row test file, reads the preview and sends it to her phone.
- She splits the real sheet into three country files and schedules each for late morning local time, inside each country's rules.
- After the send she exports the delivery report as CSV, joins it to the sheet and removes numbers that failed.
What are the common mistakes?
- Leaving the phone column as a number, so leading zeros vanish.
- Local-format numbers with no country code.
- Duplicate rows, so one customer receives the message twice.
- No test send, discovering a broken merge field after 3,000 messages.
- Sending Arabic and English in one template without checking encoding.
- One schedule for every country, ignoring local time and sending-hour rules.
- Skipping the opt-out check or using an old suppression list.
- Ignoring the delivery report, so the same bad numbers stay in the list.
- Treating landlines as mobiles.
How OmniChannels.ai helps
OmniChannels.ai campaigns let you upload an Excel or CSV list, preview the message, filter duplicates and schedule the send. Delivery reports have summary and advanced views with filters and CSV export. BroadNet delivers A2P SMS over direct operator connectivity, supports Unicode and Arabic, and offers HLR and number lookup. Our team prepares and files sender ID registrations with you. See the SMS channel, or contact us to set up an account and a test send.
Frequently asked questions
Can I send bulk SMS directly from an Excel file?
Yes, through a messaging platform that accepts spreadsheet uploads. You prepare the sheet, save it as CSV if the platform asks for it, upload it as the recipient list, write the message with merge fields, preview it, and send or schedule. Excel itself does not send SMS; it only holds the list.
What format should phone numbers be in for a bulk SMS upload?
Use E.164: a plus sign, the country code and the national number with no spaces, dashes or leading trunk zero, for example +971501234567. E.164 numbers contain at most 15 digits. A country column helps the platform apply the right sender ID and sending rules. Store the column as Text so Excel does not alter the values.
How do I personalise bulk SMS from a spreadsheet?
Add a column for each field you want to insert, such as first_name or order_number, and reference the column in the message as a merge field. Keep each value short and clean, because the merged length changes the segment count. Always preview rows with the longest values and with Arabic or special characters before you send.
How do I remove duplicates and invalid numbers before sending?
Normalise every number to E.164 first, because the same number written two ways looks like two contacts. Then remove duplicate rows, rows with too few or too many digits, and numbers on your opt-out list. For inactive or landline numbers, run an HLR or number lookup. OmniChannels.ai also filters duplicates at upload.
Can I schedule a bulk SMS from a CSV file for different time zones?
Yes. Split the sheet by country and schedule one batch per country so each lands at a suitable local time. Some countries restrict the hours for promotional SMS, so check the destination's rule first. Transactional messages are not usually bound by those promotional windows.
How do I get a delivery report for a bulk SMS?
Open the campaign's delivery report, filter by status, country or date, and export it as CSV. Statuses such as SUBMITTED, SENT, DELIVERED, FAILED and REJECTED show what happened to each number. Match the export against your original sheet to find numbers to correct or remove before the next send.
Sources
- Recommendation ITU-T E.164: The international public telecommunication numbering plan
- Keeping leading zeros and large numbers — Microsoft Support
- Import or export text (.txt or .csv) files — Microsoft Support
- 3GPP TS 23.038: Alphabets and language-specific information
- 3GPP TS 23.040: Technical realization of the Short Message Service (SMS)
Keep reading
More guidesSMS & OTP
10DLC Registration Guide: Brand, Campaign and Compliance
10DLC registration explained: The Campaign Registry, brand and campaign steps, vetting, use cases, throughput, opt-in and opt-out, and rejections.
10 min read
SMS & OTP
Bulk SMS in Ghana: NCA, Sender ID and Consent Guide
Bulk SMS Ghana guide: NCA context, sender ID registration with MTN, Telecel and AT, Data Protection Act (Act 843) consent, OTP vs promo and GSM-7 text.
10 min read
Compliance
SMS Sending Hours by Country: Promotional Quiet Hours
SMS sending hours by country: published promotional quiet hours for 15 markets with sources, transactional exemptions, time zones and how to schedule.
9 min read
