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

# Abandoned Carts

> See who started a checkout and left before paying, send them a recovery email with an optional coupon, and measure what came back.

A buyer who enters their email and reaches the payment step has told you what they want. When they leave without paying, that checkout appears under **Orders → Abandoned Carts** for seven days.

<Note>
  Only checkouts with a buyer email are listed. A visitor who leaves before typing their email cannot be contacted, so Shoppex does not record them here.
</Note>

## The list

Each row is one unpaid invoice. The default view is the open queue; the **Status** filter switches to recovered, dismissed, expired or all checkouts, and **Type** separates the two ways a buyer leaves:

* **Ghost** — the buyer never picked a payment method.
* **Dropped** — the buyer started a payment and did not finish it.

Search accepts a buyer email or an invoice ID. Filters, search and paging live in the URL, so a refresh or a shared link keeps the same view.

Every row has an actions menu:

| Action                    | What it does                                                                                                                                          |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Send Recovery Email**   | Emails the buyer a link back to their exact invoice, with or without a coupon (see below). Up to 3 emails per checkout and 50 manual emails per hour. |
| **View Invoice**          | Opens the pending invoice in Orders.                                                                                                                  |
| **Dismiss** / **Restore** | Hides a checkout you do not want to chase, and brings it back. Dismissed checkouts get no automatic email.                                            |

Select several open rows to send recovery emails in bulk. Each buyer still receives their own link.

## Coupons in recovery emails

When sending, choose one of three coupon options:

* **No coupon** — the email carries the checkout link only.
* **Existing code** — include one of your active discount codes. Shoppex checks that the code exists, is active, inside its validity window and not used up, both when you save it and right before every email. Before each email it also checks the code against that checkout: a first-order-only code is not sent to a returning buyer, a product-scoped code only when the cart contains one of its products, a code with a minimum order only when the eligible lines reach it, and a code limited to certain payment methods only when the buyer has not already chosen a different one. Pay-what-you-want lines never count towards a coupon, here or at checkout.
* **Generate a one-time coupon** — Shoppex mints a single-use percentage code (`BACK-XXXXXX`) that expires after the hours you set. The buyer enters it at checkout.

The same three options exist for automatic reminders under **Settings → Checkout → Cart Recovery**.

## Automatic reminders

Automatic reminders need the Business plan. Turn them on in **Settings → Checkout → Cart Recovery** and set:

* **Send after** — minutes after the checkout started, at least 15. Add a **Send window end** to spread emails over a random minute inside that window.
* **Minimum order total (USD)** — checkouts whose USD value is below it never get an automatic email.
* **Buyer cooldown** — days after a buyer's last recovery email before another automatic one may go out. The cart waits and is sent once the cooldown has passed, as long as it is still inside its 7-day window. Set it to 0 to turn the cooldown off.
* The coupon option, subject, preview text, offer copy and button label.

Shoppex sends one automatic email per checkout. Buyers who paid, buyers whose invoice expired or was cancelled, dismissed checkouts and buyers who unsubscribed from your emails are skipped. A skipped automatic email is noted on the row so you can still send one manually.

Automatic reminders only go out for shops that switched Cart Recovery on. Shops with it off are never queued.

Every recovery email, automatic or manual, carries an unsubscribe link. A buyer who uses it lands on your shop's email suppression list and receives no further recovery or marketing email from you.

<Info>
  If your store runs an active **Email Marketing** automation on the Abandoned Cart trigger, that automation sends the email instead of the built-in template. The content configured under Cart Recovery fills its variables.
</Info>

## Statistics

The strip at the top of the page shows:

* **Open Checkouts** — unpaid checkouts still inside their 7-day window, split into ghost and dropped in the tooltip.
* **Emails Sent (30d)** — automatic and manual recovery emails. A checkout that got two reminders counts twice.
* **Recovered via Email (30d)** — the share of emailed checkouts that were paid afterwards. Both sides count checkouts, not emails.
* **Recovered Revenue (30d)** — paid totals of those checkouts, per currency.

A checkout counts as recovered when the buyer pays that invoice, or any later checkout they started in your store. An automated subscription renewal for the same buyer does not close their open checkouts. Refunded and cancelled payments are excluded from recovered revenue.

## Team permissions

Managers need **Resend order emails** to send recovery emails and to dismiss or restore rows, plus **Coupons** when the email carries a discount code. Reading the list and the statistics needs **View orders**.

## Email template

The built-in email is the **Abandoned cart** template under **Store → Emails**. You can edit its subject and body; the variables it receives are `shop_name`, `cart_items`, `cart_total`, `currency`, `cta_url`, `cta_label`, `offer_headline`, `offer_message`, `offer_discount_code`, `email_subject` and `email_preview_text`.
