TL;DR
AI SaaS pricing is a metering and risk-allocation system, not a pricing-page exercise. A workable design separates:
- Value metric: what the customer believes they receive.
- Charge metric: the deterministic unit used to calculate the bill.
- Cost metric: the resources the product actually consumes.
- Entitlement: what a plan permits before, during, and after a request.
Tokens can be a cost metric without being the value or charge metric. A subscription can make access predictable without making unlimited variable-cost work economically safe. The durable foundation is an append-only usage ledger, explicit settlement semantics, and unit economics measured by cohort and tail, not a single average user.
Key Takeaways
- Start with customer value, then engineer the billable unit. Do not expose provider internals merely because they are easy to meter.
- Record attempts and charges separately. Retries, timeouts, refunds, and credits require distinct accounting events.
- Price against distributions. Average cost hides p95/p99 workflows, power-user concentration, and negative-margin cohorts.
- Treat a price book as versioned production configuration. A model-rate or package change must not silently rewrite customer economics.
- A hybrid plan is a common pattern, not a universal answer. Choose it only when included usage reduces buying friction and metered usage contains tail risk.
Four Metrics That Must Not Be Collapsed
| Metric | Example | Owner | Failure if confused |
|---|---|---|---|
| value | ticket resolved, report delivered | product and customer | price feels unrelated to outcome |
| charge | workflow, minute, document page | billing | invoice cannot be reproduced |
| cost | input/output tokens, GPU time, tool call | engineering/FinOps | margin and routing are invisible |
| entitlement | monthly allowance, concurrency, model access | product platform | UI, API, and invoice disagree |
Value Metric
A value metric should track an outcome customers understand and should scale with perceived benefit. Stripe's guidance on pricing AI products similarly emphasizes that teams are experimenting across subscriptions, usage, and outcome-oriented units because AI costs and customer value do not move in lockstep.
Examples:
- support tickets resolved;
- minutes transcribed;
- documents reviewed;
- successful coding tasks;
- active seats with an included automation allowance.
An outcome is not automatically billable. "Successful task" needs a stable definition, a dispute process, and protection against the product deciding its own success after the fact.
Charge Metric
A charge metric must be:
- observable at a defined boundary;
- deterministic under retry and replay;
- explainable on an invoice;
- stable enough for customer forecasting;
- versioned when its definition changes.
"One AI request" is usually too ambiguous. Does a failed request count? What about a tool call, regeneration, partial stream, or provider retry? Define the settlement state machine before launch.
Cost Metric
Cost telemetry can remain more granular than billing:
- model snapshot and input/output tokens;
- cached and uncached tokens;
- image, audio, or video units;
- search, browser, database, and code-execution calls;
- dedicated accelerator or sandbox time;
- third-party enrichment;
- attributable storage and delivery.
Keep both estimated cost at request time and reconciled cost from provider invoices. They serve different purposes and will diverge due to rounding, discounts, batch rates, failed calls, and delayed adjustments.
Choose the Pricing Shape from Workload Evidence
| Shape | Works when | Main risk |
|---|---|---|
| flat subscription | usage variance is low and value is continuous | heavy users create an uncapped liability |
| pure usage | unit is trusted and buyers accept variable bills | budget anxiety and weak adoption |
| included usage + overage | baseline is predictable, tails are measurable | confusing allowance and overage rules |
| prepaid credits | cash flow and hard spend control matter | opaque conversion or stranded balances |
| outcome-based | success is objective and attributable | disputes, gaming, and measurement complexity |
| enterprise commitment | customer can forecast volume and needs contracts | under- or over-commitment |
Do not select a model from a competitor's pricing page alone. Use your own workload distribution, sales motion, invoice tolerance, and contract obligations.
The Usage Ledger Is the Billing Source of Truth
Analytics events are not a billing ledger. Analytics systems commonly sample, aggregate, arrive late, and allow schema reinterpretation. Billing needs append-only records with immutable identity and explicit corrections.
Required Event Identity
Each billable operation should have:
event_id globally unique ledger event
operation_id stable across retries
tenant_id billing owner
feature_id product capability
meter_id + meter_version charge-unit definition
price_book_version effective pricing rules
occurred_at product event time
received_at ledger ingestion time
quantity integer smallest unit
cost_estimate_micros internal estimate, not invoice amount
source_attempt_id provider/tool attempt
event_type usage, adjustment, refund, void
related_event_id link to corrected event
Use integers for money and quantity. Floating-point arithmetic is unsuitable for reproducible invoices.
Append Corrections; Do Not Rewrite History
If a usage event was wrong:
- append a reversing or adjustment event;
- link it to the original;
- record the reason and actor;
- recalculate the affected statement;
- preserve both events for audit.
This is the accounting equivalent of an immutable event log. It also makes pricing migrations and customer disputes explainable.
Go Example: Idempotent Usage Settlement
This standard-library example deduplicates by operation_id, records each provider attempt separately, and appends a billable settlement once. A real service should enforce the uniqueness constraint transactionally in its database.
package main
import (
"errors"
"fmt"
"sync"
"time"
)
type Attempt struct {
ID string
Operation string
Provider string
Model string
CostMicros int64
Succeeded bool
OccurredAt time.Time
}
type LedgerEvent struct {
ID string
Operation string
Tenant string
Meter string
MeterVersion int
PriceBook string
Quantity int64
Type string
RelatedEvent string
Reason string
OccurredAt time.Time
}
type Ledger struct {
mu sync.Mutex
settled map[string]string
attempts []Attempt
events []LedgerEvent
}
func NewLedger() *Ledger {
return &Ledger{settled: make(map[string]string)}
}
func (l *Ledger) RecordAttempt(attempt Attempt) {
l.mu.Lock()
defer l.mu.Unlock()
l.attempts = append(l.attempts, attempt)
}
func (l *Ledger) Settle(event LedgerEvent) error {
l.mu.Lock()
defer l.mu.Unlock()
if event.Operation == "" || event.Quantity <= 0 {
return errors.New("invalid settlement")
}
if existing, ok := l.settled[event.Operation]; ok {
return fmt.Errorf("operation already settled by %s", existing)
}
event.Type = "usage"
l.events = append(l.events, event)
l.settled[event.Operation] = event.ID
return nil
}
func (l *Ledger) Adjust(event LedgerEvent) error {
l.mu.Lock()
defer l.mu.Unlock()
if event.RelatedEvent == "" || event.Quantity == 0 {
return errors.New("adjustment requires a related event and non-zero quantity")
}
event.Type = "adjustment"
l.events = append(l.events, event)
return nil
}
func main() {
ledger := NewLedger()
now := time.Now().UTC()
ledger.RecordAttempt(Attempt{
ID: "attempt-1", Operation: "op-42", Provider: "provider-a",
Model: "snapshot-7", CostMicros: 18420, Succeeded: true, OccurredAt: now,
})
err := ledger.Settle(LedgerEvent{
ID: "usage-1", Operation: "op-42", Tenant: "tenant-9",
Meter: "completed_document", MeterVersion: 2,
PriceBook: "global-2026-10", Quantity: 1, OccurredAt: now,
})
fmt.Println(err == nil)
}
This prevents duplicate customer charging, but it does not erase the cost of retries. All attempts remain available for internal cost analysis.
Define the Settlement State Machine
An agent or multimodal workflow may run for minutes and fan out into many provider calls. Decide when entitlement and money move:
accepted -> reserved -> executing -> succeeded -> settled
-> failed ----> released
settled -> adjusted/refunded
Questions the contract must answer:
- Is allowance reserved before execution?
- What happens if estimated cost exceeds the remaining balance?
- Is partial output billable?
- Does a user-requested regeneration count as new value?
- Who pays for provider retries or product bugs?
- Can a customer dispute "success"?
- When do expired credits disappear?
- Are promotional and purchased credits consumed in a defined order?
Enforce the same policy in the UI, API, worker, support tooling, and invoice generator.
Unit Economics Without Average-User Blindness
For a cohort and period:
contribution margin
= recognized revenue
- model and tool costs
- directly attributable compute and delivery
- usage-linked support or review costs
- credits and refunds
Accounting classification varies by company and jurisdiction; align the final gross-margin definition with finance. Engineering still needs an operational contribution view for routing and plan design.
Minimum Dashboard Dimensions
- feature and workflow version;
- tenant and plan;
- signup and renewal cohort;
- geography and currency;
- model route;
- customer-facing unit;
- p50, p90, p95, and p99 cost per operation;
- cost concentration by top usage percentiles;
- retry, failure, refund, and credit rate;
- margin after promotional usage;
- estimated-versus-reconciled cost variance.
The FinOps Framework's unit-economics capability emphasizes connecting technology cost to business value through meaningful unit metrics. For AI, that means cost per successful business outcome, not merely cost per million tokens.
Tail and Cohort Questions
Before setting an allowance, ask:
- What percentage of plan cost comes from the heaviest tenants?
- Is high usage correlated with retention and expansion, or with abuse?
- Which workflows have a long output or tool-call tail?
- Does a new model lower average cost but increase retry rate?
- Are annual customers subsidizing a newly expensive feature?
- How does margin change after provider discounts expire?
Do not cap a user solely because they are valuable and active. First determine whether the price, route, or workflow is misaligned with the value delivered.
Packaging and Entitlements
A package should answer these separately:
| Question | Example answer |
|---|---|
| who can access? | 10 seats |
| what can they access? | standard model route, no private sandbox |
| how much is included? | 2,000 completed document pages |
| what happens next? | metered overage or hard stop |
| what protects the tenant? | workspace spend cap and alerts |
| what protects the service? | concurrency and abuse controls |
"Fair use" should not be a substitute for an undefined limit. If a restriction can stop service or change a bill, make it measurable and visible.
Safe Price-Book Migration
Pricing changes are data migrations with customer-facing financial impact.
Before Effective Date
- Create a new immutable
price_book_version. - Replay historical usage through old and new rules.
- Shadow-calculate both prices on live events.
- inspect invoice deltas by cohort, plan, and tail tenant.
- Define contract, grandfathering, tax, and currency behavior.
- Publish the effective date and customer explanation.
- Prepare support credits, rollback, and dispute procedures.
During Migration
- quote the exact version before purchase;
- attach it to every settlement;
- show allowance and projected overage;
- prevent mixed-version invoices unless explicitly designed;
- alert on unexpected delta and reconciliation drift.
After Migration
- compare forecast with realized usage and revenue;
- inspect churn, downgrade, support, and dispute signals;
- reconcile provider invoices;
- preserve old statements and ledger events;
- change future rules with a new version, never by mutating history.
Release Checklist
- Customers can name the value unit without learning provider tokenization.
- The charge metric has one versioned definition.
- Duplicate delivery and retry tests do not double-charge.
- Failed, cancelled, and partial workflows have explicit settlement rules.
- Cost estimates reconcile to provider billing within an investigated tolerance.
- p95/p99 and tenant concentration are visible.
- Every invoice line can trace to immutable ledger events.
- Spend caps, alerts, and hard-stop behavior are tested.
- Tax, currency, credit expiry, and refund rules are reviewed.
- A price migration can be shadowed, explained, and rolled back.
FAQ
Should an AI product expose tokens?
Expose them when the buyer is technical and tokens are useful for forecasting. Otherwise, present an outcome unit while retaining token telemetry internally. Never hide the conversion rule if tokens affect a bill.
Are credits a currency?
They behave like a contractual balance even if they are not legal tender. Define purchase value, expiry, refundability, transferability, consumption order, and what happens when the conversion rate changes. Obtain accounting and legal review.
Should provider retries consume customer credits?
Usually the product should absorb retries needed to deliver one promised operation. Record their internal cost, but settle customer usage according to the published operation contract.
What is the right gross-margin target?
There is no universal target. It depends on sales motion, support, infrastructure, growth stage, and accounting policy. Use current cohort evidence and an approved finance definition rather than copying a benchmark.
How often should prices change?
Internal routing and cost controls can change frequently; customer price books should change deliberately, with versioning, notice, contract handling, and invoice-delta testing.
Primary Sources
- Stripe, Pricing AI Products: Lessons from Leading AI Companies — observed packaging patterns and the separation between customer value and variable AI cost.
- FinOps Foundation, Unit Economics — connecting technology cost to business value with unit metrics.
- FinOps Foundation, FinOps Terminology — shared cost-allocation and unit-economics language.
- AI Product Privacy Engineering — data-purpose and retention requirements for usage telemetry.
Related Learning Path
- LLM Gateway Architecture — route-level usage, cost, and model policy.
- AI Application Localization — currency, market, tax, and product-availability boundaries.
- Token — the model-side unit that should not be confused with customer value.
- Large Language Model — model serving concepts behind variable inference cost.
Summary
Sustainable AI pricing comes from a contract that customers can predict and an internal ledger that engineering and finance can reproduce. Separate value, charge, cost, and entitlement; settle one billable operation exactly once; preserve every attempt and correction; and price from cohort and tail evidence.
The pricing page is the visible output. The real product is the metering, settlement, reconciliation, and migration system underneath it.