How to Send iMessage and SMS from HubSpot Workflows
HubSpot has email automations, ad integrations, and a CRM that handles most of the marketing and sales stack. What it does not have is a native messaging channel that supports iMessage. HubSpot’s built-in SMS add-on routes through traditional carriers, requires 10DLC registration, and cannot deliver iMessage.
senderZ adds iMessage and SMS as a workflow action in HubSpot. When a HubSpot workflow triggers — a deal stage change, a form submission, a contact property update — senderZ sends the message via iMessage when the recipient supports it and falls back to SMS automatically. Delivery status and replies are logged back to the HubSpot contact timeline.
This guide walks through the OAuth connection, workflow configuration, contact syncing, timeline logging, and practical use cases for sales and marketing teams.
What You Get
Once senderZ is connected to HubSpot, your workflows can:
- Send iMessage or SMS as a workflow action (just like sending an email).
- Use contact properties as message variables — first name, deal amount, company, appointment date.
- Log messages to the timeline — every sent message and reply appears on the contact record.
- Trigger workflows from replies — when a contact replies, HubSpot can start a new workflow, update a property, or notify a team member.
- Check iMessage capability — display whether a contact can receive iMessage, stored as a contact property.
All of this works within HubSpot’s existing workflow builder. No custom code, no external tools, no Zapier middleware.
Step 1: Connect HubSpot to senderZ
The connection uses OAuth 2.0. Navigate to the senderZ portal, select HubSpot from the integrations page, and click “Connect.” This redirects you to HubSpot to authorize access.
Using the API
curl -X POST https://api.senderz.com/v1/integrations/hubspot/connect \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"redirect_uri": "https://your-app.com/hubspot-callback",
"scopes": [
"crm.objects.contacts.read",
"crm.objects.contacts.write",
"timeline",
"automation"
]
}'
Using TypeScript
import { SenderZ } from "@senderz/sdk";
const client = new SenderZ({ apiKey: "YOUR_API_KEY" });
const connection = await client.integrations.connect("hubspot", {
redirect_uri: "https://your-app.com/hubspot-callback",
scopes: [
"crm.objects.contacts.read",
"crm.objects.contacts.write",
"timeline",
"automation",
],
});
// Redirect to connection.authorization_url
After authorization, senderZ securely stores the OAuth tokens (encrypted with AES-256-GCM) and maintains the connection. Token refresh happens automatically — you do not need to re-authorize unless you revoke access.
For more on getting started with the senderZ API, see the quickstart guide.
Step 2: Sync Contact Properties
Once connected, senderZ creates two custom properties on your HubSpot contacts:
senderz_imessage_capable— Boolean.trueif the contact’s phone number supports iMessage.senderz_last_message_channel— String. The channel used for the most recent message (imessageorsms).
These properties are updated automatically whenever senderZ sends a message to a contact or when you run a capability check.
To populate iMessage capability for your existing contacts in bulk:
curl -X POST https://api.senderz.com/v1/integrations/hubspot/sync-capabilities \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"list_id": "123",
"batch_size": 100
}'
This runs a capability check for every contact in the specified HubSpot list and updates the senderz_imessage_capable property. Cached checks (within the 24-hour window) resolve instantly. New checks take about 200 milliseconds each.
You can use the senderz_imessage_capable property in HubSpot lists, reports, and workflow branch logic. For example, create a smart list of all iMessage-capable contacts for targeted campaigns.
Step 3: Add Messaging to Workflows
In the HubSpot workflow builder, the senderZ action appears under “Integrations” in the action menu. Configure it with:
- Message body or template name — use HubSpot personalization tokens like
{{contact.firstname}}. - Channel —
auto(recommended),imessage, orsms. - Sender number — your dedicated number (Growth/Scale plans) or auto-selected from the pool.
Example: Lead Nurture Sequence
A common sales workflow sends a personalized text message after a contact fills out a form:
- Trigger: Contact submits “Request Demo” form
- Action (immediate): Send email confirmation
- Wait: 5 minutes
- Action: Send message via senderZ
- Body:
"Hi {{contact.firstname}}, thanks for requesting a demo. I'm {{owner.firstname}} from {{company.name}}. What time works for a quick call this week?" - Channel: auto
- Body:
- Branch: If reply received within 24 hours → notify deal owner. If no reply → send follow-up email in 2 days.
This workflow combines email and messaging in a single sequence. The text message arrives via iMessage for Apple device users, creating a personal, conversational touchpoint that email alone cannot match.
Example: Deal Stage Notification
When a deal moves to “Contract Sent,” notify the contact:
- Trigger: Deal stage changed to “Contract Sent”
- Action: Send message via senderZ
- Body:
"Hi {{contact.firstname}}, the contract for {{deal.dealname}} is in your inbox. Let me know if you have any questions — happy to jump on a call." - Channel: auto
- Body:
Example: Post-Purchase Review Request
- Trigger: Deal closed won
- Wait: 7 days
- Action: Send message via senderZ
- Body:
"Hi {{contact.firstname}}, how's everything going with {{deal.dealname}}? If you have a moment, a quick review would mean a lot: {{review_link}}" - Channel: auto
- Body:
Step 4: Timeline Logging
Every message sent through senderZ is logged as a timeline event on the HubSpot contact record. The timeline entry includes:
- Message body (or template name)
- Channel used (iMessage or SMS)
- Delivery status (sent, delivered, failed)
- Timestamp
- Message ID (for reference in the senderZ dashboard)
Inbound replies are also logged to the timeline. When a contact replies to a senderZ message, the reply appears as a timeline event with the full message body and the channel it was received on.
This gives your sales team a complete conversation history directly in HubSpot — no switching between tools.
Webhook-Based Timeline Updates
For real-time timeline updates, senderZ pushes delivery status changes via webhook:
curl -X POST https://api.senderz.com/v1/integrations/hubspot/webhook \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"events": ["message.delivered", "message.failed", "message.received"],
"hubspot_portal_id": "12345678"
}'
For webhook configuration details, see the webhooks documentation.
Step 5: Reporting
With the senderz_imessage_capable and senderz_last_message_channel properties on your contacts, you can build HubSpot reports that show:
- Channel distribution: What percentage of your contacts receive iMessage vs SMS?
- Response rates by channel: Do iMessage recipients reply more often than SMS recipients?
- Delivery success rates: How does delivery compare across channels?
- Engagement by workflow: Which workflows generate the most replies?
These reports help you understand the impact of adding iMessage to your communication stack and optimize your workflows accordingly.
Contact Sync and Compliance
senderZ syncs opt-out status bidirectionally with HubSpot:
- If a contact texts STOP in response to a senderZ message, senderZ marks them as opted out and updates the HubSpot contact property
senderz_opted_outtotrue. - If you mark a contact as “do not contact” in HubSpot, senderZ respects that flag and will not send messages to that contact.
Quiet hours are enforced automatically. Marketing messages sent through senderZ workflows will not be delivered between 8 PM and 8 AM in the recipient’s local time zone. The message is queued and sent at 8 AM the next morning.
For full compliance documentation, see the pricing page (all plans include compliance features).
Frequently Asked Questions
Does the senderZ HubSpot integration require the HubSpot SMS add-on?
No. The senderZ integration is independent of HubSpot’s native SMS add-on. You do not need to purchase or configure HubSpot’s SMS feature. senderZ connects directly via OAuth and adds its own workflow action.
Can I use HubSpot personalization tokens in senderZ messages?
Yes. Any HubSpot contact, company, or deal property can be used as a variable in the message body. Use the standard HubSpot token format: {{contact.firstname}}, {{deal.dealname}}, {{company.name}}, etc. senderZ resolves these tokens before sending. See the templates documentation for setup instructions.
How are replies attributed to the right contact in HubSpot?
senderZ matches inbound replies by phone number. When a reply comes in, senderZ looks up the phone number in your HubSpot contacts and logs the reply to that contact’s timeline. If the number does not match any contact, senderZ creates a new timeline event and optionally creates a new contact (configurable in integration settings).
What HubSpot plan do I need?
The senderZ integration works with HubSpot Professional and Enterprise plans that support custom workflow actions and timeline events. HubSpot Starter plans can use the integration for manual sends from the contact record but cannot use automated workflow triggers.
Can I A/B test message content?
Yes. Use HubSpot’s native workflow branching to split contacts into groups and send different message variants through senderZ. Track response rates per branch using the timeline events and contact properties. This gives you the same A/B testing capability for messaging that HubSpot provides for email.
Ready to add iMessage and SMS to your HubSpot workflows? Connect your account at senderZ.com and start sending from HubSpot in under 15 minutes.
For the full integration reference, visit the HubSpot integration page. For questions about customer support workflows, see the support solutions page.