DuctCleaning.ws

Independent guide · we don’t clean ducts

How the Duct Cleaning Cost Calculator Works

Direct answer

The calculator averages two published pricing methods — per vent and per square foot — adds a flat $150 to $350 for each heating and cooling system beyond the first, then applies one combined job-difficulty adjustment built by adding the stories, access, duct construction and contamination percentages together and capping the total at +60%. It floors the result at a $200 minimum and reports the point 45% of the way up the band as “typical.” The rates are sourced. The difficulty percentages and the flat system figure are our editorial assumptions.

What we changed on 15 August 2026, and why

This page previously described a different model. We are leaving that on the record rather than quietly restating the arithmetic, because a methodology page that edits its own history is worth nothing.

Change one: additional heating and cooling systems no longer multiply the estimate. The old model used ×1.70 for a second system and added 0.60 for each system after that. That was double-counting. The calculator asks for every supply and return vent in the house, so the size of the ductwork job is already fully counted before system count is considered. Multiplying by system count on top of that charges the reader twice for the same square footage. What a second system genuinely adds is a second set of equipment — another air handler, blower and evaporator coil to clean — plus the setup that goes with it. That is a flat cost, so it is now modeled as one: +$150 to the low and +$350 to the high, per additional system, applied before the difficulty adjustment.

Change two: the four job-difficulty factors are added rather than multiplied, and the total is capped. Stories, duct accessibility, duct construction and contamination all describe the same underlying thing — how awkward this particular job is. Multiplying them compounded into totals no published source supports. The calculator now computes 1 + (stories − 1) + (access − 1) + (duct type − 1) + (contamination − 1) and clamps the result to a minimum of 0.90 and a maximum of 1.60. The individual percentages are unchanged, and remain editorial assumptions.

Change three: a new warning when the estimate lands above the published band. Described in step 7 below.

What this did to the numbers: the large two-system example on the calculator page moved from $1,310 / $2,050 / $2,960 to $950 / $1,500 / $2,170. The old typical sat above the two-system band of roughly $900 to $2,000 implied by the U.S. Environmental Protection Agency (EPA); the new one sits inside it. Nothing else changed — the per-vent rates, the per-square-foot rates, the averaging of the two methods, the $200 floor, the add-ons, the 45% typical point and the $10 rounding are all as they were.

Everything below describes the model as it now stands.

What went in, and what did not

The calculator is built from the published consumer pricing record for residential duct cleaning in the United States, as it stood in August 2026. We fetched each source directly rather than relying on secondary summaries.

What went in: per-vent rates, per-square-foot rates, hourly labor rates as a sanity check, published multi-system tiers, the one published minimum service charge, the sanitizing add-on range, and the bundled dryer vent range. Also the factor lists published by EPA and the National Air Duct Cleaners Association (NADCA), which determined which questions the tool asks even where they do not determine the answers.

What did not go in:

  • Any figure we could not trace to a live source page. No remembered numbers, no aggregated averages of averages.
  • Stale sources. Thumbtack’s cost page is dated August 1, 2017 and Inch Calculator’s August 2023. Bob Vila’s November 2023 figures are an older vintage of the Angi series, so including them would have double-counted one dataset.
  • Contractor advertising. Individual company price lists are marketing, not market data.
  • Mold figures. Explained below.
  • Regional data. We have not researched it and did not model it.
  • Commercial duct cleaning. The model is residential only.

The source-lineage problem, and how we handled it

The obvious way to build a cost model is to gather every published figure and average them. That would have produced a badly biased result here, for a reason worth explaining in detail.

Fifteen publications carry duct cleaning price data. They reduce to about three independent origins. Editorial assessment

How the published price record collapses when you trace attribution
LineageOriginCarried byWeight we gave it
A Angi / HomeAdvisor homeowner project data ($389 average, $271–$509 typical) Five publications. NerdWallet attributes explicitly to Angi; Bob Vila cites Angi and HomeAdvisor; Today’s Homeowner’s $388 is the same series; Angi owns HomeAdvisor. Counted once. Used to sense-check the low-to-middle part of the output band, not as a calculator input.
B EPA’s $450–$1,000 per heating and cooling system Eight publications counting EPA itself, including NADCA, This Old House, HomeGuide, Modernize, Inch Calculator and HVAC.com, and matched by Forbes. Counted once. Used to sense-check the upper part of the band. Not used as a rate.
C Fixr ($300–$700) and Housecall Pro ($400–$1,000, contractor-side) Two publications, genuinely independent of each other and of A and B. Highest confidence per source. The gap between Housecall Pro’s single-home range and its multi-system tiers is what we infer the flat per-system addition from; Fixr corroborates the return-vent premium.

Three consequences shaped the model.

First, we count sources by lineage, not by URL. Seeing $450–$1,000 on eight sites is one fact repeated eight times, and we weight it as one fact.

Second, we do not average lineage A against lineage B. Their gap is definitional rather than empirical: A reports what homeowners actually paid on mostly single-system jobs, while B quotes a full-scope per-system cleaning that includes the air handler, blower and coil. Averaging them would produce a number describing no real job.

Third, we build from rates rather than from totals. The per-vent and per-square-foot rates are the only figures with genuine multi-lineage support, so they are the only figures the calculator actually multiplies. Every published total is used as a check on the output, never as an input.

One trap we avoided

The widely reproduced vent-count table — 8 vents $200–$400, 12 vents $300–$600, 16 vents $400–$800, 20 vents $500–$1,000 — is not four data points. It is the vent count multiplied by $25 and $50. Published square-footage tables are the same trick with a different rate. We treated all of them as arithmetic rather than as corroborating evidence, and built the calculator from the underlying rates instead.

The model, variable by variable

Step 1 — two base estimates

The calculator computes two independent estimates and averages them.

Base rates and their evidence
RateValueBasis
Per supply vent$25 – $50Sourced. Seven publications across multiple lineages. The best-supported number in the corpus. Typical range
Per return vent$40 – $75Sourced, thinly. This Old House and Fixr only. Two sources, but from different lineages, which is why we trust the direction. Single source
Per square foot$0.15 – $0.40Sourced. $0.15–$0.30 is near-universal; $0.40 is the documented top end for large or difficult residential jobs. Typical range

The vent estimate is (supply count × supply rate) + (return count × return rate). The square-foot estimate is home size × the square-foot rate. Lows are computed against lows and highs against highs. The two lows are then averaged, and the two highs are averaged.

Why average rather than choose? We have no evidence that either method is more accurate. They are both conventions, not measurements, and they disagree — for a 1,800 square foot home with 10 supplies and 2 returns, the vent method gives $330–$650 and the square-foot method gives $270–$720. Averaging is the honest response to not knowing which is right. It also has a useful side effect: it damps the failure mode of each method. Per-vent pricing goes badly wrong in a house with many tiny rooms; per-square-foot pricing goes badly wrong in an open-plan house with few vents.

If you enter zero vents, the calculator falls back to the square-foot method alone rather than guessing a vent count.

Step 2 — a flat addition for each system beyond the first

What extra heating and cooling systems add, and on what basis
VariableEffectStatus
1 systemNo additionBaseline
Each additional system+$150 to the low, +$350 to the high (flat, not a multiplier)Editorial assumption, inferred from the gap between Housecall Pro’s single-home range and its multi-system tiers. No source publishes this figure. Editorial estimate

This addition happens before the difficulty adjustment, so a hard job scales the equipment allowance along with everything else. Two systems add $150–$350 once; three systems add it twice, for $300–$700.

Step 3 — one combined job-difficulty adjustment, added and capped

The four job-difficulty factors, their exact values, and how they are combined
VariableFactorStatus
1 story1.00Baseline
2 stories1.10 (+10%)Editorial assumption. Smaller than the only published figure, deliberately. Editorial estimate
3+ stories1.15 (+15%)Editorial assumption.
Easy access0.95 (−5%)Editorial assumption. No published figure exists.
Typical access1.00Baseline
Difficult access1.20 (+20%)Editorial assumption. Four sources agree on direction; none publishes a number.
Rigid sheet metal duct1.00Baseline
Mixed duct construction1.05 (+5%)Editorial assumption.
Duct construction unknown1.03 (+3%)Editorial assumption. A small hedge, since “unknown” skews toward newer flexible duct in practice.
Flexible or fiberglass-lined duct1.10 (+10%)Editorial assumption. No published differential exists at all.
Light contamination1.00Baseline
Moderate contamination1.15 (+15%)Editorial assumption.
Heavy contamination1.35 (+35%)Editorial assumption.
How the four combineAdded, then clamped to 0.90–1.60Editorial method. The cap is a judgment, not a measurement. Editorial estimate

The exact arithmetic is:

difficulty = 1 + (stories − 1) + (access − 1) + (duct type − 1) + (contamination − 1), then clamped to a minimum of 0.90 and a maximum of 1.60. Both the low and the high figure are multiplied by the result.

So the 1,800 square foot two-story home with flexible duct and moderate soiling used in our worked examples gets 1 + 0.10 + 0 + 0.10 + 0.15 = 1.35, not the 1.10 × 1.10 × 1.15 = 1.3915 the old model produced. At the extreme the difference is much larger: every input at its worst asks for +80%, and the cap holds it at +60%.

Why add rather than multiply. Multiplication is the right operation for effects that are independent of one another. These four are not independent — they are four readings of one quantity, which is how awkward this specific job is. A house with difficult access, flexible duct and heavy soiling is one hard job, not three separate surcharges stacking on top of each other. Multiplied, the four factors at their worst reached ×2.05 on their own — four assumptions with no dollar basis doubling the estimate between them, before the old system multiplier was even applied. Nothing in the published record supports that. Added and capped, the same four say the job might cost 60% more, which is at least arguable.

Why cap it at all, and why at +60%. Even added, four assumptions with no dollar basis can accumulate to a number we cannot defend. The cap is a deliberate limit on how far our own guesswork is allowed to travel. We chose +60% because a genuinely awkward job plausibly costs something like half again as much as a straightforward one, and because past that point our unsourced percentages would be doing more work than the sourced rates underneath them. There is no calculation behind the number. We want to be plain about this: the cap is a judgment call, not a measurement, and a different editor could justify +50% or +75%. When the cap binds, the calculator tells the reader it has bound rather than presenting the capped figure as a calculation.

Read both tables above with one thing in mind: every row that moves the number, other than the base rates, is our judgment rather than anyone’s data. We are not aware of another duct cleaning calculator that says so.

Step 4 — the minimum

If the low figure falls below $200, it is raised to $200. If the high figure would then be below the low, it is set to 1.4× the low.

Step 5 — add-ons

Add-ons, applied after the difficulty adjustment and after the minimum
Add-onAmount addedBasis
Duct sanitizing+$75 to +$250Sourced across three publications with overlapping ranges: Forbes $75–$150, Bob Vila $100–$250, Housecall Pro $75–$200. We publish the union. Typical range
Dryer vent, same visit+$40 to +$100Sourced. Bundled pricing. Standalone dryer vent cleaning runs roughly $100–$200, which the tool states. Typical range
Suspected mold+$0Deliberate refusal. See below.

Add-ons are flat additions rather than multiplied, because nothing in the published record suggests a sanitizing charge scales with house size. The same reasoning is why extra systems are handled as a flat figure in step 2.

The sanitizing checkbox triggers a warning as well as a price. EPA registers a small number of products specifically for use inside bare sheet metal ducts and none for fiberglass duct board or fiberglass-lined ducts, and applying a general-purpose disinfectant inside an HVAC system whose label does not authorize HVAC use is a use inconsistent with labeling under federal pesticide law. We think a calculator that prices that add-on without saying so is doing the reader a disservice.

Step 6 — the typical figure

Typical = low + 0.45 × (high − low). The result and both endpoints are rounded to the nearest $10.

The 0.45 is a choice and we should defend it. A midpoint (0.50) would imply the true distribution is symmetric. We do not think it is: cost ranges of this kind are bounded below by minimum charges and unbounded above by conditions nobody predicted, which skews the tail upward and pulls the mode below the midpoint. Sitting slightly below center reflects that. It is a small, arbitrary adjustment, and we would not defend 0.45 over 0.42 or 0.47. What we would defend is that it should not be above 0.50.

Step 7 — the sanity check against the only published per-system band

After everything else, the calculator compares the typical figure against $1,000 multiplied by the number of systems entered. If the typical figure is higher, the tool displays a caution above its explanation.

The threshold is the top of EPA’s $450–$1,000 per heating and cooling system Single source — the only per-system range anyone publishes, and a figure that has been unchanged since at least January 2021. The warning tells the reader that the estimate has gone past that band, that it should be read as a rough ceiling rather than an expectation, that itemized written quotes matter more than a calculator at that level, and that a much lower quote is not necessarily wrong because it may simply cover less of the system.

This is not an error message. It fires on exactly the inputs it is supposed to fire on: a large, hard, heavily soiled job where our own assumptions are doing most of the work. A single-system 3,000 square foot home with 18 supplies, 4 returns, two stories, difficult access, flexible duct and heavy contamination returns $850 / $1,330 / $1,920 Example calculation, and the $1,330 typical trips the warning. The point of it is to stop the model’s least defensible output from being read as its most authoritative.

Why additional systems are a flat addition and not a multiplier

Duct cleaning is quoted per heating and cooling system, so the natural move for a calculator is to multiply by system count. We did that until 15 August 2026, at ×1.70 for a second system. It was wrong, and the reason is worth setting out properly, because it is the same mistake most published cost content makes.

The double-counting. This calculator asks for every supply and every return vent in the house. That is not a sample. It is the whole ductwork job, already measured, in the unit the industry actually prices in. A house with two systems and 18 supplies has 18 supplies in total, not 18 per system. Multiplying that total by 1.70 for the second system does not price a second system — it prices a second house. The reader who took the trouble to walk every room and count accurately was penalized hardest for it, which is the exact opposite of what a careful input should do.

What a second system genuinely adds. Not more ductwork; the vent count already has that. It adds a second set of equipment to clean — another air handler, another blower, another evaporator coil — and a second setup: repositioning the negative-air machine, cutting or opening a second access point, running the process again at a different location in the house. That is real work, and it is roughly the same amount of work whether the house is 1,800 or 3,000 square feet. Costs that do not scale with house size should be flat additions, exactly like the sanitizing and dryer vent add-ons.

Where the $150 to $350 comes from. Housecall Pro publishes contractor-side tiers: two systems $650–$1,000, three or more $1,000–$1,500 or more, against a single-home range of $400–$1,000 Single source. Read as differences rather than as ratios, the step from one system to two is roughly $150 at the bottom and a few hundred at the top. We take $150 low and $350 high. That is an editorial assumption derived from one source’s tier gaps, not a published figure, and it is the weakest quantitative claim in the model. We would replace it immediately with a sourced number if one existed.

The addition is applied before the difficulty adjustment, so a genuinely awkward job scales the equipment allowance too. A second air handler in a tight attic is harder to reach than a second air handler in an open basement, and the model should say so.

One practical consequence for readers: system count now moves your estimate less than it used to, and less than a contractor’s quote may move. That is deliberate. If your house has three systems and 40 vents, the 40 vents are where the money is.

Why our story factor is smaller than the published one

Today’s Homeowner is the only source that tables a story effect, showing ranch homes at $300–$450 against two-story homes at $450–$650. That implies roughly ×1.4 to ×1.5. Single source

We use ×1.10, and the reason is double-counting.

Two-story homes are, on average, larger than ranch homes and have more vents. The published comparison bundles three effects into one number: more square footage, more vents, and the genuine difficulty of working across floors. Our calculator has already asked for square footage and vent counts, so the first two effects are in the estimate before any story factor is applied. Applying ×1.4 on top would count home size twice, and would systematically inflate estimates for the exact reader who took the trouble to count their vents accurately.

What is left after removing the size effect is the incremental difficulty: longer vertical runs, more repositioning of equipment, sometimes an attic air handler. We judge that worth about 10%. That judgment has no source behind it, which is why the tool’s own explanation of your estimate says so in plain language rather than in a footnote.

This is a general principle in the model: where a published figure is confounded with a variable we already capture, we reduce it rather than adopt it — and where it is entirely confounded, we remove it. The story factor is the first case. System count, until August 2026, was the second: we eventually concluded there was nothing left to multiply once the vents had been counted, and replaced the multiplier with a flat equipment allowance. We would rather be transparently conservative than spuriously precise.

Why we floor the estimate at $200

Forbes Home is the only publication we found that states a minimum service charge, at $200 Single source. Stanley Steemer confirms that minimums exist without publishing a figure.

We use it anyway, for a reason that has nothing to do with the strength of the source. Without a floor, the per-square-foot method produces absurd outputs at the small end: a 700 square foot condo at $0.15 per square foot returns $105. No contractor will dispatch a truck and two technicians for $105. Published cost tables that show $140–$250 for a 1,000 square foot home are reporting arithmetic, not offers.

So the floor exists to stop the model from producing numbers that cannot be bought, and $200 is the only published figure available to set it with.

What that means for you: treat a floored result as “this is a small job that will be priced at whatever this company’s call-out minimum happens to be,” which may be $150 or $250 or $300 depending on the market. When the calculator floors your estimate, it says so in the explanation, precisely so you know the low figure came from a rule rather than from your inputs.

Why we refuse to price mold

Eight publications attach a “mold” price to duct cleaning. Their figures range from $500 to $10,000 — a twentyfold spread. Editorial assessment Ranges that wide are not measurements. They are placeholders for a question nobody has answered.

They are also, on inspection, figures for whole-house mold remediation: a different trade, with containment, different equipment, and a scope determined by the extent of contamination rather than by the duct system. They are not an add-on line item on a duct cleaning invoice.

We could have averaged them and produced a tidy “+$2,400 if mold is suspected.” That number would look authoritative and would be meaningless. Worse, it would be actively harmful: it would anchor a reader on a figure before anyone has established that mold is present, which is the exact sequence NADCA’s own scam guidance warns about — being told mold is present without a proper inspection.

So the calculator adds nothing and explains instead. If you check the mold box, it tells you the correct sequence: find and fix the moisture source, then get the system inspected, then decide between cleaning, remediation, or replacing duct material. It also notes EPA’s position that wet or moldy fiberglass duct liner should be removed and replaced rather than cleaned, and that laboratory confirmation of mold costs roughly $50 Verified fact — the cheapest way to find out whether the expensive problem exists.

Refusing to answer is sometimes the accurate answer. We would rather lose the reader who wanted a number than give them a wrong one.

Geography: what we have not modeled

NADCA lists geographic location among the factors that move price, and the mechanism is straightforward: duct cleaning is mostly labor, labor rates vary regionally, and Housecall Pro’s contractor-side model builds price directly from $90–$150 per technician-hour.

We have not researched city-level or state-level duct cleaning prices, and the calculator applies no regional adjustment. Every source we audited publishes national figures. Inventing a multiplier for the Northeast or the Mountain West would be fabrication dressed as precision.

The best substitute we can offer is an inference rather than a finding: expect local duct cleaning prices to track local skilled-trades labor rates. If plumbers and electricians in your area bill at the top of the national range, expect this service to as well.

Adding a properly researched regional layer is the single highest-value improvement available to this model, and it is the first thing we would build if we could source it.

Where the model lives

The rate table on this site is not a hand-written copy of the calculator’s logic. The model is defined once, in a single function in the site’s publishing plugin, and the same definition is handed to the interactive calculator, rendered as the crawlable rate table, and described on this page. That structure exists so the published methodology and the working code cannot drift apart, which is the usual way transparency pages become quietly false.

Every input, every rate and every outcome is also present as plain HTML on the calculator page, so a reader or a crawler without JavaScript sees the entire model rather than an empty box.

How often we review this

We intend to review the model annually, and additionally whenever one of these happens:

  • A lineage origin publishes a materially different figure — in particular if EPA ever updates its $450–$1,000 range, which would be the most consequential change possible to this subject.
  • A genuinely new independent price origin appears. Adding a fourth would matter more than another twenty republications.
  • Any of our editorial percentages, or the flat per-system figure, acquires a published basis — at which point the assumption should be replaced by the source.
  • A reader shows us the model is producing implausible output in a case we did not anticipate.
  • We find a structural error in the arithmetic itself, as we did in August 2026. When that happens the change is dated and described on this page, with the superseded figures left visible, rather than silently rewritten.

This page was last reviewed on the date shown at the foot of it. If that date is old, weight the numbers accordingly.

How this could be wrong

An honest methodology page has to include this section. Here are the failure modes we can identify in our own model.

One weakness we used to list here is fixed

This section previously said that the model’s multipliers compounded, and that a 3,000 square foot two-system home with difficult access and flexible duct accumulated a combined factor of about ×2.47 and a high-end figure near $2,960 — hotter than any published tier. That is no longer true of the model. System count is a flat addition and the difficulty factors are added and capped, and the same house now returns $950 / $1,500 / $2,170 Example calculation. We are stating this plainly rather than deleting the old text, because a page that only ever describes its current position gives the reader no way to judge how it treats being wrong. The weaknesses below are the ones that remain, and they are not small.

Four inputs still rest on editorial assumption with no dollar basis

Stories, duct accessibility, duct construction and contamination level have no published dollar or percentage figure anywhere in the record we audited. Sources agree on the direction of each effect and quantify none of them. We chose +10%, +20%, +10% and +35% because they seemed proportionate, and a different editor could pick different numbers and defend them just as well. On a typical two-story house with flexible duct and moderate soiling, those three assumptions alone move the typical figure from about $470 to $640. That gap is not a measurement of anything. Changing how they combine, which is what we did in August 2026, does not make the individual numbers any better sourced.

The cap is a judgment, not a finding

Capping the combined difficulty adjustment at +60% stops our assumptions compounding into figures nothing supports. But +60% is itself a figure nothing supports. It is a limit we imposed on our own guesswork, chosen because it keeps the extreme cases within sight of the published per-system band. If the real spread between an easy job and a genuinely awful one is +100%, the model understates hard jobs — and it understates them silently, at exactly the point where the reader most needs a warning rather than a number. The clamp at the bottom, 0.90, has the same status.

The flat per-system figure is our inference from one source

The $150–$350 added for each additional system is derived from the gaps between Housecall Pro’s contractor tiers, read as differences rather than ratios. Housecall Pro is a single trade-side source and never states a per-system increment. If the true incremental cost of a second air handler, blower and coil is $400 or $500, every multi-system estimate we produce is low. We think a flat figure is the right shape for this cost. The size of it is a guess.

The base rates may be one convention, not two

We treat the per-vent and per-square-foot methods as two independent estimates and average them. It is possible they are not independent at all — that publishers derived the square-foot rate from typical vent counts, or the reverse. If so, averaging them adds no information, and the model is really a single-method estimate wearing a second method as decoration.

Lineage A may be contaminated by partial jobs

The ~$389 average reflects what people paid. Some of what people paid for was, on the enforcement record, less than a full cleaning. Using it to sense-check our low end may therefore be validating the model against a market that includes underscoped work.

Self-reported inputs are unreliable

“Difficult access” and “moderate contamination” mean different things to different readers, and homeowners routinely miscount return vents or mistake a zoned single system for two systems. Garbage in, precise-looking garbage out.

The $200 floor rests on one publication

Forbes Home is the only source in the entire audited record that puts a number on a minimum service charge. Every floored estimate this calculator produces — which is most small-home estimates — is therefore reporting one publication’s figure rather than a market rate. If the real minimum is $300 in most metros, all of those results are low, and we have no way to check it.

Nothing here is regional

A national model applied to a specific address will be wrong in both directions by an unknown amount, and we do not know how large that amount is.

The published record could be wrong as a whole

The deepest limitation is not in our arithmetic. It is that three independent price origins is a thin foundation for any model, and two of the three are consumer-facing publications with lead-generation business models. We built the most careful thing the available evidence supports. The evidence is not very good, and no amount of care fixes that.

If you want to reproduce or critique this

Everything needed is on this page. The order of operations is exactly this:

  1. Vent estimate: supply × $25 and returns × $40 for the low; supply × $50 and returns × $75 for the high.
  2. Square-foot estimate: sq ft × $0.15 for the low, × $0.40 for the high.
  3. If any vents were entered, average the two lows and the two highs. If not, use the square-foot figures alone.
  4. Add $150 to the low and $350 to the high for each system beyond the first.
  5. Multiply both by the difficulty figure: 1 + (stories − 1) + (access − 1) + (duct type − 1) + (contamination − 1), clamped to 0.90–1.60.
  6. If the low is under $200, set it to $200; if the high is then under the low, set the high to 1.4 × the low.
  7. Add the add-ons: sanitizing +$75 / +$250, dryer vent +$40 / +$100.
  8. Typical = low + 0.45 × (high − low). Round all three to the nearest $10.
  9. If the typical figure is above $1,000 × the number of systems, show the above-the-band caution.

Run the same inputs through your own implementation and you should match our worked examples to the dollar. If you build something better on top of it, we would rather be corrected than cited.

What to do next

Sources & references