What you'll see

The thermostat is set to heat, the system's running, and the air feels cool or only lukewarm. Two things to settle immediately: a heat pump in heating normally delivers lukewarm air (low-to-mid 90s°F), not the blast of a gas furnace — so a homeowner used to gas often reports "cold air" when it's actually working. But genuinely cold air (near or below room temp) in heat mode is a real fault, usually the reversing valve, the O/B logic, or the system being stuck in defrost or just plain low on heat output.

Confirm the equipment is a heat pump first, and confirm whether the air is "not hot enough" or "actually cold." Those are different calls.

Walk it in order

  1. Measure the supply air temperature. Don't trust hands. A heat pump in heat typically gives a supply temp in the upper 80s to mid 90s°F with a ~20–30°F rise over return at moderate outdoor temps. If supply is near room temp or below return, the system is effectively running in cooling or doing nothing useful — that's the reversing-valve/logic branch. If it's a real 90°F+ but the customer expected furnace heat, that may just be normal heat-pump behavior to explain.
  1. Is it in defrost? Watch the outdoor unit. During defrost the outdoor fan stops, the unit may steam, and indoors the system runs in cooling mode with aux heat (ideally) covering the cold blow. If you caught it mid-defrost, wait it out — a few minutes is normal. A unit stuck in defrost or defrosting constantly is a separate problem (see the iced-coil/defrost article).
  1. Check the reversing valve and O/B. In heat mode the reversing valve must be in the heating position. Confirm the thermostat's O/B setting matches the equipment (some energize O for cooling, some energize B for heating — get it right for the brand). Then confirm the valve actually shifted: feel the line temperatures across the valve, or listen for the shift. A valve that's stuck in the cooling position, or a solenoid that isn't getting (or is wrongly getting) the O/B signal, makes the heat pump pump heat outdoors while blowing cold air inside.
  1. Verify the O/B signal electrically. Meter the O/B terminal against C in heat mode. If the stat is configured for "O energized in cooling," then in heat mode O should be de-energized — and if it's stuck energized (miswired stat, bad stat), the valve stays in cooling and you blow cold. Wrong O/B logic is a classic cold-in-heat cause after a thermostat swap.
  1. Check auxiliary/emergency heat. On a cold day the heat pump alone may not keep up, and aux heat (electric strips or a furnace in dual-fuel) is supposed to supplement. If aux never energizes (bad sequencer/relay, blown strip, miswired W/aux), the air feels cool on cold days even though the heat pump is fine. Force emergency heat at the stat and confirm the aux source fires.
  1. If the valve and aux are right but heat is weak → put gauges on and evaluate the charge in heat mode (it's different from cooling — typically charge by subcooling/manufacturer's heat-mode method, accounting for low outdoor ambient). Low charge, a restriction, a dirty/iced outdoor coil acting as the evaporator, or low outdoor airflow all cut heat output.

What "normal" looks like

  • Supply air in heat: roughly upper-80s to mid-90s°F, ~20–30°F rise over return at moderate outdoor temps — not furnace-hot.
  • Reversing valve: shifted to heating; lines on the valve read consistent with heating (hot gas to the indoor coil).
  • O/B logic: matches equipment brand; correct energize state for the current mode.
  • Defrost: periodic, outdoor fan off, ends in a few minutes, aux covers the indoor cold blow.
  • Aux/emergency heat: energizes on demand and on second-stage/aux call; emergency mode runs aux alone.

Common faults & what they mean

  • Customer expectation (lukewarm = normal): real 90°F supply air, no fault. Explain heat-pump behavior; check balance point and aux staging.
  • Reversing valve stuck in cooling / wrong O/B: genuinely cold air in heat. Confirm O/B logic and that the valve physically shifted.
  • Miswired or failed thermostat after a swap: O energized in the wrong mode keeps the valve in cooling. Very common after a DIY stat change.
  • Stuck/constant defrost: repeated cold blows. Defrost sensor/board or airflow problem at the outdoor coil.
  • Aux heat not working: cool air on cold days. Bad sequencer/relay, open strip, miswired W. Force emergency heat to test.
  • Low charge / restriction / iced outdoor coil: weak lukewarm heat, poor capacity. Charge and read in heat mode.

Tech tips & gotchas

  • Measure supply temp before you diagnose. "Cold air" from a homeowner used to gas heat is often a normal 92°F. The thermometer ends the argument.
  • Most cold-in-heat calls after a thermostat change are O/B logic. Confirm the stat's heat-pump O/B setting matches the brand before you touch the valve.
  • Don't condemn a reversing valve mid-defrost. During defrost it's supposed to be in cooling. Confirm the unit isn't simply in a normal defrost cycle.
  • A reversing valve rarely "fails closed" mechanically — it's usually the solenoid or signal. Check for 24V at the solenoid and the line-temperature shift before replacing the valve body.
  • Aux heat masks heat-pump problems. If emergency heat keeps the house warm but normal heat is weak, the heat-pump side (charge, valve, outdoor coil) is where the real fault lives.
  • Charge a heat pump in heat mode by the heat-mode method. Cooling-mode superheat targets don't apply; low ambient changes everything.

Safety / code notes

  • De-energize before servicing; bleed capacitors before handling outdoor electrical.
  • Recover and handle refrigerant per EPA 608 (40 CFR Part 82, Subpart F) if you open the sealed system.
  • On dual-fuel systems, confirm the changeover logic so the furnace and heat pump don't fight — and verify combustion/CO on the gas side after any work.