Pepperwire

How to send SMS from a HubSpot workflow (2026)

Three ways to text contacts automatically from a HubSpot workflow — custom code, Zapier, or a marketplace app — with the plan requirements and real costs of each.

August 11, 2026 · 9 min read

You have a workflow that emails people. You want it to text them instead, or as well — because a demo reminder that gets read beats one that sits unopened in a promotions tab.

Open the action list in HubSpot's workflow editor and there's no "send SMS" sitting there waiting for you, unless you've bought something specific. There are four ways to get one, they cost wildly different amounts, and three of them have a requirement nobody mentions until you're halfway through.

Here's the honest comparison, then how to build it.

The four routes

RouteWhat it needsRoughly what it costsTwo-way?
HubSpot's SMS add-onMarketing Hub Professional or Enterprise, plus the add-onThe add-on on top of a Marketing Hub Pro subscription — a four-figure monthly floorLimited
Custom code action calling TwilioOperations Hub Professional, plus someone to write and maintain itOps Hub Pro, plus Twilio per messageNo
Zapier or a similar automation toolA Zapier plan with premium appsPer-task pricing that grows with volumeNo
An SMS app from the App MarketplaceA Professional-tier hub with workflowsTypically $20–$50/month flat, plus your own TwilioUsually

Prices move. Check them yourself before deciding — but the shape of the table has been stable for years, and it's the shape that matters.

Route 1: HubSpot's own SMS

HubSpot sells SMS as a Marketing Hub add-on. If you already run Marketing Hub Professional and you're doing marketing sends at volume, it's the tidiest option: it's native, it's supported, and the messages sit inside HubSpot's own reporting.

Three things catch people out:

  • The plan floor is high. The add-on requires Marketing Hub Professional or Enterprise. If you're on Sales Hub or Service Hub, this route means buying a second hub you didn't otherwise need.
  • It's US and Canada only at the time of writing. If you text customers in the UK, Australia, or most of Europe, this isn't available to you.
  • It's built for marketing sends. One number for the account, and a model shaped around campaigns rather than a rep having a conversation with a customer.

If you're already deep in Marketing Hub and you're sending campaigns, start here. If you're a sales or service team wanting to text individuals, keep reading.

Route 2: a custom code action calling Twilio

The developer answer. HubSpot workflows can run a small piece of Node or Python, so you write one that calls Twilio's API.

The catch is in the first sentence of HubSpot's own documentation for it: custom code actions require Operations Hub Professional. So does the webhook action, which is the other version of this idea. If you don't have Ops Hub, this route is closed no matter how comfortable you are with code.

If you do have it, the code is genuinely short:

const twilio = require("twilio");

exports.main = async (event, callback) => {
  const client = twilio(
    process.env.TWILIO_ACCOUNT_SID,
    process.env.TWILIO_AUTH_TOKEN,
  );

  const to = event.inputFields.phone;
  if (!to) {
    // Fail loudly. A silent skip here is a customer who never got told.
    throw new Error("Contact has no phone number");
  }

  const message = await client.messages.create({
    to,
    from: process.env.TWILIO_FROM_NUMBER,
    body: `Hi ${event.inputFields.firstname}, reminder about tomorrow.`,
  });

  callback({ outputFields: { messageSid: message.sid } });
};

That works, and for a single reminder it's fine. What it doesn't cover is everything around it:

  • Phone number formats. Twilio wants E.164 — +14155550123. Real CRM data is full of (415) 555-0123 and 415.555.0123. You'll write a normaliser, and you'll get it wrong for at least one country.
  • Nothing is logged. The message leaves, and there's no record on the contact's timeline. Six months later nobody can tell what was sent.
  • Delivery status never comes back. Twilio reports delivery asynchronously to a callback URL, and a custom code action has already finished by then. From HubSpot's point of view every message "succeeded", including the ones the carrier rejected.
  • Inbound is a separate project. When someone texts back, that message arrives at a Twilio webhook. Nothing in HubSpot is listening. Building that means hosting an endpoint somewhere, and now you have a service to run.
  • Your Twilio Auth Token lives in HubSpot's secret store. That's the master credential to your Twilio account. Use an API key instead — Twilio supports them precisely so that you can revoke one without rotating everything.

Teams take this route, then quietly replace it about six months later when somebody asks "did that customer ever reply?"

Route 3: Zapier

Trigger a Zap from HubSpot, send a Twilio message. Fast to build, no code, and worth doing if you need something working this afternoon.

Where it gets uncomfortable:

  • Twilio is a premium app on Zapier, so you need a paid plan.
  • Every message is a task, and per-task pricing gets expensive at volume in a way that flat pricing doesn't.
  • There's latency between the HubSpot event and the send. Usually fine for a next-day reminder, not fine for "we just received your form."
  • Replies still go nowhere. Same problem as route 2.
  • It's another system in the chain, and when a message doesn't arrive you now have three places to look.

Good for a prototype or a low-volume edge case. Poor as the thing your customer communication runs on.

Route 4: an app from the App Marketplace

Installing an SMS app gives you a real action in the workflow editor, the same as HubSpot's own actions. Most of them ask you to connect your own Twilio account, which means you pay Twilio's rate for carriage rather than a marked-up per-message price.

The differences between them are worth actually checking before you commit:

  • Does it have a workflow action at all? Several apps do inbox texting only. If automation is what you came for, check the feature list rather than assuming.
  • Per-message or flat pricing? Credit-based pricing looks cheap at the demo and stops being cheap the month you send a real campaign.
  • What happens when a number fails? You want delivery status back in HubSpot and a readable reason. "Sent" with no follow-up is the same blind spot as the custom code route.
  • Is inbound handled? If a customer replies, does it reach anybody?
  • Which HubSpot plan does the app itself need? The action needs a hub with workflows — Professional or above — but that's a much lower bar than Ops Hub Pro or Marketing Hub Pro.

Building the workflow

Whichever route you took, the workflow itself looks the same.

1. Make it contact-based. Texts go to people. A deal-based workflow has no phone number to reach for — if your trigger is a deal stage, use a contact-based workflow enrolled on the associated contact's properties, or branch from the deal to its contact.

2. Enrol carefully. Test enrolment on a single contact whose phone number is your own before you turn it on for everybody. Everyone who has ever built an SMS workflow has a story about the enrolment criteria that matched 4,000 people.

3. Add a delay if the timing matters. A reminder that arrives at 3am is worse than no reminder. If your contacts span time zones, either send in a window that's safe everywhere you operate, or branch on a time zone property.

4. Write the message like a person. 160 characters per segment, and longer messages are split and billed per segment. Say who you are — most people don't have your number saved. Give them something to do.

Hi Sam — this is Dana at Northwind confirming your call tomorrow
at 2pm. Reply STOP to opt out.

5. Handle the reply. Someone will text back, usually within a minute. Decide now where that lands: a shared inbox, or at minimum the contact's timeline so the next person to open the record can see it.

Two things that will actually stop your messages

A2P 10DLC registration. US carriers block business texts from unregistered numbers. Not delay, not filter — block. Registration takes about fifteen minutes to submit and one to two weeks to be approved, and it applies whichever route you chose. If you're building this for a US audience and you haven't started it, start it today. We wrote a walkthrough aimed at HubSpot admins rather than developers.

Consent. Automated marketing texts to US numbers need prior express written consent, and every message must honour STOP. This is the sender's obligation — yours — regardless of which tool sends it. Carriers ask to see your opt-in wording during registration precisely because they intend to enforce it.

What we'd do

We build Twilio SMS + Workflows, so treat this as a declared interest rather than an impartial verdict.

If you're already on Marketing Hub Professional and you're sending marketing campaigns in the US, use HubSpot's add-on — it's the least moving parts. If you have Operations Hub Professional, a developer, and a genuinely odd requirement, write the custom code action.

For everyone else — a sales or service team on a Professional hub that wants reminders going out and replies coming back — a marketplace app is the only route that doesn't require buying a hub you don't need. Ours puts a Send SMS via Twilio action in the workflow editor, logs every message on the contact's timeline, and reports delivery status back, for a flat monthly price with your own Twilio account underneath.

The workflow guide shows exactly what the action looks like once it's installed.