Data as of Aug 25, 2026 · Based on 375 AI responses from ChatGPT Search and Google AI Mode · See how Parse measures this
Selecting a billing engine depends on your infrastructure and growth stage. Chargebee is widely suggested for SaaS companies adding usage to existing recurring plans. For high-volume AI or developer tools requiring real-time usage tracking,
Metronome and
Orb are top choices. If you need open-source transparency or direct ERP integration, options like or offer specialized control.
Brands AI recommends here
Best for scaling SaaS companies transitioning to hybrid models. It manages a mix of traditional recurring subscriptions and usage-based billing cleanly, balancing ease of use with enterprise features like tax compliance.
Designed for B2B SaaS and AI teams needing high-volume usage calculation. It provides real-time event ingestion and reliability for complex pricing structures, though it requires more engineering setup than simple tools.
A developer-first option ideal for companies with highly flexible or frequently changing pricing models. It excels at real-time metering, making it a strong choice for high-throughput software and modern tech stacks.
The fastest choice for startups already relying on the Stripe payment ecosystem. It handles simple usage and metered billing straightforwardly, though it may lack the depth for highly complex scale-up requirements.
Yes. If you’re building a subscription-billing engine rather than simply choosing a vendor, I’d design it around a clean separation between usage ingestion, metering, rating, entitlements, subscriptions, and invoicing.
Modern usage billing systems generally follow this lifecycle: ingest usage → aggregate/meter it → apply pricing → generate invoice charges → monitor usage.
┌─────────────────┐
│ Product Catalog │
│ Plans / Prices │
└────────┬────────┘
│
▼
┌──────────────┐ ┌───────────────┐ ┌───────────────┐
│ Usage Sources│──▶│ Usage Ledger │──▶│ Metering │
│ API / events │ │ immutable │ │ aggregation │
└──────────────┘ └───────────────┘ └───────┬───────┘
│
▼
┌───────────────┐
│ Rating Engine │
│ pricing rules │
└───────┬───────┘
│
┌─────────────────────┼──────────────────┐
▼ ▼ ▼
Entitlements Credits Overage
│ │ │
└─────────────────────┼──────────────────┘
▼
┌───────────────┐
│ Invoice Engine│
└───────┬───────┘
▼
Payment / AR / RevRec
Make usage append-only and idempotent.
{
"event_id": "evt_123",
"customer_id": "cus_42",
"subscription_id": "sub_99",
"meter": "api_tokens",
"quantity": 1842,
"timestamp": "2026-08-29T19:23:11Z",
"dimensions": {
"model": "large",
"region": "us-east"
}
}
The event_id should provide deduplication. Don't make your invoice database the source of truth for raw usage.
This is important because usage systems need to deal with retries, duplicate events, late events, corrections, and very high ingestion volume. Stripe's current meter architecture similarly separates meter events from their aggregation and supports dimensions and idempotency.
A meter answers:
"How much billable usage did this customer consume?" Support at least:
SUM — 42,000 API callsCOUNT — 1,250 jobsLAST — current number of seats/resourcesFor example:
Meter: api_tokens
Aggregation: SUM
Dimensions: model, region
Period: subscription billing period
Keep metering separate from pricing. The same meter might be priced differently for different customers.
This is where the interesting part lives.
Your pricing model should be declarative rather than hard-coded.
For example:
price:
model: tiered
currency: USD
tiers:
- up_to: 100000
unit_price: 0
- up_to: 1000000
unit_price: 0.002
- above: 1000000
unit_price: 0.0015
Then support these models:
Hybrid pricing is particularly important: a fixed subscription can grant an included quota, with excess consumption charged as overage.
Don't treat billing and access control as the same thing.
For example:
Pro
├── API calls: 100,000/month
├── Storage: 500 GB
├── GPT-5 access: yes
└── Seats: 10
The entitlement service should answer:
GET /customers/cus_42/entitlements
and:
{
"api_calls": {
"included": 100000,
"consumed": 82431,
"remaining": 17569
},
"storage_gb": {
"included": 500,
"consumed": 317
}
}
That lets your application enforce limits before the invoice arrives.
This separation is also important commercially: usage limits, feature access, and negotiated customer-specific allowances increasingly form part of the contract itself.
At invoice time:
Subscription
│
├── recurring charges
│
├── included entitlements
│
├── usage meters
│ └── aggregated consumption
│
├── credits
│
├── discounts
│
└── overages
│
▼
Invoice
For example:
Pro subscription $99.00
100K API calls included
142K API calls consumed
42K overage × $0.003 $126.00
----------------------------------------
Subtotal $225.00
Tax $18.00
----------------------------------------
Total $243.00
I'd start with roughly these core entities:
Customer
Subscription
SubscriptionItem
Product
Price
Meter
MeterEvent
MeterAggregate
Entitlement
CreditGrant
CreditTransaction
RatingRule
Invoice
InvoiceLine
Payment
Adjustment
And make these immutable/auditable wherever possible:
MeterEvent
RatingResult
InvoiceLine
CreditTransaction
Adjustment
Never silently mutate historical billing data. Instead:
original event
↓
correction / adjustment
↓
new calculated result
That gives you an audit trail and makes invoice disputes dramatically easier.
Don't calculate invoices directly from your application's operational database.
Instead:
Application events
↓
Durable usage ledger
↓
Canonical meter aggregates
↓
Rating
↓
Billable charges
↓
Invoice
That gives you the ability to re-rate historical usage when you discover a pricing bug without reconstructing events from application tables.
Stripe's current usage-billing architecture similarly uses meters to aggregate usage independently from subscriptions, and explicitly supports correcting usage through adjustments.
If you don't need to own the billing infrastructure, I'd seriously evaluate an existing engine rather than implementing payments, tax, invoicing, retries, credits, revenue recognition, etc. yourself.
If you're building an internal/platform billing engine, though, I'd use the architecture above and make the rating engine + immutable usage ledger the heart of the system.
If you tell me your stack (e.g. Node/TypeScript, Python, Java, Go) and the pricing models you need, I can sketch the database schema + API + rating algorithm for a production-ready version.
The entitlement service should answer:
GET /customers/cus_42/entitlements
and:
{
"api_calls": {
"included": 100000,
"consumed": 82431,
"remaining": 17569
},
"storage_gb": {
"included": 500,
"consumed": 317
}
}
That lets your application enforce limits before the invoice arrives.
This separation is also important commercially: usage limits, feature access, and negotiated customer-specific allowances increasingly form part of the contract itself.
At invoice time:
Subscription
│
├── recurring charges
│
├── included entitlements
│
├── usage meters
│ └── aggregated consumption
│
├── credits
│
├── discounts
│
└── overages
│
▼
Invoice
For example:
Pro subscription $99.00
100K API calls included
142K API calls consumed
42K overage × $0.003 $126.00
----------------------------------------
Subtotal $225.00
Tax $18.00
----------------------------------------
Total $243.00
I'd start with roughly these core entities:
Customer
Subscription
SubscriptionItem
Product
Price
Meter
MeterEvent
MeterAggregate
Entitlement
CreditGrant
CreditTransaction
RatingRule
Invoice
InvoiceLine
Payment
Adjustment
And make these immutable/auditable wherever possible:
MeterEvent
RatingResult
InvoiceLine
CreditTransaction
Adjustment
Never silently mutate historical billing data. Instead:
original event
↓
correction / adjustment
↓
new calculated result
That gives you an audit trail and makes invoice disputes dramatically easier.
Don't calculate invoices directly from your application's operational database.
Instead:
Application events
↓
Durable usage ledger
↓
Canonical meter aggregates
↓
Rating
↓
Billable charges
↓
Invoice
That gives you the ability to re-rate historical usage when you discover a pricing bug without reconstructing events from application tables.
Stripe's current usage-billing architecture similarly uses meters to aggregate usage independently from subscriptions, and explicitly supports correcting usage through adjustments.
If you don't need to own the billing infrastructure, I'd seriously evaluate an existing engine rather than implementing payments, tax, invoicing, retries, credits, revenue recognition, etc. yourself.
Building or choosing a subscription engine that handles complex usage-based (metered) pricing requires separating the architecture into three core layers: Metering (ingesting raw events), Aggregation (turning events into billable metrics like𝐴𝑃𝐼_𝑐𝑎𝑙𝑙𝑠 or𝐺𝐵_𝑐𝑜𝑚𝑝𝑢𝑡𝑒), and Invoicing/Billing (applying tiers, minimum commitments, and combining with flat subscriptions).
Top solutions and architectures available to tackle this range from open-source infrastructure to enterprise APIs:
To help narrow down the best path, tell me:
Choosing a usage-based or hybrid subscription billing engine depends heavily on whether you need raw event metering (processing millions of high-frequency API calls or AI tokens), traditional recurring billing with a metered add-on, or an open-source/self-hosted stack.
The top-tier choices are categorized below by their strengths:
To help narrow down the best engine for your stack, tell me:
Yes. If you mean a billing engine you can embed/build around, I’d design it as a metering → rating → invoicing pipeline rather than making the payment processor the core of the system.
Current platforms illustrate this architecture: Stripe supports usage recording and credits, while Lago explicitly separates usage ingestion, aggregation, pricing, invoicing, and payments.
Product / APIs
│
▼
Usage Event API
│
▼
┌──────────────────┐
│ Usage Ledger │ immutable events
│ idempotency │
│ corrections │
└────────┬─────────┘
▼
┌──────────────────┐
│ Metering Engine │ count / sum / unique / max / weighted
└────────┬─────────┘
▼
┌──────────────────┐
│ Rating Engine │ tiers, volume, packages, discounts
│ │ minimums, included usage, overages
└────────┬─────────┘
▼
┌──────────────────┐
│ Billing Engine │ subscription periods + usage
│ │ credits + adjustments
└────────┬─────────┘
▼
┌──────────────────┐
│ Invoice Engine │
└────────┬─────────┘
▼
Payment processor / ERP
Make usage events immutable and idempotent:
{
"event_id": "evt_123",
"customer_id": "cus_456",
"timestamp": "2026-08-29T13:42:00Z",
"meter": "api_tokens",
"quantity": 12500,
"dimensions": {
"model": "pro",
"region": "us"
}
}
Never simply increment a customer's balance. Store the underlying events so you can reproduce an invoice later.
A meter converts events into billable quantities.
Support at least:
COUNT — $0.01 per API requestSUM — $0.05 per 1,000 tokensCOUNT_UNIQUE — $2 per active userMAX — highest concurrent connectionsWEIGHTED_SUM — compute-hours × resource sizeThese are similar to the aggregation primitives exposed by Lago.
Keep pricing data-driven, not hard-coded.
For example:
plan: pro
subscription:
amount: 99
interval: month
meters:
api_calls:
included: 100000
pricing:
type: graduated
tiers:
- up_to: 100000
price: 0
- up_to: 1000000
price: 0.0008
- above: 1000000
price: 0.0005
The engine should support:
Modern usage-billing systems increasingly need hybrid models such as subscription + usage, credits, outcome-based pricing, and multidimensional rates.
This is important.
The rating engine should answer:
"Given these events, this plan, and this billing period, how much usage is billable?" The invoice engine should answer:
"What does this customer owe?" That gives you a deterministic function like:
invoice =
recurring_charges
+ rated_usage
+ one_time_charges
- credits
- discounts
+ taxes
+ adjustments
You can then re-rate an invoice without mutating historical usage.
I'd use an append-only financial/usage ledger:
UsageEvent
↓
MeteredUsage
↓
RatedCharge
↓
InvoiceLine
↓
Invoice
↓
Payment
Every transition should be traceable.
That gives you the ability to answer:
Why was this customer charged $1,847.23? with an exact breakdown:
$99.00 Pro subscription
$0.00 First 100k API calls
$240.00 Next 300k API calls
$1,450.00 AI token usage
$58.23 Taxes
--------
$1,847.23
A clean initial API could be:
POST /v1/usage/events
POST /v1/meters
POST /v1/plans
POST /v1/prices
POST /v1/subscriptions
GET /v1/subscriptions/:id
GET /v1/customers/:id/usage
GET /v1/customers/:id/usage-summary
POST /v1/invoices/preview
POST /v1/invoices
POST /v1/invoices/:id/finalize
POST /v1/credits
POST /v1/adjustments
And critically:
POST /v1/invoices/preview
should use exactly the same rating engine as actual invoicing. That prevents the classic problem where the UI says "$127" and the finalized invoice says "$131."
If you're deciding whether to implement this yourself, there are several viable approaches.
If you're building the engine yourself, I'd avoid implementing payment processing initially. Build the usage ledger + metering + rating + invoice calculation as your core IP, and integrate Stripe/Adyen/etc. for collection.
If you tell me your expected pricing model—for example "$0.01 per API call + $20/month + graduated token pricing"—I can lay out the database schema, rating algorithm, and API design for the engine.
The invoice engine should answer:
"What does this customer owe?" That gives you a deterministic function like:
invoice =
recurring_charges
+ rated_usage
+ one_time_charges
- credits
- discounts
+ taxes
+ adjustments
You can then re-rate an invoice without mutating historical usage.
I'd use an append-only financial/usage ledger:
UsageEvent
↓
MeteredUsage
↓
RatedCharge
↓
InvoiceLine
↓
Invoice
↓
Payment
Every transition should be traceable.
That gives you the ability to answer:
Why was this customer charged $1,847.23? with an exact breakdown:
$99.00 Pro subscription
$0.00 First 100k API calls
$240.00 Next 300k API calls
$1,450.00 AI token usage
$58.23 Taxes
--------
$1,847.23
A clean initial API could be:
POST /v1/usage/events
POST /v1/meters
POST /v1/plans
POST /v1/prices
POST /v1/subscriptions
GET /v1/subscriptions/:id
GET /v1/customers/:id/usage
GET /v1/customers/:id/usage-summary
POST /v1/invoices/preview
POST /v1/invoices
POST /v1/invoices/:id/finalize
POST /v1/credits
POST /v1/adjustments
And critically:
POST /v1/invoices/preview
should use exactly the same rating engine as actual invoicing. That prevents the classic problem where the UI says "$127" and the finalized invoice says "$131."
If you're deciding whether to implement this yourself, there are several viable approaches.
Choosing a subscription billing engine that gracefully handles usage-based (consumption or hybrid) pricing depends heavily on your volume, architecture, and whether you prefer an open-source or fully managed solution.
The top options on the market vary by architectural style and use case:
If you'd like to narrow this down, tell me:
I can help you architect the data flow or pick the exact engine that fits your stack.
If you’re looking for a subscription billing engine specifically for usage-based pricing, I’d shortlist these:
| Requirement | Best fit |
|---|---|
| Complex usage-based SaaS / AI billing | Orb |
| Stripe-centric payments stack | Stripe Billing |
| Self-hosting / open source | Lago |
| API/token/compute metering | Orb or Lago |
| Simple metered subscriptions | Stripe |
| Complex enterprise contracts & backdating | Orb |
For an AI/API product, for example, you could model:
Usage events
└─ api_request
├─ customer_id
├─ model
├─ input_tokens
├─ output_tokens
└─ timestamp
↓
Billable metrics
├─ input_tokens
├─ output_tokens
└─ requests
↓
Pricing
├─ $X / 1M input tokens
├─ $Y / 1M output tokens
├─ first 1M tokens → tier 1
└─ next 9M → tier 2
↓
Subscription
↓
Invoice
One architectural feature I'd consider non-negotiable is retaining the raw usage events rather than only maintaining an accumulated counter. Orb explicitly uses immutable raw events so billing can be recalculated when pricing changes or late/corrected usage arrives.
If you tell me your stack (e.g. Node/Python), payment processor, pricing model, and expected usage volume, I can recommend the architecture and give you a concrete implementation plan.
If you mean a vendor/platform to power subscription billing with usage-based or hybrid pricing, I’d shortlist these:
| Requirement | Pick |
|---|---|
| Stripe payments already in place | Stripe Billing |
| AI/API usage is the primary pricing dimension | Metronome |
| Complex usage + enterprise contracts | Metronome |
| Full subscription lifecycle + finance/RevRec | Chargebee |
| Simple subscription + metered overages | Stripe Billing |
The key architectural distinction is that a serious usage-billing engine needs more than a subscription table. You want event ingestion → metering/aggregation → rating → invoice calculation → subscription lifecycle → payment → auditability. Stripe explicitly models this around meter events and meters; Metronome and Chargebee go further into complex rating and hybrid models.
If you're building this engine yourself, rather than looking to buy one, I can also lay out a production-grade architecture—including the data model, metering pipeline, pricing/rating engine, idempotency, proration, credits, tiered pricing, and invoice generation.
Choosing a usage-based or hybrid (subscription + consumption) billing engine depends heavily on your event volume, complexity of pricing logic (e.g., tiered AI token consumption, API calls, or seat-based minimums), and whether you need an all-in-one payment processor or an API-first metering layer.
Top-tier subscription and usage-based billing engines fall into distinct categories based on these needs:
To help narrow down the ideal choice for your architecture, tell me:
If you need a subscription billing engine with usage-based pricing, you’re looking for more than a recurring invoice system. The core capabilities you’ll want are:
$0.001/requestA typical architecture:
Product events
|
v
Usage event collector
|
v
Metering service
|
v
Rating/pricing engine
|
v
Subscription ledger
|
v
Invoice generator
|
v
Payments + accounting
Key data models:
Customer
└── Subscription
└── Plan
└── Price components
UsageEvent
├── customer_id
├── metric
├── quantity
├── timestamp
└── idempotency_key
Invoice
├── subscription charges
├── usage charges
└── adjustments
For a new SaaS product, a common approach is to start with a managed billing engine and keep your own usage event pipeline, so you retain control over the product data while avoiding building invoice and payment infrastructure from scratch.
If you’re designing this as a new platform, I can also outline a reference architecture (services, database schema, APIs, and event flows).
Building or adopting a subscription engine that handles usage-based (or hybrid) pricing requires a system that can reliably ingest high-volume event data, aggregate it, apply pricing logic ("rating"), and generate invoices.
Depending on your engineering capacity, scale, and architectural preference, the top solutions are categorized below by their strengths:
Core Architectural Requirements to Keep in Mind
If you are evaluating or architecting this yourself, ensure your engine addresses these four stages of usage-based billing:
POST /v1/events ) without dropping data.To help narrow down the right choice, tell me: