Published cost indices tell you what steel did nationally last quarter. They can't tell you what your supplier charged you for this family of parts. That number is sitting in your own quote history, and it's more useful.
Step one: normalise, or you're measuring mix
Comparing this year's average part price to last year's measures which parts you happened to buy, not what prices did. Normalise first — for machined parts, price per kilogram of finished weight works well:
normalised = quoted_price / finished_weight_kg
Then index each period against a base:
index_t = (mean_normalised_t / mean_normalised_base) × 100
| Quarter | Mean $/kg | Index (base Q1) |
|---|---|---|
| Q1 | 27.40 | 100.0 |
| Q2 | 28.10 | 102.6 |
| Q3 | 29.65 | 108.2 |
| Q4 | 29.90 | 109.1 |
Annualised drift:
CAGR = (109.1 / 100)^(1/1) − 1 = 9.1%
Nine percent is a conversation. "Everything feels more expensive" is not.
Step two: flag the quote that doesn't fit
For a new quote in a family where you have history, a z-score answers "is this unusual, or does it just feel high?"
z = (x − μ) / σ
With a history of μ = $29.90/kg and σ = $2.10, a new quote at $36.40/kg:
z = (36.40 − 29.90) / 2.10 = 3.1
Roughly: |z| under 1 is normal variation, 1–2 is worth noticing, above 2 is worth an email. At 3.1 this isn't inflation — something changed. Material grade, quantity break, or the shop's capacity.
A z-score also catches the opposite case, which people ignore and shouldn't. A quote at z = −2.5 is not a win; it's a supplier who has misunderstood something, and it will surface at first article.
Step three: separate the supplier from the market
Run the index per supplier. If all of them rose 9%, that's material cost and your leverage is limited. If one rose 18% while the rest rose 4%, that's a supplier-specific decision — capacity, priorities, or how they read your account — and it's a negotiation with evidence attached.
The same split tells you when not to move. Switching over a 9% market-wide rise usually costs more in requalification than it saves.
What makes this impossible for most teams
Not the maths — none of it is beyond a spreadsheet. It's that the data is scattered across email attachments in supplier-specific formats, with the quantity in one place and the date in another, and nothing linking this year's quote for a part to last year's.
RFQTrace keeps every quote attached to its RFQ, with line items, quantity, date and supplier, and doesn't discard it when the job is awarded. That's what makes the second year's data worth having: requoting the same part becomes a comparison rather than a fresh start, and the index above is a query rather than an archaeology project.