LedgerUp Resources
How to Automate Custom Contract Billing in Stripe (Ramps, Minimums, True-Ups)
Stripe Billing handles subscriptions and meters well. Sales-negotiated contracts add ramps, annual minimums, included allowances, PO requirements, and mid-term amendments that Stripe was never told about. This guide carries one real-shaped contract through three options: Stripe by hand, Stripe plus Metronome, and a contract-aware layer on top of Stripe.
Custom contract billing on Stripe is the work of turning a negotiated B2B agreement into the right Stripe objects, keeping them right as the contract changes, and proving that what Stripe billed matches what the contract says. Stripe Billing is very good at the first half of that sentence for self-serve pricing. The second half is where finance teams spend their month.
Updated September 2026: this guide reflects Stripe Billing's current subscription schedules, Meters, invoice custom fields, and billing credits (still in public preview per Stripe's pricing page), the Metronome integrations Stripe announced at Sessions in April 2026, and LedgerUp's Stripe App Marketplace listing. Rather than list features, it carries one contract through every option so you can see exactly where each one stops.
In this guide
- The contract we will bill
- What Stripe Billing handles natively
- Five places this contract stops fitting Stripe
- Option 1: model it in Stripe by hand
- Option 2: Stripe plus Metronome
- Option 3: a contract-aware layer on top of Stripe
- The three options compared
- Checklist before you automate
- Frequently asked questions
The contract we will bill
Here is a contract shaped like the ones LedgerUp sees from B2B SaaS customers every week. The company and numbers are illustrative; the terms are not.
| Term | What the order form says | Why it matters for billing |
|---|---|---|
| Annual commitment | $120,000 minimum for the year, billed quarterly in advance | A floor the customer owes regardless of usage. Stripe has no native object for it. |
| Quarterly ramp | Q1 $24,000, Q2 $28,000, Q3 $32,000, Q4 $36,000 | Four different invoice amounts on a schedule. A flat subscription bills the wrong number three quarters out of four. |
| Included usage | 5,000,000 API calls per quarter included | An allowance that resets quarterly, not monthly, and belongs to this customer only. |
| Overage | $4.00 per 1,000 calls above the included amount, billed in arrears with the next quarterly invoice | A negotiated rate, lower than list, invoiced on a different cadence from the platform fee. |
| Payment terms | Net 45, ACH or wire | No card on file. Collections is a real workflow, not a retry schedule. |
| PO requirement | Invoices must reference a valid customer PO or AP will reject them | The customer's policy, not a Stripe setting. The PO expires with the fiscal year. |
| Amendment in month 5 | Adds a $1,500 per month add-on, co-termed to the annual agreement, prorated from the 15th | A mid-term change that has to be prorated, aligned, and billed without touching invoices already sent. |
Every line above is a billing exception: a term that lives in the contract and not in the billing engine. If you only have one or two of them, Stripe alone may be enough. Most sales-led contracts have five or more.
What Stripe Billing handles natively
Credit where it is due. Stripe Billing covers more of this contract than most finance teams expect, and the pieces it covers, it covers well:
- Subscription schedules. A schedule with phases can bill different amounts in different periods, which is how you model the quarterly ramp: four phases, four prices. See Stripe's subscription schedules documentation.
- Meters and usage-based prices. Stripe Billing Meters ingest usage events and rate them against a usage-based price, including graduated tiers, which is how you model an included quantity followed by an overage rate. See the usage-based billing documentation.
- Invoice custom fields, memo, and footer. Stripe invoices support up to four custom fields, set per customer as defaults or per invoice, which is where a PO number goes. See customize invoices.
- Send-invoice collection with payment terms. Subscriptions can be set to collect by invoice with a due date a set number of days after issue, which handles net 45 on paper.
- Proration on subscription changes. Updating a subscription mid-period generates prorated credits and charges according to the subscription's proration setting.
- Billing credits (public preview). Stripe's billing credits can represent prepaid amounts drawn down by usage, which gets partway to a commitment. Stripe's pricing page still lists them as preview as of September 2026.
- Stripe Revenue Recognition. An add-on that recognizes subscription and metered revenue over service periods.
- Stripe Billing pricing. Pay-as-you-go at 0.7% of billing volume, or $620 per month for the first $100K of volume and 0.67% beyond, with custom pricing above $1M, per Stripe's published pricing.
So the ramp, the overage tiers, the PO field, and the payment terms all have a home in Stripe. The problem is not that Stripe cannot hold these terms. It is that nothing puts them there, keeps them there when the contract changes, or checks that the invoice Stripe produced is the invoice the contract requires.
Book a LedgerUp Demo
See how Ari connects contracts, billing, collections, approvals, and accounting records while finance stays in control of exceptions.
Book a LedgerUp DemoFive places this contract stops fitting Stripe
1. The annual commitment is not an object
Stripe can bill four quarterly amounts. It cannot know that they add up to a $120,000 floor, or that if usage runs light the customer still owes the difference. The commitment lives in the MSA. Billing credits can approximate a prepaid pool, but a minimum with a true-up at term end is a reconciliation someone runs against the contract, outside Stripe.
LedgerUp Insight: The workflow described above is one that LedgerUp automates end-to-end. Ari handles the repeatable steps, keeps the source records connected, and routes exceptions to finance for review.
2. The included allowance resets on the contract's cycle, not the meter's
A graduated usage price gives you the first 5,000,000 calls free and $0.004 per call after. But the allowance in this contract resets quarterly, and the overage is billed with the quarterly invoice, while a meter aggregates per billing period. If the subscription's billing period is monthly, the free tier resets every month and the customer gets three times the allowance. If it is quarterly, the platform fee schedule has to be quarterly too. Aligning those is a modeling decision that has to be right at setup and again after every amendment.
3. Stripe carries a PO number; it does not require one
The PO goes in a custom field and prints on the invoice. Stripe does not know the customer will reject an invoice without it, that the PO on file expired with the customer's fiscal year, or that a new one has to be requested before the Q3 invoice goes out. An invoice that AP rejects for a missing PO has not started the net 45 clock. It is not late; it is invisible.
4. The amendment has to be prorated, co-termed, and kept off the sent invoices
Adding a $1,500 add-on from the 15th means a prorated first charge, a new line on every subsequent quarterly invoice, and an end date aligned to the annual agreement rather than twelve months from the add-on. Stripe's proration handles the first charge if the subscription is updated correctly. The co-terming, the schedule update across the remaining phases, and the rule that already-sent invoices are never edited are all decisions a person makes, or gets wrong.
5. Nobody verifies the invoice against the contract
This is the one that costs money. Stripe produces the invoice its configuration implies. Whether that invoice matches the contract, whether the ramp step is right, whether the overage was rated at $4.00 and not $6.00 list, whether the amendment made it in, is a check that no billing engine performs, because the engine has never seen the contract. HappyRobot, an AI-agent company with per-call usage pricing, recovered $72,500 in unbilled overages in its first 30 days on LedgerUp; the usage was metered, the invoices went out, and the difference between them and the contract was nobody's job.
Option 1: model it in Stripe by hand
This is the right answer for a small number of custom contracts and a finance team willing to own the configuration. The steps, for the contract above:
- Create the customer with the legal entity name, billing email, and the PO number as a custom field default so it prints on every invoice.
- Create a subscription schedule with four phases of one quarter each, one price per phase ($24,000, $28,000, $32,000, $36,000), collection method set to send invoice with a 45-day due date.
- Create a meter for API calls and a usage-based price with graduated tiers: the first 5,000,000 units at $0, then $0.004 per unit. Attach it to each phase so overage lands on the quarterly invoice.
- Send usage events from your product to the meter, with idempotency keys so retries do not double-count.
- Handle the month 5 amendment by updating the schedule's remaining phases to add the $1,500 monthly line, with proration behavior set to create prorations, and checking that the add-on's end date matches the schedule's end date.
- Track the commitment in a spreadsheet: quarterly platform fees plus rated overage against the $120,000 floor, with a manual true-up invoice at term end if the total runs short.
- Run collections from Stripe's reminder emails plus a person reading the replies, and reconcile the ACH or wire when it lands, usually in the accounting system rather than Stripe.
What breaks: the quarterly reset alignment (step 3) is easy to get wrong and hard to notice; the amendment (step 5) re-prorates in ways the customer's AP will question; the commitment (step 6) is a spreadsheet; and nothing in steps 1 to 7 checks the invoice against the PDF. With five such contracts this is a few hours a month. With fifty, it is a billing hire.
Option 2: Stripe plus Metronome
Stripe completed its acquisition of Metronome in January 2026 and announced Metronome integrations in the Stripe Dashboard at Sessions in April 2026, including commits, multidimensional pricing, and bespoke contracts. For usage-heavy products, this is the native path for the commitment and the allowance:
- What it solves: the annual commit and the true-up become first-class objects; the included allowance and negotiated overage rate can be modeled per customer; high event volume is handled without a custom pipeline.
- What it does not: the contract is still configured by a person reading a PDF; the PO requirement, the portal, the net 45 collections replies, and the reconciliation of the wire into QuickBooks or NetSuite are outside its scope; and the invoice is still not verified against the signed agreement.
- Pricing: Metronome's published Startup plan charges 0.8% of billing volume plus $0.04 per 1,000 ingested events, with a custom plan above that, per metronome.com/pricing.
Choose this when usage is the core of the product, engineering owns the event pipeline, and finance can live with the operational work around the engine. For a deeper look at where Stripe meters and commits diverge, see Stripe usage-based billing.
Option 3: a contract-aware layer on top of Stripe
The third option keeps Stripe as the billing and payment system and adds an operator that reads the contract and runs the work around it. This is what LedgerUp does. It installs from the Stripe App Marketplace, and for the contract above its agent, Ari:
- Reads the order form and the MSA and extracts the commitment, the ramp, the allowance, the overage rate, the payment terms, the PO requirement, and the billing contact.
- Creates the Stripe objects: the customer with the PO custom field, the four-phase subscription schedule, and the usage price, so Stripe bills the right amounts on the right dates.
- Meters usage itself or ingests it from Stripe Meters, rates it against the contract's quarterly allowance and $4.00 rate, and compares the result to what Stripe is about to invoice. Under-billing is flagged before the invoice goes out, not found at renewal.
- Tracks the $120,000 commitment against billed fees and rated overage each quarter and prepares the true-up invoice at term end, routed for approval.
- Holds the Q3 invoice when the PO on file has expired, requests a new one from the customer's AP contact, and releases the invoice with the PO on it. If the customer uses Coupa or Ariba, it submits there and tracks the status.
- Handles the month 5 amendment: reads the addendum, prorates the add-on from the 15th at the daily rate, updates the remaining schedule phases, co-terms the end date, and posts an incremental invoice rather than editing anything already sent.
- Runs collections on net 45: reminders that reference the invoice and the PO, replies read and classified, promises to pay tracked, escalation to the account owner when needed.
- Reconciles the payment when the ACH or wire lands, applies it to the invoice in QuickBooks or NetSuite, and posts any Stripe fees to the fee account, so the close does not start with a clearing account.
- Generates the revenue schedule from the reconciled result, including the variable consideration in the overage, for ASC 606 and IFRS 15.
Every high-risk action, a credit above a threshold, a true-up invoice, an invoice held for a missing PO past a set number of days, routes to a person in Slack for approval before it posts. The point is not autonomy for its own sake; it is that the person approves the decision instead of doing the eleven steps. LedgerUp is priced as a flat monthly platform fee scaled to billing volume, with no per-seat fees; see the pricing page.
The three options compared
| Requirement from the contract | Stripe by hand | Stripe + Metronome | Stripe + LedgerUp |
|---|---|---|---|
| Quarterly ramp | Subscription schedule, configured manually | Modeled in the contract object, configured manually | Read from the contract, schedule created and verified each period |
| Annual commitment and true-up | Spreadsheet plus a manual invoice | Native commit and true-up | Tracked against the contract, true-up prepared and routed for approval |
| Included allowance and negotiated overage | Graduated price; cycle alignment is on you | Native per-customer rates and allowances | Rated against the contract and compared to the Stripe invoice before it sends |
| PO required or expired | Custom field; no gating | Custom field; no gating | Invoice held until a valid PO is on file, PO requested automatically |
| Procurement portal submission | Manual | Manual | Submitted and tracked (Coupa, SAP Ariba, Bill.com, Tipalti) |
| Mid-term amendment | Manual schedule edit and proration | Manual contract edit | Read from the addendum, prorated, co-termed, posted as an incremental invoice |
| Collections on net 45 | Stripe reminders plus a person | Stripe reminders plus a person | Contract-aware sequences, replies read, escalation and promise-to-pay tracked |
| Payout and wire reconciliation to the ERP | Manual or a sync app | Manual or a sync app | Matched to the invoice in QuickBooks, NetSuite, or Sage Intacct with fees posted |
| Revenue recognition | Stripe Revenue Recognition add-on or the ERP | Handoff to the ERP | ASC 606 / IFRS 15 schedules from the reconciled result |
| Who reads the contract | A person | A person | Ari, with a person approving exceptions |
| Published pricing | 0.7% of volume, or $620/mo + 0.67% above $100K | Stripe Billing plus 0.8% of volume + $0.04 per 1,000 events (Startup plan) | Stripe Billing plus a flat monthly platform fee, no per-seat pricing |
Checklist before you automate custom contract billing on Stripe
- Count the exceptions per contract. Pull the last ten enterprise order forms and tally ramps, minimums, allowances, PO requirements, portals, and amendments. One or two per contract points to Stripe by hand; five or more points to an operator.
- Decide the system of record for the contract. The PDF in the CRM, or the CPQ output. Whatever it is, billing must be reconciled to it, not to the CRM's deal amount.
- Align allowance resets to billing periods before you create the first meter. Fixing this after the first invoice means credits.
- Record PO requirements on the customer record, including expiry, and decide who requests renewals.
- Write down your proration and co-terming rules as policy, so amendments are handled the same way every time, by a person or an agent.
- Set approval thresholds: the dollar amount above which credits, true-ups, and write-offs need a human.
- Decide where reconciliation happens. Stripe payouts should be matched per charge to invoices in the ERP, with fees posted separately, not booked as a net deposit.
- Add a verification step: before any enterprise invoice sends, something compares it to the contract. If nothing does, add it, even if it is a person for now.
- Clean up Stripe first. Duplicate customers and mismatched subscriptions make every automation misfire. See Stripe cleanup.
- Measure before and after: close-to-invoice time, manual touches per invoice, and exception rate, from the billing operations metrics.
Frequently asked questions
Can Stripe Billing handle custom contracts?
Partly. Stripe Billing can model ramps with subscription schedules, included usage and overage with graduated usage prices, PO numbers with invoice custom fields, and net terms with send-invoice collection. It cannot read the contract, enforce an annual minimum, require a PO before sending, submit to a procurement portal, or verify that the invoice it produced matches the agreement. Those are billing operations tasks that sit outside the engine.
How do I bill a minimum commitment in Stripe?
There is no native minimum-commitment object in Stripe Billing as of September 2026. The common approaches are a flat platform fee equal to the floor with overage billed above it, billing credits (in public preview) drawn down by usage, or Metronome for native commits. In each case the shortfall true-up at term end is a reconciliation run against the contract, either by a person or by a contract-aware layer such as LedgerUp.
How do I handle a mid-term contract amendment in Stripe?
Update the subscription schedule's remaining phases to add or change the affected line, with proration behavior set to create prorations from the effective date, and align the added item's end date to the master agreement. Never edit an invoice that has already been sent; issue an incremental invoice or a linked credit memo instead. LedgerUp reads the addendum and performs those steps, routing any credit above your threshold for approval.
Does Stripe support ramp pricing?
Yes, through subscription schedules: each phase can carry a different price and duration, so a quarterly or annual step-up is four or more phases in sequence. The risk is not modeling the ramp; it is that nothing checks each period's invoice against the step the contract specifies once the schedule is live.
How do I add a PO number to a Stripe invoice?
Add it as an invoice custom field. Stripe supports up to four custom fields, set as defaults on the customer so they appear on every invoice, or set per invoice for one-off changes. Stripe prints the field; it does not require it. Holding an invoice until a valid PO is on file is a workflow step outside Stripe.
What is the best way to automate enterprise contract billing on Stripe?
Keep Stripe as the billing and payment system, and add a layer that reads the contract, creates and verifies the Stripe objects, gates invoices on PO and portal requirements, runs collections on net terms, and reconciles payouts into the ERP. LedgerUp does this from the Stripe App Marketplace. For usage-heavy products with an engineering team, Stripe plus Metronome handles the metering and commitments, with the operational work around them still to be owned.
Should I replace Stripe Billing with Chargebee or Maxio for custom contracts?
Only if you want a different catalog and are willing to migrate. Chargebee and Maxio replace Stripe Billing as the subscription system and use Stripe as the payment gateway; both still need a person to configure each contract and neither reconciles the invoice to the signed agreement. If Stripe Billing already works for you, the cheaper path is to keep it and automate the work around it. See LedgerUp vs Stripe Billing for the side-by-side.
Sources and product references
- Stripe: subscription schedules
- Stripe: usage-based billing and Meters
- Stripe: customize invoices (custom fields, memo, footer)
- Stripe Billing: published pricing
- Stripe: Metronome, a Stripe product
- Metronome: published pricing
- Stripe App Marketplace: LedgerUp
- LedgerUp docs: automated invoicing
- LedgerUp docs: usage metering
- LedgerUp case study: HappyRobot
Book a LedgerUp Demo
See how LedgerUp connects your CRM, billing, and ERP systems to eliminate manual work and accelerate revenue.
Get Started with LedgerUp