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

# Email Health, Shopify

> Share of customer rows with a valid + verified email, the addressable list size for lifecycle. How to read it, why it matters, and how to act on it.

**Metrics type:** [Supporting Metrics](/nerve-centre/overview#metrics-types-explained)  •  **Category:** [Ecommerce Platform](/nerve-centre/connectors#connectors-by-type)

> Share of customer rows with a valid + verified email, the addressable list size for lifecycle.

## At a glance

> The percentage of customer records that have a usable email address (non-null, valid format, and where verification is supported, marked verified). The addressable-list-size signal: can you actually reach your customers via the cheapest retention channel?

|                                       |                                                                                                                                                                                                                    |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **What it counts**                    | `COUNT(customers WHERE email IS NOT NULL AND email_is_valid = true) ÷ COUNT(customers) × 100`. Verification status (`emailMarketingConsent.marketingState = SUBSCRIBED`) is checked when available.                |
| **API endpoint**                      | `Admin GraphQL. Customer.email, Customer.emailMarketingConsent`.                                                                                                                                                   |
| **What "valid" means**                | RFC 5322 syntax check + domain MX existence (best-effort). Does NOT mean the customer opted in to marketing; that is a separate field.                                                                             |
| **What "marketing-subscribed" means** | `emailMarketingConsent.marketingState = SUBSCRIBED`. The strict-marketing variant is on roadmap as a separate metric.                                                                                              |
| **VAT / tax treatment**               | Not applicable.                                                                                                                                                                                                    |
| **Shipping**                          | Not applicable.                                                                                                                                                                                                    |
| **Discounts**                         | Not applicable.                                                                                                                                                                                                    |
| **Refunds**                           | Not applicable.                                                                                                                                                                                                    |
| **Cancelled / voided orders**         | Customer-level metric, order status irrelevant.                                                                                                                                                                    |
| **Currency**                          | Not applicable.                                                                                                                                                                                                    |
| **Channels / sources**                | All customers in the database. POS-account customers contribute (with email if collected at the till); POS-guest do not exist.                                                                                     |
| **Verification mechanics**            | Shopify verifies email when a customer creates an account (clicks the verification link). Pre-checkout order-only customers may not be verified, but their email still counts as "valid" if syntactically correct. |
| **Time window**                       | `RT` (real-time, computed from latest indexed snapshot)                                                                                                                                                            |
| **Alert trigger**                     | `<80%`, sustained email-health below 80% indicates list-quality erosion                                                                                                                                            |
| **Roles**                             | owner, marketing                                                                                                                                                                                                   |

## Calculation

```
COUNT(customer.email != NULL) / COUNT(_id)
  WHERE date BETWEEN [period_start, period_end]
```

## Worked example

A US multi-channel home goods brand on Shopify Plus. 28,400 lifetime customers. Snapshot date: 12 May 26.

| Email status                         | Customer count | Share | Note                                  |
| ------------------------------------ | -------------- | ----- | ------------------------------------- |
| Valid + marketing-subscribed         | 19,140         | 67.4% | The reachable list, the asset         |
| Valid but unsubscribed               | 4,260          | 15.0% | Reachable for transactional only      |
| Valid but bounced (hard bounce flag) | 1,420          | 5.0%  | Cannot reach, suppress                |
| Missing email                        | 2,840          | 10.0% | POS-account no email + B2B contacts   |
| Invalid format / typo                | 740            | 2.6%  | Salvageable with re-engagement prompt |
| **Email Health (this card)**         | **76.0%**      |       | (valid customers ÷ total)             |

```text theme={null}
Email Health  =  (19,140 + 4,260 + 1,420 + 740) ÷ 28,400  =  ~91% raw valid
                  Strict (subscribed only)  =  19,140 ÷ 28,400  =  67%
                  Card default (valid, non-bounce)  =  ~76%
```

The card flags `<80%` and trips. Five things to notice:

1. **The 10% missing-email cohort is mostly POS.** 2,840 customer records without an email; 2,200 of those are POS-only customers where staff didn't capture email at the till. The 30-second prompt at checkout would have addressed most of them. POS staff training is the highest-ROI intervention here.
2. **5% bounce rate is the silent-leak signal.** 1,420 customers with hard-bounced emails. Each campaign send to those addresses damages sender reputation across the entire list. Most ESP (Klaviyo, Mailchimp, Shopify Email) auto-suppress bounces, but the customer record still sits at low quality. A re-engagement campaign with email re-capture is the typical fix.
3. **The unsubscribed cohort is not bad.** 15% unsubscribed is industry-normal. They are still reachable for transactional and account messages, just not promotional. Treat unsubscribe as legitimate customer choice, not failure.
4. **The 2.6% invalid-format cohort is salvageable.** 740 customers with typos or fake formats ("[test@test.com](mailto:test@test.com)", "asdf\@gmail"). Many resulted from coupon-grab signups; some are genuine typos. A targeted "fix your email" prompt next visit recovers 30 to 50%.
5. **At 76% with the alert at 80%, the brand should plan a list-quality sprint.** Two-week priorities: turn on email re-engagement series, push POS to capture email, suppress bounces from active sends, audit and clean obvious junk records. Each lifts the headline 1 to 3 ppt.

## Sibling cards merchants should reference together

Email health is a list-asset metric. Pair with these to drive acquisition and quality:

| Card                                                                            | Why pair it with Email Health    | What the combination tells you                                                                                |
| ------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| [Customer Count](/nerve-centre/kpi-cards/shopify/unique-customers)              | The denominator.                 | Email-health-% × customers = reachable list size.                                                             |
| [Unverified Emails](/nerve-centre/kpi-cards/shopify/unverified-email-customers) | The non-verified subset.         | Identifies the customers who need a verification prompt.                                                      |
| [Customer Segments](/nerve-centre/kpi-cards/shopify/customer-spend-segments)    | Tier overlay on email health.    | If VIP segment has 95% email health but Low has 60%, the cleanup priority sits with the higher-tier rows.     |
| [Churn Risk](/nerve-centre/kpi-cards/shopify/customer-churn-risk)               | Win-back depends on email reach. | Lapsed customers without valid email are unrecoverable via cheap channels; SMS / direct mail is the fallback. |
| [`klaviyo.klaviyo_subscribers`](/nerve-centre/klaviyo/klaviyo_subscribers)      | The downstream subscriber count. | Klaviyo subscribers ≤ this card's reachable count. Gaps reveal sync issues.                                   |
| [`klaviyo.klaviyo_bounce_rate`](/nerve-centre/klaviyo/klaviyo_bounce_rate)      | Send-time bounce.                | High send-time bounces drive down this card over time.                                                        |

## Reconciling against the vendor's own dashboard

**Where to look in Shopify Admin:**

[Customers](https://admin.shopify.com/customers) → segment by *Email subscription status*. Shopify's segment shows subscribed-and-not-subscribed counts. The card's "valid email" count is broader (includes opted-out but reachable for transactional). For exact matching:

* Filter Shopify to *Email subscription status: Subscribed* for the strict variant.
* The card's default uses *email field is non-null and valid*, which is closer to *Email exists* than *Subscribed*.

Other Shopify Admin views:

* **Customers → All customers**: shows email column directly; manual visual scan reveals missing-email rows.
* **Apps like Klaviyo, Mailchimp**: have richer email-quality dashboards including bounce, open-rate, engagement decay.

**Why our number may legitimately differ from Shopify Admin:**

| Reason                            | Direction              | Why                                                                                                                                                                   |
| --------------------------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Marketing-subscribed vs valid** | Big                    | Shopify's segment is subscribed-only; this card defaults to *email exists*. Subscribed is a stricter subset.                                                          |
| **Bounce status**                 | Either                 | Shopify auto-removes hard-bounced from subscribed, but the customer record still has the email. The card may count it as valid; ESP-level dashboards exclude bounces. |
| **Customer merging**              | Transient              | A merged customer's email syncs to the canonical record; pre-merge data may show split entries.                                                                       |
| **Multi-store**                   | Per store              | Each store has independent customer records and email health. A customer with email in UK store and no email in US store appears differently per integration.         |
| **Sync lag**                      | Ours lower for "today" | 5 to 15 minute index lag.                                                                                                                                             |

**Cross-connector reconciliation:**

| Card                                                                         | Expected relationship                                    | What causes legitimate divergence                                                                                                                    |
| ---------------------------------------------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`klaviyo.klaviyo_subscribers`](/nerve-centre/klaviyo/klaviyo_subscribers)   | Klaviyo subscribers should ≤ Shopify reachable customers | Klaviyo can have non-Shopify subscribers (signup forms, lead-magnet captures); the count there can exceed the Shopify-only count, which is expected. |
| [`mailchimp.mailchimp_audience`](/nerve-centre/mailchimp/mailchimp_audience) | Mailchimp audience should align with valid-email count   | Same logic.                                                                                                                                          |

***

<details>
  <summary><em>Same-metric documentation cross-reference (for agencies running multiple platforms)</em></summary>

  The same definition lives on other commerce platforms. Cross-platform navigation only.

  * [`bigcommerce.email_health`](/nerve-centre/kpi-cards/bigcommerce/email-health)
  * [`adobe_commerce.email_health`](/nerve-centre/kpi-cards/adobe-commerce/email-health)
</details>

## Known limitations / merchant FAQs

**Why is my number lower than Klaviyo says?**
Different definitions. Klaviyo's "deliverable" count is calculated based on send-engagement signals. This card uses the static record-level email validity. Both can be useful; expect roughly 5-15 ppt difference.

**Does the card count opted-out customers?**
By default yes (they have a valid email, just not marketing-subscribed). The strict variant uses `marketingState = SUBSCRIBED` only; on roadmap.

**My POS-heavy retail brand shows 50% email health, is that bad?**
Common but improvable. POS staff often don't capture email at the till. The fix is process, not technology: train staff to ask, give incentive (small discount for email signup), use a POS app that prompts.

**Hard bounces, do they count as valid?**
Today, yes (the email field is non-null). Bounce-aware variant is on roadmap. For now, ESP-side suppression handles the send-deliverability concern; the customer record is unchanged.

**Multi-store, can I see combined health?**
No, per-store. A merchant with 3 stores will see 3 health figures. Each store's customer base is independent.

**Multi-currency, any impact?**
None; email health is regional-customer-mix-blind.

**Shopify Plus vs basic?**
No definitional difference. Plus stores can use Shopify Audiences and richer custom-field metadata to enrich email-quality decisioning, but the underlying field check is identical.

**Refresh cadence?**
Real-time index updates (5 to 15 minutes). Customer record changes propagate quickly.

**B2B vs DTC?**
B2B contacts often have business emails (not personal). The validity check passes; deliverability tends to be high (less spam-filtering than gmail). Subscribed-rate is lower (B2B buyers don't sign up for marketing the way DTC consumers do).

**The card alerted (\<80%), what should I do?**

1. Identify the missing-email cohort. POS-only customers are usually the largest share; train staff.
2. Identify the bounce cohort. Suppress in active campaigns; consider a re-engagement series with email re-capture prompt.
3. Identify the invalid-format cohort. Send a one-time "fix your email" prompt with \$5-10 incentive; recovery is usually 30 to 50%.
4. Audit signup forms; some signup forms allow obviously-fake addresses (single-character handles). Add basic validation.
5. Check Shopify Markets: customers who didn't complete the email-capture step in regional checkout flows may have null email; tighten the checkout requirement.

***

### Tracked live in Vortex IQ Nerve Centre

*Email Health* is one of hundreds of KPI pulses Vortex IQ tracks across Shopify 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](https://app.vortexiq.ai/login) or [book a demo](https://www.vortexiq.ai/contact-us) to see this metric running on your own data.
