CostCandor

= published prices × your house

Two cities move our panel band — and the bias runs the wrong way to explain it

Published 2026-08-07 · records retrieved 2026-08-07 · our band fixed as of 2026-08 · how we build these numbers

Run your own numbers in the electrical panel calculator →

Four price records preceded this one: three ended in comparison rejected, the fourth was not a band check at all. Not because the outside numbers disagreed with ours, but because public filings kept withholding the denominator, and a dollar figure with nothing to divide it by checks nothing.

Electrical permits break that pattern. Electricians write the amperage into the scope text — 100 amp to 200 amp — so the job identifies itself and one job can be set against one band. Two cities were opened rather than one, because a single expensive city proves nothing. They agree, and they disagree with us.

1. What these records are

Two agencies, two money columns. The first is the Seattle Department of Construction & Inspections electrical permit file, c4tj-daue, whose Socrata metadata carries licenseId: "PUBLIC_DOMAIN". Its money column is estprojectcost, defined in the column metadata as "the estimated project cost of the work being proposed is based on fair market value (parts plus labor)" and "subject to change if the project is modified". The second is the San Francisco Department of Building Inspection electrical permit file, ftty-kx6y, under the Open Data Commons Public Domain Dedication and License 1.0; its money column is permit_valuation.

Both were retrieved on 2026-08-07 and both are live. Seattle declares a daily refresh, its row timestamp read 2026-08-07T00:24:59Z, and the newest issue date inside the file was 2026-08-05. San Francisco's row timestamp read 2026-08-06T12:38:43Z, its own load stamp max(data_as_of) at 2026-08-06T05:03:19. Both queries below carry an upper date bound, so re-running them tomorrow returns the same n:

# Seattle — license, refresh cadence, row timestamp
curl -s 'https://data.seattle.gov/api/views/c4tj-daue.json' \
  | jq '{licenseId, rowsUpdatedAt,
         refresh: .metadata.custom_fields."Refresh Frequency"}'

# Seattle — the cohort. Address, coordinates and contractor name are
# deliberately not selected: this site publishes derived statistics and
# the queries behind them, never rows identifying a household.
curl -s -G 'https://data.seattle.gov/resource/c4tj-daue.csv' \
  --data-urlencode '$select=permitnum,issueddate,estprojectcost,description' \
  --data-urlencode "\$where=permitclass='Single Family/Duplex' \
      AND estprojectcost > 0 \
      AND issueddate > '2022-01-01' AND issueddate < '2026-08-06' \
      AND upper(description) like '%100%' \
      AND upper(description) like '%200%' \
      AND upper(description) like '%SERVICE%'" \
  --data-urlencode '$limit=5000' > seattle_panel.csv
# => 317 rows · 105 distinct amounts · p25 $5,000 / median $7,500 / p75 $14,000
# San Francisco — same idea, wider net, narrowed locally below
curl -s -G 'https://data.sfgov.org/resource/ftty-kx6y.csv' \
  --data-urlencode '$select=permit_number,filed_date,issued_date,permit_valuation,description' \
  --data-urlencode "\$where=issued_date >= '2022-01-01' \
      AND issued_date < '2026-08-06' \
      AND description like '%100%' AND description like '%200%'" \
  --data-urlencode '$limit=50000' > sf_panel.csv
# => 1,063 rows

2. What they measure, and what they quietly do not

The trap that ended the Los Angeles re-roof record was a rate table wearing a dollar sign, so both files were tested for one first. Seattle passed three ways. Its 6,000 parsed single-family and duplex filings carry 1,031 distinct amounts, the ten commonest accounting for 38.5% — $5,000 at 6.45%, $3,000 at 4.65%, $10,000 at 4.45%, round numbers rather than a clerk's rate. Divide by amperage on the 2,814 filings from 2023 onward and cost per amp yields 755 distinct ratios, coefficient of variation 0.83, running $15 at the 10th percentile to $100 at the 90th where a schedule would pin a few constants. And the 200A median climbs from $4,000 in 2018 to $8,000 in 2025 without reversing once. Tables do not drift like that, and our own data has the switchgear producer price index up 36.1% since January 2023.

San Francisco is tighter and we would rather say so. Its bundle-cleaned 200A subset of 1,079 filings carries 156 distinct amounts, the ten commonest holding 60.3% — concentrated, but on $5,000, $2,500, $4,000 and $3,000, which is rounding, not a rate applied to a quantity.

Now the damage. San Francisco stores permit_valuation as text, and inside the panel and service subset only 38,692 of 78,288 filings — 49% — carry an amount that is neither blank nor zero. Every zero was discarded, because nothing distinguishes a cheap job from an unfilled box — which plausibly cut the bottom of the distribution and lifted the median. San Francisco publishes no residential flag either, so commercial work is excluded by wording alone; Seattle's permitclass separates only Single Family/Duplex from Multifamily, so duplexes ride along. Where issued_date was blank the local pass fell back to filed_date, pulling some rows into an earlier year. San Francisco's stock is also old enough that an original 100A service is common, so the cohort is large there and the services in it are harder than a national mix.

Three limits apply to both. A permit prices everything permitted, so grounding, bonding or unnamed circuits can sit inside the amount; the exclusion list below removes named bundles, not unnamed ones. Both figures are declared at application, before the job is built. And only permitted work appears, which biases what remains upward.

3. The cohort, and what each filter costs

Seattle narrows in stages: 498,656 rows, 199,931 with a positive estprojectcost, 32,536 residential filings mentioning PANEL or SERVICE, then 6,000 single-family or duplex service and panel replacements with an amperage parsed out of the text, 5,106 of them (85%) naming 200A. Two branches run off that set. Dropping bundled scopes and everything before 2022 leaves 1,758, of which 1,514 are 200A; requiring the text to state the step explicitly instead leaves 105 since 2022, and 74 once bundles go. San Francisco runs the same ladder: 351,623 rows, 78,288 mentioning a panel or a service upgrade or change, 38,692 with a usable amount, 7,179 with a parsed amperage, 2,489 issued since 2022 between $200 and $60,000, 1,642 after bundles are dropped, and 272 stating the step explicitly.

# local narrowing, applied identically to both cities
step   = r'(?i)\b100\s*(?:a|amp|amps|amperes?)?\b.{0,20}?\bto\b.{0,20}?\b200\s*(?:a|amp|amps|amperes?)?\b'
drop   = r'(?i)adu|new construction|remodel|addition|solar|pv|ev charger|heat pump|'
         r'hvac|rewire|kitchen|bath|tenant improv|commercial'
# Seattle's run additionally capped description length at 130 characters
#
# The n=272 pass did not start from the wider San Francisco query above.
# It started from a full panel-and-service download —
#     $where=upper(description) like '%PANEL%'
#         OR upper(description) like '%SERVICE UPGRADE%'
#         OR upper(description) like '%SERVICE CHANGE%'
# — and then required, on top of step and drop, an amperage parsed out
# of the text and an amount between $200 and $60,000. Applying step and
# drop to the printed query instead gives n=448.

That n depends on the filter, and pretending otherwise would be the easiest lie here. Re-running San Francisco from the wider query above — the 1,063 filings since 2022 whose description contains both 100 and 200 — through the same regex and exclusion list returns 448 filings, median $5,000. The stricter pass above returns 272 and $4,500; the headline uses that lower one, and the looser filter reading higher matters given where this record points. One restraint follows: at 74 filings the Seattle tails are thin, so the percentiles below describe shape only. The medians and quartiles carry the argument.

What survives reads like this, with no address or amount attached: "electrical service upgrade. 100 amp to 200 amp.", "main service panel upgrade: overhead service, swing service, 100a to 200a, surface mount".

4. The distributions and our band on the same axis

Our data carries a per-state labor index — BLS state median electrician wages over the national median — applied to labor only, since equipment and permit fees vary less by state. Washington is 1.51, California 1.21, so each component is rebuilt as

adjusted = equipment + (labor × state index) + remainder

# 'remainder' is whatever each published band carries beyond its own
# equipment and labor lines. Our file does not itemise it, so it is
# left unscaled. Scaling it too would lift the Washington ceiling by
# $153 — it changes nothing below, and leaving it flat is the choice
# that makes the gap look wider, so it is stated rather than buried.

Seattle  low  250 + 800×1.51 + 250 = $1,708
         typ  350 + 1400×1.51 + 400 = $2,864
         high 600 + 2100×1.51 + 300 = $4,071
SF       low  250 + 800×1.21 + 250 = $1,468
         typ  350 + 1400×1.21 + 400 = $2,444
         high 600 + 2100×1.21 + 300 = $3,441

# the full stack adds the service-entrance lines our data itemises
# separately. They carry no labor/equipment split in the file, so the
# state index cannot be applied to them and they enter unadjusted.
#                                low /  typical /  high
  meter socket replacement        500 /   1,000 /  2,100
  mast & weatherhead             500 /     900 /  1,800
  utility coordination              0 /     200 /  1,000
  permit & inspection              75 /     250 /    400
  service-entrance cable        1,000 /   1,600 /  2,500   (NOT in the stack)

Seattle  full stack  2,783 /  5,214 /  9,371
SF       full stack  2,543 /  4,794 /  8,741
100A → 200A service upgradeSeattle (WA index 1.51)San Francisco (CA index 1.21)
Our core band, national, as published$1,300 / $2,150 / $3,000$1,300 / $2,150 / $3,000
Our core band, state-adjusted$1,708 / $2,864 / $4,071$1,468 / $2,444 / $3,441
Core plus service-entrance adders, state-adjusted$2,783 / $5,214 / $9,371$2,543 / $4,794 / $8,741
Same stack, typical, with service-entrance cable added$6,814$6,394
Observed p10 / median / p90 — tails indicative only$2,130 / $6,000 / $12,350$2,000 / $4,500 / $10,000
Observed p25 / p75$4,000 / $8,000$3,000 / $6,550
Filings behind those figuresn = 74n = 272
Same job, looser filtermedian $7,500 (n = 317)median $5,000 (n = 448)
Full stack typical vs observed median13% below6.5% above
Like-for-like swap, our national band$800 / $1,300 / $1,800
Like-for-like swap, WA-adjusted (index on labor only)$1,055 / $1,759 / $2,463not tested
Like-for-like, Seattle observed p10 / median / p90$2,520 / $5,000 / $9,920 (n = 73)not tested

Two things fall out. The state-adjusted ceiling of the core band — $4,071 in Seattle, $3,441 in San Francisco — sits below the observed median in each city, $6,000 and $4,500. And the full stack — core plus the four adder lines above — holds the median and both quartiles in each city, though its range sits inside the observed spread, not around it.

That stack is not the whole menu, and the omission runs against us. Our data publishes a fifth service-entrance line — the service-entrance cable — left out above because no description field in either city says whether the conductors were pulled. Include it and the typical stack becomes $6,814 in Seattle and $6,394 in San Francisco, now above both observed medians. The adders are a menu, not a total, and which of them applied is the thing a permit description does not record.

5. Verdict

Verdict

(B) Band moved — the core 100A-to-200A band is too low to stand alone as the headline figure, in both cities, after correction.

The two defences that would dissolve the gap entirely both fail. The first is that these are expensive cities. Our state index exists to absorb exactly that, and after applying it the top of the core band still sits below the middle of each city's distribution. The second is that declared amounts are unreliable. They are — but a figure filed with a permit has, in general, a standing reason to run low, never high. In Los Angeles that confound was fatal, because the observations sat below our band, where a band that is too high and filings that are too light look identical. Here they sit above, so the confound is signed: whatever downward pull exists, the true gap is at least the measured one.

What it cannot do is set the new number. Two western high-cost cities with old housing stock, 74 and 272 filings, permitted work only, and a San Francisco money column that discards half its own rows in a way that plausibly trimmed the cheap tail. Moving a national band on that would repeat, in our favor, the sloppiness this section exists to catch. The finding is directional and structural: the core band describes a panel and a main breaker — as the worksheet note in our own data has always said — while a permit prices the job a household buys. Read as the price of the work, the core figure understates it roughly twofold in both cities. The like-for-like replacement band is flagged harder still: state-adjusted, its ceiling reaches $2,463 against a $5,000 median on the 73 Seattle filings that say like-for-like or same amperage — but that is one city with no cross-check, so it is recorded and not moved here.

Printed above is the band as it stood: our electrical pricing data is stamped 2026-07, these records were retrieved 2026-08-07. Nothing here is edited afterwards; any change to the data is dated below as its own entry.

6. If you are getting panel quotes in Seattle or San Francisco

Make your bids describe the job the permit will describe. Ask each bidder to state the amperage step in writing — existing service, proposed service — because that line makes two quotes comparable and ends up in the permit. Then ask, by name, who supplies the meter socket, whether the mast and weatherhead are being replaced, whether the service-entrance conductors are being pulled, whether the utility needs a scheduled disconnect and who pays for it, and whether permit and inspection fees are inside the number. Those are the lines that separate a panel swap from a service upgrade. If a bid sits near a bare panel-and-breaker price, it is probably quoting a bare panel and breaker.

Frequently asked questions

Does a 100-amp to 200-amp service upgrade really cost around $6,000?

In Seattle that is the median declared cost on permits whose description explicitly says 100 amp to 200 amp, filed since 2022 with bundled scopes removed — 74 filings, quartiles $4,000 and $8,000. San Francisco's median on the same filter is $4,500 across 272 filings, quartiles $3,000 and $6,550. Those are two expensive West Coast cities and the figures are applicant-declared, so neither is a national price. What they are good enough to show is that our published core band of $1,300–$2,150–$3,000 does not describe the job either city is permitting, even after the state labor index is applied.

Why doesn't the state index already account for Seattle and San Francisco being expensive?

It is supposed to, and it is the first thing we tried. Our data carries a per-state labor index built from BLS state median electrician wages — Washington 1.51, California 1.21 — applied to the labor component only, because equipment and permit fees vary less by state. Applied to the 100A-to-200A core band it lifts the top of the range to $4,071 in Washington and $3,441 in California. Both of those still sit below the observed median in the matching city, $6,000 and $4,500. A correction designed to absorb the expensive-market explanation absorbed it and the gap survived.

Can a permit valuation be trusted as a price?

Not automatically, and we rejected a Los Angeles re-roof file for exactly that reason — most of its figures turned out to be a rate applied from a table. So both files were tested before use. Seattle's 6,000 parsed filings carry 1,031 distinct amounts with the ten commonest holding 38.5% of them, the commonest being $5,000, $3,000 and $10,000, which is what human rounding looks like rather than a schedule. Cost per amp across 2,814 filings spreads from $15 at the 10th percentile to $100 at the 90th, a 6.7-fold range with a coefficient of variation of 0.83. And the 200A median climbs from $4,000 in 2018 to $8,000 in 2025 without reversing once. A fee table does none of those three things.

Are you changing the calculator because of this?

The verdict is band moved, but this record does not get to set the new number. Two high-cost western cities, 74 and 272 filings, permitted work only, and San Francisco discards half its own money column — that is enough to establish a direction and not enough to fix a national figure. What it does pin down is which band is wrong in kind: our core band covers the panel and main breaker, as the worksheet note in our own data has always said, while a permit prices the whole job. Stack the service-entrance adders our data already publishes and the range holds the median and both quartiles in each city, though which of those adders applied is the one thing a permit description does not record. The page you are reading prints the band as it stood when the records were pulled; any change to the data is dated separately below it.

Cost math by CostCandor