Pricebook material cost drift happens because a flat rate pricebook stores a material cost as a number typed on a specific day, and nothing in ServiceTitan, Housecall Pro, FieldEdge, ServiceFusion or any other field service platform goes back to your supply house to check whether that number is still true. The task keeps selling at the price you set. The material behind it keeps moving. The gap is pure margin, and it comes out of the job without ever appearing as a line item anywhere.
That is the whole mechanism. A pricebook is a snapshot, and every snapshot ages.
The reason it goes unnoticed for a year at a time is that the symptom looks like something else. Revenue is fine. Ticket average is fine. Close rate is fine. The only number that moved is gross margin per job, and by the time that shows up on a quarterly P&L, you have sold six hundred tasks at last year’s cost. This is the same phenomenon as material price creep, just wearing a different hat: instead of showing up as a higher invoice you did not check, it shows up as a sale price you never raised.
What a flat rate pricebook actually stores
Strip out the software differences and every flat rate pricebook holds roughly the same record per task:
- A task code and a customer-facing description
- A labor allowance, in hours
- A material list, part by part, with quantities
- A material cost per part, entered once
- Overhead and margin rules that build the sell price
The sell price is derived. That is the important part. It is derived from inputs, and one of those inputs is a cost you typed in when you built the book. Nothing in the chain is wrong. It is just that four of the five inputs are stable by nature (task codes, descriptions, labor allowances, margin rules) and the fifth one is a commodity price.
Field service platforms are genuinely good at what they were built for: dispatching, presenting options at the kitchen table, and getting a consistent price out of every tech instead of a different number from each truck. Consistency is the product. Freshness is not, and it was never advertised as such.
Four ways a pricebook drifts, and only one of them is the supplier
| Drift source | What changed | How you notice | How often |
|---|---|---|---|
| Supplier price moved | Same part, same distributor, higher unit price | Never, without a price history | Continuously |
| Part substituted in the field | Tech installs a different valve or fitting than the book lists | Warranty callback or a puzzled invoice | Weekly |
| Quantity assumption wrong | Book says two fittings, the job actually takes four | Techs complain the task “never works out” | Per task type |
| Sell price raised, cost not updated | Margin percentage looks fine, dollars are wrong | Not at all, this one hides best | Annually |
That last row deserves its own paragraph, because it is the trap. A shop feeling margin pressure raises every task 6% across the board. The book now shows a healthy margin percentage, calculated against a stale cost. If material actually moved 12%, you just papered over a real problem with a fake number, and you did it while raising prices on customers, which is the worst of both outcomes.
The second row is more common than most owners believe. The book prices a specific part. The truck has a different one. Field service software will happily sell a task whose material list has not matched reality since 2024, and the substitution never surfaces because the customer sees a task name, not a bill of materials. A swap at the counter is a cost event, and it needs to reach the book.
What the material actually did while your book sat still
You do not need to guess whether the underlying cost moved. Published producer price indexes are free and they are specific enough to be useful by trade. These are national index levels, not your prices, and that distinction matters: they tell you the direction and rough size of a move, not what your branch charged you. Your invoices are the only source for the second thing.
With that caveat, here is what a pricebook built in early 2025 or late 2025 has been sitting through.
Copper and brass mill shapes. The BLS series read 712.565 in December 2025 and 803.275 in June 2026, a rise of about 12.7% in six months, on top of a move from 645.990 in January 2025. Any task with copper tube, copper fittings or copper wire in it is carrying that.
Plumbing fixture fittings and trim. 410.669 in January 2025 to 451.310 in January 2026, roughly 10% over the year, and then flat at 453.198 from March through June 2026 (preliminary). Flat periods are real and worth noticing, because they are the argument against panic-refreshing a pricebook monthly.
HVAC equipment. Use the commodity series here, not the industry index, and use the one that matches what you sell. Unitary air-conditioners, except air source heat pumps ran 280.520 in January 2026 to 297.025 in May 2026, about 5.9%, and that series publishes roughly a month behind the rest, so May is its newest reading while everything else here shows June. Heat pumps went the other way, 146.923 in January to 141.564 in June. Equipment is not one number, and if your book carries both, refreshing them off a single index gets one of them wrong.
Sheet metal. Ductwork has its own commodity series, sheet metal air-conditioning ducts and stove pipe, which read 300.699 in June 2025 and 304.143 in June 2026, about 1.1%. The broader sheet metal products index ran 337.053 to 353.935 over the same year, about 5%, which is a useful cross-check but is carrying a lot of product you never buy.
Zoom out and the squeeze has a name. AGC’s May 2026 analysis found the producer price index for inputs to new nonresidential construction rose 8.4% year over year while contractors’ bid prices rose only 3.5%. That gap is the macro version of exactly what a stale pricebook does to one shop. Costs moved. What contractors charged moved less. The difference came out of margin.
Note that all 2026 readings are marked preliminary by BLS and get revised, so re-pull the current value before you build a number on it. How to read these series without an economics degree is covered in how to benchmark what you pay against the market.
The margin arithmetic, worked
The numbers below are illustrative. They are not from any shop’s book, and your labor, overhead and margin structure will differ. The shape is the point.
Say a task sells for $480 and was built like this: $120 material, $180 labor, $90 allocated overhead. Profit is $90, which is 18.75% of the sell price.
| Scenario | Material cost | Labor | Overhead | Sell price | Profit | Margin |
|---|---|---|---|---|---|---|
| As built | $120 | $180 | $90 | $480 | $90 | 18.8% |
| Material up 12.7% | $135.24 | $180 | $90 | $480 | $74.76 | 15.6% |
| Material up 25% | $150 | $180 | $90 | $480 | $60 | 12.5% |
A 25% move on one input cut the profit on that task by a third, and nothing in the software changed color. Multiply by the number of times you sold that task last year. That is the real cost of a stale book, and it is why this is not a bookkeeping issue.
Two things fall out of the table. First, the leverage is worse on material-heavy tasks than on labor-heavy ones. A diagnostic call is nearly immune. A repipe is not. Second, the percentage margin drop is roughly proportional to material’s share of the sell price, which means the tasks to refresh first are not the most expensive tasks, they are the ones where material is the largest share. That distinction between margin by job and margin by trade is the one that reveals leakage first, and it is worked through in margin by job vs margin by trade.
Where refresh data actually comes from
Here is where most refresh projects stall: somebody decides the cost fields need updating and then discovers there is no clean source for what the parts currently cost.
Three options, in descending order of quality.
Your own purchase history. The best source, because it is what you actually pay at your actual branch on your actual account, including whatever contract pricing did or did not apply. This only exists if somebody has been recording unit prices, which is the whole argument in how to build a unit price history from twelve months of supply-house invoices and, on the accounting side, in QuickBooks material items setup.
A fresh quote from your supplier. Ask your rep to price your top thirty task-material parts as a list. Reps do this routinely and it takes them less time than it takes you. The limit is that a quoted price is the price today for a quoted quantity, which is not always the price the counter charges on a Tuesday.
A catalog or price feed. Usable, and worse than it looks. The pricing your estimating tools see is generally fed by your distributor rather than assembled independently, so it reflects catalog structure rather than your account. Fine for direction, weak for your number.
Whichever you use, record the date you refreshed alongside the cost. A cost with no date is how books get to be three years stale without anyone being able to say so.
How often to refresh, and what to refresh
Refreshing the whole book quarterly is a fantasy in a shop that also has to answer the phone. Refresh by tier instead.
Monthly, ten to twenty parts. Copper, wire, refrigerant, anything that has moved in the last year. Small list, fast check, and it is where nearly all the drift lives.
Quarterly, the top fifty tasks by volume. Not by price, by how often you sell them. Volume is what turns a $15 cost error into real money.
Annually, everything else. Including labor allowances and the overhead allocation, both of which drift too, just slower and for different reasons.
Event-driven, whenever your supplier announces an increase or a manufacturer resets a model year. A model-year rollover quietly resets negotiated pricing, and seasonal equipment pricing swings on its own schedule, so the same condenser can cost different money in April and July.
The quarterly pricebook routine
- Export your task list sorted by units sold, not by revenue. Take the top fifty.
- Pull the material list for those fifty and de-duplicate the parts. It usually collapses to well under a hundred SKUs.
- Get a current unit price for each, from your own invoice history first and a supplier quote second.
- Compare against the cost currently stored in the book, and flag anything off by more than 5%.
- Check the quantities too, not just the prices. Ask two techs whether the book’s material list matches what they actually pull.
- Update cost fields and record the refresh date against each one.
- Recalculate sell prices from the new costs rather than applying a flat percentage lift. The flat lift is the thing that hides the problem.
- Note which parts moved most. Those become next month’s short list, and they are also the parts to raise with your rep.
The pricebook is one layer of a longer chain that runs from the counter ticket to the general ledger, and a refresh routine only works if the layer underneath it, your own recorded unit prices, actually exists. That chain is mapped in the contractor’s material cost software stack.
None of this is your supplier’s fault, and none of it is your software vendor’s fault either. A pricebook is a snapshot by design, and a distributor is not going to call every contractor in the county when a manufacturer resets a price. The fix is a habit, not a product complaint: keep a dated record of what you pay, and let the book inherit from it.
Sources
- PPI series WPU102502, copper and brass mill shapes, U.S. Bureau of Labor Statistics
- PPI series WPU1054, plumbing fixture fittings and trim, U.S. Bureau of Labor Statistics
- PPI series WPU114802, unitary air-conditioners, except air source heat pumps, U.S. Bureau of Labor Statistics
- PPI series WPU11480734, heat pumps, U.S. Bureau of Labor Statistics
- PPI series WPU10730120, sheet metal air-conditioning ducts and stove pipe, U.S. Bureau of Labor Statistics
- PPI series WPU1073, sheet metal products, U.S. Bureau of Labor Statistics
- Prices for Construction Materials Climb at Highest Rate Since Pandemic, AGC of America