AI Adoption GuideProcurementEvaluate
Total cost of ownership modeling
AI combines bid price, logistics, quality failure rates, and transition costs into a TCO comparison across shortlisted vendors.
Procurement processRequestApproveSourceEvaluateSelectOrderReceiveReview
By Don, DoneThat’s AI coach · updated
Award on delivered TCO, not the unit price on the quote
The cost you compare at award is delivered total cost of ownership for the volume and horizon in the event, with every driver named. Unit price is one line in that stack, not the stack.
Finance sees the gap after the first invoice: the PO looked like a win, the landed cost did not. A bid that is cheapest per piece can still be the expensive option once you add freight under the stated Incoterm, the yield you actually get, and the cost of switching.
AI can parse bid lines and Incoterms, retrieve your own history, and stack the comparison. It cannot invent a failure rate. If you do not have a source for a driver, the cell is unknown. Unknown is not zero.
Sourcing and P2P suites in this class include SAP Ariba, Coupa, Jaggaer, and Keelvar. This page does not rank those products. Run the comparison in the event where the bids already live, not in a side spreadsheet the award memo will ignore. The output is a range per bidder with drivers listed. If a small change in one unknown flips the order, you have an unresolved cost, not a cheaper supplier.
Stack bid price, Incoterm, your yield, and transition
Build the same four lines for every shortlisted bidder. Leave a line blank rather than borrowing someone else's number.
Bid price. Take the offer as written: unit price times event volume, plus lot charges, tooling, and minimums the bidder named. Do not drop a setup fee because another bidder bundled it. Keep the should-cost range from market price benchmarking next to this line as a challenge, not a substitute.
Freight and Incoterm. Read the Incoterm on the bid. EXW, FOB, CIF, and DDP do not put the same costs on the same party. If the bid is EXW and you have no freight quote to your ship-to for that origin, freight is unknown. Do not treat it as zero so the unit price still looks lowest. If logistics has a contracted lane rate for that origin and mode, use that rate and name the contract. If transit time belongs in the landed picture, keep it as a dated assumption and cross-check delivery lead time prediction rather than baking a guessed delay cost into the total.
Quality and yield from your history. This line exists only where you have your own evidence: goods receipts, returns, incoming inspection, line scrap, or claims against that supplier or mill for this spec. Pull it through historical performance retrieval. A vendor's claim about yield at another customer is not your yield. An industry average is not yours either. If the bidder is new, yield is unknown. Show TCO with that cell empty. Add a second scenario only if you have a first-article or trial-run plan whose cost you can name.
Transition. Switching costs money even when the new unit price is lower: first-article, dual-run, plate or die changes, safety stock, training, and qualification time. Populate this from a past switch in the same category you can point to, not from the vendor's "go-live in two weeks" slide. If you have never switched this category, transition is a named high/low range, not a single optimistic number.
Do not fold carbon, a "risk premium", or brand into the cost total. Those belong in the multi-criteria matrix as their own columns, with weights agreed before bids opened.
Illustrative comparison: three corrugated converters
A category buyer is evaluating three converters for a 12-month corrugated shipper program. Spec, volume, and ship-to are fixed. The event asked for TCO. Bids arrived as unit prices plus Incoterms. This is a walk-through, not a result from a named company.
Converter A is lowest unit price, EXW at the mill. Converter B is mid-pack, DDP to the DC. Converter C is a current supplier, higher unit price, DDP, with years of receipts and returns on this board grade.
- Bid price is comparable once you multiply by the same volume and keep each bidder's tooling and plate charges on their own line.
- Freight for B and C is inside the DDP price only if the bid text says so. Confirm it. For A, freight to the DC is a separate quote, or it is unknown. Putting zero in A's freight cell makes A look cheapest.
- Yield applies to C only if your receipt and return files for this grade exist and you use them. Do not paste a converter's "quality at other plants" claim into any column. A and B have no yield history with you, so those cells stay unknown.
- Transition applies to A and B: new plates, first-article, dual-run. Pull the last time you onboarded a converter in this category. C has no switch if you stay. If you have no past switch on file, do not invent a transition-hours figure.
You now have three TCO pictures, not three scores. A is cheapest on unit price and incomplete on freight and yield. B is delivered on paper if DDP is real, still unknown on yield. C is known on yield and freight, higher on unit price, zero switch. Award only after freight for A is a named quote or an explicit unknown in the award memo, and after yield for A and B is a funded trial or left blank. If the panel then still prefers A on unit price, they are not using the TCO they published.
Show a range; do not fill unknowns with averages
Output a low / mid / high per bidder, with a one-line note on which driver moves each end. Mid is not "average of industry yield." Mid is bid price as written, freight from your contract or quote where it exists, yield from your history where it exists, transition from a named past switch.
Where a driver is unknown, run the comparison twice: once with that cell empty (the honest ranking), and once with a bounded scenario you can defend (a freight quote you requested, a trial-run cost you budgeted). Do not split the difference with a percentage you cannot source.
Sensitivity is the useful output. If filling A's freight from a real quote still leaves A lowest, say so. If it does not, the unit-price ranking was wrong. If the order flips when yield for a new supplier is imagined as "typical," throw that scenario out. You do not have that yield.
A reverse auction ML optimization event can still be the right commercial mechanism. Run TCO on the awarded structure, not on the ticker. A live low under last year's unit price is not TCO. A multi-year TCO that assumes today's freight and yield is a scenario. Label it that way.
Stop awarding on unit price after you published TCO weights
You published TCO weights, then ranked on unit price. The RFP said cost would be TCO. The award memo sorts the bid tab on price per unit because that column is easy. Either change the weights before opening or use the TCO range as the cost cell. Doing both is the version that gets challenged.
Missing freight is treated as zero. EXW and FOB bids beat DDP until someone adds the lane. If logistics cannot quote in time, the cell stays unknown and that bidder cannot be "lowest TCO." They can be lowest unit price with freight outstanding.
Another customer's quality claim becomes your yield. Sales decks include defect figures from unnamed accounts. If you have no receipts, you do not have a failure rate. Do not invent one, and do not use a consultant's category average as a substitute.
Put the TCO range into the cost dimension of the multi-criteria decision matrix. Do not add TCO as a second score beside unit price. That double-counts price and lets the panel pick whichever ranking they already wanted.
Before the award memo leaves, finance should open the comparison and see, for each bidder: bid price as written, Incoterm and freight source or "unknown," yield source (your file) or "unknown," transition source (named past switch) or a stated range. If any line was filled from an industry average or a peer anecdote, take it out and rerun.
Is this worth automating for you?
Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other. This one is rated high effort to implement, so the baseline matters more than usual.
DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.
Measure the baseline first