CostCandor

= published prices × your house

Price record

  • rebate program
  • the cohort
  • our band
  • verdict

The cleanest cost column we have opened, and it still cannot check a band

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

Stated installed cost on 3,633 Oregon heat pump rebates against our own band. Taking every payment, the middle half runs $5,217 to $6,928 with a median of $5,733. Dropping the blocks where one contractor billed an identical figure ten or more times leaves 1,423 rows and moves the same three numbers to $5,605, $6,408 and $8,746. Our ducted change-out band runs $5,300 to $10,000 with a typical of $8,100, so both program bars sit in its lower half and the choice between them shifts the median by $675 - which is why this is an observation rather than a test.
Three thousand invoices, and the answerdepends on which ones you countStated cost of purchase and installation on every rebate the Oregon Rental Home Heat Pump Program paid, against our own band for a ducted change-out.Program rows span the 25th to 75th percentiles of the invoiced total for purchase and installation, on every rebate paid August 2023 to June 2025.A block is one contractor billing one identical figure. The largest is 166 invoices at $8,330; dropping every block of ten or more leaves 1,423 rows.Our row is the heat-pump condenser plus the matched coil, times the disclosed markup, plus labor - every term after the condenser from ac-replacement.json at its 2026-07 stamp.The file states no capacity and no equipment type, so no row of it is known to be the job our band prices. The overlap is printed, not banked.Oregon Rental Home Heat Pump Program rebates paid August 2023 to June 2025, shown twice: as published, and with single-contractor flat-rate blocks removed. Our row is the ducted change-out band computed from ac-replacement.json (pricing as of 2026-07).

Run your own numbers in the HVAC system calculator →

Every permit record on this site has the same hole in it. A building permit carries a number somebody typed at application, and nobody checks it afterwards. So we went looking for the opposite kind of file: a rebate program that pays out against an invoice, where the money only moves if the cost is real.

Oregon has one, and it is as good as that description sounds. It is also, for our purposes, useless — and the reasons are worth more than the number would have been.

1. What this record is

The Oregon Department of Energy's Rental Home Heat Pump Program pays contractors to install heat pumps in rented dwellings and in owner-occupied manufactured homes and RVs on rented space. The department publishes every payment as cxtm-zxrj on data.oregon.gov, attributed to the Oregon Department of Energy and flagged official. Eleven columns, one row per rebate reservation, and among them a column named heat_pump_cost — the total cost of purchase and installation.

The dataset declares no license: the Socrata metadata carries no licenseId at all. We publish derived statistics and the queries behind them, reproduce no rows, and select no household-locating column — the file's city and zip_code fields are deliberately left out of the download below. Its rows were last touched 2025-10-29, and we retrieved it on 2026-08-11.

# population
curl -s 'https://data.oregon.gov/resource/cxtm-zxrj.json?$select=count(1)'
# => [{"count_1":"3633"}]

# the analysis columns. city and zip_code are not selected: this site
# publishes derived statistics, never rows that locate a household.
# The contractor is selected because it is a business receiving public
# money, and because section 3 is impossible without it.
curl -s -G 'https://data.oregon.gov/resource/cxtm-zxrj.csv' \
  --data-urlencode '$select=reservation_number,date_payment_issued,income_group,rebate_issued,grant_issued,heat_pump_cost,upgrade_cost,incentive_recipient_contractor' \
  --data-urlencode '$limit=50000' > orhhp.csv
# 3,634 lines including the header

2. What it measures — and what it quietly does not

Start with the good news, because it is real and it is rare. The stated cost is invoice-backed and it is the gross price. The program's own FAQ is explicit about the document it wants: "ODOE will need an itemized invoice of both the HVAC installation and any subcontracted work." And the file proves the invoice is doing work, because the rebate is computed from it. The incentive is the lesser of a dollar cap or a percentage — 60% of the total for a residential tenancy, 80% for a manufactured dwelling or RV on rented space. Run that rule against the two columns:

caps = {3000, 4000, 5000, 7000}     # the four category caps in the file
rebate == round(0.60 * heat_pump_cost, 2)   -> 1,390 rows  (38.3%)
rebate == round(0.80 * heat_pump_cost, 2)   ->   101 rows   (2.8%)
rebate in caps (percentage not binding)     -> 1,916 rows  (52.7%)
none of the above                           ->   226 rows   (6.2%)

Ninety-four percent of the rows are explained to the cent by the published rule applied to the published cost, and the capped rows check out too: on all 1,916 of them, the percentage really would have exceeded the cap that was paid. That settles two of the four things that have killed records on this site. This is not a modelled figure — nothing here was fitted, averaged or interpolated the way the Louisiana audit's median was. And it is not net of the rebate: if the cost column were what the landlord finally paid, the 60% relation could not hold.

Now the hole, and it is a large one. The file never says what was installed. There is no tonnage, no BTU rating, no efficiency, no ducted-or-ductless flag, and no count of machines. Our band prices a ducted change-out at a stated size; a single ductless head serving one room is a different product at a different price, and both are in here.

That absence is not a limitation of the program. It is a publishing choice, and the program's own FAQ says so twice over. The rebate amounts themselves vary by heat pump type, and the department writes that in the reservation "we ask whether the system will be serving a portion of the dwelling or the entire dwelling and ask to specify if only for a portion" — alongside a heating and cooling load calculation. The denominator was collected. It was not published.

The same agency's Energy Efficient Wildfire Rebuilding file shows what it would have looked like: that one carries a comp_hp_type column reading Ducted Heat Pump 70 times and Ductless Heat Pump 19 times. Eighty-nine rows with a type, against 3,633 without one.

Two smaller gaps. No row states how many dwellings it covers, and at least two rows plainly cover more than one: the largest stated cost in the file is $982,300 against a $4,000 rebate, the second largest $535,000 against $3,000. Ten rows sit at or above $20,000. And the payments run 2023-08-28 to 2025-06-17, so these are 2023–2025 prices against a band stamped 2026-07.

3. The cohort, and the thing we did not expect to find

There is no filtering to describe. Every row in the file is a paid heat pump rebate, and all 3,633 are used. The income groups are Non Income Restricted (2,206), Affordable Housing provider (802), and Low & Moderate Income (625). Eighty-four contractors appear; the ten busiest hold 82.1% of the rows.

That concentration is the first warning. The second is what happens when you count distinct amounts:

rows                                  3,633
distinct heat_pump_cost values          891
distinct (contractor, cost) pairs       999

Three and a half thousand invoices, nine hundred prices. And the repeats are not spread around — each one belongs to a single company:

Identical invoicesStated costContractor
166$8,330Mt. Hood Ductless
162$6,003The Heat Pump Store
129$5,549Total Comfort Weatherization
118$4,500Montgomery Heating & Air Conditioning
107$5,350Adaptive Heating and Cooling
90$5,414Total Comfort Weatherization

Grouping the file by contractor and amount puts 79.9% of rows in a block of two or more, 60.8% in a block of ten or more, and 33.8% in a block of fifty or more. These are program rates for a portfolio of dwellings, not independent negotiations. Of the 166 rows at $8,330, 133 are marked Affordable Housing provider; of the 162 at $6,003, 161 are.

Two consequences follow, and the second one is worse than the first.

The median of the file is itself a block price. The 50th percentile of all 3,633 rows is $5,733, and 68 rows carry exactly $5,733 — all of them The Heat Pump Store. Remove every block of ten or more and 1,423 rows remain, with the middle half at $5,605 to $8,746 and a median of $6,408. The same file, the same column, an $675 swing in the headline depending on a judgement call nobody would have to disclose.

And the price bunches where the subsidy changes shape. The 60% rate stops at a $3,000 cap, so the cap starts binding at a cost of exactly $5,000; the 80% rate stops at $4,000, which binds at exactly $5,000 too. Count the hundred-dollar bins across that line:

  [4,700  4,800)   54
  [4,800  4,900)   13
  [4,900  5,000)   64      <-- last bin before the cap binds
  [5,000  5,100)  271      <-- first bin after
  [5,100  5,200)  104
  [5,200  5,300)  181

  stated cost exactly $5,000.00: 185 rows, across 9 contractors

A four-fold step in one bin, and 185 invoices landing on a round number that happens to be the smallest price at which the full $3,000 is payable. One block sits just under the other threshold in the same way: 60% of $8,330 is $4,998, two dollars below the $5,000 cap that applies to low- and moderate-income tenancies. We are not alleging anything. We are saying that a price which moves when the subsidy rule moves is not measuring the same thing our band measures.

4. The distribution, and our band, on the same axis

Our band was fixed before any of this was downloaded, and it is arithmetic we can print. The heat-pump change-out band on our heat pump guide is a Goodman 3-ton heat-pump condenser at its observed $3,051 sale and $3,814 list price, plus the matched evaporator coil, times the disclosed 1.2 / 1.4 / 1.6 contractor markup, plus the condenser-plus-coil labor band — every term after the condenser read from ac-replacement.json at its 2026-07 stamp:

heat-pump change-out, 3 tons, existing air handler reused
  low      (3,051 + 900)   x 1.2 + 600   =  5,341   -> published  5,300
  typical  (3,814 + 1,200) x 1.4 + 1,035 =  8,055   -> published  8,100
  high     (3,814 + 1,500) x 1.6 + 1,500 = 10,002   -> published 10,000

# coil 900 / 1,200 / 1,500 and labor 600 / 1,035 / 1,500 are
# ac-replacement.json. The guide also publishes a full-split band of
# $7,500-$14,600 for homes that need a new air handler as well.
Oregon rebates, Aug 2023 – Jun 2025p25 / median / p75n
All rebates paid$5,217 / $5,733 / $6,9283,633
Blocks of ten or more identical invoices removed$5,605 / $6,408 / $8,7461,423
Our change-out band, same scope$5,300 / $8,100 / $10,000
Rows below our low27.2%987
Rows inside our band66.4%2,412
Rows above our high6.4%234

Two thirds inside is the kind of line a cost site would put in a headline. It is worth exactly nothing here, for a reason the numbers above make concrete: the answer moves with the cohort. Take all the rows and the median sits 29% below our typical. Take only the non-block rows and it sits 21% below. Neither cohort is more honest than the other, and we would be picking between them after seeing what each does to us. That is the same trap that ended our Pittsburgh painting record, where the denominator had to be chosen after the bids were open.

The deeper problem is that the comparison is not between like scopes at all. Our band prices a ducted change-out at 3 tons. One of the busiest contractors in this file is named Mt. Hood Ductless. Ductless single-head equipment starts well under a 3-ton condenser, so a file that mixes the two and labels neither will put its mass below our band whatever the market is doing — and there is no column that would let anyone separate them.

5. Verdict

Verdict

(C) Comparison rejected — the prices are real, most of them are not independent, and nothing in the file says what was installed.

This record is the mirror image of the four permit records that came before it. There the number was cheap talk and the scope was written out in full; here the number is backed by an itemized invoice and the scope is missing entirely. Both failures are fatal in the same way, and it took a rebate file to make that symmetry visible.

What we can say for the file: the 60% and 80% arithmetic closes on 41.1% of rows to the cent, and a published cap explains another 52.7%, so the cost column is a transaction amount rather than a model output. That is more than the Louisiana audit's headline could claim. What we cannot say is what any of those transactions bought. No capacity, no type, no unit count, no home size. Two rows state costs of $982,300 and $535,000 against rebates of $4,000 and $3,000, which is proof on its own that a row is not reliably one machine.

And even if the scope were known, three fifths of the rows are flat rates. One contractor billing $8,330 on 166 dwellings is one price, not 166 observations, and the file's own median turns out to be another company's flat rate repeated 68 times. A distribution assembled that way cannot be read as a market.

So the band stands where it stood, at the 2026-07 stamp on ac-replacement.json, which predates the 2026-08-11 retrieval above. The 66.4% overlap is printed as an observation and is not banked as a result.

6. If you are pricing a heat pump anywhere

The useful part of this file is not its prices. It is the shape of the paperwork a state agency demands before it will pay, which is a fair description of the paperwork you should demand before you pay:

  • An itemized invoice covering subcontracted work. ODOE will not release money without one. A single lump sum hides whether the electrical work, the pad, and the line set are inside the number or waiting to be added.
  • The type in writing — ducted or ductless — and how much of the house it serves. The state asks whether the system covers the whole dwelling or only a portion, because the answer changes what the price means. A ductless head in the living room and a ducted change-out are not competing bids for the same job.
  • The load calculation. The program requires one. If a contractor sizes your system by looking at the old one, you are buying whatever mistake the last installer made.
  • Never accept a price quoted net of an incentive you have not been awarded. Every dollar in this file is a gross price with the rebate applied afterwards, and that is the only order that lets you compare two bids.

Then price the job yourself: our HVAC system calculator handles the combined change-out line by line, the heat pump guide covers the equipment and the running-cost math, and the AC replacement calculator prices the cooling side alone.

Frequently asked questions

What does a heat pump cost in Oregon?

Across 3,633 rebates paid by the Oregon Rental Home Heat Pump Program between August 2023 and June 2025, the median stated cost of purchase and installation is $5,733, with the middle half between $5,217 and $6,928 and the 90th percentile at $8,707. Read that as what the program paid against, not as what a heat pump costs. The file never states the capacity, the type, or how many machines a row covers, and 60.8% of the rows sit in blocks where one contractor billed the identical figure ten or more times.

Is a state rebate file a better price source than a building permit?

On one axis, clearly yes. A permit valuation is declared at application by someone who is not being paid against it; this program requires an itemized invoice before it releases money, and the arithmetic proves the invoice is really there — the rebate equals exactly 60% of the stated cost on 1,390 rows and exactly 80% on another 101. On the other axis it is worse. Permits are filed one job at a time by thousands of unrelated filers, while a rebate file is a small roster of approved contractors billing a program, and this one collapses to 891 distinct prices.

Why does a flat rate make the prices unusable?

Because a median counts rows, not transactions. One contractor billed $8,330 on 166 rows of this file, another billed $6,003 on 162, a third billed $5,549 on 129. Those are program rates for a block of dwellings, not 457 independent negotiations, and they move the median of the whole file by more than the difference between our band's low and its typical. Strip every block of ten or more identical invoices and the median rises from $5,733 to $6,408 on the 1,423 rows that remain.

Did the comparison with your own band pass or fail?

Neither, and that is the finding. Our published heat-pump change-out band is $5,300 to $10,000 installed, and 66.4% of the Oregon rows land inside it. We are not banking that. A ductless single-head install and a ducted whole-house change-out are both in this file, our band prices only the second, and no column in the file tells the two apart — so the 66.4% is a number we could have moved by choosing a different cohort, which is not a test.

Sources

Outside record: Oregon Department of Energy, Oregon Rental Home Heat Pump Program (ORHHP), data.oregon.gov resource cxtm-zxrj, attributed to the Oregon Department of Energy, no license declared; rows last updated 2025-10-29, retrieved 2026-08-11 (3,633 rows). Program rules and the quoted sentences: Oregon Rental Home Heat Pump Program FAQs, updated July 15, 2024. Heat pump type comparison: data.oregon.gov resource gyr5-56zg, Energy Efficient Wildfire Rebuilding Incentive Program, Public Domain. Our band: data/ac-replacement.json at its 2026-07 stamp, with the Goodman 3-ton heat-pump condenser price published on our heat pump guide. Figures on this page are planning ranges, not quotes.

Cost math by CostCandor