Skip to main content
Card class: Cross-ChannelCategory: Email Marketing
Top revenue customers with NO contact record in HubSpot, sales-team blind spot. Should be #1 import-list target.

At a glance

The list of high-revenue commerce customers who have NO matching contact record in HubSpot. Each row is a customer the merchant has billed, often repeatedly, but the sales and marketing team has never logged, never emailed, and cannot segment. The #1 import-list target. Computed as commerce.customers WHERE customer.lifetime_value >= $1k AND customer.email NOT IN hubspot.contacts.email.
What it countsDistinct commerce-platform customers (Shopify Customer, BigCommerce Customer, Adobe Commerce customer_entity, Stripe Customer) whose lifetime revenue exceeds the threshold and whose email does not match any HubSpot contact. Sorted descending by LTV; default top 50 surfaced, full export available.
Numerator (commerce)SUM(order.total) per customer over the trailing 365 days, joined to a distinct customer-id, with email extracted. Subscription-revenue from Stripe is included where the same email appears.
HubSpot side checkGET /crm/v3/objects/contacts/search with email-property filter, batched. A contact is considered to exist if there is any HubSpot contact record with that email, regardless of lifecyclestage, owner, or list-membership.
Email-match scopeExact-match. Gmail + aliases, mixed-case domains, and firstname.lastname variants are normalised (lower-cased) before comparison. Forwarded-inbox aliases (accounts@, purchasing@) are flagged separately because they often map to multiple humans.
Lifecycle-stage scopeThe check is contact-existence, not lifecyclestage. A contact at subscriber stage with the matching email DOES count as “in HubSpot”, so this card surfaces only fully-missing records. The companion card hs_xc_lifecycle_first_purchase_conversion covers the in-HubSpot-but-wrong-stage pattern.
CurrencyLTV reported in portal home currency. Multi-currency commerce platforms are normalised at order-creation FX.
RefundsSubtracted from LTV. A customer who spent 5kthenrefunded5k then refunded 3k shows $2k LTV. Customers who fall below threshold after refund are excluded.
Multi-portal aggregationOne card per portal. A customer in the commerce platform but missing from portal A while present in portal B counts as missing for portal A. Cross-portal contact-search is not performed because portals have independent contact namespaces.
Time window365D rolling LTV window, refreshed daily. Anchored on order creation date in the commerce platform’s timezone.
Alert triggerany customer LTV >$1k missing. The threshold is configurable per portal; agencies running enterprise B2B push it to 10k,DTCmerchantspullitdownto10k, DTC merchants pull it down to 250.
Rolesowner, sales, marketing. Owner sees the dollar exposure, sales gets the import list, marketing assesses the email-list growth opportunity.

Calculation

Calculated automatically from your HubSpot 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 hybrid B2C agency client running HubSpot Sales Hub plus Shopify Plus. Reading on 14 Apr 26 over the trailing 365 days (15 Apr 25 to 14 Apr 26). Top of the missing-contacts list, top 8 of 47 surfaced:
Customer email365D LTVFirst orderLast orderOrder count
billing@northwindltd.com$48,42022 May 2509 Apr 2631
accounts@harborholdings.com$31,18018 Jun 2502 Apr 2618
purchasing@apexparts.io$24,76004 Jul 2528 Mar 2612
j.kowalski@centrale.fr$19,42011 Aug 2515 Mar 269
ops@meridianstore.co.uk$17,80002 Sep 2522 Mar 2614
info@summitgear.au$14,23019 Sep 2530 Mar 2611
founder@tinyrocket.com$12,94005 Oct 2510 Apr 267
accounts.payable@blueoak.de$11,61028 Oct 2505 Apr 266
Roll-up:
BucketCountAggregate LTV
Customers above $10k LTV missing in HubSpot12$214,800
Customers 1kto1k to 10k LTV missing in HubSpot35$128,400
Total exposure (this card)47$343,200
Five things this picture reveals:
  1. The top 4 emails are role-inboxes, not human contacts. billing@, accounts@, purchasing@, ops@ map to teams not people. The sales team can still create a HubSpot company-record and a “primary purchasing contact” placeholder, but personalised outreach needs a human-name lookup. The card flags role-inbox patterns automatically (HS09 audit). Six of twelve $10k+ entries are role-inboxes; the rest are real humans.
  2. **343,200ofbuyingrelationshipsisinvisibletosales.EveryoneofthesecustomershasboughtrepeatedlywithoutanyHubSpottouchpoint.IfsalesassistcouldliftLTVby15343,200 of buying relationships is invisible to sales.** Every one of these customers has bought repeatedly without any HubSpot touchpoint. If sales-assist could lift LTV by 15% on warm-existing customers (industry benchmark for personalised outreach), the upside is 51,480/year. The dollar number is the executive conversation.
  3. Kowalski (centrale.fr) and Blueoak (blueoak.de) signal an EU cohort. The merchant likely never enabled HubSpot’s GDPR-consent workflow on the Shopify checkout, so EU customer emails were never captured into the CRM. Audit HS10 calls this out: enable the consent-checkbox on commerce checkout and the missing-contacts trickle resolves over the next 60 days.
  4. The lifecycle-stage backfill lag does not affect this card. The check is “exists in HubSpot at all”, not “at the right stage”. Even mid-backfill these contacts are absent; they were never created in the first place. Compare against hs_xc_lifecycle_first_purchase_conversion which IS lag-sensitive.
  5. 214,800sitsabovethe214,800 sits above the 10k threshold the merchant uses; alert fires. The standard alert trigger is “any customer LTV >1kmissing",butthemerchanthastuneditto1k missing", but the merchant has tuned it to 10k. With 12 customers over the threshold, the card pages the sales lead. First action: bulk-import these 12 into HubSpot, assign each to an account-executive, run a “we have noticed your business with us” reactivation email.

Sibling cards merchants should reference together

This is the missing-contact-list card. Pair with these to size the opportunity and close the gap:
CardWhy pair it with Top Customers Without HubSpot Contact
Total ContactsThe denominator-side stock. Big missing-list relative to total contacts means the CRM has not been synced with commerce since launch; small list means a few fall-through cases.
Lifecycle Stage DistributionOnce the missing customers are imported, they should land at customer stage. The card tells you the post-import shape.
Lifecycle Stage → First Purchase ConversionThe inverse: contacts in HubSpot at customer-stage who never bought. Together both cards define the data-quality envelope of the CRM.
Pipeline-vs-Realised Revenue GapA widening missing-customers list is one cause of unrealised pipeline. Closed-won deals against contacts that exist; missing customers represent revenue that never had a deal.
Email-Attributed Commerce RevenueEach missing customer is email-attribution potential not realised. Importing them and adding to a nurture flow grows email-attributed revenue.
Shopify Total RevenueThe commerce denominator. The missing-LTV total as % of Shopify Total Revenue is the “CRM blind-spot share”.
Klaviyo List Growth RateIf a merchant runs Klaviyo for marketing-email and HubSpot for sales-CRM, the missing customers may be in Klaviyo but not HubSpot. Triangulate before importing.
GA4 Returning UsersThe site-traffic stock. Returning-user count well above HubSpot contacts confirms the CRM is missing buyers, not that traffic is low.

Reconciling against the vendor’s own dashboard

Where to look in HubSpot: HubSpot does not natively expose a “customers missing in HubSpot” view; it only knows what it knows. Closest individual views the merchant can compare against:
HubSpot → Contacts → Lists → Static (any custom list of lifecyclestage = customer) HubSpot → Reports → Analytics tools → Contacts (total customer-stage count) Shopify Admin → Customers, BigCommerce → Customers, or Stripe Dashboard → Customers (the commerce-side ground truth)
The merchant traditionally exports both lists to CSV and runs a vlookup; this card automates that nightly. Why our number may legitimately differ from the merchant’s expectation:
ReasonDirectionWhy
TimezoneBoundary day offLTV is computed in commerce-platform timezone; HubSpot portal timezone may differ. Effect is small over a 365D window.
List-membership refresh lagMissing-list temporarily largerIf the merchant just bulk-imported customers via a workflow, the contacts may exist but list-refresh has not completed; the card may double-count for up to 60 minutes.
HubSpot lifecycle-stage backfillNo effectThis card uses contact-existence, not lifecyclestage. Backfill jobs do not change which contacts exist.
Email normalisationMissing-list smaller after fixIf Lisa.Smith@example.com exists in HubSpot and lisa.smith@example.com exists in commerce, default exact-match flags as missing. Enabling lower-case-normalisation closes this fallback within the next sync.
Multi-portal aggregationMissing-list larger per-portalA customer present in portal B but missing from portal A is reported as missing for portal A. If the merchant reconciles across both portals, the consolidated number is smaller.
Stripe-only customersMissing-list largerCustomers who paid via Stripe but never placed a Shopify order do appear here when Stripe is the connected commerce backend. Subscription-only buyers can look like missing customers when the merchant expects only-Shopify customers to surface.
Cross-connector reconciliation: This card IS the cross-connector view. The natural triangulations:
CardExpected relationshipWhat causes legitimate divergence
Shopify Total RevenueThe aggregate missing-LTV must be ≤ Shopify Total Revenue (subset relationship)If the missing-LTV exceeds 30% of Shopify Total Revenue, the CRM is essentially disconnected from commerce; reset the contact-sync workflow.
Klaviyo Email-Attributed RevenueCustomers missing from HubSpot may exist in Klaviyo (marketing list); the union is the addressable email-list opportunityHubSpot last-touch attribution and Klaviyo 5-day-click + 1-day-view attribution disagree on credit; the card here is identity-based, not attribution-based, so the missing-set is a clean union.
GA4 Returning UsersReturning-user count establishes there is repeat behaviour to captureGA4 measures sessions, not buyers; treat as a directional signal that there are humans behind the missing emails.

Known limitations / merchant FAQs

Why does Shopify show 12,400 customers but HubSpot only shows 8,200 contacts? The 4,200 gap is the broad shape of this card, but only the high-LTV slice surfaces here (default LTV >$1k). Most-common cause: a Shopify checkout that does not push contacts into HubSpot. Either the marketing-consent checkbox was never wired, or the HubSpot-Shopify sync was paused, or the contact-create webhook fails silently for non-EU consent-required orders. Audit HS09 enumerates the dollar exposure; HS10 traces the sync-failure cause. My missing-list has 12 customers above $10k, what is the priority action? Two-step playbook. Step 1: bulk-import all 12 emails into HubSpot via CSV with a “missing-customer-import” source tag. Step 2: assign each to an account-executive with a “we have noticed your business with us” outreach script. Track conversion in Pipeline-vs-Realised Revenue Gap over the next 60 days; well-run reactivation outreach lifts repeat-customer LTV by 8-15%. Vendor discrepancy with the commerce platform, who is right? The commerce platform is right about which customers exist and what they spent. HubSpot is right about which contacts have a CRM relationship. This card is the set-difference between the two, and both sides of the difference are legitimate facts. The action is to grow HubSpot to match commerce, not to dispute the count. List-segment lag, does it affect this card? Yes, briefly. If the merchant just imported 200 contacts via a workflow, list-membership recalculation can take 15-60 minutes for active lists, longer for static lists. During that window the card may show contacts as missing that are actually now in HubSpot. The 24-hour refresh cadence absorbs this; intra-day spikes are normal post-import. Lifecycle-stage definitions, what stage do imported contacts land at? Best-practice on import: set lifecyclestage = customer with a recovered_from_missing_list source-tag. Do not start them at subscriber, the contact has already bought. Do not start them at lead, the deal is already won. Customer-stage with proper source attribution preserves the funnel-conversion math in hs_xc_lifecycle_first_purchase_conversion rather than artificially inflating top-of-funnel cohorts. Multi-portal aggregation, does a customer in portal B count as missing in portal A? Yes. Portal-scoped contact namespaces mean a customer recorded in portal B is irrelevant to portal A. If the merchant deliberately runs separate portals per region or per sub-brand, this is correct behaviour. If the merchant intends one consolidated CRM, treat the multi-portal architecture as a separate problem to solve and pin the parent-portal as the canonical source. Workflow-trigger vs send-time, does this card use either? Neither. The check is contact-existence, evaluated by crm/v3/objects/contacts/search with email filter. No workflow, no email send, no list. The simplest and least-laggy of the cross-channel HubSpot cards. Today-volatility, why does this swing? LTV is a 365D rolling sum, so today-volatility is low. The biggest day-to-day swings come from new customers crossing the LTV threshold (a customer at 980LTVwhobuys980 LTV who buys 50 today crosses $1k and joins the missing-list) or from refunds dropping a customer back below threshold. Daily swings of 5-10 customers are normal for an active commerce store with 100+ orders/day. Action playbook on alert (any customer LTV >$1k missing):
  1. Open the missing-list, sort by LTV descending.
  2. For the top 10, check whether the email is a role-inbox (HS09 flags this) or a human; for role-inboxes, look up a human via the company website.
  3. Bulk-import the top 10 with full company-record context: industry, website, owner-of-record.
  4. Assign each to an AE for a personal reactivation outreach.
  5. Re-baseline the alert threshold if the merchant’s LTV distribution is much higher or lower than $1k.

Tracked live in Vortex IQ Nerve Centre

Top Customers Without HubSpot Contact is one of hundreds of KPI pulses Vortex IQ tracks across HubSpot 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.