What is maverick spend?
Maverick spend is money spent outside the buying rules your organisation has agreed. It is not always fraud or bad behaviour. Most of it comes from urgency, habit and data that makes the right path hard to follow.
The usual types are:
- Off contract buying: a contract or panel covers the item, but the order went to another supplier.
- After the fact POs: the goods or service were ordered by phone or email, and the PO was raised after the invoice arrived.
- No PO at all: invoices paid directly, card purchases, or reimbursements for items that should have gone through procurement.
- Split orders: one purchase broken into several smaller POs to stay under an approval limit.
Related but different is contract leakage: buying from the contracted supplier but paying more than the contract rate. It often does not show up in maverick spend reports at all, because the supplier is "on contract". See contract price book for how to catch it.
What is a three way match?
A three way match checks three documents agree before an invoice is paid: the purchase order, the goods receipt and the supplier invoice. It confirms you were billed for what you ordered and what actually arrived.
| Match type | Documents compared | What it catches |
|---|---|---|
| Two way | PO and invoice | Invoice price or quantity different from the PO |
| Three way | PO, goods receipt and invoice | Also catches billing for goods not received |
| Four way | PO, receipt, inspection and invoice | Also catches goods received but failed inspection |
| PO against contract | PO price and contract rate | A PO raised above the agreed rate. None of the matches above check this. |
Most ERPs apply a tolerance, for example a percentage or dollar amount, inside which small differences are paid automatically. Anything outside tolerance goes on hold for a person to resolve.
Why doesn't a three way match catch overpaying the contract rate?
Because all three documents can agree with each other and still be wrong. If the PO was raised at the wrong price, the supplier invoices that price, the receipt confirms the quantity, and the match passes.
Here is a worked example with made up numbers. The contract rate for a part is $59.80. A PO goes out for 50 units at $64.00. Only 48 arrive and are receipted. The supplier invoices 50 units at $66.50.
| Check | Calculation | Amount |
|---|---|---|
| Invoice as submitted | 50 x $66.50 | $3,325.00 |
| What three way match allows | 48 received x $64.00 PO price | $3,072.00 |
| Caught by three way match | $3,325.00 minus $3,072.00 | $253.00 |
| What the contract allows | 48 received x $59.80 contract rate | $2,870.40 |
| Still overpaid after three way match | $3,072.00 minus $2,870.40 | $201.60 |
| Total gap between invoice and contract | $3,325.00 minus $2,870.40 | $454.60 |
The three way match does its job. The invoice price is 3.9% above the PO price ($2.50 on $64.00), which is outside a 2% tolerance, so it holds the invoice. But once resolved to the PO, the site still pays $201.60 above the contract rate on this one line. Across thousands of PO lines a month, that is the leak.
How do you measure maverick spend?
Classify every dollar of real spend into buckets, using item level data, not supplier names. Then report the share in each bucket.
- Export 12 months of invoice and PO lines, with supplier, part number, description, quantity, price, PO date, invoice date and status.
- Remove what is not real spend. Quotes, cancelled lines and unapproved orders should be dropped. At an international tier 1 mining operator, quotes and unapproved orders were being counted as spend, which produced a whole class of wrong numbers. One rule fixed it.
- Match each line to a contract, by supplier, part number and date, allowing for units of measure and superseded parts.
- Flag after the fact POs: PO date later than invoice date, or later than the receipt date.
- Classify every line into one of five buckets, as in the table below.
- Report by category, site and buyer, and track it monthly.
Example with made up numbers: 12 months of maintenance spend of $4,800,000 at one site.
| Bucket | Spend | Share |
|---|---|---|
| On contract, at contract rate | $2,904,000 | 60.5% |
| On contract supplier, above contract rate (leakage) | $612,000 | 12.75% |
| Off contract, where a contract exists (maverick) | $744,000 | 15.5% |
| No contract covers the item | $360,000 | 7.5% |
| After the fact PO (maverick) | $180,000 | 3.75% |
| Total | $4,800,000 | 100% |
Maverick spend here is $744,000 + $180,000 = $924,000, or 19.25%. A supplier based report would show the $612,000 of leakage as compliant, because the supplier is on contract. The $360,000 with no contract is not maverick, but it is the list of items to put on a contract next.
How do you run these checks in Excel or your ERP?
You can test it in Excel with three exports: PO lines, goods receipts and contract rates. Use one row per PO line.
- Join receipts to PO lines by PO number and line. Receipted quantity:
=SUMIFS(Receipts[Qty], Receipts[PO], [@PO], Receipts[Line], [@Line]). - Join contract rates by supplier and part number with
XLOOKUP, checking the PO date sits inside the contract dates. - Three way variance:
=[@InvoiceAmount]-[@ReceivedQty]*[@POPrice]. - Tolerance check:
=IF(ABS([@InvoicePrice]-[@POPrice])/[@POPrice]>2%,"HOLD","OK"), using your own tolerance. - Contract variance:
=IF(ISNUMBER([@Rate]), MAX(0,[@POPrice]-[@Rate])*[@ReceivedQty], 0). - After the fact flag:
=IF([@PODate]>[@InvoiceDate],"AFTER THE FACT","").
In the ERP, the three way match and tolerances are usually standard settings. The contract variance check is not. It needs contract rates loaded per part, kept current, and compared at PO creation. Most sites have the rates in PDFs and spreadsheets, not the ERP, which is why the gap persists.
What are the common mistakes with maverick spend and three way matching?
The biggest mistake is reporting compliance by supplier instead of by item and rate. It makes leakage invisible.
- Tolerances set too wide. A generous tolerance auto-pays small overcharges on every invoice, every month.
- Receipting the ordered quantity. If the stores team receipts 50 when 48 arrived, the three way match becomes a two way match.
- Blanket POs with no unit prices. A value only PO cannot be matched on price at all.
- Counting quotes or unapproved orders as spend. It inflates totals and buries real issues.
- Contract rates outside the ERP. If the rate is in a PDF, nothing checks the PO against it.
- Escalation not checked. Suppliers apply rises; nobody confirms they match the contract formula, index and date.
- Treating all maverick spend as bad behaviour. Most of it is a process or data problem. Fix the cause: missing catalogue items, slow approvals, or wrong stock levels that force urgent buys.
- Measuring once. A one-off spend review finds issues. Without a monthly rerun, they come back.
How does Source Digital automate maverick spend and contract rate checks?
We build the fourth check, PO against contract, inside your own environment (your Azure, Databricks or Snowflake), with read only access to your ERP data. Every flagged dollar links back to the PO line, receipt, invoice and contract clause it came from. A person approves every action. The AI never decides.
- PO vs contract checker. Every PO line compared to the contract rate, with units of measure, validity dates and superseded parts handled. See PO and contract rate checking.
- Contract price book. Built from your own contract history, so each price is judged against what was agreed and what was last paid. See the contract price book case study.
- Spend rules that hold up. At an international tier 1 mining operator, one rule removing quotes and unapproved orders fixed a whole class of wrong spend numbers. Every answer passes 511 automated checks, and every mistake a user catches becomes a permanent test. See how we verify AI answers.
- A commercial assistant in Microsoft Teams that answers from millions of purchasing, receipt, payment and stock rows in about a minute.
The maths is deterministic. The AI explains what it found; it does not make up figures.
The first step is a free 15 minute call with Tristan, or send a quick enquiry if you would rather write. No obligation and no pitch. He asks what you run and what is costing you, then tells you straight whether there is something worth fixing. Work is charged at a consulting day rate. The price depends on your sites, systems and data, so you talk first, then Tristan sets out what he would build, how many days it takes and what it costs. An engagement runs like this:
- A free 15 minute call. What you run, and what is costing you.
- A look at a sample export of your data, only if it is useful. Read only.
- A clear scope and price, based on the days the work needs.
- The build inside your systems.
- Run, check and support.
See AI for mining supply chains for more.

