Unit rates derived from actual QB job-cost data across 6 completed or near-complete properties.
Easy WOs have a single reliable rate; Hard WOs require scope assessment before pricing.
Confidence reflects rate stability across the portfolio — high = tight spread, medium = wider variance.
Easy WOs scale predictably from a single property measurement. Multiply rate × driver variable,
then apply any listed modifier. All rates are materials + labor combined from QB actuals.
Computed Rates — Ready to Use
| WO |
Name |
Rate |
Formula Notes |
Conf |
n |
| P1W06 |
Framing |
$21.23/sqft above-grade |
× stories_multiplier + $3K misc |
high |
6 |
| P1W07 |
Roofing |
$4.39/sqft footprint |
× pitch × material |
high |
4 |
| P1W10 |
Siding |
$11.77/sqft above-grade |
× siding_type |
high |
5 |
| P1W11 |
Gutters |
$1.36/sqft footprint proxy |
Add flat per leader |
high |
6 |
| P2W02 |
Plumbing |
$13,748/bath equiv |
(full + half×0.5 + kitchen×0.75) |
medium |
2 |
| P2W03 |
HVAC |
$6.14/sqft conditioned |
× scope × system_type |
high |
6 |
| P2W04 |
Electrical |
$8.68/sqft above-grade |
Most reliable rate in dataset |
high |
6 |
| P2W07 |
Insulation |
$2.24/sqft above-grade |
× insulation_type |
high |
6 |
| P2W08 |
Drywall |
$7.29/sqft above-grade |
× scope (patch/partial/full) |
high |
6 |
| P3W08 |
Painting |
$0.58/sqft above-grade ⚠ |
Understated — $134k untagged to this WO |
high |
6 |
Painting note: The $0.58/sqft rate is materially understated. Approximately $134,000 in
painting spend is untagged or misclassified in QB. Use a corrected rate until the cost library is reconciled.
Rate Pending — Measurement Variable Missing
| WO |
Name |
Status |
What's Needed |
| P1W08 |
Windows & Doors |
Rate Pending |
window_count not in measurements dataset |
| P3W02 |
Tile |
Rate Pending |
sqft_tile not in measurements dataset |
| P3W03 |
Flooring |
Rate Pending |
sqft_hardwood not in measurements dataset |
| P3W04 |
Cabinetry |
Rate Pending |
lnft_cabinets not in measurements dataset |
| P2W12 |
Driveway |
Rate Pending |
sqft_driveway not in measurements dataset |
Hard WOs show wide cost variance across properties — a single unit rate is not reliable.
Use the observed range as a sanity check and apply the listed approach (scope multiplier,
component-level breakdown, or bid required) to size each deal individually.
| WO |
Name |
Observed Range |
Approach |
n |
| P1W03 |
Demolition |
$480 – $27,604 |
Scope multiplier (0.3 / 0.7 / 1.0) |
5/6 |
| P1W04 |
Site Work |
$635 – $24,167 |
Scope multiplier; component-level for large sites |
6/6 |
| P1W05 |
Foundation |
$1,233 – $79,704 |
Engineer-driven; scope multiplier until structural report |
5/6 |
| P2W06 |
Fireplaces |
$180 – $7,984 |
Optional scope; confirm fireplace count first |
5/6 |
| P2W09 |
Ext Carpentry |
$11,664 – $43,141 |
Scope multiplier |
6/6 |
| P2W09b |
Ext Masonry |
$14,734 (1 property) |
Bid required — present on 1/6 properties only |
1/6 |
| P2W10 |
Landscape |
$6,233 – $21,060 |
Scope multiplier (1.0 / 2.0 / 3.5×) |
6/6 |
| P2W11 |
Fencing |
$934 – $12,435 |
Optional scope; confirm perimeter and fence type first |
5/6 |
| P3W07 |
Basic Trim |
$18,844 – $40,863 |
Range allowance; most predictable of Hard WOs |
6/6 |
| P3W07a–j |
Specialty Trim |
Bid required |
Estimate per sub-WO from architectural plans |
— |
Source & Refresh
Refresh: python3 workspaces/cost-library/scripts/analyze_wo_spend.py && compute_rates.py
Derived rates: workspaces/cost-library/_outputs/derived_rates.yaml
Full notes: reference/cost-codes/rate-cards.md