# Guide: Inspect and Follow Up on Abandoned Baskets

This guide is for **business users and RevOps teams** who want to manually review abandoned baskets in Limio Commerce and follow up on leads. If you are a developer looking to build automated abandoned basket email campaigns via the API, see the [Guide: Abandoned Basket Campaigns](/guides/developer-guides/guide-abandoned-basket.md).

## What is an abandoned basket?

An abandoned basket is a checkout that a customer started but did not complete. In Limio, a basket is created as soon as a customer clicks a call-to-action (such as "Subscribe" or "Buy Now") on your shop. If the customer does not finish the purchase, the basket remains in an `active` state and is considered abandoned.

Abandoned baskets are a valuable source of leads. Each one represents a customer who showed purchase intent but did not convert.

## Understanding what data is available

Not all abandoned baskets are equally useful for follow-up. The data available on an abandoned basket depends on your **checkout authentication model** and how far the customer progressed before abandoning.

### When a basket is first created

When a customer clicks a call-to-action, a basket is created immediately with the selected offer(s). **At this stage, there is no user information on the basket** — no email, no identity, no customer details. These baskets are `active` but cannot be used for outreach.

{% hint style="warning" %}
The Abandoned Basket API returns **all** active baskets, including those with no user information. When reviewing abandoned baskets, always check whether a `customerDetails.email` is present before attempting to follow up.
{% endhint %}

### How user information gets onto the basket

How the customer's email ends up on the basket depends on which authentication model your shop uses. Limio supports two primary models:

#### Anonymous authentication (no login required)

In this model ( [https://docs.limio.com/product/authentication/authentication-provider-per-page/configuring-anonymous-authentication-for-your-checkout-flow](https://docs.limio.com/product/authentication/authentication-provider-per-page/configuring-anonymous-authentication-for-your-checkout-flow "mention")) , the customer goes through the checkout without logging in to an external identity system (such as Auth0, Okta or Cognito). They simply fill in their details on the checkout form.

The customer's email is captured by the **email field** subcomponent of the [Modular Checkout Form](https://docs.limio.com/components/component-library/modular-checkout-components/component-checkout-form). When the customer types their email and moves to the next field, the email is saved to `customerDetails.email` on the basket immediately (on blur).

{% hint style="info" %}
**Since Release 104**, the email is saved to the basket as soon as the customer clicks away from the email field, rather than waiting for order submission. This significantly increases the number of abandoned baskets that include a contactable email address.

To benefit from this, your checkout page must include the **email field** subcomponent in the Checkout Form component.
{% endhint %}

In anonymous authentication flows, Limio creates a temporary anonymous identity for the checkout session. This identity does not contain PII such as an email address. Therefore, **for anonymous flows, `customerDetails.email` is the only way to identify the customer on an abandoned basket**.

#### Full authentication (SSO / identity provider)

In this model ( [https://docs.limio.com/product/authentication/sso-your-authentication](https://docs.limio.com/product/authentication/sso-your-authentication "mention")) , the customer authenticates via an external identity provider (e.g. Cognito, SSO) **before** reaching the checkout. When the customer logs in, Limio links their identity to the basket and sets the basket's `owner` field.

In a fully authenticated flow, `customerDetails.email` is typically **pre-filled from the identity provider** when the checkout page loads. The checkout form reads the authenticated user's claims (such as email, first name, and last name) and populates `customerDetails` automatically. This means `customerDetails.email` is set early, even before the customer interacts with the form.

{% hint style="info" %}
If your shop uses an optional **cart page** before the checkout, the basket may be created at the cart stage — before the customer has authenticated. In this case the basket will initially have no user information. The identity and customer details are linked when the customer moves to the authenticated checkout.
{% endhint %}

### Where to find the customer's email

For the purposes of following up on abandoned baskets, **`customerDetails.email` is the field you should use**, regardless of which authentication model your shop uses:

* In **anonymous flows**, `customerDetails.email` is populated from the checkout form's email field (on blur, since R104).
* In **authenticated flows**, `customerDetails.email` is pre-filled from the identity provider's claims when the checkout page loads.

The Abandoned Basket API response also includes an `identities` array, but this contains only identity metadata (such as the identity provider and subject identifier) — not necessarily a usable email address. **Always use `customerDetails.email` for lead follow-up.**

### Summary: data available by authentication model

| Field                                             | Anonymous (no login)                         | Authenticated (SSO / identity provider)                     |
| ------------------------------------------------- | -------------------------------------------- | ----------------------------------------------------------- |
| **Basket ID**                                     | ✅ Always                                     | ✅ Always                                                    |
| **Offer / items**                                 | ✅ Always                                     | ✅ Always                                                    |
| **`customerDetails.email`**                       | ✅ Once the customer fills in the email field | ✅ Pre-filled from identity on checkout load                 |
| **Other customer details** (name, address, phone) | Only if the customer fills them in           | May be pre-filled from identity, depending on configuration |
| **Identity / owner**                              | Anonymous identity (no PII)                  | ✅ Linked to identity provider                               |
| **Created date**                                  | ✅ Always                                     | ✅ Always                                                    |
| **Recovery link**                                 | ✅ Always                                     | ✅ Always                                                    |

## How to view abandoned baskets in Limio Commerce

### Option 1: Use the Baskets object view

1. Log in to **Limio Commerce** at `https://<your-environment>.prod.limio.com`.
2. Navigate to **Objects > Baskets** from the left-hand navigation.
3. You will see a list of all baskets (both completed and abandoned).
4. Use the filters or search to narrow down to baskets that are incomplete or were created within a specific time range.
5. Click on an individual basket to see its full details, including the offer, customer details, email address, and timestamps.

You can also navigate directly to a basket by its ID using this URL pattern:

```
https://<your-environment>.prod.limio.com/objects/baskets/limio/production/basket-<basket-id>
```

### Option 2: Use the Abandoned Basket API

For a filtered list of only abandoned (non-completed) baskets, you can use the Abandoned Basket API:

```
GET https://<your-environment>.prod.limio.com/api/checkout/abandoned
```

This API returns all baskets with `active` status. You can filter by creation date using the `createdAfter` parameter. Note that **this includes baskets with no user information** — you will need to filter for baskets that have a `customerDetails.email` to find actionable leads.

See the [Abandoned Basket API](https://docs.limio.com/developers/api-documentation/abandoned-basket-api) documentation for full details.

### Option 3: Use Limio for Salesforce

If your team uses Salesforce, abandoned baskets are integrated into the Limio Acquisition Flow. Agents can see a list of abandoned baskets for a customer directly in Salesforce and continue processing them. See [Abandoned Baskets in the Acquisition Flow](https://docs.limio.com/integrations/using-limio-for-salesforce/acquisition-flow/abandoned-baskets) for setup instructions.

## How to follow up on a lead manually

Once you have identified an abandoned basket with an email address, here is a suggested workflow for manual lead follow-up:

1. **Review the basket details** in Limio Commerce. Note the offer the customer was interested in, when they abandoned, and any customer details they provided.
2. **Use the recovery link** if available. The recovery link is a tokenised URL that will take the customer back to the exact checkout they abandoned, with their basket pre-populated. You can share this link via a personal email or outreach message.
   * The recovery link format is: `https://<shopDomain>/api/checkout/recover?basketId=<basket-id>&recover=<token>`
   * This link should only be shared with the intended customer, as it contains a security token.
3. **Alternatively, use a purchase link** if you want to send the customer to a different offer (for example, a discounted offer to incentivise them to complete the purchase). Learn more about [purchase links](https://docs.limio.com/product/checkout/how-to-configure-purchase-links).
4. **Track the outcome.** If the customer completes their purchase, the basket will be marked as `completed` and will no longer appear in the abandoned basket list.

## Tips for RevOps teams

* **Focus on baskets with `customerDetails.email`.** Many abandoned baskets will have no user information (the customer clicked "Subscribe" but left before entering their email or authenticating). These cannot be used for outreach.
* **Check regularly.** Abandoned baskets are most valuable when followed up quickly. Consider setting up a daily or weekly review cadence.
* **Combine with automated campaigns.** For high-volume shops, manual follow-up does not scale. Use the [Abandoned Basket API](/guides/developer-guides/guide-abandoned-basket.md) to integrate with your Email Service Provider for automated campaigns, and reserve manual follow-up for high-value leads.
* **Monitor for completed baskets.** If a customer returns and completes their order on their own, the basket status will update. Avoid contacting customers who have already converted.

## Prerequisites

To ensure abandoned baskets capture the customer's email as early as possible:

* **For anonymous checkout flows:** your checkout page must use the **Checkout Form** component with an **email field** subcomponent. This is the component that triggers the email-on-blur save introduced in Release 104.
* **For authenticated checkout flows:** ensure your identity provider includes the email claim, and that your checkout form is configured to pre-fill `customerDetails` from the authenticated user's attributes.

## Related documentation

* [Guide: Abandoned Basket Campaigns](/guides/developer-guides/guide-abandoned-basket.md) — developer guide for building automated email campaigns via the API
* [Abandoned Basket API Reference](https://docs.limio.com/developers/api-documentation/abandoned-basket-api)
* [Abandoned Baskets in the Acquisition Flow (Salesforce)](https://docs.limio.com/integrations/using-limio-for-salesforce/acquisition-flow/abandoned-baskets)
* [Purchase Links](https://docs.limio.com/product/checkout/how-to-configure-purchase-links) — send customers to specific offers
* [Modular Checkout Components](https://docs.limio.com/components/component-library/modular-checkout-components) — configuring the checkout form and email field subcomponent


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.limio.com/guides/feature-implementation-guides/guide-inspect-abandoned-baskets.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
