Move your workflows from HighLevel’s native SMS trigger and actions to the WhatsApp QR custom provider’s own triggers and actions.
If you connected WhatsApp the legacy way, it overrides your sub-account’s native SMS. Your workflows still say Send SMS and Customer Replied, but the messages go out over WhatsApp.That works. It just hides WhatsApp behind SMS - no attachments, no per-number routing, no WhatsApp filters, no reply-aware waits.The WhatsApp QR custom provider adds its own triggers and actions to the workflow builder, so your automations run on WhatsApp on purpose instead of by inheritance. This guide swaps them, one workflow at a time.
Nothing breaks if you do nothing. While the native SMS override is in place, native Send SMS keeps delivering over WhatsApp. Migrating is about gaining WhatsApp’s real capabilities, not repairing a broken setup.
Use the WhatsApp Settings dashboard to connect one or more instances
Until both are done, the WhatsApp triggers and actions will not appear on the Apps tab. If you cannot find them, you are either on the wrong tab or the app needs updating.
Every WhatsApp replacement lives on the Apps tab → WhatsApp provider app, never in the standard lists. Find Contact and Create Contact are HighLevel built-ins, already in every workflow.
Copy the workflow and rename it, for example “Lead Follow-Up - WhatsApp”. The original stays published and untouched while you build.
2
Swap the trigger, then resolve the contact
Replace Customer Replied with WhatsApp Inbound, then add Find Contact or Create Contact directly below it. Everything downstream depends on the contact existing.
3
Swap the actions
Use the table above. Re-insert variables with the tag icon rather than pasting them, so they bind to the right field.
4
Move dropped filters into the workflow
Tag checks, Intent Type, and Replied to Workflow become If/Else conditions after the contact step.
5
Publish the copy and test it on yourself
Message your connected number from your own phone and walk the whole path - reply arrives, contact resolved, message sends, internal alert lands.
6
Retire the original
Only once the new one is confirmed, set the old workflow back to Draft. Contacts already in it finish normally.
Never leave the old and new versions of the same workflow published at the same time - every contact gets messaged twice.
What you gain - filtering on Receiver Phone Number lets you run a different workflow per connected number, and the Message contains filter covers the keyword routing you did with Contains Phrase.
2. Resolve the contact: Find Contact or Create Contact
This step has no native equivalent, and skipping it is the number-one migration mistake. Customer Replied always handed the next step a known contact. WhatsApp Inbound does not - the message can come from a number that is not in your CRM yet. Add this action immediately after the trigger.
Both are HighLevel built-in actions, so there is nothing extra to install. Pick one:
Action
Map this field
To this value
Find Contact
ContactID
Whatsapp, imessage and SMS → Whatsapp Inbound → ContactID
Create Contact
Phone
Whatsapp, imessage and SMS → Whatsapp Inbound → Sender Phone Number
1
Click + Add below the trigger
2
Search for and select Find Contact or Create Contact
3
Map the field from the table above, inserting the value with the tag icon
4
Click Save action
Which one? Use Create Contact when the sender may be new to your CRM - it skips creation if the contact already exists, so it never makes duplicates. Use Find Contact when every sender is already a saved contact and you only need to look them up.Every action after this one - Send WhatsApp Message, Send Email, Create Task - then has a contact to work with.
Only one flavour of Wait migrates. The native Wait handles eight kinds of waiting. The Wait Step replaces exactly one - the contact to reply - and only on your connected WhatsApp, iMessage, or SMS number. Everything else stays native, and the two work together in the same workflow.
What you want
Use
A fixed delay, a date, a recurring schedule, an appointment offset
Native Wait
A trigger-link click, an email open, a field condition, a team member’s reply
Native Wait
The customer to reply on your connected WhatsApp number
Wait Step
To branch on whether they replied, and use what they said downstream
Wait Step
A reply to one specific connected number only
Wait Step
What you gain
The reply comes with it. Message text and attachments are handed to the steps after Customer Responded, so you can branch on what the customer actually said
Two named branches - Customer Responded and Timeout - instead of one path with a timeout escape
Per-number scoping with the optional Connected Number field
Using both together
Send WhatsApp Message: "Hi {{contact.first_name}}, confirming tomorrow at 3pm. Reply YES to confirm." |Wait Step - Channel: WhatsApp - Timeout: 1 day |-- Customer Responded -> If/Else on the reply text | |-- contains "yes" -> add tag "confirmed" | |-- else -> Send Internal WhatsApp Notification to the assigned user |-- Timeout -> Native Wait (2 hours) -> Send WhatsApp Message: "Just checking you got this?"
Can native SMS steps and WhatsApp provider steps coexist in one workflow?
Yes, and it is the recommended way to migrate gradually. It is also required when part of the workflow needs a native-only feature, such as an email internal notification or a recurring-schedule Wait.
Why can't I find the WhatsApp trigger or action in the builder?
They only appear under the Apps tab, never in the standard lists. If the Apps tab has no WhatsApp provider app, update it from App Marketplace → Installed Apps and connect at least one number.
Should I use Find Contact or Create Contact?
Create Contact when the sender may be new to your CRM - it skips creation for existing contacts, so no duplicates are made. Find Contact when every sender is already saved and you only need to look them up.
What happens to contacts already sitting in an old workflow?
They finish the workflow they are in. Setting it back to Draft only stops new contacts entering, so let in-flight contacts drain before you delete anything.
I used Has Tag and Intent Type filters. What now?
Those filters do not exist on WhatsApp Inbound. Leave the trigger unfiltered or filter on message text, then add an If/Else after the contact step to check tags or any other contact field.
Do I need to migrate my Wait steps too?
Only the ones set to the contact to reply on SMS. Every other kind of Wait stays on the native action.