2
HubSpot CRM Workflows
2
Custom API Integrations
5
Coaches Covered
BetterWealth sells financial coaching services and books prospects into Clarity Calls and Strategy Calls through HubSpot CRM. The calls are assigned to one of five coaches, and each prospect is booking a conversation that can turn into a long-term coaching relationship, which means the first impression matters. The problem was that nothing happened between the moment a call was booked and the moment it was supposed to happen. There was no automated intro text from the coach and no reminder of any kind. Prospects would book and then hear silence until the call itself.
To fill that gap, coaches were manually texting prospects themselves. That meant the experience was entirely inconsistent. Different coaches handled it differently, some didn't do it at all, and at any volume it simply wasn't sustainable. The company was relying on individual effort to patch a gap that should have been handled by the system.
Last-minute bookings made the problem harder to solve, not just operationally but technically. If someone books a call two hours before it starts, you can't send them an intro text and then a reminder an hour later without it feeling spammy. Any automation that didn't account for that timing edge case would create a worse experience than doing nothing at all.
The solution was three HubSpot CRM workflows integrated with Aircall SMS, along with the supporting infrastructure needed to make them work reliably across five coaches and two call types.
Trigger
Clarity Call or Strategy Call booked in HubSpot CRM
Immediately
Personalized intro text sent from the assigned coach via Aircall SMS
Decision
Was the call booked within 4 hours of meeting time?
Reminder skipped
Avoids double-texting on same-day bookings
Reminder sent 2 hrs before the call
From the right coach via Aircall SMS
This logic runs for both Clarity Calls and Strategy Calls, each with its own workflow tree.
Each workflow branches by coach so the text always comes from the right person, with a separate path for each of the five coaches. The suppression logic checks whether the intro text and the meeting are less than four hours apart, and if they are, the reminder is skipped so the prospect doesn't get back-to-back messages.
Result
Every booked call gets the right text at the right time
From the right coach. No manual work. No double-texts.
Booking confirmation workflow: branches by coach, sends intro SMS, writes meeting time back to contact record
Three technical problems made this harder than a standard workflow build.
Problem 1
Meeting Data Lives on the Wrong Object
HubSpot stores meeting start times on the Meeting object, not the Contact, and native workflow logic can't read across that relationship. I wrote custom Node.js coded actions that query the HubSpot Associations v4 API, find the contact's next associated meeting, and write the start time to a contact-level property that feeds both the delay logic and the suppression branch.
Problem 2
Phone Numbers in the Wrong Format
Phone numbers in the portal were stored inconsistently across records, but Aircall requires E.164 format (+1XXXXXXXXXX) to send messages. I built an inline formatter using custom code that strips non-numeric characters and normalizes every number before any SMS action fires.
Problem 3
Execution Windows Broke the Delay Logic
HubSpot's execution windows conflicted with date-anchored delay logic, causing reminders to fire at the wrong time. I removed execution windows from the reminder workflows entirely and relied on calculated property delays instead.
Custom code action: fetches meeting start time via Associations v4 API and writes to contact property
Reminder workflow: suppression branch prevents double-texts on same-day bookings
The system now handles what coaches used to manage on their own. Every call that gets booked triggers a personalized intro text from the assigned coach, and prospects who book with enough lead time get a reminder two hours before the call. The suppression logic covers the last-minute booking scenario without anyone having to think about it.
The suppression logic, the phone formatter, and the custom Meeting API pull are all running in the background on every enrollment. Coaches are entirely out of the loop, and the experience is consistent regardless of who books or when.
Stack
Custom Code
Logic