# SaaS Billing Explained: Subscriptions, Usage Pricing & Webhooks

- **Topic**: Billing & Payments
- **Canonical URL**: https://builderthread.dev/resources/billing-and-payments
- **Parent Hub**: https://builderthread.dev/resources.md
- **Last Verified**: 2026-11-02

Handling money requires zero tolerance for race conditions or stale state. Modern SaaS billing architectures rely on hosted Stripe Checkout Sessions, self-serve Customer Portals, and idempotent webhook event handlers.

---

## Curated Entries

| Name | Pricing | Category | Tag | Description | URL |
|---|---|---|---|---|---|
| [Stripe Checkout](https://stripe.com/payments/checkout) | 2.9% + 30¢ | Payment Flow | Global Standard | Pre-built, hosted payment page optimized for conversion and SCA compliance across global currencies. | https://stripe.com/payments/checkout |
| [Stripe Customer Portal](https://stripe.com/billing/customer-portal) | Included with Billing | Subscription Management | Zero Support Tickets | Self-serve customer dashboard to let users update cards, download PDF tax invoices, and cancel subscriptions. | https://stripe.com/billing/customer-portal |
| [Stripe Webhooks + Idempotency](https://stripe.com/docs/webhooks) | Free | State Sync | Mission Critical | Event-driven synchronization for invoice.paid, customer.subscription.updated, and dispute alerts. | https://stripe.com/docs/webhooks |
| [Paddle](https://paddle.com) | 5% + 50¢ | Merchant of Record | Global Tax Handled | Merchant of Record (MoR) that handles sales tax, VAT remittance, and compliance. | https://paddle.com |
| [Lemon Squeezy](https://lemonsqueezy.com) | 5% + 50¢ | Merchant of Record | Indie MoR | Merchant of Record focused on software, digital downloads, and recurring SaaS subscriptions. | https://lemonsqueezy.com |

---

## Open-Source Attribution & Sources
- [awesome-billing](https://github.com/kdeldycke/awesome-billing) (1,420 stars, License: CC0-1.0, Last push: 2026-10-26)

---

## Frequently Asked Questions

### Should I build a custom credit card form?

Never build custom card input fields unless you have dedicated PCI compliance auditors. Use Stripe Checkout or Stripe Elements to keep sensitive card numbers off your servers.

### How do I handle failed subscription renewal webhooks?

Listen for `invoice.payment_failed`. Provide a grace period of 3-7 days while triggering transactional emails with a direct link to the Stripe Customer Portal to update billing details.

---

## Production Grade Starter Repo

Pre built starter repo with auth, databases, backend, and AI integrations already configured based on your tech stack of choice (worth $200+ and saves you 30+ hours of configuration).

- Supported languages: TypeScript, React Native, Rust, Go, Python, Java
- Frameworks: 18+ Frontend frameworks, 45+ Backend frameworks
- Start now: https://builderthread.dev/auth/signup
