Free Pressure Washing Calculator Widget for Your Website

Most homeowners who call you have no idea what the job should cost. Some of them think it is $80. Some of them have read an article that said $1,200. Both conversations waste your time.

This calculator gives them a number before they pick up the phone. It is free, it works on any website, and you can have it running in about two minutes.

Pressure Washing Cost Calculator Estimate a project before you call anyone
Estimated cost
$0

Planning estimate only. Site conditions, local rates and minimum charges change the final price.

Calculator by WashNumbers · Model v1.2

What it does

Visitors pick a surface, enter the area, and set the condition and access. They get an estimate and a planning range instead of a single number pretending to be a quote.

The rates behind it are the same ones we publish and document on our own site: base rates by surface, a complexity factor for buildup, another for access, and a minimum charge. Nothing is hidden and nothing is invented. You can read the whole methodology behind the model before you decide to put it in front of your customers.

What it deliberately does not do is capture leads, set cookies, load tracking scripts, or send anything anywhere. It is a calculator, not a funnel. Your visitors stay yours.

How to add it to your site

Copy this and paste it wherever you want the calculator to appear. It carries its own styling, so it will not fight with your theme.

<!-- WashNumbers Pressure Washing Cost Calculator -->
<div class="wnw" id="wnw">
<style>
.wnw{--wnw-blue:#2563eb;--wnw-ink:#0f172a;--wnw-mut:#64748b;--wnw-line:#e2e8f0;--wnw-bg:#f8fafc;
font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
max-width:560px;margin:0 auto;color:var(--wnw-ink);font-size:15px;line-height:1.5;
border:1px solid var(--wnw-line);border-radius:12px;overflow:hidden;background:#fff;box-sizing:border-box}
.wnw *,.wnw *:before,.wnw *:after{box-sizing:border-box}
.wnw-hd{background:var(--wnw-blue);color:#fff;padding:14px 18px}
.wnw-hd b{display:block;font-size:16px;font-weight:600;letter-spacing:.01em}
.wnw-hd span{display:block;font-size:12.5px;opacity:.85;margin-top:2px}
.wnw-bd{padding:18px}
.wnw-f{margin:0 0 14px}
.wnw-f label{display:block;font-size:12.5px;font-weight:600;color:var(--wnw-mut);
text-transform:uppercase;letter-spacing:.05em;margin:0 0 5px}
.wnw select,.wnw input{width:100%;padding:9px 11px;font-size:16px;font-family:inherit;color:var(--wnw-ink);
border:1px solid var(--wnw-line);border-radius:7px;background:#fff;-webkit-appearance:none;appearance:none}
.wnw select{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%2364748b' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
background-repeat:no-repeat;background-position:right 11px center;padding-right:32px}
.wnw select:focus,.wnw input:focus{outline:2px solid var(--wnw-blue);outline-offset:1px;border-color:var(--wnw-blue)}
.wnw-row{display:flex;gap:12px}
.wnw-row>*{flex:1;min-width:0}
.wnw-btn{width:100%;padding:12px;background:var(--wnw-blue);color:#fff;border:0;border-radius:7px;
font-size:15px;font-weight:600;font-family:inherit;cursor:pointer;margin-top:4px}
.wnw-btn:hover{background:#1d4ed8}
.wnw-out{margin:16px 0 0;padding:16px;background:var(--wnw-bg);border-radius:9px;display:none}
.wnw-out.on{display:block}
.wnw-out .k{font-size:12.5px;font-weight:600;color:var(--wnw-mut);text-transform:uppercase;letter-spacing:.05em}
.wnw-out .v{font-size:33px;font-weight:700;color:var(--wnw-blue);line-height:1.15;margin:3px 0 2px;
font-variant-numeric:tabular-nums}
.wnw-out .r{font-size:14px;color:var(--wnw-mut)}
.wnw-out .n{font-size:12.5px;color:var(--wnw-mut);margin:11px 0 0;padding-top:11px;border-top:1px solid var(--wnw-line)}
.wnw-err{display:none;color:#b91c1c;font-size:13.5px;margin-top:10px}
.wnw-err.on{display:block}
.wnw-ft{padding:11px 18px;border-top:1px solid var(--wnw-line);font-size:12.5px;color:var(--wnw-mut);text-align:center}
.wnw-ft a{color:var(--wnw-blue);font-weight:600;text-decoration:none}
.wnw-ft a:hover{text-decoration:underline}
@media(max-width:420px){.wnw-row{display:block}.wnw-row>*{margin-bottom:14px}}
</style>

<div class="wnw-hd">
<b>Pressure Washing Cost Calculator</b>
<span>Estimate a project before you call anyone</span>
</div>

<div class="wnw-bd">
<div class="wnw-f">
<label for="wnw-s">Surface</label>
<select id="wnw-s">
<option value="driveway">Driveway</option>
<option value="concrete">Concrete / flatwork</option>
<option value="patio">Patio</option>
<option value="deck">Deck</option>
<option value="fence">Fence</option>
<option value="pooldeck">Pool deck</option>
<option value="house">House exterior</option>
</select>
</div>

<div class="wnw-f">
<label for="wnw-z" id="wnw-zl">Area in square feet</label>
<input id="wnw-z" type="number" min="1" step="1" placeholder="e.g. 600" inputmode="numeric">
</div>

<div class="wnw-f" id="wnw-st-wrap" style="display:none">
<label for="wnw-st">Stories</label>
<select id="wnw-st"><option value="1">1 story</option><option value="2">2 stories</option><option value="3">3 stories</option></select>
</div>

<div class="wnw-row">
<div class="wnw-f">
<label for="wnw-c">Condition</label>
<select id="wnw-c">
<option value="light">Light buildup</option>
<option value="average" selected>Average buildup</option>
<option value="heavy">Heavy buildup</option>
</select>
</div>
<div class="wnw-f">
<label for="wnw-a">Access</label>
<select id="wnw-a">
<option value="easy">Easy</option>
<option value="normal" selected>Normal</option>
<option value="difficult">Difficult</option>
</select>
</div>
</div>

<button class="wnw-btn" id="wnw-go" type="button">Calculate estimated cost</button>
<div class="wnw-err" id="wnw-e"></div>

<div class="wnw-out" id="wnw-o" role="status" aria-live="polite">
<div class="k">Estimated cost</div>
<div class="v" id="wnw-v">$0</div>
<div class="r" id="wnw-r"></div>
<p class="n">Planning estimate only. Site conditions, local rates and minimum charges change the final price.</p>
</div>
</div>

<div class="wnw-ft">
Calculator by <a href="https://washnumbers.com/pressure-washing-cost-calculator/" rel="nofollow">WashNumbers</a> · Model v1.2
</div>
</div>

<script>
(function(){
var r=document.getElementById('wnw'); if(!r||r.dataset.on)return; r.dataset.on=1;
var q=function(i){return document.getElementById(i)};
var M={min:100,band:0.20,maxArea:100000,
flat:{driveway:0.45,concrete:0.46,patio:0.40,deck:0.49,fence:0.48,pooldeck:0.45},
cond:{light:0.90,average:1.00,heavy:1.15},
acc:{easy:0.95,normal:1.00,difficult:1.10},
bands:[{max:1000,lo:190,hi:291},{max:2000,lo:273,hi:408},{max:3000,lo:331,hi:488},
{max:4000,lo:414,hi:599},{max:1e9,lo:550,hi:834}],
st:{1:{lo:218,hi:363},2:{lo:279,hi:472},3:{lo:286,hi:509}}};
var ANCH=M.bands.map(function(x,i){return{s:i*1000+500,v:(x.lo+x.hi)/2}});
function sizeVal(n){
if(n<=ANCH[0].s)return ANCH[0].v;
for(var i=0;i<ANCH.length-1;i++){
if(n<=ANCH[i+1].s)return ANCH[i].v+(n-ANCH[i].s)/(ANCH[i+1].s-ANCH[i].s)*(ANCH[i+1].v-ANCH[i].v);
}
return ANCH[ANCH.length-1].v;
}
var s=q('wnw-s'),z=q('wnw-z'),zl=q('wnw-zl'),stw=q('wnw-st-wrap'),st=q('wnw-st'),
c=q('wnw-c'),a=q('wnw-a'),o=q('wnw-o'),v=q('wnw-v'),rg=q('wnw-r'),e=q('wnw-e');
function money(n){return '$'+Math.round(n).toLocaleString('en-US')}
function clear(){o.classList.remove('on');e.classList.remove('on')}
function sync(){
var h=s.value==='house';
stw.style.display=h?'':'none';
zl.textContent=h?'Home size in square feet':(s.value==='fence'?'Fence area in square feet':'Area in square feet');
clear();
}
s.addEventListener('change',sync);
[z,st,c,a].forEach(function(el){el.addEventListener('change',clear);el.addEventListener('input',clear)});
sync();
q('wnw-go').addEventListener('click',function(){
var n=parseFloat(z.value);
if(!n||n<=0){e.textContent='Enter an area greater than zero.';e.classList.add('on');o.classList.remove('on');return;}
if(n>M.maxArea){e.textContent='That is larger than this calculator covers. Sites over '+M.maxArea.toLocaleString('en-US')+' sq ft need a walkthrough.';e.classList.add('on');o.classList.remove('on');return;}
e.classList.remove('on');
var cf=M.cond[c.value],af=M.acc[a.value],lo,hi,mid,k;
if(s.value==='house'){
k=M.st[st.value];
mid=(sizeVal(n)+(k.lo+k.hi)/2)/2*cf*af;
}else{
mid=n*M.flat[s.value]*cf*af;
}
if(mid<M.min)mid=M.min;
lo=mid*(1-M.band); hi=mid*(1+M.band);
if(lo<M.min)lo=M.min;
v.textContent=money(mid);
rg.textContent='Planning range '+money(lo)+' to '+money(hi);
o.classList.add('on');
});
})();
</script>
<!-- /WashNumbers -->
Where to paste the calculator code on the most common website builders
PlatformWhere it goesNotes
WordPressCustom HTML blockWorks on any theme, page or post
WixAdd → Embed Code → Embed HTMLSet the box to at least 620px tall
SquarespaceCode blockRequires a Business plan or higher
WebflowEmbed elementPublish before testing, it will not run in the editor
GoHighLevelCustom Code elementCommon on contractor marketing sites
Plain HTML siteAnywhere inside the bodyNo dependencies, nothing else to load

If your site builder blocks custom code on your current plan, the calculator will not run. That is a limitation of the plan, not of the widget.

What we ask

Leave the credit line at the bottom in place. That line is how somebody reading the estimate can go and check where the numbers came from, and being able to check a source is the whole point of this site.

It is a request, not a condition. The link ships with rel="nofollow" by default and you are free to leave it that way, remove the attribute, or set it to whatever your own linking policy calls for. Your licence to use the widget does not depend on how that link is marked up, and we are not asking anyone to hand us ranking signals in exchange for a tool.

Everything else is yours to change. Resize it, drop it in a sidebar, put it on three pages, use it on client sites you build. Commercial use is fine. You do not need to ask us and you do not need to tell us.

Why we give this away

Because numbers are only worth publishing if somebody sees them. A calculator sitting on our own site reaches whoever finds our site. The same calculator on two hundred contractor sites reaches the people who actually need it, at the moment they need it.

There is something in it for us beyond that, and it is not a link. Every contractor who puts this in front of customers is a contractor who might come back and tell us a rate is wrong for their market. That is worth more to us than traffic, because it is the only thing that makes the model better.

Tell us if you install it

Not required, but we like to know where it ends up. Send us the URL and we will add your company to our contributors page. That listing is not a swap: nothing about your use of the widget depends on it, and those links carry rel="nofollow" so nobody can mistake it for a trade.

We are also running a contractor pricing survey, collecting real rates by state so our published figures come from working operators rather than from lead-generation sites. Seven questions, about ninety seconds, answered in ranges. Contributors get the state breakdown before it goes public.

Questions

Will it slow my site down?

No. It is about 7 KB of self-contained code with no external requests, no fonts to fetch and no libraries. For comparison, one photo on your homepage is usually thirty times heavier

Can I change the colors?

Yes. The colors are CSS variables at the top of the block. Change the hex value next to --wnw-blue to your brand color and everything follows.

Will the estimates match what I actually charge

Probably not exactly, and that is the point. It gives a realistic national planning range so the customer arrives with sane expectations. Your quote is still your quote, and now you are arguing about site conditions instead of about whether $300 is a scam.

Does it collect any data?

None. No cookies, no analytics, no form submissions, no network requests of any kind. Everything happens in the visitor's browser.

What happens if you change the calculator later?

Your copy keeps working exactly as it is, because the code lives on your server, not ours. If we update the model we will post the new version here.

Can I use it on client websites?

Yes. Keep the credit line on each install if you can, and there is no separate licence or fee for client work.

Before you paste it

Try it above with a job you quoted recently and see how close it lands. If the number looks wrong for your market, tell us and say why. We would rather hear it from someone who quotes this work every week than defend a rate that does not hold up.

For the reasoning behind every figure, the full homeowner calculator shows each adjustment factor as it applies it, and the contractor pricing calculator works the same numbers from your costs and margin instead.

Tools for your business

Contractor Pricing Calculator
Build a quote that still leaves a margin after chemicals and drive time.

Production Rate Calculator
The hours a job takes, before you can price it.

Startup Cost Calculator
What a rig costs to build and how many jobs pay it back.

Add Your Rates to the Survey
Seven questions. You get the state-by-state results first.

Diego HernándezWritten by Diego Hernández, founder of WashNumbers. Cost models are built from published contractor rates and public price observations. See how we build these numbers.

Last reviewed: September 2026