GoHighLevel Win-Back Workflow for Inactive Clients: Step-by-Step Guide

Intermediate7 min readUpdated on 08/03/2026

Reactivating dormant contacts is one of the highest-ROI activities in any service business, and GoHighLevel's automation engine gives you the tools to do it systematically. This guide walks you through building a win-back workflow from scratch — covering trigger setup, messaging logic, wait steps, and the conditional branches that determine when to stop contacting someone.

Before you start, make sure you have at least Editor-level access to the sub-account where you want to build the workflow, and that your contacts have a reliable Last Activity date or a custom field you can use to identify inactivity.


1. Define What "Inactive" Means for Your Business

GoHighLevel does not have a single built-in "inactive contact" flag. You need to decide — and then encode — what inactivity means in your context.

Common definitions include:

  • No reply to any message in the last 60, 90, or 120 days
  • No appointment booked in a rolling window
  • A custom field (e.g., last_purchase_date) that is older than a threshold
  • A tag like inactive-90d applied by a separate workflow or manually

Recommended approach: Create a separate, lightweight workflow that runs on a schedule (using the Recurring trigger) and applies a tag such as win-back-eligible to any contact whose custom date field exceeds your threshold. Your win-back workflow then fires off that tag. This keeps logic modular and easier to debug.


2. Create the Win-Back Workflow

Step 2.1 — Open Workflows

  1. In your sub-account, navigate to Automation in the left sidebar.
  2. Click Workflows, then + New Workflow.
  3. Choose Start from Scratch and give it a descriptive name, such as Win-Back — Inactive 90 Days.

Step 2.2 — Set the Trigger

  1. Click Add New Trigger.
  2. Select Tag Added from the trigger list.
  3. In the Filter field, choose the tag you defined in Step 1 (e.g., win-back-eligible).
  4. Click Save Trigger.

If you prefer to trigger directly from a date field without a tagging workflow, you can use Contact Date Field as the trigger type instead — but the tag-based approach is generally more reliable for troubleshooting.

If contacts can enter the workflow at odd hours, add a Wait step configured to resume only during business hours. This prevents automated messages from arriving at 2 a.m.

  1. Click + to add an action.
  2. Select Wait.
  3. Choose Wait Until and configure your allowed time window (e.g., Monday–Friday, 9 a.m.–5 p.m. in the contact's time zone).

Step 2.4 — Send the First Re-engagement Message

  1. Add a Send Email or Send SMS action (or both, depending on your channel strategy).
  2. Write a short, genuine message. Acknowledge the gap without being dramatic. Offer something concrete — a check-in call, an updated resource, or a relevant offer. Avoid subject lines with excessive punctuation or all-caps, which hurt deliverability.
  3. Use personalization tokens such as {{contact.first_name}} to avoid the message feeling mass-produced.

Step 2.5 — Add a Wait, Then Check for Reply

  1. After the first message, add a Wait step of 5–7 days.
  2. Then add an If/Else condition checking whether the contact replied, booked an appointment, or had a tag added by another workflow indicating re-engagement.
  3. If yes: Move the contact to an active pipeline stage, remove the win-back-eligible tag, and end the workflow.
  4. If no: Continue to the next message.

Step 2.6 — Second and Third Touchpoints

Repeat the pattern: send a message → wait → check for response. A typical win-back sequence has two to three touchpoints maximum. More than that tends to generate unsubscribes or spam complaints rather than conversions.

Vary the channel if possible — for example, send email first, then follow up with SMS. Be mindful of SMS compliance rules (TCPA in the US); only send SMS to contacts who have explicitly opted in.

Step 2.7 — Final Step: Remove or Archive

If no response is received after all touchpoints:

  1. Add an action to Remove Tag win-back-eligible.
  2. Optionally, add a tag such as churned or unresponsive for reporting purposes.
  3. Consider adding a Do Not Contact flag if your business policy treats prolonged non-response as an opt-out signal.
  4. End the workflow with a Remove from Workflow action to prevent accidental re-entry.

3. Testing Before Publishing

  1. Set the workflow to Draft mode and use the Test Workflow feature with a real test contact (ideally yourself or a colleague).
  2. Verify that the trigger fires correctly when the tag is applied.
  3. Confirm that wait times behave as expected — note that very short waits (under 5 minutes) can sometimes behave inconsistently in test environments.
  4. Check that the If/Else branches route correctly by simulating both the "responded" and "did not respond" paths.

Only switch the workflow to Published after the full path has been tested end to end.


4. Common Errors and Troubleshooting

Contacts not entering the workflow The most frequent cause is a mismatch between the tag name in the trigger and the tag name being applied. Tag names in GoHighLevel are case-sensitive in some contexts. Double-check spelling and capitalization on both ends.

Emails going to spam Win-back campaigns sent to a cold list have higher spam risk. Make sure your sending domain has proper SPF, DKIM, and DMARC records configured under Settings → Email Services. Warm up new domains before sending large volumes.

Contacts re-entering the workflow repeatedly If you remove and re-apply the trigger tag elsewhere in your automations, contacts can loop. Enable the Allow Re-entry toggle only if that is intentional, and audit your other workflows for unintended tag logic.

If/Else conditions not routing correctly GoHighLevel evaluates If/Else conditions at the moment the contact reaches that step, not at the moment the wait began. If you are checking for a reply, make sure the condition references the correct event (e.g., "Last Message Replied" or a specific tag added upon reply) and that the timing allows enough time for the system to register the event.

SMS not sending SMS requires an active Twilio integration or LC Phone setup, and the contact must have a valid opted-in phone number. Check the contact record for a phone number and confirm your messaging service is active under Settings → Phone Numbers.


When GoHighLevel May Not Be the Right Tool

GoHighLevel's workflow builder is capable, but it has limitations worth acknowledging. If your win-back strategy requires deep behavioral segmentation — such as tracking specific page visits, purchase history from an external e-commerce platform, or predictive churn scoring — you may get better results from a dedicated CRM or marketing automation tool with native integrations for those data sources. GoHighLevel can receive data from external tools via webhooks, but building complex cross-platform logic requires technical setup that may not be practical for smaller teams.

Also note that available features and action types can vary depending on your plan level. Always verify that the specific triggers and actions described here are accessible in your account before building a workflow that depends on them.

Still stuck?

If this walkthrough did not solve your case, describe your exact scenario. Every question we receive becomes a new tutorial here.

Send my question