
GoHighLevel Abandoned Cart Workflow: Setup Guide (2026)
By Dr Priya Jaganathan, GoHighLevel Certified Admin · HL Growth Partner, Australia · Updated 15 September 2026 · 9 min read
Some links below are affiliate links — if you sign up through them, HL Growth Partner may earn a commission at no extra cost to you. It never changes what we recommend. Full disclosure.
A GoHighLevel abandoned cart workflow only recovers revenue if it fires on the right event. Get the trigger wrong and you either message people who never left checkout, or you miss the ones who genuinely did — and every wasted send costs you a little deliverability trust with Mailgun and a little goodwill with the contact.
Most stores lose the majority of carts before payment ever lands. Baymard Institute's 2026 analysis of 50 separate studies puts the average cart abandonment rate at 70.22%, and mobile checkouts abandon even more often than desktop. None of that is a reason to panic about your funnel — it's a reason to build one workflow, properly, once, and let it run quietly in the background. This is the exact build, including the trigger names, the wait-step timing, the channel sequence, the stop condition, and how to prove what it recovered.
Quick Facts
| Primary trigger | Abandoned Checkout (native e-commerce stores) or Shopify – Abandoned Checkout (connected Shopify stores) |
| Order-form alternative | Order Form Submission trigger, filtered to submission type "Opt-In" rather than "Purchase" |
| Typical first-touch wait | 30–60 minutes after the abandonment window closes, before the first reminder sends |
| Channels available | Email via Mailgun, SMS via Twilio (A2P/ACMA registration required), optional voicemail drop |
| Stop condition | Goal event set to Order Submitted (or Invoice Paid), exiting the contact immediately |
| Plan requirement | Workflows are included on every paid GoHighLevel sub-account plan; the Shopify connector is a native, no-extra-fee integration |
| Attribution | Custom values on the order object, contact tags, and an Opportunity stage move on recovery |
Which trigger actually fires when a cart is abandoned
GoHighLevel gives you three ways to catch an abandoner, and picking the wrong one is the single most common reason these workflows never fire at all.
The native Abandoned Checkout trigger
For GoHighLevel's own e-commerce stores and for connected external stores, there's a purpose-built Abandoned Checkout trigger. It fires when a shopper adds items to the cart, enters a valid email address, and then fails to complete payment within the abandonment window you set — you choose that window in minutes, so it can be as tight or as generous as your buying cycle needs.
This is the cleanest trigger for a dedicated store, because it carries cart data — products, quantities, cart value, and a recovery link — straight into the workflow, ready to drop into email and SMS merge fields.
Shopify – Abandoned Checkout
If your store sits on Shopify and you've connected it through the native Stripe and payments integration layer, use the Shopify – Abandoned Checkout trigger instead. It listens for Shopify's own checkout events, so you don't need to duplicate cart logic inside GoHighLevel — Shopify tells GoHighLevel a checkout started and didn't finish, and the workflow takes it from there.
Order Form Submission, for funnel-based checkouts
Not every business sells through a store — plenty run order forms inside a funnel instead. For those, there's no native "abandoned" event, so you build one: trigger on Order Form Submission, filter the submission type to "Opt-In" (not "Purchase"), and let a wait step decide whether they came back to pay.
That last distinction matters. The Order Submitted trigger only fires on confirmed, paid orders — it's built for upsell and fulfilment workflows, not recovery — while Order Form Submission fires on every attempt, including the ones that never finish. Mixing the two up is why some builds "never trigger": they've wired the recovery workflow to the trigger that only fires after someone has already paid.
| Trigger | Fires on | Best for |
|---|---|---|
| Abandoned Checkout | Cart started, email captured, payment not completed in window | Native GHL e-commerce store |
| Shopify – Abandoned Checkout | Shopify checkout event, unpaid | Connected Shopify stores |
| Order Form Submission (Opt-In) | Any form attempt, paid or not | Funnel order forms, 1-step or 2-step |
| Order Submitted | Confirmed, paid order only | Upsells and goal/exit conditions — not recovery |
Structuring the wait steps so the sequence doesn't feel like nagging
The temptation is to message the second someone leaves checkout. Don't. A chunk of "abandoners" are just people who got distracted mid-payment and will finish on their own within the hour — message them immediately and you look desperate rather than helpful.
Build the workflow as trigger, then a wait step of 30–60 minutes before the first touch. That single delay is doing most of the filtering work: it separates genuine hesitation from a momentary interruption, and it keeps your first message from arriving before the checkout page has even closed.
After that, space the remaining touches across email and SMS rather than stacking them all in one channel. This is also where the phrase HighLevel abandoned checkout automation earns its keep — it's not one email, it's a short, timed sequence across two channels with a clear stop condition.
| Step | Wait since trigger | Channel | Purpose |
|---|---|---|---|
| 1 | 30–60 minutes | Friendly reminder, cart contents, recovery link | |
| 2 | 24 hours | SMS | Short nudge, one link, no pressure copy |
| 3 | 48 hours | Address the likely objection (shipping cost, stock, trust) | |
| 4 | 72 hours | Email or SMS | Final touch — incentive only if margin allows |
Four touches is a sensible ceiling for most catalogues. Beyond that you're not recovering more carts, you're training people to unsubscribe.
Writing the email and SMS sequence that actually recovers revenue
Every message in this sequence should do three things: name the exact product left behind, carry a working link straight back to checkout, and read like a person wrote it — not a store.
Pull the cart contents into custom fields and tags at the trigger step, then reference them directly in the merge fields. "You left the [product name] in your cart" outperforms a generic "did you forget something?" every time, because it proves the email is actually about their cart and not a blast.
Email deliverability matters more here than almost anywhere else in your account, because these sends are transactional-adjacent and often go to inboxes that already expect a receipt. If your Mailgun domain authentication isn't fully configured, this is the sequence that will expose it first — abandoned cart emails land in spam faster than almost any other campaign type when SPF, DKIM, or DMARC are missing.
SMS is the second channel, and in Australia it comes with its own compliance layer. A2P 10DLC registration itself is a US carrier scheme, but Australian senders are still bound by the Spam Act 2003 and ACMA's rules — clear consent to receive marketing texts, an identifiable sender, and a working opt-out on every message. Run through the A2P and messaging registration guide before this workflow goes live, not after the first complaint.
Not on HighLevel yet? Start with a free 30-day trial here — long enough to build everything in this guide before you pay a cent.
Stopping the sequence the moment they pay
Nothing undermines an abandoned cart workflow faster than a "come back and buy" email landing in someone's inbox an hour after they already bought.
Set a goal event on the workflow itself, pointed at Order Submitted (or Invoice Paid, if you're running invoices rather than order forms). The moment that event fires for a contact sitting inside the sequence, GoHighLevel treats the goal as met and exits them immediately — no further wait steps, no further sends.
Layer an if/else branch at the top of each wait step as a second check, testing whether the related opportunity or order has already moved to a "won" or "paid" pipeline stage. This is belt-and-braces: the goal event should catch most cases, but a branch check protects you if the goal event is misconfigured or fires with a slight delay.
- Goal event: Order Submitted or Invoice Paid, set at the workflow level
- Branch check: opportunity or order status equals "won" / "paid" before each send
- Exit action: remove the contact from the workflow, no further steps execute
- Optional: tag the contact "cart-recovered" so reporting can separate organic from recovered orders
Measuring what this workflow actually recovered
You can't manage what you don't tag. Every contact who enters the workflow should pick up a "cart-abandoned" tag at the trigger, and a "cart-recovered" tag the moment the goal event fires — that pairing is your entire recovery report.
Push the order or opportunity value into a custom value at the point of recovery, then move the linked opportunity into a dedicated pipeline stage such as "Recovered — Abandoned Cart." That gives you a filterable Opportunities view where recovered revenue sits apart from first-time checkout revenue, instead of blending invisibly into the same total.
Baymard Institute also notes that 48% of abandonments trace back to unexpected costs revealed late in checkout — shipping, taxes, or fees. If your recovered-revenue numbers stay low no matter how well the workflow is built, that's usually a signal to check your checkout copy and pricing transparency before you touch the automation again.
Common mistakes to avoid
- Triggering on Order Submitted instead of Order Form Submission or Abandoned Checkout — Order Submitted only fires after payment, so the recovery workflow never runs
- Skipping the wait step and sending the first message within minutes, before genuine "still typing their card number" shoppers have even left the page
- No goal event or exit condition, so paying customers keep receiving "come back" messages after checkout
- Sending SMS without A2P/ACMA compliance sorted — consent, sender ID, and opt-out — which risks both delivery and complaints
- Generic copy that doesn't reference the actual product left in the cart, so the message reads as a blast rather than a personal reminder
- No tagging or custom value tracking, which means recovered revenue can't be separated from ordinary sales when someone asks whether the workflow paid for itself
If you want a second set of eyes on your checkout and recovery setup before it goes live, book a strategy call with the HL Growth Partner team.
Or if you just need the software first: grab the 30-day HighLevel trial and book us when you're ready to scale it.
Frequently asked questions
What's the difference between the Order Form Submission trigger and the Order Submitted trigger?
Order Form Submission fires on every attempt at a form, including ones where payment never completes — filter it to "Opt-In" for abandonment logic. Order Submitted only fires once a purchase is confirmed and paid, which makes it the right trigger for upsells or goal events, not for catching abandoners.
Does the abandoned checkout trigger work for GoHighLevel's native store, or only Shopify?
Both. The native Abandoned Checkout trigger covers GoHighLevel's own e-commerce store and other connected external stores, while the dedicated Shopify – Abandoned Checkout trigger listens specifically to Shopify's checkout events for stores connected through that integration.
How long should the first wait step be before sending a recovery message?
Most builds use 30 to 60 minutes. That's long enough for someone who was simply distracted mid-payment to finish on their own, without missing the window where a reminder still feels timely rather than intrusive.
Can I legally text abandoners if my business is based in Australia?
Yes, provided you've captured clear consent, identify your business in the message, and include a working opt-out — that's the Spam Act 2003 standard ACMA enforces. A2P 10DLC itself is a US carrier registration scheme and isn't the compliance layer that governs Australian SMS sending.
How do I make sure the sequence stops the moment someone pays?
Set a goal event on the workflow pointed at Order Submitted or Invoice Paid, so GoHighLevel exits the contact as soon as that event fires. Add an if/else branch checking the opportunity or order status before each send as a backup, in case the goal event lags.
What recovery rate should I expect from an abandoned cart workflow?
It varies too much by price point, industry, and traffic quality to quote a single number honestly. Baymard Institute's 2026 research puts average cart abandonment at 70.22% across studied sites, so even a modest share recovered from that pool is usually meaningful revenue relative to the cost of running the workflow.
Do I need Mailgun and Twilio configured before I build this?
Yes — build the trigger and wait steps first if you like, but don't switch the workflow live until your Mailgun domain is authenticated and your SMS number is properly registered. Sending abandoned cart messages through a misconfigured domain is one of the fastest ways to damage deliverability for every other campaign in the account.
How do I actually measure the revenue this workflow recovers?
Tag contacts at entry and again at recovery, push the order value into a custom value when the goal event fires, and move the linked opportunity into its own pipeline stage. That separation is what lets you report recovered revenue as its own line rather than guessing.
Related Articles on HL Growth Partner
Recover more revenue automatically
- Set up an overdue invoice reminder sequence
- Automate subscription renewal reminders
- Build a post-job upsell workflow
