PAVING: THE ESCALATION CLAUSE DOT GIVES YOU AND PRIVATE WORK DOESN'T
Liquid asphalt cement is the trade's commodity exposure, and public owners solved it decades ago: DOT contracts carry standardized asphalt cement price adjustment clauses tied to monthly published indexes (ODOT's MACMP, WSDOT's +/-5 percent trigger formula), adjusting pay both directions as the index moves.
This page covers one problem. The full picture for this trade, including the other places margin leaks, is on the paving operating system page.
WHERE THE MONEY GOES.
Liquid asphalt cement is the trade's commodity exposure, and public owners solved it decades ago: DOT contracts carry standardized asphalt cement price adjustment clauses tied to monthly published indexes (ODOT's MACMP, WSDOT's +/-5 percent trigger formula), adjusting pay both directions as the index moves. Private and commercial parking-lot work almost never carries the clause, which means the same contractor is hedged on Monday's DOT job and fully exposed on Tuesday's shopping center.
THE COST, SOURCED.
WSDOT applies adjustment "when the current cost of liquid asphalt exceeds +/-5% of the estimated base cost"; a state DOT survey found 13 of 19 states rate liquid-asphalt price indexing as a positive impact; municipal bids routinely mandate that "unit pricing for all hot mix asphalt items shall be based upon the price for liquid asphalt and shall be adjusted according to an asphalt escalator." (NCHRP price-indexing study; WSDOT provision; Biddeford 2026 paving bid)
THE NUMBER TO MEASURE IT AGAINST.
Paving contractors run about % net profit at $1M to $5M, rising to roughly 9% at $5M to $10M. The CFOS target at $1M to $5M is10%, set at 10 percent before taxes or 3.5 points better than your trade's average at your revenue, whichever is higher. A problem like this one lives in the distance between those two figures rather than in a loss on any single job.
Gross margin over the same bands runs % to 22%, against a CFOS target of 10%.
THE SYSTEM THAT FIXES THIS.
Cost codes built against the estimate, so a job can be read while it runs.
