NEWProgress-billing audits are live for architecture, engineering and legal invoices →
Case study: a $431,315 billing series, audited line by line

Money back,
with the proof attached.

Send Recoup an itemized bill or an architect's progress billing. It finds every overcharge the arithmetic proves and ties each one to a line on the bill. It totals only what the numbers support. Then it drafts the letter that asks for the money back.

Integer cents on every line55/55 tests greenZero network callsEvery finding cites its line

recoup · audit report · stmt 10042 SAMPLE DATA
L-1108 ASSERTED
Lab panel — qty 2 × $75.00, billed $250.00
quantity-mismatch · 2 × 7500¢ = 15000¢ · billed 25000¢ · excess 10000¢
+$100.00
L-1131 REVIEW
Identical charge, same date of service
duplicate-charge · confidence 0.65 · legitimate repeat services exist — held for confirmation
+$150.00
L-1140 REVIEW
Panel and its component billed together
unbundling · pair table is SAMPLE until quarterly ingestion lands
+$84.00
L-1152 CLEAN
Office visit, established patient
Arithmetic checks. Left alone; the engine never invents a finding to justify itself.
$0.00

Recovery, bucketed

Asserted — arithmetic proves it
$100.00
Candidates — confirm, then dispute
$234.00
Checks not performed
2 listed
Grounding guard: a finding with no real line reference, or a non-integer recoverable, is rejected before it can reach this column. Fail-closed.
Grounded or it doesn't count. Every dollar above names a line that exists and shows the integer-cents arithmetic that produced it.
How it works

Four steps. Each one refuses to guess.

Bills lie in boring ways: a quantity that doesn't multiply, a phase billed past its own estimate, a consultant fee routed around a cap. Finding those is arithmetic. Recoup does the arithmetic and stops exactly where the arithmetic stops.

Read the bill without rounding it.

Every amount enters as safe-integer cents. A float, an oversized number or a line without an id stops intake instead of being rounded. On a progress-billing series the intake goes further: hourly sections must sum to their stated totals and each phase line must satisfy contract = remaining + prior + this. If your transcription is wrong, the audit refuses to start.

intake()throws
inputamountCents: 100.5 errorL.amountCents must be safe-integer cents, got 100.5 (money is never a float)

Prove it against a line that exists.

Ten detectors run. Each one computes its recoverable amount from the bill's own numbers, never from a constant or an estimate, and cites the line it came from. A detector that can't name a real line produces nothing; the grounding guard rejects it before totalling.

hourly-line-mathASSERTED · 0.95
hours2.00 h rate$450.00 / h expected$900.00 billed$1,000.00 recoverable$100.00±1¢ tolerance

Total into three buckets that never blur.

Arithmetic the bill's own numbers prove is asserted. Anything needing a human, such as a duplicate that might be a legitimate repeat or a phase billed past its estimate, is a candidate, capped at low confidence and labelled for confirmation. Work billed with no authorization visible in the provided contract is a documentation gap, which the letter turns into a request for paper. Promoting a candidate to asserted is your decision, and the engine never makes it for you.

auditProgress()3 buckets
asserted$0.00arithmetic clean candidates$21,869.43confirm first doc gap$262,710.00request paper

Draft the letter the math already wrote.

The output is a dispute letter that quotes each finding, its line reference and its arithmetic, plus a limitations block naming every check that did not run. Asserted items are stated. Candidates ask the recipient to confirm. Nothing in the letter is a claim the report can't show its work for.

appeal.txtgenerated
Re: Statement 10042 — request for correction
Line L-1108 bills $250.00 for a quantity of 2 at a unit price of $75.00. Quantity × unit price is $150.00; the statement exceeds it by $100.00.

Lines L-1131 and L-1133 appear identical on the same date of service. Please confirm whether these represent two distinct services.

Limitations: upcoding and contract-rate checks were not performed on this statement.

Run Your Bill

A clean bill recovers nothing. That is the feature. An audit engine that always finds something is an audit engine you cannot use as evidence.

Two verticals

Different bills. Identical discipline.

A medical statement and an architect's progress billing fail in different ways, so each gets its own detectors. What they share is the guard: integer cents, real references, honest coverage.

Vertical 01

Itemized bills

Medical statements, vendor invoices, SaaS line items. Anything where a quantity, a unit price, and an amount are supposed to agree.

  • Quantity mismatch: billed above quantity × unit price
  • Duplicate charge: identical line billed more than once
  • Unbundling: panel and component billed together
  • Out-of-network balance bill: No Surprises Act context
  • Cited rights annex, naming the channel to raise it in
Vertical 02 · new

Progress billing

Architecture, engineering, legal, consulting. Percent-complete against phase caps, hourly-estimate sections, pass-through consultants, and a series that has to stay continuous.

  • Hourly line math: hours × rate, to the cent
  • Over-estimate billing: past a phase's own stated estimate
  • Unauthorized phase: billed with no visible authorization
  • Reimbursable markup: above cost plus the contract markup
  • Cap bypass: a consultant fee routed around a phase cap
  • Prior-billing continuity: regressions and missing invoices
Case study

Four invoices. 118 hourly lines. $431,315 billed, and $262,710 of it against paper we were never given.

A commercial remodel's architecture billing series, run through the progress-billing engine. Every hourly line, phase reconciliation and markup was recomputed from the invoices' own printed totals. All of them reconciled exactly, which is itself the proof the transcription was faithful.

Audit result: 12 findings across 4 invoices
Asserted arithmetic overcharges
Every hours × rate line, every markup, every phase reconciliation checks to the penny. The firm's math is clean.
$0
Candidates: confirm, then dispute
A schematic phase billed at twice its own estimate; permits billed past theirs; a consultant invoice routed through reimbursables while its phase cap had $1,600 left.
$21,869.43
Billed without visible authorization
Nine phases the provided contract excludes outright, almost certainly covered by a later executed agreement that was not in the documents provided. The letter asks for that agreement.
$262,710

What that buys the person paying the bill.

A list of exactly four documents to request before the next payment goes out, each one attached to the dollar figure it would resolve:

  • 1 The executed agreement and every change order, resolving $262,710
  • 2 The missing invoices in the series: ~$134,800 appears only as prior-billing jumps
  • 3 The retainer application trace, applied on paper and never visible as a credit
  • 4 The rate schedule in effect; same-staff rates rose ~36% mid-project

Figures from a real engagement, reported with the client and firm unnamed. Re-running the audit against the requested documents is what converts the third bucket into either an authorization or a dispute.

Get Your Own List

Coverage

What it checks, and what it doesn't.

Ten detectors ship and are tested. Everything not covered is printed in the report as a check not performed, so an absent finding is never mistaken for a clean bill.

DetectorSeverityState
Itemized bills
Quantity mismatchquantity-mismatchAssertedShipped & tested
Duplicate chargeduplicate-chargeCandidateShipped, held for confirmation
UnbundlingunbundlingCandidateShipped, pair table is SAMPLE
Out-of-network balance billout-of-network-balance-billCandidateShipped, context-gated
Progress billing
Hourly line mathhourly-line-mathAssertedShipped & tested
Reimbursable markupreimbursable-markupAssertedShipped & tested
Over-estimate billingover-estimate-billingCandidateShipped & tested
Cap bypass via reimbursablecap-bypass-reimbursableCandidateShipped & tested
Unauthorized phaseunauthorized-phaseDoc gapShipped & tested
Prior-billing continuityprior-billing-regressionCandidateShipped & tested
Declared gaps, printed in every report
Upcoding—Not deterministically detectable without clinical records
Expired contract rate—Waits on contract ingestion
Rate-schedule compliance—Needs the firm's employee-to-category assignments
Change-order authorization—Needs the executed agreement
Retainer application trace—Needs the full invoice series
±1¢tolerance on every computed line, with no rounding drift
0floats on a money path, enforced at intake
55/55tests green, zero install, no network
100%of findings cite a reference that resolves
Where this stands

The parts that aren't finished, stated before you ask.

Honest status

  • The engine is deterministic: no network, no secrets, no model in the pass/fail path. The same bill produces the same report every time, which is what makes a finding usable as evidence.
  • The unbundling pair table is sample data until real quarterly source ingestion lands. That is a named launch gate, and the report prints it.
  • Rights-annex entries surface context, never conclusions. Each is cited and dated; the decision stays with the payer, provider or agency.
  • Sample figures on this page are test data from the repository's fixtures. The case-study figures are from a real engagement, reported without naming the parties.

Send one bill. See what it can prove.

Send an itemized statement or a progress-billing series with its contract. You get the findings, the arithmetic behind each one, the three buckets, and the list of checks that did not run, before any engagement.

Recovery runs
on proof.

Send one bill and the report answers line by line, with the letter attached.

Run a Bill