How to use Send SMS (queued) in HubSpot workflows
Send SMS (queued) is the default recommended workflow extension for sending SMS from HubSpot. It is designed for marketing, reminders, confirmations, and any message where a 5 to 15 second delivery latency is acceptable. All safeguards are on by default so accidental over-sending is hard. The action works in both contact-based and deal-based workflows.
When to use it
- Marketing messages to lists of contacts enrolled in a workflow.
- Appointment reminders and confirmation messages.
- Re-engagement campaigns.
- Any workflow SMS that is not time-critical (for OTP or security alerts, use Send SMS (instant) instead).
Contact and deal workflows
You can add this action to a contact workflow or a deal workflow. In a deal workflow, the action looks up the deal's primary associated contact and uses that contact for opt-out checks and logging. The recipient number still defaults to the contact's mobile phone, or you can point it at a property on the deal or contact.
Input fields
Sender (required). The sender name displayed on the SMS. Must exactly match a sender configured under SMS Campaigns > Settings.
Recipient number. Defaults to the enrolled contact's mobile phone. Point it at a different contact or deal property if you store the number elsewhere.
Message (required). The SMS body. You can use HubSpot personalization tokens such as kompis or any contact property.
Opt-out property (optional). The internal name of a HubSpot property that says whether the contact has opted in. Leave it empty to rely only on the Brave Tools platform opt-out (see safeguards below). If you do set it, the value is read as an opt-in: the SMS is sent only when the property is true, yes, or 1. A value of false, no, empty, or 0 skips the send. If the property cannot be checked for any reason (for example a typo in the name, or the property does not exist), the action fails visibly so the problem is never hidden.
Type the internal name as plain text, for example sms_subscription_brave. Do not use HubSpot's token or property picker that appears when you click into the field. The picker inserts a token that resolves at runtime to the property's value (such as "No") rather than its name. The action detects this and fails with a clear message. To find the internal name in HubSpot: go to Settings > Properties, search for your property, expand it, and copy the value labelled "Internal name".
Transactional message (optional, default off) and I confirm this is transactional, not marketing (optional, default off). These two checkboxes work together. When both are ticked, the message is treated as transactional: no unsubscribe footer is added, and the platform opt-out and opt-out property checks are skipped. If you tick only one of the two, the action fails with a clear message telling you to tick both or neither. This two-key pattern exists so a marketing message cannot accidentally bypass opt-out. Compliance with GDPR and local regulations is the workflow builder's responsibility, and every transactional send is audited. Note that hard duplicate protection and the platform abuse floors still apply even to transactional messages.
Dedup policy (required, dropdown). Default: Once per enrollment (recommended). HubSpot's callback ID uniquely identifies each enrollment, so re-runs of the same enrollment are skipped. Other options:
- Once per day: useful for daily reminders.
- Once per workflow (ever): one-time announcements to a list.
- None, allow repeat sends (unsafe): only for cases where a repeat is genuinely intended. Selecting this reveals a required confirmation checkbox. Note that hard duplicate protection (below) still prevents the exact same message going to the same number twice.
Preferred send time (optional). An earliest time of day in HH:MM (24 hour) format. If the workflow fires before this time, the send waits until that time on the same day. If it fires after, the message goes straight away. It never pushes a message past midnight. When combined with quiet hours, the later of the two windows applies.
Quiet hours (optional). Off by default. Set a start time and end time in HH:MM format (24 hour), an IANA timezone string such as Europe/Stockholm, and choose Delay to next allowed time (recommended) or Skip this send. You must set both the start and the end, or leave both empty. Setting only one fails the action with a clear message, so quiet hours are never half-configured and silently inactive.
Dry run (optional, default off). When on, the message is enqueued and marked in your activity log, but no real SMS is delivered and no credits are consumed. Useful for testing a new workflow before flipping it on for real.
The unsubscribe footer
On plans that include the Brave Tools opt-out service (Professional and Enterprise), the off.nu unsubscribe footer is always added to queued workflow SMS, so your recipients can always opt out. The only way to omit it is to mark the message transactional with the two checkboxes above. On other plans, the footer follows your account's unsubscribe setting as before. The old "Skip unsubscribe footer" checkbox has been removed.
What the safeguards do
The queued action layers multiple checks before actually sending. If a check skips the send, the row is logged with a skip reason and the workflow continues without stalling. If a check cannot be verified (for example a broken opt-out property), the action fails loudly instead of guessing.
- Platform opt-out: if the recipient unsubscribed via the Brave Tools opt-out link, the message is skipped. Checked against both the contact and the phone number. On by default and only skipped for a transactional message.
- Opt-out property: if you set one, it is read as an opt-in before sending. Any verification failure fails the action visibly rather than sending or skipping silently.
- Hard duplicate protection: the exact same message (same sender, same message text, same number) is never sent twice from your portal, ever. This is a permanent, database-level guarantee that applies even when the dedup policy is None and even to transactional messages. A blocked repeat is logged as skipped_hard_dedup. If a send fails, its lock is released so a genuine resend of the same text can go through. To intentionally re-send to repeat recipients (for example a new show date), change the message text, for example by adding a date token.
- Dedup policy: the softer per-enrollment, per-day, or per-workflow rule you picked.
- Quiet hours and preferred send time: the send is delayed to the next allowed time (or skipped), whichever window is later.
- Platform abuse floors: 5 messages per recipient per 10 minutes, and 10 000 per workflow per hour. These cannot be bypassed.
Output fields
smsSent: true if the message was enqueued or sent, false if skipped.
smsStatus: a short status string. Possible values include queued, sent, skipped_opted_out_platform, skipped_opted_out_property, skipped_hard_dedup, skipped_dedup, skipped_quiet_hours, skipped_platform_floor.
All skip outcomes return SUCCESS to HubSpot so your workflow does not stall. A genuine configuration error (such as a broken opt-out property or half-configured quiet hours) returns a visible failure so you can fix it. The reason is surfaced in the workflow's output log and in the Workflow SMS activity dashboard.
Where to see results
All sends appear in Brave Tools under SMS Campaigns > Workflow SMS, grouped by day.