---
title: "Abandoned checkout triggers - Workflow Suite"
description: "Waiting triggers start a workflow when something did not happen in time: a checkout left behind, or a store visit that ended without a purchase."
canonical: "https://docs.workflow-suite.app/abandoned-checkout-and-left-without-purchase"
---

# Abandoned checkout and left without purchase

Most triggers react to something that happened. These two react to something that did **not** happen: no order was placed within the waiting time you set.

| Trigger | Based on | Reliability |
| --- | --- | --- |
| Customer abandons checkout | Shopify's checkout events | As reliable as Shopify's events |
| Customer left online store without making a purchase | The storefront web pixel | Best effort, only with the visitor's analytics consent |

Both have one option, **Waiting time in minutes**: 60 by default, from 10 minutes to 7 days (10,080 minutes). They are checked once a minute, so a run starts up to a minute after the waiting time.

## Customer abandons checkout

Starts when a checkout **with contact details** (an email address, a phone number or a customer) has not changed for the waiting time and no order was placed from it.

- The event is the checkout as Shopify last sent it, with its recovery link in `event.payload.abandoned_checkout_url`.
- Each checkout starts the workflow once. A buyer who comes back and edits the checkout before the time is up restarts the waiting time.
- Only checkouts that begin while the workflow is on are seen.
- When the time is up, the app asks Shopify about the checkout once more. A checkout that was completed in the meantime starts nothing.
- Two workflows with different waiting times can use the trigger side by side, for example a reminder after 1 hour and a discount after 24 hours. Each starts when its own time has passed.

### Set it up

1. Choose the trigger **Customer abandons checkout** and set **Waiting time in minutes**.
2. Add a trigger filter. The template filters on two rules: `event.payload.email` **has a value**, and `event.payload.buyer_accepts_marketing` **is equal to** `true`.
3. Add a **Send email** step to `{{ event.payload.email }}` with the recovery link.

The walk-through is in [Recipe: abandoned checkout follow-up](https://docs.workflow-suite.app/recipe-abandoned-checkout-email.md).

> [!WARNING]
> **Needs Shopify's approval for customer data**
> Checkout events contain protected customer data. Shopify delivers them only to an app it has approved for that data, and it removes the email address and phone number unless those fields are approved too. Without them, only checkouts of known customers count. See [Permissions and store data access](https://docs.workflow-suite.app/permissions-and-store-data-access.md).

## Customer left online store without making a purchase

Starts when a shopper viewed a product, added one to the cart or started the checkout, and then did nothing more for the waiting time, without completing a purchase.

The event tells you how far the shopper got:

| Field | Holds |
| --- | --- |
| `abandonmentType` | `browse`, `cart` or `checkout` |
| `identified` | `true` for a signed-in customer |
| `customerId` | The customer, when signed in |
| `productsViewed` | Up to 10 products the shopper looked at, with the last product |

What to keep in mind:

- It is a storefront behaviour trigger: reported by the shopper's browser, only with analytics consent, and some events never arrive. See [Storefront behaviour triggers](https://docs.workflow-suite.app/storefront-behaviour-triggers.md).
- A shopper who is not signed in is followed by the anonymous id of their browser and has no `customerId`. You cannot write to them. Filter on `identified` **is equal to** `true` to reach customers only.
- A purchase the browser never reports (closed tab, ad blocker) is only noticed for signed-in customers, and only when the app has access to orders. Without that, a shopper who did buy can still start the workflow.
- While a workflow with this trigger is on, the pixel reports product views, cart adds and checkout starts of every consenting visitor. The anonymous browser id is only used, in hashed form, to tell visits apart. It is not stored with a run.
- New activity restarts the waiting time.

The template **Tag customers who leave with a full cart** uses this trigger.

## Which one for emails?

For anything you send to a buyer, use **Customer abandons checkout**. It is based on Shopify's own events, carries the contact details the buyer entered, and knows whether the buyer accepts marketing. Use **Customer left online store without making a purchase** for softer signals, such as tagging a signed-in customer.

Check which messages you may send without marketing consent where you sell. The app cannot decide that for you.
