At a glance
Distinct customer count over the trailing 30 days, computed viaCARDINALITY(customer_email)on the orders index. Adobe Commerce uses email as the practical customer identifier (thecustomer_idfield is null for guest orders). The count therefore conflates registered customers with guests-using-the-same-email. On Adobe Commerce specifically, the card distinguishes B2B Companies (single Company can have many billing emails) from consumer accounts.
| What it counts | CARDINALITY(customer_email) over orders in the 30-day window. Distinct emails. Compared to prior 30-day for delta. |
| API field | customer_email from GET /rest/V1/orders. Optionally customer_id for registered-only counts. |
| VAT / tax treatment | n/a, this is a count metric. |
| Shipping inclusion | n/a. |
| Discounts | n/a. |
| Credit Memo refund treatment | A customer who ordered then was fully refunded still counts. They placed an order, the count reflects intent. |
state machine inclusion | All states except canceled (a customer whose only order was cancelled is not really an active customer). |
pending_payment quirk | Included. B2B net-30 customers whose orders sit in pending_payment are real customers in pipeline. |
Multi-currency grand_total vs base_grand_total | n/a. |
Store View scope (store_id) | All Store Views by default. The same email across multiple Store Views counts as one customer. |
| B2B Company aggregation | Each Company is counted as one customer when filtered to the B2B segment, even if multiple buyer emails sit under the Company. This is configurable; the default groups by Company. |
| Time window | 30D vsP. |
| Alert trigger | None by default. |
| Roles | owner, marketing |
Calculation
Worked example
A homewares brand on Adobe Commerce 2.4.6 with US, UK, and B2B Store Views. Snapshot Monday 4 May 26. Customer count by Store View:| Store View | Distinct emails (30D) | Distinct registered customers | Distinct B2B Companies |
|---|---|---|---|
| US consumer | 2,420 | 1,840 | n/a |
| UK consumer | 1,910 | 1,520 | n/a |
| B2B portal | 188 distinct emails | 156 customers (linked to Companies) | 142 distinct Companies |
| Blended (deduped) | 4,396 emails | 3,360 registered | n/a |
| Metric | Current | Prior | Delta |
|---|---|---|---|
| Total distinct emails | 4,396 | 4,180 | +5.2% |
| Registered customers | 3,360 | 3,210 | +4.7% |
| Guest emails | 1,036 | 970 | +6.8% |
| B2B Companies | 142 | 138 | +2.9% |
- Customer base grew 5.2% MoM. Healthy.
- Guest growth (6.8%) is outpacing registered (4.7%). New traffic is converting but not creating accounts. This may reflect a deliberate “guest checkout first” UX, or it may be a missed opportunity for retention (registered customers are worth 2 to 3x lifetime value of guests in most categories).
- B2B Company count grew slightly (+2.9%, 4 net new Companies). Each Company is potentially worth tens of thousands per year, so 4 new Companies is a measurable acquisition win.
- The 188 B2B emails belong to 142 Companies: average 1.3 buyer-emails per Company. Most Companies have one buyer; some have 2 to 5. This matters for B2B email marketing: each Company should receive one strategic-Sales-touch communication, not 1.3.
- Cross-checking Customer Trend: of the 3,360 registered customers, 1,420 are first-time orderers in this period (new customers). This means 1,940 are returning, a 57.7% repeat-share among registered customers. Cross with Repeat Customer Rate for the lifetime view.
- Strategic question: should marketing push guest-to-registered conversion (post-purchase email cadence with account-creation incentive)? On a 1,036-guest base growing at 6.8%, converting 30% to registered would add ~310 registered customers/month, materially improving retention metrics.
Sibling cards merchants should reference together
| Card | Why pair it with Customer Count |
|---|---|
| New Customers | First-time orderers, the leading-edge subset of customer count growth. |
| Customer Trend | Trend chart visualising count over time. |
| Repeat Customer Rate | Loyalty companion. High customer count + low repeat = leaky bucket. |
| Guest vs Account Checkout | Decomposes count into registered vs guest. |
| Customer Segments | LTV-cohort decomposition. |
| B2B Revenue Share | The dollar-weighted view. Customer count is people-weighted; both matter. |
| Total Orders | Order count divided by customer count = order frequency. |
shopify.customer_count | Cross-platform peer. |
Reconciling against the vendor’s own dashboard
Where to look in Adobe Commerce Admin:Customers > All Customers lists registered customers; the grid total at the bottom shows the count. This excludes guests by definition (guests don’t have customer entities).
Reports > Customers > Customers by Number of Orders is the closest aggregated view, ranks customers by order count.
Sales > Orders filtered to a date range has a “Customer Email” column; the distinct-email count is your “this card” equivalent. Group by Customer Email in CSV export to compute manually.For B2B (Adobe Commerce paid edition):
Customers > Companies counts Company entities. Customers > Companies > [Company] > Users shows users per Company.Why our number may legitimately differ from Admin:
| Reason | Direction of divergence |
|---|---|
| Guest inclusion. Card includes guest emails; Admin’s customer list shows registered only. | Card count higher |
| Multi-Store-View deduplication. Card dedupes the same email across Store Views. Admin’s customer list often shows duplicate customer entities for the same email if the customer registered separately on each Store View. | Card count lower than admin all-Store-Views sum |
| B2B Company aggregation. Card can group by Company; Admin counts buyer-emails. | Material if many Companies have multiple buyers |
| Time window. Card uses 30-day-ordering activity; Admin’s customer list is all-time-registered. | Card count smaller |
| Sync lag. Card uses OpenSearch sync (5-15 min); Admin live. | Negligible at 30D |
| Pair | Expected relationship | What divergence tells you |
|---|---|---|
google_analytics.ga_purchasers | GA4 purchasers ≈ Adobe customer count × (1 - tracking gap) | GA4 typically misses 10-25%. Material lower divergence (>25%) suggests GA4 tag-fire issues at checkout. |
| ESP active-list size | ESP list usually exceeds customer count (subscribers who haven’t bought) | Inverse relationship would be alarming (customers buying without subscribing); sometimes legitimate (B2B where buyers don’t sign up to consumer ESP). |
Known limitations / merchant FAQs
My customer count seems lower than my CRM, why? The card counts customers who placed an order in the trailing 30 days. Your CRM probably contains all-time-registered customers, including dormant or churned. For a like-for-like, filter your CRM to “ordered in last 30 days”. Why use email rather thancustomer_id for distinct counting?
Adobe Commerce stores customer_email on every order regardless of guest vs registered status. customer_id is null for guest orders. Using customer_email captures both. The trade-off: a guest who later registered with the same email is counted once across both order types (correct behaviour); a guest who used different emails on different orders counts as multiple customers (overcount).
Adobe Commerce vs Magento Open Source: difference?
None at the calculation. The B2B Companies module on the paid edition lets the card group by Company; Open Source merchants without the module count by buyer-email. For Open Source merchants who want B2B Company aggregation, custom attributes can be configured but it’s manual work.
My multi-store Adobe Commerce, can the same customer count differently per Store View?
Yes if they registered separately on each Store View (Adobe Commerce historically created per-Store-View customer entities; modern installations use customer_share_account_information to share across websites). The card dedupes by email regardless. If your historical data has duplicate registrations, the card’s count is more accurate than the Admin customer-grid count.
B2B Company has 5 buyer emails, do I count it as 1 or 5?
Depends on the question. For “how many decision-making units do we serve”, group by Company (count = 1). For “how many people log in and order”, count by email (count = 5). The card defaults to grouping by Company on the B2B segment; configurable per the use case.
Why doesn’t this card include cancelled orders?
A customer whose only order was cancelled is functionally equivalent to a customer who never ordered. Counting them inflates customer count without reflecting purchasing behaviour. The exception: Adobe Commerce auto-cancellations from pending_payment timeout where the customer would have been a real customer if the gateway worked. Those are excluded too, which understates “intent to be a customer” slightly. For a count-of-intent metric, see Quote-Create count via Cart-Abandonment Spike Alert.
My customer count grew but revenue is flat, what’s happening?
Likely AOV contraction. New customers are smaller-basket than existing customers; if customer count grew faster than revenue, the new customers are buying less per visit. Cross-check AOV and New Customers. This is the “successful acquisition, weak retention” pattern that needs an early-customer cadence intervention.