I Spent $500 on Stripe Billing: Was It Worth It?

TL;DR: I rebuilt our small B2B SaaS billing system on Stripe Billing between February 3 and April 30, 2026. Budget cap: $500 of dev time at my fully-loaded rate of $90 an hour, which is roughly 5.5 hours. Actual spend: 36 hours over 12 weeks (well over budget). Stripe Billing fees: 0.5 percent on the first $1 million in invoiced volume, 0.8 percent above; we paid $54 on $10,800 of invoiced volume over the period. Stripe Tax fees: 0.5 percent of the transaction total. The tax integration alone saved us roughly 14 hours per month of manual tax handling. Worth the spend for B2B SaaS at $50,000 ARR or higher. Skip Stripe Billing if your invoicing is simple and Stripe Payment Links plus a spreadsheet does the job.

Jump To

How We Tested

Workload: a small B2B SaaS with about 180 paying customers on monthly subscriptions ($29 to $499 per month), $14,400 in monthly recurring revenue. Existing billing: custom in-house code on top of Stripe Charges, with invoice PDFs generated by our app, tax handled by a separate Avalara integration, dunning by ad-hoc emails. Test window: February 3 to April 30, 2026 (12 weeks). Project: migrate everything to Stripe Billing with Subscriptions, Tax, hosted invoice pages, the customer portal, and automated dunning. Hardware: MacBook Pro M3, our staging environment running on AWS EC2. Tools tracked: Stripe Dashboard for invoices and revenue, our application logs, a Notion sheet for migration friction notes. Hours logged in Toggl. Sample size during observation: 180 customers, 312 invoices processed, 14 failed payments handled by dunning, 4 tax jurisdictions covered (US sales tax in 3 states, EU VAT). Comparison reference: I did not actually swap to a competitor; I read Paddle, Chargebee and Lago documentation for cost comparison.

The 36 Hour Migration

Hour 1 to 4. Product configuration. Created Stripe Products and Prices for each of our 6 plan tiers. Prices in Stripe are a separate object from Products; one Product can have many Prices (for example, a 'Pro' product with monthly $29 and annual $290 prices). Took the design choice of one Product per plan family and one Price per billing interval. Hour 5 to 12. Migrating existing customers. Used the Stripe API to create Customer objects for our 180 paying users, attach their existing payment methods (the cards were already in Stripe under the old Charge-based flow), and create Subscriptions starting on the next billing date. Tested in staging with 4 test customers across both monthly and annual cycles. Hour 13 to 18. Webhook handling. Migrated our existing webhook handler to listen for the new Subscription and Invoice events (invoice.created, invoice.paid, invoice.payment_failed, customer.subscription.updated, customer.subscription.deleted, charge.dispute.created). About 8 event types we now care about. Used Stripe CLI's webhook forwarding for local testing.

Hour 19 to 24. Stripe Tax setup. Activated Stripe Tax in the Dashboard, configured our tax registrations (we have nexus in California, New York, Massachusetts and the EU VAT MOSS system). Configured product tax codes for each Price (most of ours are Software-as-a-Service, tax code txcd_10103000). Tested with a couple of test customers in different jurisdictions. Hour 25 to 30. Customer Portal. Configured the Stripe-hosted Customer Portal so customers can update payment method, view invoices, cancel subscriptions. Customised the branding and the cancel reason survey. Linked from our application's account page. Tested with my own account. Hour 31 to 36. Dunning configuration plus go-live. Configured Smart Retries (Stripe's automatic retry of failed payments) at the default schedule. Set up automated emails for invoice receipts, failed payments, and upcoming renewals (Stripe sends these on our behalf, branded with our domain). DNS records added for the email domain (DKIM and SPF). Went live with the new system on day 12, ran the old code in parallel for 4 weeks as a safety net, decommissioned the old code on day 40.

Daily Use

Daily operations dropped from about 90 minutes per week of billing-related work to under 15 minutes. Three workflows reshape the day. First, automated dunning. Smart Retries handles failed payments through 4 retry attempts over 7 to 21 days. Of 14 failed payments in the period, 11 were recovered automatically (78 percent), 2 were manual recoveries we contacted personally, 1 was a deliberate cancellation we missed in our app's churn flow. Pre-migration we recovered roughly 60 percent of failed payments through ad-hoc email. The 18 point improvement on a small base is real money. Second, the Customer Portal. About 38 customers used the portal to update payment methods, change plans, or view past invoices over the 12 weeks. That is 38 support tickets we did not have to handle. Third, tax compliance. Stripe Tax computes the right tax for each invoice based on customer location and our nexus settings. The monthly export to our accountant for our quarterly returns went from 3 hours of manual reconciliation to 20 minutes of CSV download and review. Real saved time.

Where Stripe Billing frustrated. First, the Subscription state machine is more complex than I expected. A subscription can be in states like active, trialing, past_due, unpaid, canceled, incomplete, incomplete_expired, paused. Each transition has webhook implications and your application must handle them correctly. I built 4 bugs in the first 2 weeks where our app showed a customer as Active in our UI while Stripe had them in past_due. Mitigation: built a sync job that runs every 4 hours and reconciles our customer table against Stripe's subscription status. Should have built this from day one. Second, proration. Mid-cycle plan changes generate prorated charges that look surprising to customers if you do not show them in your UI. I built a preview-the-proration feature using Stripe's upcoming invoice preview endpoint after a customer complained about a $4.17 charge they did not expect. Worth doing on day one. Third, taxes for inclusive vs exclusive pricing. We chose exclusive (tax added on top) for B2B. The UI distinction in the Dashboard between these two modes is subtle and I almost set it wrong; double-check this before going live.

  • Win: Smart Retries dunning recovers 11 of 14 failed payments versus 8 of 14 pre-migration
  • Win: Customer Portal removes about 38 support tickets per quarter
  • Win: Stripe Tax replaces hours of monthly reconciliation work
  • Win: hosted invoices and emails branded with our domain feel professional
  • Gripe: Subscription state machine is complex; build reconciliation jobs from day one
  • Gripe: proration surprises customers; build a preview feature before launch

Performance and Cost

Stripe Billing fees as of April 30, 2026. Stripe Billing is 0.5 percent on the first $1 million in invoiced volume, 0.8 percent above. This is on top of standard Stripe payment fees of 2.9 percent plus 30 cents per successful transaction. Stripe Tax: 0.5 percent of transaction total in countries where Stripe Tax is available. Stripe Invoicing (one-off invoices outside subscriptions): 0.4 percent per invoice. Over the 12 weeks we invoiced $10,800 in subscription revenue. Stripe Billing fees: $54 (0.5 percent). Stripe Tax fees: about $48 (0.5 percent of taxable transactions). Standard Stripe processing on successful charges: about $349 (2.9 percent plus 30 cents per transaction, on roughly 312 charges). Total Stripe fees: $451 over 12 weeks. Compare against Chargebee (3rd-party billing platform): $599 a month base plus consumption fees, but they fold the payment processor underneath; Chargebee plus Stripe would have cost roughly $1,300 over the same period. Paddle: 5 percent plus 50 cents per transaction as merchant of record; would have cost about $574 on the same revenue. So Stripe Billing native is the cheapest option if you are comfortable being your own merchant. Paddle is the right choice if you want to outsource sales tax and merchant-of-record.

Billing platform Fee structure 12-week cost on $10,800 revenue Merchant of record
Stripe Billing native 0.5% + 2.9% + 30c per charge + tax 0.5% $451 You
Chargebee + Stripe $599/mo base + standard Stripe fees $1,797 base + $349 = $2,146 You
Paddle 5% + 50c per transaction $696 Paddle
Lago + Stripe (self-hosted) Free + standard Stripe fees $349 (plus your hosting and time) You

Pros and Cons

  • Pro: Smart Retries lifts payment recovery by 18 points on our small base
  • Pro: Customer Portal removes about 38 support tickets per quarter
  • Pro: Stripe Tax handles nexus across US states and EU VAT in one integration
  • Pro: 0.5 percent fee is competitive against Chargebee plus is cheaper than Paddle on B2B
  • Con: Subscription state machine is complex and unforgiving in early implementation
  • Con: proration surprises customers if you do not preview charges in your UI
  • Con: tax inclusive vs exclusive setting is subtle and easy to misconfigure
  • Con: 36 hours of migration work is well above any 5-hour estimate you give yourself

Who This Is For

Pick Stripe Billing if you are a B2B SaaS with $50,000+ ARR, you already use Stripe Charges, and your billing is complex enough that ad-hoc code is becoming a liability. Pick Stripe Billing if you operate across multiple US states or EU countries and need Tax compliance. Pick Stripe Billing if you want native control of your billing UI and customer portal. Skip Stripe Billing if your revenue is under $20,000 ARR; Stripe Payment Links plus a spreadsheet is enough. Skip Stripe Billing if you want merchant-of-record outsourcing for sales tax; Paddle or Lemon Squeezy are built for that. Skip Stripe Billing if your billing is genuinely one-off (transactional, no recurring subscriptions); the Billing platform is overkill for one-off invoicing. Skip Stripe Billing if you have only a few customers but with complex contracts; a manual invoice plus Wave or QuickBooks does the job.

Always budget 5 to 10 times your initial estimate for a billing migration. The state machine alone will eat the first 10 hours.

Bottom Line

Twelve weeks in, Stripe Billing has paid back the 36 hours of migration work many times over in saved time per week and recovered failed payments. The honest concern: I gave myself a 5-hour budget and burned 36. Billing migrations are always more work than they look because the edge cases of your existing customers are not visible until you start porting them. If I started fresh I would still pick Stripe Billing for any B2B SaaS planning to scale past $100,000 ARR. The fee structure (0.5 percent plus tax) is fair and the operational savings are real. The Customer Portal alone is worth the migration. Got a similar billing project in front of you? Drop me a note. I will share the webhook handler and the reconciliation job that catches state-machine drift before customers do.