Skip to main content
Card class: HeroCategory: Email Marketing
All-time CRM contact count. Reference number for everything below, funnel rates use this as the denominator.

At a glance

All-time count of distinct contact records in your HubSpot portal. The denominator that every funnel rate, list-coverage check, and per-contact KPI on this dashboard sits on top of. Pulled from GET /crm/v3/objects/contacts and reflects whatever is currently in HubSpot, including unsubscribed, bounced, and unengaged contacts.
What it countsTotal distinct vid (or hs_object_id) records returned by /crm/v3/objects/contacts. Includes every lifecyclestage (subscriber, lead, MQL, SQL, opportunity, customer, evangelist, other) and every email-status (subscribed, unsubscribed, bounced, unengaged).
HubSpot Hub scopeAll Hubs. Contacts are the universal record; Marketing, Sales, and Service Hubs all read from the same contact object.
Lifecycle stage filterNone. This is the everyone-in-the-portal number. For stage-filtered counts use the lifecycle distribution funnel card.
List membershipNot filtered. A contact in zero lists still counts. List-based segments are computed on top of this number, not the other way around.
Email-subscription stateNot filtered. Unsubscribed and bounced contacts still count. The Active Subscribers card subtracts them.
Deletion / GDPR purgeHard-deleted contacts disappear immediately. GDPR-deleted contacts are removed permanently and never reappear.
Multi-portalOne number per connected portal. Agencies running multiple HubSpot portals see this card per portal, no aggregate.
Currencyn/a (count).
Time windowRT, real-time read on every card load. No vsP comparison because the all-time count drifts upward continuously.
Alert triggerNone. The card is a reference figure; growth or shrinkage signals are picked up by New Contacts (period) and Lifecycle Stage Distribution.
Rolesowner, marketing, sales

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 B2B SaaS company running HubSpot Marketing Hub Pro plus Sales Hub Pro for the last four years. Reading this card on 14 Apr 26:
BucketCountShare
Total Contacts (this card)84,200100%
Lifecycle: Subscriber38,60045.8%
Lifecycle: Lead22,40026.6%
Lifecycle: MQL8,90010.6%
Lifecycle: SQL3,1003.7%
Lifecycle: Opportunity9201.1%
Lifecycle: Customer4,8005.7%
Lifecycle: Other / unset5,4806.5%
Email subscribed51,20060.8%
Email unsubscribed18,90022.4%
Hard-bounced6,4007.6%
Never-engaged (>365D)7,7009.2%
Five things this picture reveals:
  1. 84,200 total but only 51,200 are emailable. A 39% gap between portal size and email-reachable size is normal for a four-year-old portal. Marketing-Hub pricing is based on this number, not the emailable subset, so audit Hub HS04 fires when the gap widens above 50%.
  2. Customer share at 5.7% is healthy for B2B SaaS. A 5-10% customer-to-contact ratio is typical for SaaS sub-$500 ACV; lower for enterprise (long cycles, fewer customers); higher for consumer DTC (shorter cycles, more customers). Outside this band, lifecycle definitions usually need cleanup.
  3. The Other / unset bucket at 6.5% is the cleanup target. 5,480 contacts with no lifecyclestage value will not appear in any funnel calculation, so the funnel rates in Lead to MQL and MQL to SQL understate true throughput. Audit HS01 picks this up.
  4. Subscriber bucket dominates at 45.8%. That is contacts who opted in but never converted to lead. For a B2B portal this usually means a popular content magnet (gated whitepaper, webinar) brought in volume that nurture sequences never warmed up. The fix is workflow enrolment for the dormant subscriber bucket, not more top-of-funnel.
  5. Total Contacts grows roughly 3-5% per month for a healthy B2B portal. This portal is on plan. A growth rate above 15% per month for two consecutive months almost always means a list import (acquisition, conference badge scan, partner data swap), not organic, and triggers tier-pricing risk if the portal is on a contact-priced plan.

Sibling cards merchants should reference together

Total Contacts is the denominator for almost every other HubSpot card. Pair it with these:
CardWhy pair it with Total Contacts
New Contacts (period)The growth view. Total Contacts is the stock; New Contacts is the flow. Stock without flow is a dying portal.
Lifecycle Stage DistributionThe shape view. Tells you what the 84,200 are doing, where the cleanup work is.
MQLsThe marketing-handoff bucket. MQL ÷ Total Contacts gives the qualified-lead density (healthy B2B band: 8-15%).
SQLsThe sales-acceptance bucket. SQL ÷ Total Contacts gives a tighter pipeline-health proxy.
Lead to MQL Conversion %The progression rate from the largest bucket. Drop here cascades into MQL volume within 60 days.
CompaniesThe B2B-specific denominator. Contacts ÷ Companies gives the average contacts-per-company (healthy: 3-8 for ABM accounts).
Klaviyo Total Contacts (when DTC overlap)If the merchant runs both HubSpot for sales-CRM and Klaviyo for DTC email, Total Contacts here is usually the larger number; Klaviyo only holds opted-in commerce subscribers.
Shopify customers (when commerce-attached)Cross-check: HubSpot lifecycle-customer count should approximate Shopify distinct-customer count for connected stores. Big gaps surface in Top Customers Without HubSpot Contact.

Reconciling against the vendor’s own dashboard

Where to look in HubSpot: The closest native view is the contact list itself:
HubSpot → Contacts → Contacts (top-right shows total record count)
For a richer breakdown:
HubSpot → Reports → Analytics tools → Contacts analytics (filter Contacts created to All time)
The number on the contact-list header should match this card to within a few records. Why our number may legitimately differ from HubSpot’s:
ReasonDirectionWhy
Sync lagOurs lower for the most recent 5-15 minutesVortex IQ pulls via the contacts API on a 15-minute schedule (or webhook for portals with the listener installed). Records created in the last 5-15 minutes may not be in our index yet.
GDPR-deleted recordsEitherHubSpot purges GDPR-deleted contacts immediately; if Vortex IQ still has the record cached from before the purge, the cached read will be higher for one sync cycle, then catches up.
Soft-deleted vs hard-deletedOurs higher temporarilySoft-deleted contacts (archived = true) are excluded by HubSpot’s UI count but may persist in Vortex IQ’s cache for one sync cycle.
Portal timezone vs UTCNone on this cardTotal Contacts is an all-time count, no timezone-boundary effect.
Multi-portal aggregationn/aVortex IQ scopes per portal; an agency with two portals sees two cards.
Cross-connector reconciliation: The most productive reconciliations involve email and commerce platforms, since contacts are the primary identifier across all three.
CardExpected relationshipWhat causes legitimate divergence
Klaviyo Active SubscribersKlaviyo subscriber count is typically 30-60% of HubSpot Total Contacts for a DTC merchant running bothHubSpot stores all CRM contacts (subscribers, leads, sales-pipeline contacts). Klaviyo holds only commerce-opted-in subscribers, so it always carries fewer.
Shopify distinct customersShopify customer count is typically 5-15% of HubSpot Total ContactsMost HubSpot contacts never become Shopify customers (top-of-funnel lifecycle stages dominate). Customer-stage HubSpot contacts should approximate Shopify customers, big gaps surface in Top Customers Without HubSpot Contact.
GA4 audience sizeGA4 30-day users is typically 3-10× HubSpot Total ContactsGA4 includes anonymous visitors; HubSpot only contacts who submitted forms or got cookied via tracking pixel.

Known limitations / merchant FAQs

Why does this count include unsubscribed and bounced contacts? Because Total Contacts is the portal-stock figure (and HubSpot bills on it). Unsubscribed contacts still occupy a record, still count toward your Marketing Hub tier, and still appear in Sales Hub views. To exclude them, look at Active Subscribers instead. My HubSpot bill jumped, why? Marketing Hub tiers are priced on Marketing-Contact count (a subset of Total Contacts where hs_marketable_status = MARKETABLE). When this card jumps by 10,000+ in a month, the most common cause is a list import or a workflow that reset hs_marketable_status. Audit HS04 surfaces this within 24 hours. Why is my list-segment number lower than this? HubSpot’s lists, both static and active, are computed off this base. A static list captures a snapshot at the moment of creation and never refreshes; an active list re-evaluates roughly every 15 minutes. If you created a static list six months ago and a contact qualified yesterday, the static list still excludes them. My deal pipeline number doesn’t match my dashboard, what gives? This is the contacts card, not deals. Total Contacts and Total Deal Pipeline Value are independent. A B2B portal with 84,200 contacts and 720 open deals is normal (the typical contact-to-deal ratio is 50:1 to 200:1 for B2B SaaS). Multi-portal aggregation, how does Vortex IQ handle this? One card per portal. We do not aggregate Total Contacts across HubSpot portals because contact records are not deduplicated across portals; the same email may exist in two portals as two separate records. Aggregating would double-count. Why does today’s number sometimes go down? Two causes: (a) a bulk-delete cleanup just ran, removing thousands of stale contacts; (b) GDPR purge requests were processed (rare, usually 1-3 records). HubSpot logs both in the audit log under Account → Activity. Will GDPR-deleted contacts come back when I re-import the same email? No. GDPR deletion is permanent. The contact-id is burned and a re-import creates a new record with a new id, fresh history. This is by design. Why is the lifecycle distribution not adding up to this total? Look for the Other / unset bucket. HubSpot allows lifecyclestage to be empty (a property that has not been set on a contact); these contacts won’t appear in any stage filter. Audit HS01 surfaces the unset count and recommends a default-stage workflow. How does this differ from the contacts list export? The export is a paginated CSV of the same query, not a different number. If the export count differs from this card by more than 1%, sync lag is the most likely cause; re-run the export 30 minutes later and it should converge.

Tracked live in Vortex IQ Nerve Centre

Total Contacts 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.