Send WhatsApp messages from Excel with Power Automate
How Power Automate can send a WhatsApp message from Excel: set up the table, list the rows, get approval, retry safely, and the premium licence it needs.
- Written by
- By WavesFlo team
- Last updated
- Updated
- Reading time
- 8 min read
Power Automate can send WhatsApp messages from Excel only through a premium route, a third-party or custom connector or the HTTP action, as its catalogue has no Microsoft-published WhatsApp connector. Keep rows in an Excel table, read them with List rows present in a table, get a person's approval, then send with an Idempotency-Key so a retry can't send twice.
This guide builds that flow with WavesFlo's custom connector, step by step: preparing the workbook, choosing a trigger, approval, retries, the licence, and what happens after the flow finishes. If you'd rather build nothing, the last section compares it with a Google Sheets campaign that needs no Power Automate at all.
What you need before you start
- An .xlsx workbook in OneDrive for Business or a SharePoint document library. The Excel Online (Business) connector works with files there, up to 25 MB as of October 2026.
- The data formatted as an Excel table, not a plain range. The connector's row actions work on named tables.
- A Power Automate licence with premium connectors for whoever owns the flow. More on that below.
- The WavesFlo connector imported and connected, and at least one WhatsApp number linked by QR code from Linked devices.
- An audience that agreed to hear from you: the WhatsApp groups your numbers belong to, or individual contacts.
Format the Excel data as a table
- Put column names in the first row and keep them to letters and numbers, such as ID, To, Message and Status. The connector's Filter Query only accepts alphanumeric column names.
- Give every row a unique ID. Update a row finds rows by a key column, and when two rows share a value, only the first is updated.
- Select the data, choose Insert → Table, tick My table has headers, and name the table on the Table Design tab, for example Offers.
- Type Ready in the Status column of each row that should go. The flow reads those rows and writes Sent back once each has gone, so no row is sent twice.
Which Power Automate trigger should start the flow?
| Trigger | Runs when | Watch for |
|---|---|---|
| Recurrence | On a timetable, such as every weekday at 10:00 | The simplest choice: it only ever picks up rows marked Ready |
| Manually trigger a flow | Someone runs it from Power Automate | Good for one-off sends; still filter on Status |
| For a selected row, from Excel Online (Business) | Someone runs it for the row they picked in Excel | One row per run, chosen by a person |
| When a file is modified, from OneDrive for Business | The workbook is saved | Fires on every save, and Microsoft notes even a read-only Excel action can save a new version |
For a workbook in SharePoint, the file trigger is When a file is created or modified (properties only). File triggers fire more often than people expect, so pair them with the Status filter, or the same rows get read again and again.
Add the WavesFlo connector
WavesFlo's Power Platform connector is a custom connector, imported once from its Swagger 2.0 file. Authentication is an API key sent in the x-api-key header; issue the key in WavesFlo, scoped to what the flow needs. Run the Check a key and see what it can do action first: it confirms the connection works and lists the key's scopes. The connector setup guide has every screen.
How do you send WhatsApp messages from Excel, step by step?
- Add the trigger you chose. For a daily send, use Recurrence with an interval of 1 and a frequency of Day, starting at the hour you want.
- Add Excel Online (Business) → List rows present in a table. Pick the Location, Document Library, File and Table, and set Filter Query to Status eq 'Ready'.
- As of October 2026, the action returns up to 256 rows by default. For more, open its settings and turn on Pagination with a threshold above your row count.
- Add Approvals → Start and wait for an approval, type Approve/Reject - First to respond. Put the number of rows and a sample message in the details, and assign it to whoever signs off sends.
- Add a Condition that continues only when the outcome is Approve.
- Inside Apply to each over the rows, add the WavesFlo connector's Send a message action: the row's Message as the text, sent exactly as written, to the group or contact the row names, with an Idempotency-Key built from the row's ID.
- Finish the loop with Excel Online (Business) → Update a row: Key Column ID, Key Value from the row, and Status set to Sent.
- Test with one row, aimed at your own number or at a group that contains only your own team.
If a send is refused, the response says why. A 403 SEND_BLOCKED means the recipient opted out, or a member of the group withdrew consent, and no retry fixes it. A 429 means wait: its Retry-After header says how long, and its code is SEND_DEFERRED for quiet hours, a cooldown or a cap, or ACTION_CAP_REACHED once the number's daily budget is spent. Write the reason into the row's Status so someone can act on it. Leave Apply to each at its default of one row at a time: as of October 2026, the Excel connector allows 100 calls per connection per minute, and sending faster into WavesFlo gains nothing, because each number's hourly cap sets the pace anyway.
How do you stop Power Automate retries sending twice?
Power Automate retries failed actions by itself: on the premium plans this flow needs, the default policy makes up to 12 retries as of October 2026, at exponentially growing intervals. A send that timed out may already have gone, so an unprotected retry is a second message to every recipient.
Send an Idempotency-Key with every send to WavesFlo, and a retry carrying the same key within 24 hours returns the first result instead of repeating the action. Build the key from the row, not the clock: a key made with utcNow() changes when a failed run is resubmitted, and the resubmitted run then looks like a brand-new send.
Send: excel-offers-1042
Avoid: excel-offers-2026-09-29T10:00:03Z (a new value on every run)The Status column is the second guard: a row marked Sent never matches the Ready filter again. If you also start flows from WavesFlo's signed webhook events, deliveries arrive at least once; the webhooks guide covers verifying and deduplicating them.
Do you need a Power Automate premium licence?
Microsoft's rule is short: you need a premium or trial licence to run any flow that uses a custom connector, and a cloud flow runs on its owner's plan. Excel Online (Business) and Approvals are standard connectors, so the WhatsApp step alone creates the requirement, and the third-party WhatsApp connectors in Microsoft's catalogue are premium too. In practice the owner needs Power Automate Premium, previously called per user, or the flow needs a Process licence; the Power Automate that comes with Microsoft 365 isn't enough. WavesFlo doesn't charge for the connector itself: it is included on every plan, from Developer up (see pricing).
What happens after the flow finishes
Nothing waits in a queue once the flow ends: each message has either gone or been refused. Every send the flow makes passes the same sending rules as the dashboard: by default 500 sends a day and 60 an hour per number, quiet hours from 22:00 to 08:00, and opt-outs checked at send time. The default 24-hour cooldown per recipient also means two rows aimed at the same people on the same day won't both reach them that day. The daily limit guide explains each default.
The no-code alternative: a Google Sheets campaign
If the data can live in Google Sheets instead, there is nothing to build. A deal campaign reads a sheet shared as Anyone with the link, Viewer, and writes one message per row, with WavesFlo's own targeting, approval and pacing. The Google Sheets campaign guide walks through it. Working in n8n rather than Microsoft? The n8n workflows guide covers the same ground.
| What differs | Excel via Power Automate | Google Sheets campaign |
|---|---|---|
| What you build | A flow: trigger, list rows, approval, connector actions and write-back | Nothing: paste the sheet's link into a deal campaign |
| Licence | Power Automate with premium connectors | None beyond WavesFlo |
| Where the data sits | OneDrive or SharePoint, under your own sharing rules | A sheet anyone with the link can read, so it should hold offers, not phone numbers |
| The words | The row's text, sent as written | Written for each row from that row's own data |
| Writes back to the file | Yes, with Update a row | Never: WavesFlo only reads the sheet |
| What starts it | A schedule, a button, a selected row or a file save | The campaign's own schedule, including recurring runs |
| Pacing and opt-outs | Caps, cooldowns, quiet hours and opt-outs checked at send time | Enforced by the delivery engine |
This guide sends from Excel to WhatsApp. For the reverse, see saving WhatsApp messages to Excel.
Questions
Can Power Automate send WhatsApp messages?
Yes, through a premium route. As of October 2026 its catalogue has no Microsoft-published WhatsApp connector, so flows use a third-party WhatsApp connector, a custom connector such as WavesFlo's, or the HTTP action calling a WhatsApp service, and each needs a premium licence.
Why can't Power Automate find my Excel data?
The Excel Online (Business) actions work on tables. Select the data, insert a table with headers, give it a name, and keep the file in OneDrive for Business or SharePoint.
Why does List rows present in a table stop at 256 rows?
That is its default. Turn on Pagination in the action's settings; on premium licences it can page through up to 100,000 items, per Microsoft's limits as of October 2026.
Do I need a premium licence to send WhatsApp messages from Excel?
Yes, for the WhatsApp step. Any flow that uses a custom connector needs a premium or trial licence on the flow owner's account; the Excel and Approvals connectors themselves are standard.
How do I stop the flow sending the same message twice?
Give each send an Idempotency-Key built from the row's ID, and set the row's Status to Sent once the message has gone. A retry then returns the first result, and the Ready filter never picks the row up again.
Sources
- Microsoft Learn: Excel Online (Business) connector (checked 5 Oct 2026)
- Microsoft Learn: Limits of automated, scheduled, and instant flows (checked 5 Oct 2026)
- Microsoft Learn: List of all Power Automate connectors
- Microsoft Learn: Types of Power Automate licenses
- Microsoft Learn: Power Automate licensing FAQ
- Microsoft Learn training: Overview of HTTP connectors in Power Automate (checked 5 Oct 2026)
- Microsoft Learn: Create a custom connector from an OpenAPI definition