TL;DR
- There are three realistic ways to connect Stripe and HubSpot:
- Stripe as HubSpot's payment processor.
- A marketplace data sync app.
- A custom integration using Stripe Payment Links or Checkout and webhooks.
- Option 1 is available on all HubSpot plans. It collects one-time and recurring payments for contracts, invoices, payment links, quotes, legacy quotes and subscriptions, and carries a 0.75% HubSpot platform fee plus other fees (HubSpot KB).
- Creating and editing (non-legacy) quotes requires Revenue Hub and a Revenue Hub seat (HubSpot KB).
- Go custom when your pricing logic, approval flow or post-payment process doesn't fit HubSpot's built-in tools.
The business problem
Sales closes a deal in HubSpot, finance chases the payment in Stripe, and nobody is sure which invoice belongs to which deal. Recurring customers get charged, but the CRM doesn't know whether the last payment failed. Reps re-type prices into quotes by hand.
Connecting the two systems is about one goal: the deal, the quote and the money should tell the same story. How you get there depends on how standard your selling process is.
Option 1 — Stripe as HubSpot's payment processor
This is HubSpot's native route. Once connected, you collect payments directly from HubSpot's revenue tools.
What you get (HubSpot KB):
- One-time and recurring payments for contracts, invoices, payment links, quotes, legacy quotes and subscriptions.
- Payment data such as gross amount and fees synced with your Stripe account.
- Your existing Stripe integrations outside HubSpot keep working unchanged.
What to know before you switch it on (same source):
- There is a 0.75% platform fee for using Stripe through HubSpot, on top of other fees.
- One Stripe account ↔ one HubSpot account. You can't connect several Stripe accounts to one portal, and if you use Brands, all brands share the connected account.
- HubSpot payments and Stripe can't both be connected.
- You can't connect Stripe payment processing to sandbox, developer test or partner demo accounts.
- Invoices and subscriptions created in HubSpot won't be created in Stripe.
- Stripe payment processing isn't available in some countries. HubSpot lists, among others, Brazil, India, Malaysia and South Africa.
Recurring billing runs through HubSpot subscriptions, which are available on all plans (HubSpot KB — subscriptions).
Best for: companies happy to run quoting, invoicing and recurring billing from HubSpot, with standard products and prices.
Option 2 — A data sync app
Stripe Data Sync is listed in the HubSpot App Marketplace (HubSpot Marketplace — Stripe Data Sync). A sync app is the right tool when Stripe stays your billing system and you mainly want Stripe data visible in the CRM. Check the listing for exactly which objects and directions it syncs before relying on it for reporting.
Best for: teams that bill in Stripe already and want visibility, not a new billing process.
Option 3 — A custom integration
You build the logic yourself. Typically that means Stripe Payment Links or Checkout for collecting money, Stripe webhooks to learn what happened, and the HubSpot API (or a workflow) to update deals, contacts or custom objects.
When I've built this
For golf courses, I built a quote generator inside HubSpot integrated with Stripe:
- users create personalised quotes and receive secure Stripe payment links;
- synchronised email sequences handle the follow-up;
- after 30 days, recurring debits run automatically based on the initial Stripe payment information;
- all booking and payment information is stored in HubSpot.
The "first payment now, recurring debits later" timing didn't fit an off-the-shelf flow, so custom was the sensible choice.
On another project (an e-commerce brand), I connected Shopify, Make and payments with real-time sync and post-purchase workflows in HubSpot.
The building blocks (verified against Stripe's docs)
- Payment Links. A Stripe-hosted payment page you can create without code in the Dashboard (Stripe Docs — Payment Links) or through the API with
POST /v1/payment_links(Stripe API). Payment links support products or subscriptions. - Completion event. When a customer completes a payment through a payment link, Stripe sends a
checkout.session.completedwebhook. Payment methods such as bank debits or vouchers can take 2–14 days to confirm, so you also need to listen for the follow-up events (Stripe Docs — after the payment). - Saving a card for later. Checkout Sessions can let customers save their payment method by setting
saved_payment_method_options[payment_method_save]=enabled(Stripe Docs — save during payment). - Subscriptions. When you create a subscription, Stripe automatically generates invoices, attempts payment collection and manages status changes (Stripe Docs — How subscriptions work). Subscription webhooks include
invoice.paid,invoice.payment_failedandcustomer.subscription.created / updated / deleted(Stripe Docs — subscription webhooks).
Technical depth: making the sync reliable
Verify every webhook
Stripe signs each event. Your endpoint should verify the request using the raw body, the Stripe-Signature header and your whsec_ signing secret. Stripe warns that any change to the raw body makes verification fail, which matters in frameworks that parse JSON automatically (Stripe Docs — webhooks). Endpoints must be publicly reachable HTTPS URLs, and you can register up to 16 event destinations.
Make writes idempotent on both sides
- Stripe side. Send an
Idempotency-Keyheader when creating objects so a retried request doesn't create a second customer or charge. Keys can be up to 255 characters, and Stripe suggests V4 UUIDs (Stripe API — idempotent requests). - HubSpot side. Store Stripe IDs (customer, subscription, invoice) in HubSpot properties marked as unique identifiers. Then use batch upsert with
idProperty, so a repeated webhook updates the record instead of duplicating it (HubSpot custom objects API — upsert).
A minimal event map
| Stripe event | What to do in HubSpot |
|---|---|
checkout.session.completed | Mark the deal as paid (or move the stage); store the Stripe customer ID |
invoice.paid | Update "last payment date" / "subscription status" on the record |
invoice.payment_failed | Create a task for the owner; trigger a dunning email workflow |
customer.subscription.deleted | Update the status to cancelled; notify the account owner |
The HubSpot side of this table is a design choice, not something Stripe prescribes. Adapt the properties and stages to your pipeline.
Stay inside HubSpot's rate limits
If you process bursts of events (for example, a monthly billing run), remember that privately distributed apps get 100 requests per 10 seconds on Free/Starter and 190 on Professional/Enterprise. Batch endpoints help (HubSpot usage guidelines).
How to choose
| If you… | Choose |
|---|---|
| Want HubSpot to be where quotes, invoices and subscriptions live | Option 1 (processor) |
| Bill in Stripe and only need visibility in the CRM | Option 2 (sync app) |
| Have custom pricing, delayed or conditional billing, or multi-step approvals | Option 3 (custom) |
| Need several Stripe accounts in one portal | Not option 1 (one Stripe account per HubSpot account) |
Sources
- HubSpot KB — Connect Stripe as a payment processor: https://knowledge.hubspot.com/payment-processing/connect-your-stripe-account-as-a-payment-processor-in-hubspot
- HubSpot KB — Understand how quotes work: https://knowledge.hubspot.com/quotes/understand-how-quotes-work-in-hubspot
- HubSpot KB — Create subscriptions: https://knowledge.hubspot.com/subscriptions/create-subscriptions
- HubSpot Marketplace — Stripe Data Sync: https://ecosystem.hubspot.com/marketplace/listing/stripe-data-sync
- HubSpot Developers — Custom objects API (upsert): https://developers.hubspot.com/docs/api-reference/latest/crm/objects/custom-objects/guide
- HubSpot Developers — Usage guidelines: https://developers.hubspot.com/docs/developer-tooling/platform/usage-guidelines
- Stripe Docs — Payment Links: https://docs.stripe.com/payment-links
- Stripe API — Create a payment link: https://docs.stripe.com/api/payment-link/create
- Stripe Docs — After the payment: https://docs.stripe.com/payment-links/post-payment
- Stripe Docs — Save payment details during payment: https://docs.stripe.com/payments/save-during-payment
- Stripe Docs — How subscriptions work: https://docs.stripe.com/billing/subscriptions/overview
- Stripe Docs — Subscription webhooks: https://docs.stripe.com/billing/subscriptions/webhooks
- Stripe Docs — Webhooks: https://docs.stripe.com/webhooks
- Stripe API — Idempotent requests: https://docs.stripe.com/api/idempotent_requests
FAQ
Can I connect more than one Stripe account to HubSpot? No. Each Stripe account connects to one HubSpot account, and a HubSpot account can't have several Stripe accounts connected (HubSpot KB).
Does HubSpot charge a fee for using Stripe? Yes, a 0.75% platform fee. Other fees may also apply.
Do I need Revenue Hub to send quotes? Creating and editing quotes requires Revenue Hub and a Revenue Hub seat. Without them, legacy quotes apply (HubSpot KB).
Can I test the Stripe payment processor in a sandbox? No. HubSpot doesn't allow it on sandbox, developer test or partner demo accounts. Test custom integrations in Stripe's test mode instead.