Facility & commercial rate benchmarks

How these rate estimates are built.

Every rate published on an Evalystar /rates page is derived one of two ways, and each page says which. An Estimated rate is public regional wage data for that trade and metro, multiplied by a documented service multiplier of 2.5x to 3.0x that covers overhead, burden, and margin. A Measured rate is computed from real jobs logged in Evalystar, released only above a k-anonymity threshold of 5 companies, 3 vendors, and 10 jobs. A page never mixes the two, and an Estimated page never carries a sample size, because a model is not a measurement.

Summary

  • Every rate on an Evalystar /rates page is either Estimated or Measured, never a blend of the two, and each page states which it is above the fold.
  • An Estimated rate is public regional wage data for that trade and metro multiplied by a documented service multiplier of 2.5x at the low end and 3.0x at the high end.
  • US wage inputs come from BLS OEWS via O*NET OnLine; Canadian wage inputs come from Job Bank Canada.
  • A Measured rate is computed from real jobs logged in Evalystar and is published only once a cell clears 5 companies, 3 vendors, and 10 jobs, so no single customer is identifiable.
  • An Estimated page never shows a sample size or a company count, because presenting a model as a measurement would misrepresent it.

Estimated rates: wage data x a documented multiplier

An Estimated rate is not a measured billed rate. It's a city's own hourly employee wage for a trade, sourced from regional government wage data, multiplied by a documented service multiplier that converts an employee wage into a billed commercial rate.

Wagex Multiplier= Estimate
LowWage p25x 2.5Estimated low
MedianWage medianx 2.75Estimated median
HighWage p75x 3Estimated high

The 2.5-3x band covers what an hourly wage doesn't: labour burden (payroll tax, workers' comp, benefits, PTO), overhead (vehicle, dispatch, insurance, licensing), utilisation (not every paid hour is billable), and margin. We show the arithmetic on every Estimated page rather than just the result, so it can be checked, not just trusted.

US figures come from O*NET OnLine (onetonline.org), a U.S. Department of Labor/ETA-sponsored project that republishes Bureau of Labor Statistics OEWS metro-area wage percentiles. Canadian figures come from Job Bank Canada (ESDC), reference period 2023-2024.

Measured rates: real job data, k-anonymity gated

A Measured rate comes from real job records logged directly in Evalystar by facility teams rating actual vendor work, the hourly rate paid, not a rate card or a quote. A city/trade cell only publishes once it clears a privacy threshold: at least 5 companies, 3 vendors, and 10 jobs, so no single company's pricing is ever identifiable. Measured rates show a p25-p75 range plus a sample size and company count; Estimated rates never do; a page is never a mix of both.

A Measured cell always takes priority over an Estimated one the moment it exists, upgrading the page in place at the same URL. Most cities on this site are Estimated-only today.

What affects the rate, regardless of state

  • Emergency vs scheduled: same-day or after-hours emergency calls run well above scheduled maintenance visits.
  • After-hours and weekend work: typically carries a premium over standard business-hours rates.
  • Contract vs ad-hoc: vendors on a standing contract usually price lower per hour than one-off, ad-hoc jobs.
  • Code and certification requirements: trades with stricter local licensing (electrical, HVAC/gas) typically carry a premium tied to certification cost.

Why a range instead of a single number

A single average hides the real spread, in the underlying wage data for Estimated rates, and between emergency/scheduled and contract/ad-hoc work for Measured ones. Showing low, median, and high reflects that spread honestly rather than implying more precision than the figure can support.

FAQ

Common questions

What is the difference between an Estimated and a Measured rate?

An Estimated rate is modelled: public regional wage data for that trade and metro multiplied by a documented service multiplier. A Measured rate is computed from real jobs logged in Evalystar. Every page states which it is showing, and a page never mixes the two.

Why multiply wages by 2.5x to 3.0x?

Because a tradesperson's wage is not a contractor's billing rate. The gap covers payroll burden, insurance, vehicles and equipment, supervision, non-billable time, overhead, and margin. The 2.5x to 3.0x band is applied to the low and high ends of the local wage distribution respectively, which is why every page shows a range rather than a single number.

Which wage sources are used?

BLS OEWS data accessed via O*NET OnLine for US metros, and Job Bank Canada for Canadian cities. Both are public, and both are keyed to the specific occupation code for that trade rather than to a general construction average.

Why is there no sample size on these pages?

Because there is no sample. An Estimated figure is a model output, and attaching a sample size or a company count to it would present a model as a measurement. Sample counts appear only once a cell is Measured.

What is the k-anonymity threshold and why does it exist?

A cell is published as Measured only when it holds jobs from at least 5 companies, 3 vendors, and 10 jobs. Below that, a published benchmark could be used to reverse-engineer what a specific customer or vendor charges, which is not something a benchmark should let you do.

What moves a real rate away from these figures?

Scope, access constraints, response-time commitments, after-hours or weekend work, union versus open-shop agreements, and whether the work is under a standing contract or a one-off call-out. A city-level median cannot carry any of those, which is why these figures are a sanity check rather than a quote.