> ## Documentation Index
> Fetch the complete documentation index at: https://help.goghl.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrate SMS Automations to WhatsApp

> 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.

|                         | **Legacy method (native SMS override)**        | **WhatsApp QR custom provider**                                      |
| ----------------------- | ---------------------------------------------- | -------------------------------------------------------------------- |
| **How WhatsApp runs**   | It overrides the sub-account's native SMS      | As its own channel, linked by QR scan                                |
| **What you build with** | HighLevel's **native** SMS trigger and actions | The WhatsApp provider's own triggers and actions                     |
| **Where they live**     | The standard trigger and action lists          | The **Apps** tab                                                     |
| **What you get**        | Plain text - WhatsApp treated as SMS           | Attachments, per-number sending, WhatsApp filters, reply-aware waits |

<Note>
  This page covers the **workflow side only**. For the connection itself, see [WhatsApp Setup](/whatsapp/full-setup) and [Legacy WhatsApp Setup](/whatsapp/sms-provider-setup).
</Note>

<Info>
  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.
</Info>

***

## Do you need this guide?[​](#do-you-need-this-guide "Direct link to Do you need this guide?")

You do if any published workflow uses one of these **and you expect it to reach people on WhatsApp**:

* **Send SMS** action
* **Customer Replied** trigger with Reply Channel set to SMS
* **Internal Notification** action on SMS or WhatsApp
* **Wait** action set to *the contact to reply* on SMS

***

## Before you start[​](#before-you-start "Direct link to Before you start")

<Steps>
  <Step title="Update the WhatsApp provider app">
    **App Marketplace → Installed Apps → WhatsApp provider → Update**
  </Step>

  <Step title="Connect a WhatsApp number">
    Use the **WhatsApp Settings dashboard** to connect one or more instances
  </Step>
</Steps>

<Warning>
  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.
</Warning>

***

## What replaces what[​](#what-replaces-what "Direct link to What replaces what")

| Today (native)                               | Switch to                                                                                                   |
| -------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| **Customer Replied**, Reply Channel = SMS    | [**WhatsApp Inbound**](/automation/triggers/whatsapp-inbound) trigger                                       |
| *Nothing - the trigger always had a contact* | **Find Contact** or **Create Contact** action                                                               |
| **Send SMS**                                 | [**Send WhatsApp Message**](/automation/actions/send-whatsapp-message) action                               |
| **Internal Notification**, SMS or WhatsApp   | [**Send Internal WhatsApp Notification**](/automation/actions/internal-notification-action-whatsapp) action |
| **Wait**, *the contact to reply* on SMS      | [**Wait Step**](/automation/actions/wait-step), Channel = WhatsApp                                          |

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.

***

## How to migrate a workflow[​](#how-to-migrate-a-workflow "Direct link to How to migrate a workflow")

Work through one workflow at a time.

<Steps>
  <Step title="Duplicate, do not edit in place">
    Copy the workflow and rename it, for example "Lead Follow-Up - WhatsApp". The original stays published and untouched while you build.
  </Step>

  <Step title="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.
  </Step>

  <Step title="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.
  </Step>

  <Step title="Move dropped filters into the workflow">
    Tag checks, Intent Type, and Replied to Workflow become **If/Else** conditions after the contact step.
  </Step>

  <Step title="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.
  </Step>

  <Step title="Retire the original">
    Only once the new one is confirmed, set the old workflow back to **Draft**. Contacts already in it finish normally.
  </Step>
</Steps>

<Warning>
  Never leave the old and new versions of the same workflow published at the same time - every contact gets messaged twice.
</Warning>

***

## 1. Customer Replied → WhatsApp Inbound[​](#1-customer-replied--whatsapp-inbound "Direct link to 1. Customer Replied → WhatsApp Inbound")

|                | **Customer Replied**                                                                                            | **WhatsApp Inbound**                                                                                                             |
| -------------- | --------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| **Fires when** | A contact replies to a message                                                                                  | A message arrives on a connected WhatsApp number, including a first-ever message from an unknown number                          |
| **Channels**   | Email, SMS, WhatsApp, Social, All-in-One Chat                                                                   | WhatsApp only                                                                                                                    |
| **Filters**    | Contains Phrase, Exact Match Phrase, Has Tag, Doesn't Have Tag, Intent Type, Replied to Workflow, Reply Channel | Contact ID, Lid, Location ID, Message, Receiver Name, Receiver Phone Number, Sender Name, Sender Phone Number, WhatsApp Username |
| **Contact**    | Always a known contact                                                                                          | You resolve it yourself - see [step 2](#2-resolve-the-contact-find-contact-or-create-contact)                                    |

<Frame>
  <img src="https://mintcdn.com/goghl/JZJa2MoUHOf9Nw9w/images/automation/triggers/assets/images/whatsapp-inbound-trigger-66aff58a089ff2dd9d05eeb85bf3f43d.png?fit=max&auto=format&n=JZJa2MoUHOf9Nw9w&q=85&s=7cb831688bac3040422ab6ec73691db8" alt="WhatsApp Inbound Trigger" width="2860" height="1522" data-path="images/automation/triggers/assets/images/whatsapp-inbound-trigger-66aff58a089ff2dd9d05eeb85bf3f43d.png" />
</Frame>

**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**.

| Before                                                             | After                                                                        |
| ------------------------------------------------------------------ | ---------------------------------------------------------------------------- |
| Customer Replied, Reply Channel = SMS, Contains Phrase = "pricing" | WhatsApp Inbound, Message *contains* "pricing" → Find Contact → your actions |

***

## 2. Resolve the contact: Find Contact or Create Contact[​](#2-resolve-the-contact-find-contact-or-create-contact "Direct link to 2. Resolve the contact: Find Contact or Create Contact")

<Warning>
  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.
</Warning>

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* |

<Steps>
  <Step>
    Click **+ Add** below the trigger
  </Step>

  <Step>
    Search for and select **Find Contact** or **Create Contact**
  </Step>

  <Step>
    Map the field from the table above, inserting the value with the tag icon
  </Step>

  <Step>
    Click **Save action**
  </Step>
</Steps>

<Frame>
  <img src="https://mintcdn.com/goghl/CcFj-VvCtpY8rKMa/images/automation/triggers/assets/images/create-contact-action.png?fit=max&auto=format&n=CcFj-VvCtpY8rKMa&q=85&s=a6d2bae82bf99202b5942ab27286b5b8" alt="Create Contact Action" width="2940" height="1604" data-path="images/automation/triggers/assets/images/create-contact-action.png" />
</Frame>

**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.

***

## 3. Send SMS → Send WhatsApp Message[​](#3-send-sms--send-whatsapp-message "Direct link to 3. Send SMS → Send WhatsApp Message")

|                    | **Send SMS**                                                                                          | **Send WhatsApp Message**                                                              |
| ------------------ | ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| **Channel**        | SMS, reaching WhatsApp only because of the native SMS override                                        | WhatsApp, explicitly                                                                   |
| **Media**          | Attachments go as MMS, subject to carrier size limits, and oversized files become media-library links | Real attachments: images, video, documents, from upload or the Media library           |
| **Sending number** | Not selectable                                                                                        | Optional **WhatsApp Number** field, or leave empty for your dashboard's priority order |
| **Formatting**     | Plain SMS text                                                                                        | Custom variables, emojis, and line breaks render as written                            |

<Frame>
  <img src="https://mintcdn.com/goghl/JZJa2MoUHOf9Nw9w/images/automation/actions/assets/images/send-whatsapp-message-action-b67193309e51e35ab0308a71aba2c8f1.png?fit=max&auto=format&n=JZJa2MoUHOf9Nw9w&q=85&s=b4d0da3a075724960617903d66a0a225" alt="Send WhatsApp Message" width="2858" height="1542" data-path="images/automation/actions/assets/images/send-whatsapp-message-action-b67193309e51e35ab0308a71aba2c8f1.png" />
</Frame>

| Before                                                                      | After                                                                                                                                       |
| --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Send SMS: "Hi `{{contact.first_name}}`, thanks! Link: example.com/brochure" | Send WhatsApp Message: "Hi `{{contact.first_name}}`! Thanks for your interest, we will be in touch shortly." with the brochure PDF attached |

***

## 4. Internal Notification → Send Internal WhatsApp Notification[​](#4-internal-notification--send-internal-whatsapp-notification "Direct link to 4. Internal Notification → Send Internal WhatsApp Notification")

|                        | **Internal Notification**                  | **Send Internal WhatsApp Notification**            |
| ---------------------- | ------------------------------------------ | -------------------------------------------------- |
| **Delivery**           | Pick one: Email, In-App, SMS, or WhatsApp  | WhatsApp **and** the CRM at once                   |
| **Recipients**         | All Users, Particular Users, Assigned User | Assigned Users, Particular User, **Custom Number** |
| **Outside the team**   | Not possible                               | **Custom Number** reaches any phone number         |
| **WhatsApp templates** | Must use approved templates                | None needed - write the message you want           |

<Frame>
  <img src="https://mintcdn.com/goghl/JZJa2MoUHOf9Nw9w/images/automation/actions/assets/images/whatsapp-internal-notification-action.png?fit=max&auto=format&n=JZJa2MoUHOf9Nw9w&q=85&s=598e0f1004fd9c50dff42cb930d8bab1" alt="Send Internal WhatsApp Notification" width="3420" height="1804" data-path="images/automation/actions/assets/images/whatsapp-internal-notification-action.png" />
</Frame>

Map your old recipient setting onto **To User Type**:

| Was                           | Set To User Type to                                      |
| ----------------------------- | -------------------------------------------------------- |
| Assigned User                 | **Assigned Users**                                       |
| Particular Users              | **Particular User**, then pick people in **Choose User** |
| All Users                     | **Particular User**, and select everyone who needs it    |
| An external or on-call number | **Custom Number**                                        |

| Before                                                                          | After                                                                                                                           |
| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Customer Replied → Internal Notification, SMS, Assigned User, "Contact replied" | WhatsApp Inbound → Find Contact → Send Internal WhatsApp Notification, Assigned Users, "`{{contact.first_name}}` just replied." |

***

## 5. Wait → Wait Step[​](#5-wait--wait-step "Direct link to 5. Wait → Wait Step")

<Warning>
  **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.
</Warning>

| 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**

```text theme={null}
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?"
```

***

## FAQs[​](#faqs "Direct link to FAQs")

<AccordionGroup>
  <Accordion title="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.
  </Accordion>

  <Accordion title="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.
  </Accordion>

  <Accordion title="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.
  </Accordion>

  <Accordion title="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.
  </Accordion>

  <Accordion title="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.
  </Accordion>

  <Accordion title="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.
  </Accordion>
</AccordionGroup>

***

## Support[​](#support "Direct link to Support")

If you need help with the migration:

* WhatsApp Support: [Chat on WhatsApp](https://wa.me/+12267248710?text=Hi%2C%20I%20need%20help%20with%20migrating%20my%20SMS%20automations%20to%20WhatsApp.)
* Email: [**support@goghl.ai**](mailto:support@goghl.ai)
