HubSpot, Stripe and NetSuite Reconciled to the Cent for a B2B SaaS Company
The problem
The revenue engine ran across HubSpot for the pipeline, Stripe for subscriptions and cards, and NetSuite for the ledger and ASC 606. Joined by a drag-and-drop connector and CSV exports, the three disagreed constantly: billing schedules drifted from the contract terms in the CRM, chargebacks never reached the customer balance in the ERP, and every month-end the finance team spent eight business days matching Stripe payouts against the bank account by hand. Deferred revenue lived in an offline amortization workbook.
What we did
We replaced the connector with direct, authenticated endpoints and a settlement engine. A closed-won deal in HubSpot provisions the NetSuite customer and sales order, validates tax ID, currency and subsidiary, and creates the Stripe customer and subscription schedule. Each Stripe payment webhook is broken into its parts: a customer payment for the gross, a clearing-account debit for the exact net deposit, and the processing fee posted to expense in the same transaction. The deal’s line items map to revenue recognition rules at close, so the ASC 606 arrangement and its amortization journals are created without a workbook. Every payload is hashed against the Stripe event id, so a retried webhook updates the record it already created.
01HubSpot
- Deal marked closed-won
- Payload: terms, products, seats
02NetSuite provisioning
- Validate tax ID, currency, subsidiary
- Create the customer and sales order
- Create the Stripe customer and subscription schedule
03Stripe
- Charge the card or dispatch the invoice
- Webhook: invoice.payment_succeeded with gross, fee and transaction id
04Settlement engine
- Debit Stripe clearing for the net deposit
- Debit processing-fee expense
- Credit accounts receivable for the gross
05Revenue engine
- Create the revenue arrangement and fair-value allocation
- Post the monthly deferred-revenue journal
How the mechanism works
- The gateway-fee discrepancy
A generic connector records a $10,000 payment against a $10,000 invoice, but Stripe deposits $9,710 after a $290 fee, and the bank reconciliation becomes a forensic exercise in pennies. The settlement listener reads the balance transaction and posts gross, net and fee as three legs of one entry, so the deposit matches to the cent on the day it lands.
- ASC 606 multi-element allocation
Enterprise deals bundle implementation services, annual licenses and consumption tiers that recognize on different timelines regardless of how the customer is billed. HubSpot line items are mapped to NetSuite revenue rules at close, so the arrangement, the deferred balances and the amortization journals exist the day the deal does, whether the customer pays annually in advance or monthly in arrears.
- Idempotent retries and webhook deduplication
Networks fail and Stripe retries. Every incoming payload is hashed with SHA-256 against the Stripe event id and logged in a governed audit record. A duplicate event finds the existing record, returns HTTP 200 to Stripe and posts nothing twice.
Results
| Measure | Before | After |
|---|---|---|
| Month-end close | 12 business days, held by the Stripe reconciliation | 3 business days |
| Manual entry per deal | 25 minutes across three portals | 0 minutes |
| Unallocated Stripe fee variance | $15,000+ a month | $0.00; fees posted atomically |
| Revenue recognition | Offline Excel amortization models | Native ASC 606 schedules created on deal close |
| Dispute and churn signal | 3-4 weeks behind | Customer success notified on the Stripe dispute event |
What to take from it
- Your CRM is for selling; your ERP is for truth
Sales reps should never own GL tax codes or exchange rates. Capture commercial terms in the CRM and translate them into accounting rules in code.
- Split the gateway fee at ingestion
An integration that posts gross payments and leaves the fee for month-end is paying the finance team to be human calculators.
- Direct endpoints beat multi-hop middleware
Authenticated RESTlets with schema validation give sub-second posting, no middleware subscription and complete control over what reaches the ledger.
Composite retrospective; client shown as an archetype and figures illustrate the mechanism. Related: Native Integration vs iPaaS Middleware: the recurring toll that transfers at close
Talk to the architect, not a salesperson
AI automation for private-equity portfolios, measured in basis points: a few hours of operating-partner time in, hundreds of engineering hours and margin out, delivered as working code in two-week sprints.