Skip to main content
Card class: Non-HeroCategory: Ecommerce Platform

At a glance

Registered customers (i.e. accounts in customer_entity) who have zero captured order revenue across their lifetime. They created an account but never bought, or only had canceled orders that never converted. Useful for understanding registration-to-purchase conversion and identifying the “ghost segment” cluttering the customer base.
What it countsCOUNT(customers WHERE lifetime_grand_total = 0 OR no_orders_ever) ÷ COUNT(customers) × 100. Lifetime spend is the sum of grand_total across all the customer’s captured orders (excluding canceled). A customer with only canceled orders shows here as zero spend.
API fieldcustomer.entity_id, joined with sales_order.customer_id and sales_order.grand_total filtered to state != 'canceled'. Lifetime, not windowed.
Why this mattersRegistered customers who never spent are either (a) account-created-during-checkout-but-checkout-failed cohort (recoverable), (b) bot/fake registrations (purgeable), (c) genuine browse-but-don’t-buy users (re-engageable via marketing flows), or (d) abandoned-checkout-converted-to-account-but-never-finished (high recovery potential). Cross-link with Unverified Emails to overlap the segments.
GuestsExcluded by definition. Guests have no customer_entity row; this card is registered-customer only.
Cancelled ordersCustomers with only-cancelled orders count as zero-spend (the cancelled order didn’t capture).
Refunded ordersA customer with one captured-then-refunded order is NOT zero-spend; they spent at order capture. The refund is a downstream event.
VAT / tax / shipping / discounts / currencyn/a, the card is a customer count ratio.
Multi-store scopeAll Store Views by default. A customer who has zero spend on UK but bought on US (same email) is NOT zero-spend (the system aggregates across views).
Time windowRT (real-time snapshot). Lifetime, not windowed.
Alert trigger>25% of registered customer base. Above 25% suggests registration friction, weak welcome flow, or bot pollution.
Sentiment keyzero_spend
Rolesowner, marketing

Calculation

Calculated automatically from your Adobe Commerce data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

Worked example

A B2B+DTC apparel merchant on Adobe Commerce 2.4.7. Snapshot 13 May 26. 28,400 registered customers in the base. Zero-spend breakdown:
SliceCount% of baseNotes
Total registered customers28,400100%
Lifetime grand_total = $0 (zero captured orders)8,52030.0%this card; alert breached (>25%)
Of which: never placed any order6,82024.0%account-created without subsequent purchase
Of which: only-cancelled orders1,7006.0%tried to buy, payment failed
Suspected bot signups (zero spend + sequential email pattern)9203.2%candidates for purge
Overlap with Unverified Emails3,84013.5%the “ghost segment”
Registered <30 days, zero spend (high recovery potential)4801.7%recent abandonment-recovery cohort
Registered >12 months, zero spend (low recovery)5,20018.3%dormant ghost segment
Sub-slice by signup channel:
Signup sourceZero-spend rate within source
Storefront sign-up form35%
Checkout “create account” toggle18%
B2B Companies portal (admin-created)4%
Imported migration list64%
Newsletter signup → account52%
Insight pattern:
  1. 30% of registered customers never spent. Above the 25% alert threshold; investigate.
  2. Imported migration list at 64% zero-spend is the worst cohort. Many imported customers never re-activated on the new platform. Either (a) ran out of legacy product line, (b) lost interest, (c) email-deliverability prevented re-engagement. Cross-link with Unverified Emails, the imported cohort is heavily unverified too.
  3. Newsletter signup → account at 52% is also high. Newsletter signups are top-of-funnel awareness; not all become buyers. This is healthy if the signup-to-buyer conversion rate is on benchmark; investigate via the email-flow funnel.
  4. Checkout “create account” toggle at 18% is the cleanest cohort. Customers who create accounts during checkout buy 82% of the time (the other 18% had checkout failures). Recover via abandoned-cart email flows.
  5. Storefront sign-up form at 35% is mid-tier. Recover via welcome-flow drip, exclusive-content, or first-time-purchase incentive.
  6. Bot signups (920 candidates) should be bulk-purged after manual review of patterns. Cross-link with Unverified Emails, the overlap of zero-spend + unverified + sequential-email-pattern is the highest-confidence bot indicator.
  7. Action queue: (a) abandoned-cart recovery flow for the recent zero-spend cohort; (b) re-engagement / sunset flow for >12-month zero-spend; (c) bot purge with manual review; (d) migration-cohort re-confirmation campaign.

Sibling cards merchants should reference together

CardWhy pair it with Zero-Spend Customers
Customer CountThe denominator.
Unverified EmailsOverlap; ghost-segment customers.
New CustomersNew customers shouldn’t be zero-spend yet (their first order date IS when they spent). The two cards’ definitions complement.
Customer TrendOver-time growth of the customer base.
Email HealthBroader email-list quality.
Repeat Customer RateActive retention; zero-spend is the dormant counterpart.
klaviyo.dormant_segmentKlaviyo’s dormant-customer segment; pair to drive re-engagement.
shopify.zero_spend_customersCross-platform peer.

Reconciling against the vendor’s own dashboard

Where to look in Adobe Commerce Admin:
Customers > All Customers with custom filter “Lifetime Sales = 0”. The lifetime-sales column may need to be added via the column customisation menu.
For a manual cross-check:
Reports > Customers > Customers by Orders Total filter to “0 orders” or “Total = 0”.
For B2B Companies:
Customers > Companies has a per-Company total revenue column; Companies with $0 lifetime revenue are the equivalent for B2B.
Why our number may legitimately differ from a manual Admin computation:
ReasonDirection of divergence
Cancelled-only customers. The card includes them as zero-spend; Admin’s “Lifetime Sales = 0” depends on whether Admin counts cancelled orders as “sales” (it shouldn’t). Should match.Usually none
Refund handling. A customer with one captured-then-fully-refunded order may show as “$0” in some Admin reports (net of refund) but is captured-spend = original grand_total in this card (gross).Card under-flags refunded-only customers
Multi-store scope. Admin scope-filtering can show fewer customers as zero-spend per Store View; the card aggregates across views.Card potentially lower per-Store-View
Time-zone, sync lag. Standard.Minor
Cross-connector reconciliation (when these connectors are connected for this merchant):
CardExpected relationshipWhat divergence tells you
klaviyo.dormant_segmentKlaviyo’s “no purchase ever” segment should match this card’s count (within profile-sync delta)Material divergence means profile-sync is incomplete; some Adobe customers aren’t reaching Klaviyo.
mailchimp.unengaged_segmentSimilar logicSame diagnostic.

Known limitations / merchant FAQs

Why is the threshold set at 25%? Industry-typical “healthy” sits at 10-20% (B2B-leaning) or 20-30% (heavy-newsletter DTC). Above 25% suggests either bot pollution, weak account-creation funnel, or an aggressive newsletter-to-account flow that isn’t converting. Adjust per merchant context. Should I delete zero-spend customers to clean my database? Cautious yes for clearly-bot accounts (>12 months old, unverified, sequential email pattern). Cautious no for recent registrations (could still convert). Adobe Commerce supports bulk customer deletion via Admin grid; always export a backup before bulk delete. A customer registered 2 years ago, never bought, are they “lost”? Statistically yes. Re-engagement campaigns convert 0.5-3% of >12-month dormant customers; not zero, but the cost-of-send rarely justifies the return. Most merchants run an annual “sunset flow”, a final re-engagement attempt; non-responders are unsubscribed. Why aren’t guest customers in this card? Guests have no customer_entity row; they are order-only. By definition, a guest who didn’t buy doesn’t exist as a record. The card answers “of registered customers, who never bought?”. Guests are a different funnel. Customer with only-cancelled orders, zero-spend or not? Zero-spend per the card. Cancellation reverses authorisation; no money moved. The customer attempted a purchase but didn’t complete. They are in the recoverable cohort if recent (cross-link with abandoned-cart recovery flow). What about a customer whose only order was fully refunded? NOT zero-spend per this card; they spent at order capture, the refund is downstream. Use Refund Rate per-customer to isolate “captured-then-refunded” cohort. Why does my Reports > Customers > Customers by Orders Total show different? Three causes: (1) the report aggregates by Customer Group; if a customer is in a group filter, may not appear; (2) cancelled handling differs; (3) report uses base currency, card uses underlying record. Reconcile with same filters. Bot purge, what’s safe? Conservative: customers >90 days old AND zero-spend AND unverified AND no email-engagement history. That intersection is high-confidence bot. Always export before delete. Spread the delete over time to avoid index churn. My multi-store, can I see zero-spend per Store View? Tricky. Customer accounts are typically global (one customer = one account across Store Views in Adobe’s default config). To see per-Store-View, look at where the customer registered (store_id on the customer record). The card supports this slice. B2B Company with zero spend, what does that mean? A Company entity created without any orders yet. Common for B2B where Sales reps onboard the Company before the first PO. Allow 30-90 days; if still zero-spend after 90 days, the onboarding flow has friction. Sales follow-up.

Tracked live in Vortex IQ Nerve Centre

Customers with Zero Spend is one of hundreds of KPI pulses Vortex IQ tracks across Adobe Commerce and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.