How to send a transactional email from a HubSpot workflow
To send a transactional email from a HubSpot workflow, you need either HubSpot's Transactional Email add-on or an app that adds a transactional send action. HubSpot's built-in "Send email" action only sends marketing email, which skips anyone who has unsubscribed.
This guide walks through both routes, then builds one real example: a receipt that goes out when a deal closes.
Why the regular Send email action falls short
HubSpot workflows can send a marketing email to the enrolled contact. That's fine for nurture sequences. For a receipt, it has one serious gap: if the customer unsubscribed from your newsletter last year, HubSpot won't send them the receipt either.
Transactional email exists for exactly this. It's a relationship message the customer expects, so it goes out regardless of their marketing subscription status.
Route 1: HubSpot's Transactional Email add-on
If you have Marketing Hub Professional or Enterprise and the add-on ($600 a month), you can mark an email as transactional in the editor and send it from a workflow like any other email. Your HubSpot rep has to enable it. Read what it costs.
Route 2: A workflow action from an app
Cambium Transactional Email for HubSpot adds a Send transactional email action to the workflow editor. It works on any object, and you don't need Marketing Hub.
1. Build the email in HubSpot. Go to Marketing > Email and create a drag-and-drop email. Use personalization tokens for contact properties (there) and the contact's primary company (). Save it. [VERIFY: whether the email must be published, and what portals without Marketing Hub see in the editor]
2. Create a sender profile. In the app's settings, add a sender profile: the From name, the From address on your verified domain, and a reply-to address.
3. Add the action to a workflow. In the workflow editor, add Send transactional email. Choose the template and the sender profile from the dropdowns, then map the recipient's email address.
4. Branch on the result. The action returns a status, a message ID, and an error code. Add an if/then branch after it so a failed send creates a task instead of disappearing.
Example: a receipt when a deal closes
Say a deal moves to Closed Won and you want the buyer to get a receipt right away.
- Trigger: deal stage is Closed Won.
- Copy the deal amount and close date onto the associated contact, so the template can use them as contact tokens.
- Send transactional email, with the template "Receipt", the sender "Billing", and the recipient set to the associated contact's email.
- Branch on status. If it's anything other than
sent, create a task for the deal owner.
The receipt lands, and the send shows up on the contact's timeline.
Things that trip people up
The recipient has to be a HubSpot contact. The action looks up the contact by email so it can fill in tokens and check suppression. An address with no contact record fails with contact_not_found.
Tokens come from the contact and its primary company. Deal or ticket details need to be copied onto the contact first, as in step 2 above.
Custom modules may not render. Stick to HubSpot's standard modules (text, image, button, divider, columns). The action flags templates it can't render when you pick them.
Promotional content gets blocked. Every template gets an AI review. A "20% off your next order" banner in a receipt will fail it, and the review tells you which line to fix.
Frequently asked questions
Can the action send to more than one person?
Each action sends to one recipient. To notify two people, add the action twice with different recipients.
Can I attach a PDF?
Not on the base plan. Link to the file from the email instead, or store the link in a contact property and use it as a token.
What happens if the email bounces?
The bounce shows on the contact's timeline, and hard-bounced addresses are suppressed and flagged on the contact. The next send to that address returns suppressed instead of trying again.
Does it work on ticket and custom object workflows?
Yes. Map the email of the contact who should get the message, such as the ticket's associated contact.