← Back to KPIs

Cart abandonment rate

Also known as: Shopping Cart Abandonment Rate, Basket Abandonment Rate, Cart Abandonment %

ConversionkpiE-commerce: Cart & Checkout Funnel AnalyticsE-commerce

Cart abandonment rate measures the percentage of shopping carts that are created (at least one item added via add_to_cart) but do not result in a completed purchase within the same session. It is a critical e-commerce conversion KPI because it highlights friction in the checkout journey, such as unexpected shipping costs, forced account creation, payment failures or intent gaps, that suppresses revenue, and it is the complement of Cart-to-Purchase Rate.

Business Use Case

1️⃣ The E-commerce Product team reviews the rate weekly; when it rises more than 3 points above the trailing 8-week baseline, they break it down by device and checkout step to locate the friction (shipping-cost reveal, forced account creation, payment errors) and prioritise the fix. 2️⃣ The CRM & Marketing team sizes abandoned-cart email, SMS and retargeting programmes from the abandoned-cart volume and measures the Abandoned Cart Recovery Rate against it. 3️⃣ Merchandising & Pricing monitors spikes by product category and after price, promotion or free-shipping-threshold changes, and adjusts thresholds, offers or delivery messaging when abandonment climbs. 4️⃣ E-commerce leadership compares the monthly rate with the Baymard benchmark to set conversion-rate optimisation targets and approve checkout investment.

Business Criticality

High

Journey / Navigation Area

Checkout

Owning Function

Product

Scope

Session

Formula

((Carts Created - Carts Converted to Purchase) / Carts Created) × 100

Calculation Notes

1️⃣ Carts Created (denominator) = every session (GA4 user_pseudo_id + ga_session_id; Adobe ECID + 30-minute session) with at least one add_to_cart event carrying one or more items, whether or not checkout was started. 2️⃣ Abandoned cart (numerator) = a cart session with no purchase event at or after the first add_to_cart in that session; a purchase that happened before the first add does not convert the cart. 3️⃣ Session timeout is 30 minutes of inactivity (GA4 default; SESS_TIMEOUT 1800 s in AEP); sessions crossing midnight are attributed to the date of the first add_to_cart. 4️⃣ Exclude internal/test traffic, bot-filtered hits and add_to_cart events with an empty items array; a cart later emptied with remove_from_cart still counts as created and abandoned. 5️⃣ Where the commerce platform keeps a persistent cart_id (Shopify checkouts, Salesforce Commerce baskets, Adobe Commerce quotes), a cart-level backend calculation is preferred for cross-session carts; the session-based digital version reads higher because a purchase in a later session counts as abandoned. 6️⃣ Cart Abandonment Rate = 100 - Cart-to-Purchase Rate over the same base; do not confuse it with Checkout Abandonment Rate, whose base is begin_checkout. Baymard's documented average is roughly 70%.

Technical Details

Measure TypePercentage
Aggregation WindowDaily, Weekly, Monthly

Events

PlatformEvent
Google Analytics 4add_to_cart
AdobescAdd

Data Mappings

W3 Data Layer
{
  "event": [
    {
      "eventInfo": {
        "eventName": "add_to_cart"
      }
    }
  ],
  "cart": {
    "cartID": "cart_8f2a91",
    "price": {
      "basePrice": 29.99,
      "currency": "USD",
      "cartTotal": 29.99
    },
    "item": [
      {
        "productInfo": {
          "productID": "SKU_12345",
          "productName": "Sample Product"
        },
        "category": {
          "primaryCategory": "Apparel"
        },
        "quantity": 1,
        "price": {
          "basePrice": 29.99
        }
      }
    ]
  }
}
GA4 Data Layer
{
  "event": "add_to_cart",
  "ecommerce": {
    "currency": "USD",
    "value": 29.99,
    "items": [
      {
        "item_id": "SKU_12345",
        "item_name": "Sample Product",
        "item_category": "Apparel",
        "price": 29.99,
        "quantity": 1
      }
    ]
  }
}
Adobe Client Data Layer
{
  "event": "scAdd",
  "eventInfo": {
    "eventName": "scAdd"
  },
  "cart": {
    "cartID": "cart_8f2a91",
    "currency": "USD",
    "total": 29.99,
    "items": [
      {
        "productID": "SKU_12345",
        "productName": "Sample Product",
        "category": "Apparel",
        "price": 29.99,
        "quantity": 1
      }
    ]
  }
}
XDM Mapping
{
  "eventType": "commerce.productListAdds",
  "commerce": {
    "productListAdds": {
      "value": 1
    },
    "cart": {
      "cartID": "cart_8f2a91"
    }
  },
  "productListItems": [
    {
      "SKU": "SKU_12345",
      "name": "Sample Product",
      "priceTotal": 29.99,
      "quantity": 1,
      "currencyCode": "USD"
    }
  ]
}

SQL Queries

Google Analytics 4 (BigQuery)
-- ==========================================
-- 1. GOOGLE BIGQUERY SQL
-- ==========================================
-- Cart abandonment rate = cart sessions (>= 1 add_to_cart) with no purchase at/after the first add / all cart sessions
WITH cart_events AS (
  SELECT
    user_pseudo_id,
    (SELECT MAX(IF(ep.key = 'ga_session_id', ep.value.int_value, NULL)) FROM UNNEST(event_params) AS ep) AS ga_session_id,
    PARSE_DATE('%Y%m%d', event_date) AS event_date,
    event_name,
    event_timestamp
  FROM `your-project.analytics_123456789.events_*`
  WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
                          AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
    AND event_name IN ('add_to_cart', 'purchase')
    AND ARRAY_LENGTH(items) > 0
),
carts AS (
  SELECT
    user_pseudo_id,
    ga_session_id,
    MIN(IF(event_name = 'add_to_cart', event_date, NULL)) AS cart_date,
    MIN(IF(event_name = 'add_to_cart', event_timestamp, NULL)) AS first_add_ts,
    MAX(IF(event_name = 'purchase', event_timestamp, NULL)) AS last_purchase_ts
  FROM cart_events
  WHERE ga_session_id IS NOT NULL
  GROUP BY user_pseudo_id, ga_session_id
  HAVING MIN(IF(event_name = 'add_to_cart', event_timestamp, NULL)) IS NOT NULL
)
SELECT
  cart_date,
  COUNT(*) AS carts_created,
  COUNTIF(last_purchase_ts IS NULL OR last_purchase_ts < first_add_ts) AS abandoned_carts,
  ROUND(100 * SAFE_DIVIDE(COUNTIF(last_purchase_ts IS NULL OR last_purchase_ts < first_add_ts), COUNT(*)), 2) AS cart_abandonment_rate_pct
FROM carts
GROUP BY cart_date
ORDER BY cart_date;
Adobe Experience Platform (AEP Query Service)
-- ==========================================
-- 2. ADOBE AEP QUERY SERVICE SQL
-- ==========================================
-- Cart abandonment rate = cart sessions (>= 1 commerce.productListAdds) with no purchase at/after the first add / all cart sessions
WITH sessionized AS (
  SELECT
    endUserIDs._experience.ecid.id AS ecid,
    timestamp,
    eventType,
    SESS_TIMEOUT(timestamp, 60 * 30) OVER (
      PARTITION BY endUserIDs._experience.ecid.id
      ORDER BY timestamp
      ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS session
  FROM commerce_experience_event_dataset
  WHERE timestamp >= date_sub(current_date, 30)
    AND timestamp < current_date
),
carts AS (
  SELECT
    ecid,
    session.num AS session_num,
    MIN(CASE WHEN eventType = 'commerce.productListAdds' THEN CAST(timestamp AS DATE) END) AS cart_date,
    MIN(CASE WHEN eventType = 'commerce.productListAdds' THEN timestamp END) AS first_add_ts,
    MAX(CASE WHEN eventType = 'commerce.purchases' THEN timestamp END) AS last_purchase_ts
  FROM sessionized
  WHERE eventType IN ('commerce.productListAdds', 'commerce.purchases')
  GROUP BY ecid, session.num
  HAVING MIN(CASE WHEN eventType = 'commerce.productListAdds' THEN timestamp END) IS NOT NULL
)
SELECT
  cart_date,
  COUNT(*) AS carts_created,
  SUM(CASE WHEN last_purchase_ts IS NULL OR last_purchase_ts < first_add_ts THEN 1 ELSE 0 END) AS abandoned_carts,
  ROUND(100.0 * SUM(CASE WHEN last_purchase_ts IS NULL OR last_purchase_ts < first_add_ts THEN 1 ELSE 0 END) / NULLIF(COUNT(*), 0), 2) AS cart_abandonment_rate_pct
FROM carts
GROUP BY cart_date
ORDER BY cart_date;

Source Data

Digital Analytics (GA4 / Adobe Analytics)

Dependencies

Prerequisite: List the dependencies required for this KPI

Events:

add-to-cartpurchase

Metrics:

add-to-cart

Report Attributes

Device Category Traffic Source / Medium Country New vs Returning User Product Category Cart Value Band

Recommended Reporting Views

Views
E-commerce Performance DashboardCart & Checkout Funnel Dashboard

Segment Eligibility

true

Governance

Data SensitivityInternal

Governance

Created byswapnamagantius
Created on6/17/2026
Last modified bydevyendarm
Last modified on9/18/2026
StatusPUBLISHED

GitHub

View related Pull Requestcatalog/kpis/cart-abandonment-rate.yml

Community Discussion