We set up GoHighLevel for you · Book a free 15-minute callWe set up GoHighLevel for you
Book a call

GoHighLevel sending duplicate text messages

A planning session at a whiteboard of sticky notes

Short answer

When GoHighLevel sends the same text twice, it's usually because two triggers or workflows fire on the same event, a trigger fires on every event (each form submission, each call status change), re-entry is allowed, or the person exists as two contacts. Execution Logs show which workflow and step sent each copy, so start there.

How to fix it

  1. Find out which workflow sent each copy. Open the workflow and check Enrollment History and Execution Logs. They show each contact's path and the step that sent each message.
  2. Look for overlapping triggers. Every trigger in a workflow fires on its own when its conditions are met. Check other workflows for the same trigger, too.
  3. Check Allow Re-entry. In the workflow's Settings tab, Allow Re-entry off means a contact can go through the workflow only once. Appointment and invoice triggers always allow re-entry.
  4. Check Allow multiple Opportunities. Also on the Settings tab. It runs one instance per opportunity and is on by default in new workflows.
  5. Guard event triggers. Form Submitted fires on each submission and Call Details (formerly Call Status) fires on each status change. Add a condition or a wait so one person doesn't trigger it twice.
  6. Stop duplicate contacts. Go to Settings > Business Profile > Contact Deduplication Preferences. Turn off Allow Duplicate Contact and choose whether to match on email or phone.
  7. Merge the duplicates you have. Contacts > the ⋮ menu > Manage Duplicates > Find Duplicates, review, then merge. Merging is permanent.

How to find the cause

Start from one pair of duplicate texts and work back to whatever sent each copy.

  1. Trace each copy. In Conversations, open each message's details. If a workflow sent it, the Workflow link opens its Execution Details. Do this for both copies; they often come from different places.
  2. Look for copies with no workflow. A copy with no workflow behind it came from somewhere else: a bulk send, a campaign, Missed Call Text Back or the calendar's own notifications. Messaging Analytics, under Settings > Phone System > Messaging tab, can filter messages by where it came from (a campaign, a workflow or a bulk request).
  3. Read the enrollment history. In the workflow's Enrollment History, find the contact. Highlight Contact Path shows the route they took, including skipped steps and errors.
  4. Search for the phone number in Contacts. Two contacts with the same number each get their own copy of every text.
What you seeWhat it meansWhat to do
Two workflows each logged a sendTwo workflows react to the same eventKeep the text in one workflow, or add a condition to the other
One workflow, two enrollments seconds apartTwo triggers matched, or the event happened twice: a double form submit, or two call status changesRemove the extra trigger, or add a condition or wait
One workflow, two enrollments days apartRe-entry is allowed, or the trigger is appointment or invoice based, which always allows re-entryTurn off Allow Re-entry, or tag the contact on the first run and check for the tag
One enrollment per opportunityAllow multiple Opportunities is on and the contact has more than one dealTurn it off if the text is about the person, not the deal
One enrollment, two sendsThe path has two Send SMS stepsRemove one, or put a condition in front of it
Two contacts, one phone numberDuplicate contactsMerge them and set deduplication preferences
A workflow copy plus a copy with no workflowA workflow and a built-in feature both sendUse one: calendar notifications or a reminder workflow, Missed Call Text Back or a Call Status workflow

The deduplication setting covers contacts from forms, Zapier, Facebook and Instagram. HighLevel says CSV imports merge matching contacts automatically, whatever the setting.

How to confirm it's fixed

  1. Make a test contact with your own phone. So the texts land somewhere you can see them.
  2. Fire the trigger once. Submit the form, book the appointment, or make the call that starts the workflow, once.
  3. Check the log. A pass is one enrollment in Enrollment History and one Send SMS line in Execution Logs for the test contact.
  4. Fire it the way real people do. Submit the form twice in a row, or call and hang up twice. A pass is the number of texts you meant, usually one.
  5. Check your phone and the conversation. One text on your phone, and one outbound message in the conversation.
  6. Recheck after a few days. In Execution Logs, filter by the Send SMS action over the last week (the date range goes up to 30 days) and look for any contact listed twice.

If you merged contacts, HighLevel combines their tags and workflows into the one you keep. Check which workflows the merged contact is in now, so the merge itself doesn't start a second run.

Missed call text back sends more than once

The built-in Missed Call Text Back sends a text for every missed call, even from the same caller. HighLevel suggests a workflow with a wait step or a tag check instead.

Common questions

Will turning off re-entry fix it?
Only if the same contact is entering the same workflow twice. If two workflows or two contacts are involved, re-entry won't change it. Check the execution logs first.
Does the deduplication setting merge contacts I already have?
No. It decides how new contacts from forms and other sources are matched. Use Manage Duplicates for the ones already there.
A customer booked two appointments and got two sets of texts. Is that a bug?
No. HighLevel enters a contact into an appointment workflow once per booking, whatever the re-entry setting, so two bookings mean two runs. If one set is enough, add a condition that checks for a tag set on the first run.
Why did both the contact and their guest get the text?
Appointment triggers can enroll Contact and Guests, and the workflow runs separately for each person. Each person gets one copy, which isn't a duplicate. Set it to Contact only if guests shouldn't get it.

Rather we set it up?

We set this up for you as part of a done-for-you package, quoted on a free call.

  • GoHighLevel rescue

    A messy account someone else built, gone through and fixed: duplicate workflows, broken automations, bad data and texts that don't send.

    Done for you · Quoted on the call

More workflow fixes

All Workflows fixes

Want GoHighLevel set up and running for you?

Book a free 15-minute call. Tell us what you sell and where your leads come from, new account or the one you have, and we'll tell you what we'd set up, how long it takes and what it costs.

Rather we set it up? GoHighLevel rescue, done for you.

See the packageBook a call