Getting started with TrueUpp

Model your hybrid contracts, import a month of usage, run the close, approve the lines and push drafts to Stripe, with a 10-minute worked example.

On this page

TrueUpp is the reconciliation layer between your usage data and your billing system. It applies each contract's commit, included usage, rollover, tiers and amendments to the usage you import, and drafts the resulting true-up lines in Stripe. A person approves every number before anything bills.

1. Create your workspace

Sign up, turn on two-factor sign-in (every user needs it before seeing any data), and name the workspace. The name prints on the audit statements you send customers.

2. Model your contracts

Enter each contract's terms in the contract form, or import the YAML a TrueUpp audit produced. Each term carries the clause it came from, so every number on a statement points back to the order form. See importing terms.

3. Import usage

Upload a monthly aggregate or line-level CSV. A file imports completely or not at all, and every rejected row is listed with its line number. See usage CSV formats.

4. Run the close

A run closes every period that ended by the date you choose, using usage imported before its cutoff. It drafts one line per contract and period, with a full calculation trace, and raises exceptions that need a person.

5. Review, approve, push

Open a line to see each step: usage, free allowance, rollover lots drawn, included credits, grace, overage and tier pricing, each with its clause. Approve it, then push approved lines to Stripe as draft invoice items. Your team finalizes the invoice in Stripe as usual. See connecting Stripe.

We aim for setup to a first approved draft in under two hours for up to 30 contracts using CSV usage. That is a target we are still measuring, not a guarantee.

10-minute walkthrough: Customer B

This example runs one real contract through steps 2 to 5, using two files you can download. The numbers are the same ones TrueUpp's engine is tested against, so your workspace should show exactly what is below.

The contract. Customer B (account 2077) has a one-year contract from 1 January 2026 with a quarterly true-up:

TermValueClause
Included credits30,000 per quarterMSA Schedule B §1
Credit pool1 credit per API request, 5 per exportMSA Schedule B §2
Free allowance2,000 API requests a month, before the poolMSA Schedule B §2.3
RolloverUp to 25% of the committed credits, expiring 60 days after the quarter endsMSA Schedule B §5
OverageFirst 5,000 credits at $1.00, then $0.75MSA Schedule B §6
Amendment from 1 July 202640,000 credits per quarter; overage first 10,000 at $0.90, then $0.70Amendment 1 §2

Import the contract and the usage

  1. Open Contracts › Import terms, choose customer-b-contract.yaml and click Preview. You should see one contract with two segments: the original terms, and the amendment from 1 July. Click Import 1 contract.
  2. Open Usage imports, keep Monthly aggregate selected, choose customer-b-usage.csv and click Import usage. Ten rows are accepted.

Run the close

Open Close runs, set Close periods ending by to 2026-10-01 and click Start run. Three quarters close:

QuarterUsage creditsFreeRollover lot drawnIncluded drawnOverageLine
Q1 (Jan to Mar)36,0006,000030,0000$0.00
Q2 (Apr to Jun)24,0006,000018,0000$0.00
Q3 (Jul to Sep)66,0006,0007,50040,00012,500$10,750.00

How the numbers come out:

  • Q1: 35,000 API requests plus 200 exports × 5 is 36,000 credits. Less 6,000 free (2,000 a month) leaves 30,000, exactly the included credits. Nothing is left to roll over.
  • Q2: 24,000 credits less 6,000 free leaves 18,000, so 12,000 included credits go unused. The cap is 25% of the 30,000 committed, so 7,500 roll over as a lot expiring 30 August 2026 and 4,500 lapse.
  • Q3: the amendment is in force. 66,000 credits less 6,000 free leaves 60,000. The 7,500-credit lot is drawn first, then the 40,000 included credits, leaving 12,500 credits of overage at the amended rates: 10,000 × $0.90 = $9,000.00, plus 2,500 × $0.70 = $1,750.00, for $10,750.00.

Review the Q3 line

Open the Q3 line from the run. The trace shows each step above with its clause reference. Because no invoiced amounts were recorded, each closed quarter raises a Data exception, "No invoiced amount", and the run compares Q3's $10,750.00 against $0. Acknowledge those exceptions with a note, or record what was billed (below), before approving.

To see the expected-versus-invoiced check, save this as billed.csv and upload it under Usage imports › Billed amounts:

account_id,period_start,period_end,billed_amount,note
2077,2026-01-01,2026-04-01,0,
2077,2026-04-01,2026-07-01,0,
2077,2026-07-01,2026-10-01,18125,Spreadsheet still used pre-amendment terms

Run the close again. Q1 and Q2 match, and Q3 shows as over-billed by $7,375.00: $18,125.00 was invoiced against $10,750.00 expected.

Finally, open the contract and choose Statement next to Q3 in its ledger. That one-page statement is what you would send Customer B's finance team. See audit statements.