Your sales, success, and marketing teams live in HubSpot. Your revenue lives in Stripe. As long as those two stay apart, every revenue question — Is this account expanding? Did they pay? Are they about to churn? — means a tab switch, a Stripe login, or a Slack message to finance.
Syncing Stripe into HubSpot closes that gap. Revenue data lands on the Company, Contact, Subscription, and invoice records your team already opens fifty times a day.
Revenue where your GTM team already works #
When a Stripe Customer becomes a HubSpot Company, and a Stripe Subscription
becomes a native HubSpot Subscription with stripe_mrr and stripe_arr
written on it, the numbers show up where decisions get made:
- A rep opens a Company and sees its live MRR, not a number from last quarter’s export.
- A CSM filters their book of business by
hs_statusto find subscriptions that just wentpast_due. - Marketing builds an audience of customers above a revenue threshold without asking anyone for a list.
No one has to leave HubSpot to know what an account is worth.
MRR and ARR on the record, automatically #
The figures your GTM team cares about most are recurring revenue numbers, and they’re notoriously annoying to keep current by hand. The sync computes them from the live Stripe Subscription and writes them straight to the record:
| Property | What it holds |
|---|---|
stripe_mrr |
Normalized monthly recurring revenue for the subscription |
stripe_arr |
Annualized recurring revenue |
hs_status |
The subscription’s lifecycle state (active, past_due, canceled…) |
hs_recurring_billing_frequency |
How often it bills (monthly, annual…) |
hs_recurring_billing_end_date |
The scheduled cancellation / non-renewal date |
Because they live on a native object, you can report, segment, and automate on them like any other HubSpot property.
No more CSV exports #
The old workflow looks like this:
Finance exports a Stripe report → cleans it in a spreadsheet → emails it around → someone pastes a stale snapshot into a HubSpot dashboard → it’s wrong by Friday.
The synced workflow looks like this:
Stripe changes → HubSpot updates → the dashboard is already right.
Before, “what’s our MRR by owner?” was a half-day spreadsheet exercise. After, it’s a saved report that refreshes itself.
Real-time and reconciled accuracy #
A sync is only useful if you can trust it. This one stays correct two ways at once:
- Real-time webhooks — when a payment fails, a subscription upgrades, or an invoice is paid, Stripe fires a webhook and HubSpot updates within seconds.
- Nightly reconcile — a 03:00 job re-walks every object and catches anything a missed webhook left behind. It can also detect deletions, but that’s opt-in via each record type’s delete policy and off by default.
You get the immediacy of webhooks with the completeness of a full re-sync, so the data your team acts on is both fresh and trustworthy.
Before and after #
| Question | Before | After |
|---|---|---|
| What’s this account’s MRR? | Log into Stripe, find the customer | Open the Company in HubSpot |
Who’s past_due right now? |
Ask finance | Filter subscriptions by hs_status |
| What’s our ARR by owner? | Export + spreadsheet | A saved HubSpot report |
| Did they pay the last invoice? | Search Stripe | Check hs_invoice_status on the record |
| Which accounts are expanding? | Nobody really knows | Workflow on stripe_mrr increase |
Where to next #
- What syncs to what — the full object map and routing rules.
- Example reports & workflows — ready-to-build reports and automations on your synced data.