Documentation
Overview What you need Connect Twilio First send Troubleshooting Docs Support ← Back to product

Quickstart: from a spreadsheet to sent messages

Six parts, about five minutes. You install the add-in for Microsoft Excel, connect your own Twilio account, prove it works with a real test text to your own phone, and then send a batch straight from a selected range.

📲 What you end up with

A sheet where the first column holds phone numbers and the second holds message text, and a delivery status written back into the column immediately right of your selection, one cell per row. Messages go out through your own Twilio account at Twilio's own rates. We never relay, resell or mark up traffic, and Twilio bills you directly.

Before you start

What You Need

✅ Have these ready

  • Microsoft Excel: on Windows or Mac with Microsoft 365, or Excel on the web. The add-in does not run on Excel for iOS or Android.
  • Your own Twilio account, with an SMS-capable number you have bought or verified in it, or a Messaging Service whose SID starts with MG.
  • Your Twilio Account SID and Auth Token, both on the Twilio Console dashboard. The token is hidden behind a "show" toggle.
  • Your own mobile number in E.164 format, for example +4520304050. Part 4 sends a real test message to it.
  • An email address and a password for your free Bulk SMS Sender account, used for sign-in and plan status.

You do not need a Twilio API key, a webhook, a public URL or anything installed on a server. The free tier covers 25 messages per calendar month with no card, which is plenty to work through this guide.

Part 1

Install the Add-In and Open the Task Pane

🏪 Not on Microsoft AppSource yet

Bulk SMS Sender is prepared for the store but the listing is still pending, so it cannot be installed from AppSource today. Until it is published you install it by sideloading the manifest, which is what the rest of this part covers. Email support@innovaapps.ai and we will send you the manifest file and the steps for your platform.

1

Get the manifest file

Ask us for manifest.xml at support@innovaapps.ai, telling us which Excel you use. It is a small XML file that points Excel at the add-in; there is nothing to install on your machine beyond it.

2

Sideload it into Excel

The steps differ by platform:

  • Excel on the web: Insert → Add-ins (Office Add-ins) → Upload My Add-in, and pick manifest.xml.
  • Excel on Windows: put manifest.xml in a local or network folder, add that folder under File → Options → Trust Center → Trust Center Settings → Trusted Add-in Catalogs, restart Excel, then go to Insert → My Add-ins → Shared Folder.
  • Excel on Mac: copy manifest.xml into ~/Library/Containers/com.microsoft.Excel/Data/Documents/wef/ and restart Excel.
3

Open the task pane from the Home tab

Once the add-in is loaded, a Bulk SMS Sender group appears on the Home tab of the ribbon. Click its button to open the task pane. The pane has four sections: 1 · Twilio setup, 2 · Send to selected range, 3 · Schedule and 4 · Account.

ℹ️ The task pane and the formulas share one session

The add-in uses a shared runtime, so =SMS.SEND and =SMS.STATUS run in the same page as the task pane and reuse its sign-in. That means the pane has to be opened, and you have to be signed in, before the formulas will work. A cell that says "Sign in first: open the Bulk SMS Sender task pane (Home ribbon) and log in." is telling you exactly that.

Part 2

Create Your Account

The add-in account is how the backend knows which encrypted Twilio credentials are yours and which plan you are on. It is separate from your Twilio login.

1

Enter an email and a password

In the task pane, fill in Email and Password and choose Create account. Passwords must be at least 6 characters. If you already have an account, choose Sign in instead.

2

If you forget the password

Type your email in the field, then choose Forgot password?. You will see "Password reset email sent. Check your inbox." and can set a new one from the link.

🔑 Email and password only

There is no single sign-on or social login, by design: popup-based OAuth is unreliable inside the Office webviews the add-in runs in. Once you are signed in, the pane shows your plan and a usage bar for the current month.

Part 3

Connect Your Own Twilio Account

Bulk SMS Sender is bring-your-own-Twilio. You paste your credentials once, they are encrypted at rest, and every message goes out on your own Twilio account and appears in your own Twilio console.

1

Copy your Account SID and Auth Token

Both are in the Account Info panel on the Twilio Console dashboard. The Account SID starts with AC followed by 32 hex characters; the Auth Token is 32 characters and is hidden behind a show toggle until you reveal it.

2

Decide what you are sending from

The From field takes one of two things:

  • an E.164 phone number you own in that same Twilio account, for example +15005550006 (find yours under Phone Numbers → Manage → Active numbers); or
  • a Messaging Service SID starting with MG, in which case Twilio picks the sender number from the service's pool for you.
3

Save the three fields

Paste all three into 1 · Twilio setup and choose Save Twilio credentials. On success you get "Credentials saved (encrypted). Now run the test below." and the Auth Token field clears itself.

The format of all three is checked before Twilio is contacted at all, so a typo is caught immediately rather than surfacing later as a failed send.

⚠️ All three fields are required

Saving without a From value fails with "From must be an E.164 phone number (e.g. +15005550006) you own in Twilio, or a Messaging Service SID (MG…)." The other two format errors read "Account SID must start with "AC" followed by 32 hex characters…" and "Auth token looks too short. Copy the 32-character Auth Token from the Twilio Console dashboard."

🔒 How your credentials are stored

Your Account SID and Auth Token are encrypted at rest with AES-256-GCM under a key unique to your account, and are used only to call the Twilio API on your behalf. They are never displayed back to you, logged, or shared. Saving again simply replaces what is stored. Full detail is in the privacy policy.

Part 4

Run "Test my Twilio setup"

This is the step that saves the most time. Rather than discovering a misconfiguration halfway through a batch, four checks run in order and stop at the first failure, so you always get one specific thing to fix.

1

Enter your own mobile number

In Send a test message to, type your own mobile in E.164 format, for example +4520304050. Nothing runs without it: you will get "Enter your own mobile number in E.164 format (e.g. +4520304050) to receive the test message."

2

Choose "Test my Twilio setup"

Each check appears with a ✓ or an ✗ and a sentence explaining it. When all four pass you get "All checks passed. You are ready to send!" and a real text arrives on your phone.

The four checks, in the order they run, and what to do when one fails.
Check What it proves If it fails
1. Credentials Twilio accepted your Account SID and Auth Token, and the pane names the account it reached. An HTTP 401 means "Twilio rejected the Account SID or Auth Token". Copy both again from the Twilio Console dashboard, remembering the token is behind the "show" toggle.
2. Account active The Twilio account status is active, which it must be to send. Any other status is reported verbatim, for example suspended or closed. Check billing and suspension in the Twilio Console.
3. From number The number in your From field is actually owned by that Twilio account. Passes automatically when From is a Messaging Service SID, since Twilio picks the sender. "This Twilio account does not own …", followed by up to three numbers the account does own. Buy or verify the number in Twilio, or correct the From field.
4. Test send A real SMS is sent to the number you entered, so the whole path is proven end to end. Twilio's own code and message are shown, for example Twilio error 21608 for an unverified recipient on a trial account.

✅ Test sends are free

The test message is not counted against your 25-message monthly free allowance, because it is onboarding, not campaign traffic. Twilio still charges you its normal per-message rate for it, as it does for every message you send.

⚠️ On a Twilio trial account

Trial accounts can only text numbers you have verified in the Twilio Console. If check 4 fails with Twilio error 21608, verify the recipient there or upgrade your Twilio account. That is Twilio's restriction, not ours.

Twilio's test credentials and the magic number +15005550006 are also worth knowing about, but they will not get you a green run here: check 3 finds no owned numbers and check 4 cannot deliver a real message. Use your live credentials for this part.

Part 5

Send Your First Batch From a Range

What a good sheet looks like

The contract is simple and strict: column one is the phone number, column two is the message text, and one row is one recipient. Anything further right is ignored by the parser and is where the status lands.

Select A1:B4. The header row is detected and skipped, and the statuses in column C are written by the add-in after you send; you never type them.
A B C
1 Phone Message
2 +4520304050 Hi Ana, order #1042 ships today. queued · SM7f3…
3 +12025550143 Hi Ben, order #1043 ships today. queued · SMa91…
4 20304050 Hi Cara, order #1044 ships today. skipped: …missing its country code

Three things that sheet demonstrates:

1

Select the range and preview

Select at least two columns in the sheet, then choose Preview selected range in 2 · Send to selected range. You get a line like Selection A1:B4: 2 message(s) ready., a note if a header row was skipped, the first five problem rows, and a preview of the first message.

Selecting a single column fails immediately with "Select at least two columns: phone numbers in the first, message text in the second."

2

Fix anything the preview flags

Row numbers in the preview are counted from the top of your selection, not from the top of the sheet. If your selection starts at row 10, "Row 3" is sheet row 12.

Reasons you may see: Phone number is missing., Message text is empty., "…" is not a valid phone number. and "…" is missing its country code. Use E.164 like +4520304050. Completely blank rows are ignored, so selecting whole columns is fine.

3

Send

Choose Send N message(s) now. Rows go out one at a time, with a running Sending 3 of 12… counter, and the pane finishes with Done: N sent. Statuses written next to your selection.

🚫 There is no undo

Pressing send delivers real text messages to real phones on your own Twilio account, and they cannot be recalled. Preview first, and consider sending to a two-row test range before a full list. You are the sender of record: obtaining recipient consent and honouring opt-outs where the law requires it is your responsibility.

📏 The limits that apply to a batch

  • A message body may be 1 to 1,600 characters, which is Twilio's concatenated-SMS ceiling.
  • The free tier allows 25 messages per calendar month, counted in UTC. When a batch trips the cap, the row that hits it gets an error: cell and every remaining row is written as skipped: free limit reached without further calls to Twilio, so nothing is sent unknowingly.
  • An identical recipient and body sent again within 60 seconds is treated as a duplicate: the original message SID comes back, no second text goes out, and your quota is not consumed.
Part 6

Read the Delivery Statuses

Statuses are written into the column immediately right of your whole selection, on the same sheet, aligned row for row. Select A1:B4 and they land in C; select A1:C4 and they land in D. Skipped header rows and blank rows get no cell at all.

What each status cell means.
Cell text What happened
queued · SM7f3… Twilio accepted the message and returned this SID. The word is whatever Twilio reported at creation, normally queued or accepted.
duplicate of SM… The same recipient and body went out within the last 60 seconds. No second message was sent; this is the original SID.
skipped: <reason> The row could not be parsed. The reason is the one shown in the preview.
error: <message> Twilio or the backend refused this specific row, with Twilio's own code and message where there is one.
skipped: free limit reached An earlier row exhausted the monthly free allowance, so the rest of the batch was stopped. The same happens as skipped: Twilio not connected or skipped: Twilio credentials rejected.

⚠️ queued is not delivered

The status written during a batch is Twilio's status at the moment it accepted the message. Nothing polls afterwards, so those cells do not change on their own. To see where a message actually ended up, refresh it with the status formula below.

Refreshing a row later

Point =SMS.STATUS at a SID to ask Twilio for the current state of that message:

=SMS.STATUS("SM7f3…")

It returns whatever Twilio reports (commonly queued, sending, sent, delivered, undelivered or failed) and appends Twilio's error code when there is one, as in undelivered (Twilio error 30003). This is a live lookup against your own Twilio account every time the cell calculates.

🎉 That is the whole loop

Select, preview, send, read the statuses. From here, the documentation covers scheduled sends, the two custom functions in full, and every limit in one place.

Troubleshooting

When Something Does Not Look Right

Most problems are Twilio configuration. Open the task pane and run Test my Twilio setup first, because it names the one thing to fix.

"Select at least two columns…"

"… is missing its country code. Use E.164 like +4520304050."

"Could not read the selection. Click a range in the sheet first."

"Twilio rejected the Account SID or Auth Token (HTTP 401)"

"This Twilio account does not own +1555…"

Twilio error 21608

"Monthly free limit of 25 messages reached."

A row says duplicate of SM…

A cell says "Sign in first: open the Bulk SMS Sender task pane…"

The task pane opens but stays blank

Support

Need Help?

📧 Contact support

For setup questions, access to the add-in, or anything the checks above did not solve:
Email: support@innovaapps.ai · Support page

It helps to include which Excel you use, the exact message the pane or the cell showed, and whether "Test my Twilio setup" passes all four checks. Never send us your Twilio Auth Token. We do not need it and cannot use it.

Also worth knowing before you scale up: Bulk SMS Sender is send-only by design. Replies land on your Twilio number and are visible in your Twilio console, and STOP and opt-out handling stays with Twilio on that number, where carriers require it to live. The documentation explains what that means in practice.

📖 Read the documentation