SolarSoiled · Tools
Every dry day, a bit more dust settles and your panels make a bit less power. The curve below adds that up. Where it crosses the red line, the power you have lost is worth more than a cleaning costs, and washing them starts to make sense. Panels also carry a second layer of grime that rain never removes and only a wash takes off. We have no measurement of how fast that builds up, so the calculator starts it at zero and gives you a slider.
Your system
Soiling conditions
Cleaning method
~$90 · water-fed pole, no roof access · takes off ~70% of the dirt
System age
Year 2: persistent residue from one season of carryover is now detectable. Both seasonal and persistent components are active.
Pollen films, cemented dust, and biological growth that rain does not wash away. Nobody has measured how fast this builds up, here or anywhere we could find, so the slider starts at zero. The top of the range is the median rate at which solar panels lose output as they age, and putting all of that down to washable grime is generous: most of it is browning plastic and cracked cells, which no wash touches.
Where are you now?
Breakeven curve
Breakeven
—
dry days until worth cleaning
Permanent grime
—
what a wash gets back on day one
Cleaning cost
—
— recovery
Seasonal dirt builds up through the dry months and washes off with the winter rain. Each extra day adds more dust to what is already there, so the losses grow faster the longer you wait. That is why the line curves upward instead of running straight.
Permanent grime is what rain never gets off: pollen films, baked-on dust, and things growing on the glass. It carries over from one year to the next, so it lifts the whole curve and your breakeven day arrives sooner. A system in its third year has had two full seasons to build up what rain could not remove.
The difference between them decides how much a wash is worth. Rain already deals with the seasonal layer 27 times a year here, so a wash only buys the weeks in between, and that is where the small percentage comes from: 4.5% for a full professional scrub, less for a pole wash that takes off less dirt to begin with. Nothing but a wash deals with the permanent layer, so a wash gets back all of it. This page used to apply the seasonal percentage to both, which undercounted the permanent side by more than twenty times while running it at a rate five times too high. The two mistakes nearly cancelled.
We do not know the rate. Nobody has measured how fast the permanent layer builds up in Santa Cruz. It cannot be read off the data behind this page either: the national soiling measurements our model is built on are defined as what you lose between perfect cleanings, so a layer that survives a cleaning was never in the number. The slider above therefore starts at zero. That is a gap in what we know, not a finding that the layer does not exist, and it is the one input on this page that could turn the answer around for an older roof.
The flagging rule: in Year 1, flag when what a wash gets back from seasonal dust exceeds the cleaning cost.
Seasonal loss (the curve shape)
On day N of a dry spell, the panel is N × soiling_rate dirtier than on day 0, so it loses a little more energy each successive day. Summing those daily losses from day 1 to day N gives a triangular sum:
The N(N+1)/2 term is what makes the curve bend. At day 60 it equals 1,830. At day 120 it equals 7,260, four times larger rather than twice. Waiting twice as long does not double the loss; it quadruples it.
Permanent grime (the flat starting line)
This value does not grow with dry days, because the output is already being lost year-round. It is priced at the same electricity rate and the same 5.5 sun-hours as the seasonal term, and both carry the same 0.84 system derate, so both halves of the sum use one set of assumptions. Each extra year of system age adds another year of accumulation, and the total is capped at 10 points of output:
The cap is there because the uncapped version reached 21% of output by year 8, which is more total soiling loss than has been measured at any of the 891 station-years in the national dataset behind this model.
Combined breakeven
Cleaning pays once the two channels together beat the cleaning cost. They do not pay out at the same rate. A wash gets back 3.2% of the seasonal loss at the cleaning method you have selected, because rain has already taken most of that off before you could. It gets back all of the permanent layer, because a wash is the only thing that removes it:
Solving for the breakeven day directly:
If the term inside the square root is already negative, the permanent grime alone is worth more than the wash costs and the breakeven is day zero. On the settings this page ships with, that never happens, because the permanent rate is set to zero.
What this page leaves out: rain
The model above lets dirt pile up day after day with nothing ever washing it off. In coastal California that is the wrong picture, and it is not a small error. Santa Cruz had 27 days of rain heavy enough (10 mm or more) to rinse an array clean in the last year we measured, each one for free. Running our soiling model over two years of real local weather, one well-timed professional scrub recovers about 4.5% of what a year of dirt costs you, and a pole wash less. The 70–90% figures in the cleaning-method selector above are a different quantity: they say how much of the dirt sitting there right now a wash takes off, which is nearly all of it, and then the dust starts settling again within days. So read the breakeven days on this page as the best case for a dry climate, and expect worse on the coast.
Why we wait for two months in a row
The model checks each system at the end of May, June, and July. From year two onward it only flags an array for cleaning if the value of the lost power beat the cleaning cost in two consecutive checks. One bad month is often just weather. Two in a row is a pattern. The faint vertical lines on the chart mark those three checks.
Seasonal curve uses Kimber (2007) linear accumulation, valued at the electricity rate set above. Permanent grime accumulates linearly with system age, capped at 10 points of annual output, priced at the same rate and the same 5.5 sun hours; its rate is unmeasured and ships at zero, and the 0.6%/yr top of the slider is the median x-Si field degradation rate from Jordan et al. (2016) used as a deliberately loose ceiling. Heavy soiling rate: average 0.05%/day; heavy soiler (top quartile) 0.10%/day per Mejía and Kleissl (2013). The 4.5% professional recovery is measured in solar-soiling-ml/docs/ECONOMICS_GROUNDING_20260809.md by running two years of Santa Cruz weather through the soiling model; the 3.2% pole-wash figure is that same model re-run at 70% dirt removal, not the 4.5% scaled down, which would overstate it because recovery is sublinear in how much dirt comes off; the 70–90% figures are UCSD 2013 field data for how much of the dirt on the glass a wash removes, which is a different quantity. Cleaning prices are a per-panel schedule with a one-truck-roll floor of $90 basic and $150 professional, the per-panel rates anchored to published cleaning quotes: $5-12 residential, $2.50 commercial rooftop under 1 MW, $1.50 over 1 MW, falling to $0.37-0.75 at utility scale. The two floors are our own price points, not quotes. Assumes 5.5 peak sun hours per day and a 0.84 system derate (inverter, temperature, wiring and mismatch losses, excluding soiling, which is priced separately here), giving ~1,686 kWh/kWp/yr. Default system size 6.9 kW reflects median permitted system in Santa Cruz County 2014–2025.