Company context
The client is a $90M ARR vertical SaaS company with 600 active contracts. Sales reps quoted in Salesforce CPQ; closed deals were re-entered into Stripe by a billing operations team; Stripe-generated invoices were re-categorized in NetSuite by accounting. Each handoff produced reconciliation gaps, billing errors, and revenue leakage. Annual revenue leakage was estimated at ~$1.4M — about 1.5% of ARR — driven by missed billings, incorrect contract terms in Stripe, and discount errors at re-entry.
- $90M ARR, 600 active contracts
- Salesforce CPQ for quoting and contract management
- Stripe for subscription billing
- NetSuite for GL and revenue recognition
- Manual handoff at every system boundary
- ~$1.4M / yr estimated revenue leakage
Before — what was actually broken
Three teams, three systems, no real integration. Sales rep closes deal in CPQ. Billing ops re-keys contract terms into Stripe (start date, billing frequency, MRR, term, escalators). Accounting reconciles Stripe to NetSuite at month-end. Errors compound: ~3% of contracts had a billing-detail error in Stripe vs. CPQ; ~1% had material revenue impact (wrong amount, wrong start date).
- Manual re-keying of contract terms from CPQ to Stripe
- Month-end reconciliation between Stripe and NetSuite
- Revenue recognition done in spreadsheets after billing
- ~3% billing-detail error rate vs. CPQ
- ~$1.4M estimated annual revenue leakage
- Customer disputes from billing errors averaged 30/month
What Ledger Summit implemented
Three integration tracks: (1) Salesforce CPQ → Stripe for clean billing setup; (2) Stripe → NetSuite for invoice posting and rev-rec; (3) reconciliation discipline at every handoff with daily tie-out.
- Salesforce CPQ → Stripe automation: contract close fires API to Stripe with all terms preserved (no re-keying)
- CPQ approval workflow: clean discount approvals, term standardization, billing-frequency rules
- Stripe → NetSuite invoice posting: daily sync with full contract trace
- Revenue recognition (ASC 606) integrated to Stripe events, not separate post-fact
- Daily reconciliation: CPQ contracts in Stripe = CPQ closed; Stripe invoices in NetSuite = Stripe billed
- Exception queue for any handoff variance
- Customer-master sync across three systems
- Deferred revenue waterfall auto-generated each close
- Per-contract evidence pack: CPQ → Stripe → NetSuite trace