How to Track Invoices Against Contracts (and Catch the Gaps)

An invoice is not a request for money. It is a claim against a promise you already made - a line in a contract, a purchase order, a schedule of values. The invoice says "you owe me this." The contract says "here is what I actually agreed to owe you." When those two documents sit on the same screen, overbilling is obvious. When they sit apart - the contract in a folder, the invoice in an inbox - you are approving payment on trust, and trust is not a control.
Most teams never match the two systematically. They approve invoices on their own merits: is the vendor real, is the amount plausible, did the work happen. All reasonable questions - and none of them catches the invoice that bills for more than the contract allows, double-bills a milestone, or quietly drifts past the agreed rate. This is a field guide to tying every dollar back to the commitment it draws against, so the gaps surface before you pay them.
The three questions every invoice has to survive
Before an invoice is approved, it should have to answer three questions - and "it looks right" is not an answer to any of them:
Which commitment does this draw against? Every invoice must name a specific contract, PO, or change order line. An invoice that matches nothing is a red flag, not a routine payable.
Is there room left on that commitment? Sum everything already billed against that line. If this invoice pushes the total past the contract value, it stops for review before it's paid, not after.
Does the rate match the agreement? The unit price, the milestone amount, the hourly rate on the invoice has to equal the one in the signed contract. Small drifts are where the quiet money leaks.
Build the running ledger, not the one-time check
The mistake is treating this as a per-invoice task. The control isn't checking one invoice; it's maintaining a live tally of every commitment and everything billed against it. Each contract gets a running balance: contract value, billed to date, this invoice, remaining. When the remaining balance can't go negative without someone noticing, duplicates and overbilling have nowhere to hide.
This ledger is also the single most useful artifact you can hand an auditor, a board, or a project owner. It answers, in one view, the question every one of them eventually asks: are we paying for what we agreed to, and how much of each commitment is left?
A starter workflow you can adopt this week
You don't need software to begin - you need discipline and one shared table. Start here:
Give every contract and PO a short code, and require that code on every invoice before it enters the approval queue.
Maintain one commitment ledger - contract value, billed-to-date, remaining - updated the moment each invoice is approved, not monthly.
Set a hard rule: an invoice with no matching commitment, or one that would push a line over its value, cannot be paid without a documented exception.
Reconcile the ledger against the accounting system monthly, so the two never drift out of agreement.
Do this and you convert accounts payable from a trust exercise into a matching exercise. The invoice still gets paid - but only after it proves it belongs to a commitment with room left. That single change catches the duplicate, the overbill, and the rate drift before the money is gone, instead of during next year's review.
If you want to see where teams already track spend against commitments this way, our accounting sector notes are here.


