Think Build Implement Repeat
London, UK +44 7367 067226
WhatsApp FOLLOW f in X
  1. Home
  2. Blog
  3. Our SaaS Billing Is a Mess of Manual Fixes. How Do We Sort It Out?
Problems We Solve

Our SaaS Billing Is a Mess of Manual Fixes. How Do We Sort It Out?

SaaS subscription billing built in a hurry leads to wrong invoices and manual fixes. We rebuild it on Stripe with plans, proration and dunning handled.

Updated 3 min readBy SpiderHunts Technologies

Free estimateNo obligation

Get a free estimate

Tell us what you need. A senior engineer reads every enquiry.

Takes under a minute. We never share your details.

  • Free consultation
  • No commitment
  • NDA on request

Prefer to talk? Book a free 30-minute call →

Quick answer — TL;DR

Subscription billing goes wrong when the app keeps its own idea of who has paid for what, separate from the payment provider. We make Stripe Billing the source of truth for plans and payments, sync its events into the app reliably, handle upgrades, downgrades and failed payments properly, and give your team a screen to see and fix billing without a developer.

Billing that needs a person every week

A customer upgrades mid-month and gets charged the full price twice. Another's card fails and they keep using the product for months without paying because nobody noticed. Someone downgraded but still has access to the premium features. The finance person keeps a spreadsheet of "billing exceptions" and asks a developer to change things in the database directly.

Every new plan or price change becomes a small project, because the billing logic is spread across the codebase and nobody is quite sure what depends on what.

How billing gets into this state

In the early days, billing was built quickly to start taking money, which was the right call. Usually that meant a payment form, a flag on the account saying "paid", and a few conditions in the code checking the plan name.

Then the product grew. Annual plans were added. Then seats. Then a discount for a partner. Then a legacy price for early customers. Each was patched onto the original design. The result is two sources of truth, the payment provider and the app's own records, which slowly disagree.

  • Plan limits hard-coded by plan name throughout the code.
  • Webhooks from the payment provider not handled, or handled without retries.
  • No proration logic, so mid-cycle changes are calculated by hand.
  • Failed payments not followed up, or followed up by email from a person.
  • No record of why a customer's access differs from their plan.

What messy billing costs

ProblemCost
Unpaid access continuingRevenue you are owed but not collecting
Double or wrong chargesRefunds, complaints and chargebacks
Manual fixes in the databaseDeveloper time and a real risk of mistakes
Pricing changes are slowYou avoid testing new prices because it is painful
No reliable revenue figuresBoard and investor numbers built on guesswork

How we rebuild SaaS billing

  1. Map what exists. Every plan, price, discount, legacy arrangement and exception, including the ones in the spreadsheet, so nothing is lost in the move.
  2. Make Stripe the source of truth. Products, prices and subscriptions live in Stripe Billing. The app reads subscription state from it rather than keeping its own version.
  3. Handle webhooks properly. Every subscription and invoice event is received, verified, stored and processed idempotently, with retries, so a missed event cannot leave an account in the wrong state.
  4. Separate entitlements from plan names. The app checks what a customer is entitled to, such as seats or features, rather than which plan they are on, so new plans do not mean code changes everywhere.
  5. Handle changes and failures. Upgrades and downgrades with proration, trials that convert, failed payment retries with emails, and a clear rule for when access is limited.
  6. Give your team a billing screen. Support and finance can see a customer's subscription, invoices and entitlements, apply credits and make changes with a record of who did what.
  7. Migrate carefully. Existing customers move to the new setup with their current prices kept, checked account by account before switch-over.

If you need usage-based pricing, tax handling across countries or invoices for larger customers, those are built into the same model rather than bolted on.

Billing that runs itself

The finance spreadsheet of exceptions goes away, because exceptions are now recorded where they belong: as prices, coupons or credits in the billing system, each with a note of who applied it and why.

Customers are charged correctly when they change plans. Failed payments are followed up automatically, and access changes when the rules say it should. Support can answer billing questions from a screen. New plans and price tests become a configuration change rather than a development project, and the revenue figures you report are ones you can trust.

Recognise any of this?

  • Someone keeps a spreadsheet of billing exceptions.
  • Developers change subscription data in the database by hand.
  • Some customers have access they are not paying for.
  • Adding a new plan means code changes in many places.
  • Your app and your payment provider disagree about who is subscribed.

FAQ

Frequently asked questions

The questions readers ask us after this guide.

Still have a question?

Ask us directly — a senior engineer will get back to you.

Ask about your project

Do we have to use Stripe?

No, but it is the most common choice for SaaS and has mature subscription features. If you use Paddle, Chargebee or another provider, the same principles apply.

Will existing customers be affected?

They are migrated with their current prices and billing dates kept, and checked before switch-over, so the change should be invisible to them.

Can we keep legacy prices for early customers?

Yes. Legacy prices become explicit prices in the billing system rather than exceptions in the code.

What affects the cost?

The number of plans and exceptions, how deeply plan checks are spread through the code, and whether usage-based or seat-based billing is involved.

What about VAT and sales tax?

The billing setup can handle tax collection, for example with Stripe Tax. Your accountant should confirm your obligations.

Keep reading

More on Problems We Solve

Start here

Tell us where your SaaS product is stuck

Describe the product, who it is for and where things stand today: an idea, a half-built MVP or a live app with problems. We will give you an honest view of what we would do next, and if the right move is smaller than a build, we will tell you.

  1. You tell us what you needTwo minutes on the form, or a message on WhatsApp.
  2. A senior engineer reviews itAnd comes back with questions, a realistic range and an honest view on fit.
  3. Free 30-minute scoping callWe talk through scope, options and a realistic estimate — with no obligation.
Free estimateNo obligation

Talk to someone who builds this

Send a short brief and we will come back with an honest view and a realistic range.

Takes under a minute. We never share your details.

  • Free consultation
  • No commitment
  • NDA on request

Prefer to talk? Book a free 30-minute call →