Tutorials & Guides By ChargePanda Support 4 min read

How to Set Up SaaS Subscription Billing Without a Monthly Service Fee

Building a SaaS product is hard enough without your billing infrastructure costing more than your hosting. Chargebee starts at $299/month. Recurly is $249/month. Even Paddle, the "developer-friendly" option, takes 5% off the top.

If you're a bootstrapped SaaS founder, those costs can swallow your entire margin in the early months. This guide shows you how to set up complete subscription billing — plan tiers, free trials, entitlements, customer portal — using ChargePanda as your self-hosted billing layer.

What "SaaS billing" actually requires

Before building, let's define what a complete subscription billing system needs to handle:

  • Plans: Multiple tiers with different pricing (Starter / Pro / Business)
  • Billing cycles: Monthly and annual options with annual discount
  • Free trials: X days free, credit card required or not
  • Entitlements: What each plan grants — API calls, seats, features
  • Upgrades/downgrades: Proration and mid-cycle plan changes
  • Renewals: Automatic charge on renewal date with failure handling
  • Customer portal: Customers manage their own subscription, download invoices
  • Webhooks: Your app needs to know when a subscription changes

ChargePanda handles all of these out of the box.

Step 1: Create your SaaS product and plans

In the ChargePanda admin panel, create a product representing your SaaS tool. Under that product, create plans:

  • Starter: $29/month or $290/year — 1 workspace, 10,000 API calls/month
  • Pro: $79/month or $790/year — 5 workspaces, 100,000 API calls/month
  • Business: $199/month or $1,990/year — unlimited workspaces, unlimited API calls

Each plan has its own pricing and activation rules. The "activation limit" maps cleanly to "number of workspaces" or "number of installs" depending on your SaaS model.

Step 2: Configure free trials

Under each plan's settings, enable the trial period:

  • Set trial duration (14 days is standard)
  • Choose whether a payment method is required upfront (Stripe handles this with a $0 charge + save)
  • Configure what happens at trial end: auto-charge or prompt to upgrade

During a trial, the license key is valid and your app should treat it as an active subscription. The entitlement API returns a trial: true flag and the trial_ends_at timestamp so your app can show appropriate messaging.

Step 3: Build the entitlement check into your SaaS app

Your SaaS app needs to know what the customer's current plan entitles them to. ChargePanda's REST API handles this with a single call:

GET https://billing.yourapp.com/api/license/entitlements
Authorization: Bearer {license_key}

Response:
{
  "valid": true,
  "plan": "pro",
  "trial": false,
  "expires_at": "2027-01-15T00:00:00Z",
  "entitlements": {
    "workspaces": 5,
    "api_calls_monthly": 100000,
    "features": ["advanced_export", "api_access", "webhooks"]
  }
}

Cache this response for 5–15 minutes on your server to avoid hammering the billing API on every request. When the cache expires, re-check. This pattern scales to thousands of concurrent users without issue.

Step 4: Handle webhook events in your app

ChargePanda fires webhooks when subscription state changes. Register your webhook endpoint in the admin panel under Settings → Webhooks, then handle these events in your app:

  • subscription.activated — new subscriber, provision their workspace
  • subscription.renewed — annual renewal, extend their expiry
  • subscription.cancelled — customer cancelled, deactivate at period end
  • subscription.expired — downgrade to free tier or lock account
  • subscription.plan_changed — update entitlements immediately

All webhook payloads are HMAC-signed. Verify the signature before processing:

$signature = hash_hmac('sha256', $rawPayload, config('services.chargepanda.webhook_secret'));
if (!hash_equals($signature, $request->header('X-ChargePanda-Signature'))) {
    abort(401);
}

Step 5: Customer self-service portal

ChargePanda includes a customer portal at /account where subscribers can:

  • View their active subscription and plan details
  • Download invoices
  • Update payment method
  • Upgrade or downgrade plan
  • Cancel subscription (with confirmation)

You can white-label this portal under your own domain. If your SaaS app lives at app.yourproduct.com, deploy ChargePanda at billing.yourproduct.com — customers see your brand throughout.

Real-world example: ChargePanda's own AI Agents module

The AI Agents Core module for ChargePanda is itself sold as a SaaS-style product: free tier with usage limits, premium tier with expanded capacity. It's built entirely on top of ChargePanda's plan and entitlement system — dogfooding in the truest sense.

Cost comparison: ChargePanda vs dedicated billing platforms

PlatformMonthly CostTransaction FeeAnnual at $10k MRR
Chargebee$2990.75%$4,488 + $900 = $5,388
Recurly$2490.9%$2,988 + $1,080 = $4,068
Lemon Squeezy$05% + $0.50$6,000+
ChargePanda$00% (Stripe: 2.9%)$25 one-time + hosting

At $10k MRR, ChargePanda saves you $4,000–$6,000 per year compared to every alternative.

Build your SaaS billing on your own infrastructure

Plan tiers, free trials, entitlements, and a customer portal — all for a one-time $25 setup fee. No monthly billing platform costs.

C

ChargePanda Support

ChargePanda Support is the editorial team at ChargePanda — a self-hosted platform helping developers and digital product sellers manage licensing, file delivery, subscriptions and support from one place.

Comments

Login to leave a comment.