$ gap between deals HubSpot says are won and revenue Stripe/Shopify actually saw. This is the handoff-leakage number that gets CFOs in the room.
At a glance
The dollar gap between deals HubSpot says are won and revenue the commerce / billing platform actually saw. The handoff-leakage number that gets CFOs in the room. Computed as sum(hubspot.deals[closedwon].amount in window) − sum(commerce.orders.total WHERE customer.email matches deal.primary_contact.email AND order.created_at within 30d of deal.closedate).
| What it counts | Closed-won deal value (numerator) minus matched commerce-platform revenue from the same customer email within 30 days of close date (denominator). The card surfaces the difference in absolute terms and as % of closed-won. |
| Numerator (HubSpot) | SUM(amount_in_home_currency) across deals where dealstage = closedwon and closedate falls in the window. Multi-pipeline aggregation. |
| Denominator (commerce platform) | SUM(order.total) from Shopify (Order.totalPrice), BigCommerce (total_inc_tax), Adobe Commerce (grand_total), or Stripe (charge.amount / invoice.amount_paid) where the customer email matches the deal’s primary-contact email AND the order was created within ±30 days of closedate. |
| Email-matching scope | Exact-match on email field. Sub-aliases (e.g. +invoice Gmail aliases) and forwarded inboxes do not match unless explicitly configured. |
| Time alignment | ±30 days around closedate. A deal closed on 14 Apr 26 matches commerce orders from 15 Mar 26 to 14 May 26. This window is configurable per portal. |
| Currency | Both sides home-currency-normalised. Multi-currency portals see one consistent figure. FX shifts between deal close and commerce-charge can introduce small drift. |
| Refunds | NOT subtracted on either side by default. The card optionally surfaces a refund-adjusted variant (Stripe / Shopify refunds within 90 days of order). |
| Annual prepays vs MRR | A 12k in numerator and $12k in Stripe within 30 days (one-time charge). For B2C subscription DTC, monthly subscriptions land as 1/12 of the deal value per month; the gap looks large but is just timing. |
| Sales-assist vs self-serve | Self-serve commerce orders not connected to a HubSpot deal contribute to denominator with no numerator. The card is meaningful only for sales-assisted deals; sales-assisted % is reported alongside. |
| Time window | 90D vsP. 90 days is long enough to capture deferred recognition; the prior 90D comparison flags trend changes in handoff health. |
| Alert trigger | gap >20% of closed_won pipeline. Above this threshold, two-thirds of the time the cause is wrong-email matching, not actual leakage. |
| Roles | owner, sales, finance |
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 services agency at $400k MRR running HubSpot Sales Hub plus Stripe for billing. Reading on 14 Apr 26 for the trailing 90 days (14 Jan 26 to 12 Apr 26):| Source | 90D figure |
|---|---|
| HubSpot closed-won deals (numerator) | $612,000 |
| Stripe revenue from matched customer emails (denominator, 30D window each) | $498,000 |
| Pipeline-vs-Realised Gap (this card) | $114,000 (18.6% of closed_won) |
| Period | Closed-won | Realised | Gap | Gap % |
|---|---|---|---|---|
| Trailing 90D | $612,000 | $498,000 | $114,000 | 18.6% |
| Prior 90D | $584,000 | $487,000 | $97,000 | 16.6% |
| Year ago 90D | $440,000 | $416,000 | $24,000 | 5.5% |
- 18.6% gap sits just below the 20% alert threshold. Trending up from 16.6% the prior 90D and 5.5% a year ago. Direction is concerning even though absolute is below threshold. Audit HS07 surfaces the YoY widening.
- The most-common single cause: wrong primary contact email on the deal. Investigating the worst 10 unrealised deals shows 6 had a different billing-contact email than the primary-contact in HubSpot, the deal looks unrealised but Stripe paid against the billing email. Fix is workflow rule “set deal primary_contact.email = invoicing email when contract sent”.
- Two deals are real leakage, not data hygiene. Both were $25k MRR contracts closed in February but never invoiced; the customer-success team manually waived first-month billing as part of the contract terms. These should have been logged as deferred-revenue, not closed-won-and-uninvoiced. Pair with
Stripe MRRto spot the missing-invoice pattern. - The 5.5% year-ago gap was healthy. A year ago the team was smaller, closed-won and invoicing were tight. Growing 90D pipeline introduced more handoff steps, more billing-contact mismatches, and more contractual nuances. The gap widening is operational, not a leakage problem. Refining the email-match logic and adding a billing-contact field would close most of the gap mechanically.
- The CFO conversation is about the dollar number, not the percentage. $114k of “won” deals not yet realised is a CFO-level cash question. Even if it is mostly billing-contact data hygiene rather than actual leakage, it sits on the CFO’s reconciliation queue until each deal’s invoice is matched.
Sibling cards merchants should reference together
The gap card is meaningful only against the underlying numerator and denominator:| Card | Why pair it with Pipeline-vs-Realised |
|---|---|
| Total Deal Pipeline Value | The forward-looking pipeline. The gap measures how the realised side trails closed-won; pipeline shows the next 90D inflow. |
| Deals Closing This Month | The current-month forecast; widening of the realised gap correlates with churn-risk in this number. |
| Stripe MRR | The realised side for SaaS billing. New-business closed-won ÷ 12 should approximate Stripe MRR delta within 30 days. |
| Stripe Successful Charges | The realised side for one-time / annual prepay. Closed-won amount should match Stripe charge amount to within tax / FX. |
| Shopify Total Revenue | The realised side for sales-assisted DTC. Closed-won should approximate Shopify orders from the same customer email. |
| Top Customers Without HubSpot Contact | The inverse: commerce customers with no HubSpot deal at all. Identifies sales-assist gap, customers reached without sales touch. |
| Email-Attributed Commerce Revenue | The marketing-side cross-channel; spike in marketing-attributed revenue without corresponding sales-attributed revenue may indicate self-serve growth. |
| Win Rate by Stage | A widening realised gap with steady win-rate suggests data-hygiene; a widening gap with falling win-rate suggests deal-quality. |
Reconciling against the vendor’s own dashboard
Where to look in HubSpot: HubSpot does not natively expose this gap; it is a Vortex IQ-derived cross-connector metric. Closest individual views:HubSpot → Reports → Sales analytics → Closed-won revenue (numerator) Stripe Dashboard → Reports → Net Volume / Shopify Admin → Analytics → Sales (denominator)The merchant has to manually reconcile these two numbers; this card automates that reconciliation per primary-contact email. Why our number may legitimately differ from the merchant’s expectation:
| Reason | Direction | Why |
|---|---|---|
| Email-mismatch | Gap larger | Primary-contact email in HubSpot differs from the billing email used in Stripe / Shopify. Most-common cause; fix via workflow that syncs billing-contact email. |
| Annual prepay vs MRR recognition | Gap larger initially | A 1k MRR over 12 months; realised side trails by 11 months for 11/12 of the deal value. The card optionally smooths annual deals by spreading. |
| Refunds | Gap smaller | Refunds reduce the realised side without changing closed-won. To compare apples-to-apples enable the refund-adjusted variant. |
| Discount / negotiation | Gap larger | Sales rep records full-list deal amount; finance records discounted invoice. Common in enterprise contracts. |
| Multi-currency | Gap drift | FX moves between deal close and invoice payment can introduce small drift. Usually <2% gap impact. |
| Time alignment | Gap larger | Deals with closedate near window-edge may have realisation outside the 30D matching window. Configurable extension to 60D or 90D for long-cycle businesses. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
| Stripe MRR | New-business closed-won ÷ 12 should approximate the Stripe MRR delta within 30 days | Annual prepays land as one-time charges, expansions land mid-month at proration. |
| Shopify Total Revenue | Closed-won (for sales-assisted DTC) should approximate sales-assisted Shopify orders from the same customer email | Self-serve checkout orders never reach a HubSpot deal; coupon-driven orders may not match exactly. |
| BigCommerce Total Revenue | Same shape | Same reasons. |
Known limitations / merchant FAQs
Why is my deal pipeline number different from my dashboard? This card is closed-won (the realised side of pipeline), not open-pipeline. Open pipeline lives inTotal Deal Pipeline Value. The two are independent; rising open-pipeline says future revenue, rising realised-gap says current handoff issues.
My gap is 30%, what is wrong?
Three usual causes: (a) primary-contact email on deals does not match the billing email used in Stripe / Shopify. Most-common; fix is a workflow rule. (b) Annual prepays where realisation trails by months. Switch to the spread-by-month variant. (c) Real leakage, deals marked closed-won that were never invoiced (manual waiver, contract amendment). The deal-level drill-down identifies which.
HubSpot vs commerce platform attribution, who is right?
For revenue accounting, the commerce / billing platform is always right. HubSpot’s closed-won is a sales-team commitment; Stripe / Shopify is the cash. This card surfaces the gap between the two so finance can reconcile.
List-segment lag, does it affect this?
No. This card uses CRM deals and commerce orders, not list-based marketing data. List lag is irrelevant.
Lifecycle-stage backfill, does it touch this card?
Indirectly. If a backfill changes lifecyclestage to customer for contacts who never bought, it does not affect this card (which uses deals, not contacts directly). The deal-level view is unchanged.
Deal-stage vs deal-amount weighting, what does this card use?
Closed-won is fully realised, no probability weighting. The card sums raw amount. The forward-looking forecast cards apply probability; this is the rear-view mirror.
Multi-portal aggregation, how does it work?
One card per portal, one commerce platform per portal. If a merchant has multiple HubSpot portals each with its own commerce platform, each is reported separately. Cross-portal aggregation is not supported because the email-matching logic is per-portal.
Sequence enrolment vs send timing, does it affect deals?
No. Sequences are 1-to-1 outreach, separate from deals. The card uses deal closedwon events, not sequence engagements.
Why is my deal pipeline number different from my dashboard playbook?
The dashboard playbook may show closed-won as “this month” while this card uses 90D rolling. Re-baseline the playbook to a 90D window and the numbers should match.
Today-volatility, why does this swing?
Closed-won events fire when reps mark deals; commerce charges fire when customers pay. Both happen continuously. Daily swings of 1-3% are normal; >5% means a large deal closed-won today or a large invoice was just paid. The 90D rolling window smooths most volatility.