Services

Every property is different. We create cleaning plans designed around your schedule, priorities, and space.

Before after dirty to clean living room

(function () { const host = document.getElementById(“procare-cleaning-estimator”); if (!host || host.dataset.loaded === “1”) return; host.dataset.loaded = “1”; const root = host.attachShadow({ mode: “open” }); root.innerHTML = ` * { box-sizing: border-box; } :host { display: block; width: 100%; font-family: Arial, Helvetica, sans-serif; } .calc { –blue: #147bb5; –dark: #173b54; –text: #263946; –muted: #6e7f89; –line: #dce7ed; –light: #eff8fd; width: 100%; max-width: 900px; margin: 30px auto; background: #fff; border: 1px solid #e1e9ee; border-radius: 22px; box-shadow: 0 14px 45px rgba(24, 62, 83, .10); overflow: hidden; } .inner { padding: 38px; } .top { text-align: center; max-width: 680px; margin: 0 auto 28px; } .eyebrow { display: block; margin-bottom: 10px; color: var(–blue); font-size: 12px; font-weight: 800; letter-spacing: 2px; } h2 { margin: 0 0 10px; padding: 0; color: var(–dark); font-size: 36px; line-height: 1.1; font-weight: 800; } .top p { margin: 0; color: var(–muted); font-size: 16px; line-height: 1.5; } .progress { height: 7px; background: #e8eff3; border-radius: 999px; overflow: hidden; margin-top: 24px; } .progress-fill { height: 100%; width: 20%; background: var(–blue); border-radius: 999px; transition: width .25s ease; } .progress-info { display: flex; justify-content: space-between; margin-top: 7px; color: #7b8d98; font-size: 12px; font-weight: 700; } .step { display: none; } .step.active { display: block; animation: fadeIn .22s ease; } @keyframes fadeIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } } .heading { display: flex; align-items: flex-start; gap: 13px; margin: 28px 0 20px; } .step-number { display: flex; align-items: center; justify-content: center; width: 38px; height: 38px; flex: 0 0 38px; border-radius: 50%; background: var(–blue); color: #fff; font-weight: 800; font-size: 17px; } h3 { margin: 0 0 4px; padding: 0; color: var(–dark); font-size: 22px; line-height: 1.25; } .heading p { margin: 0; color: var(–muted); font-size: 14px; line-height: 1.45; } button, select { font: inherit; } button { touch-action: manipulation; } .services { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; } .service { min-height: 145px; padding: 18px; border: 2px solid var(–line); border-radius: 15px; background: #fff; text-align: left; cursor: pointer; color: var(–text); transition: .15s ease; } .service:hover { border-color: var(–blue); transform: translateY(-1px); } .service.selected { border-color: var(–blue); background: var(–light); box-shadow: 0 0 0 3px rgba(20, 123, 181, .08); } .service-icon { display: block; font-size: 27px; margin-bottom: 11px; } .service strong { display: block; margin-bottom: 5px; color: var(–dark); font-size: 16px; } .service small { color: var(–muted); font-size: 12px; line-height: 1.4; } .counter-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; } .counter-card { display: flex; align-items: center; justify-content: space-between; gap: 15px; padding: 16px; border: 1px solid var(–line); border-radius: 13px; } .counter-card strong { display: block; color: var(–dark); margin-bottom: 3px; } .counter-card small { color: var(–muted); } .counter { display: flex; align-items: center; gap: 8px; } .counter button { width: 42px; height: 42px; border: 1px solid #c9d8e0; border-radius: 50%; background: #f7fafc; color: var(–blue); font-size: 24px; cursor: pointer; } .counter-value { min-width: 28px; text-align: center; font-size: 18px; font-weight: 800; } .field { margin-top: 17px; } .field label, .subheading { display: block; margin-bottom: 8px; color: var(–dark); font-size: 14px; font-weight: 800; } select { width: 100%; min-height: 52px; padding: 12px 14px; border: 1px solid #ccd9e0; border-radius: 10px; background: #fff; color: var(–text); font-size: 15px; } .condition-list { display: grid; gap: 10px; } .condition { display: flex; justify-content: space-between; align-items: center; gap: 15px; width: 100%; padding: 15px; border: 1px solid var(–line); border-radius: 12px; background: #fff; color: var(–text); text-align: left; cursor: pointer; } .condition.selected { border-color: var(–blue); background: var(–light); } .condition strong { display: block; color: var(–dark); margin-bottom: 4px; } .condition small { color: var(–muted); line-height: 1.4; } .radio { width: 20px; height: 20px; flex: 0 0 20px; border: 2px solid #b5c4cc; border-radius: 50%; } .condition.selected .radio { border: 5px solid var(–blue); } .frequency-wrap { margin-top: 24px; } .frequency-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; } .frequency { min-height: 65px; padding: 10px 7px; border: 1px solid var(–line); border-radius: 10px; background: #fff; color: var(–text); font-weight: 800; cursor: pointer; } .frequency small { display: block; margin-top: 3px; color: var(–muted); font-weight: 400; font-size: 10px; } .frequency.selected { border-color: var(–blue); background: var(–light); color: var(–blue); } .addons { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; } .addon { display: flex; align-items: center; gap: 11px; min-height: 74px; padding: 13px; border: 1px solid var(–line); border-radius: 12px; cursor: pointer; } .addon.checked { border-color: var(–blue); background: var(–light); } .addon input { width: 20px; height: 20px; flex: 0 0 20px; accent-color: var(–blue); } .addon-info { flex: 1; } .addon strong { display: block; color: var(–dark); font-size: 14px; } .addon small { display: block; margin-top: 3px; color: var(–muted); font-size: 11px; } .addon-price { color: var(–blue); font-size: 13px; font-weight: 800; white-space: nowrap; } .nav { display: flex; justify-content: space-between; gap: 12px; margin-top: 27px; } .nav.end { justify-content: flex-end; } .btn { min-height: 49px; padding: 12px 22px; border-radius: 10px; font-weight: 800; cursor: pointer; } .btn-primary { border: 1px solid var(–blue); background: var(–blue); color: #fff; } .btn-primary:hover { background: #116897; } .btn-back { border: 1px solid var(–line); background: #fff; color: var(–text); } .result { padding: 32px 26px; border: 1px solid #cae4f2; border-radius: 17px; background: linear-gradient(180deg, #eff9fe, #fff); text-align: center; } .result-label { display: block; color: var(–blue); font-size: 11px; font-weight: 800; letter-spacing: 1.5px; } .price { margin: 8px 0; color: #146897; font-size: 46px; font-weight: 900; letter-spacing: -2px; } .result-type { color: var(–muted); font-size: 14px; } .summary { max-width: 600px; margin: 23px auto 20px; border-top: 1px solid #dbe8ee; } .summary-row { display: flex; justify-content: space-between; gap: 14px; padding: 10px 0; border-bottom: 1px solid #dbe8ee; font-size: 13px; text-align: left; } .summary-row span { color: var(–muted); } .summary-row strong { text-align: right; color: var(–dark); } .note { max-width: 600px; margin: 0 auto 20px; color: #748691; font-size: 11px; line-height: 1.5; } .quote { display: inline-flex; align-items: center; justify-content: center; min-height: 52px; padding: 13px 25px; border-radius: 10px; background: var(–blue); color: #fff; text-decoration: none; font-weight: 800; } .restart { display: block; margin: 15px auto 0; border: 0; background: none; color: var(–muted); text-decoration: underline; cursor: pointer; } .mobile-bar { display: none; } @media (max-width: 700px) { .calc { margin: 10px auto; border-radius: 15px; } .inner { padding: 22px 15px 90px; } h2 { font-size: 27px; } .top p { font-size: 14px; } h3 { font-size: 19px; } .services, .counter-grid, .addons { grid-template-columns: 1fr; } .service { min-height: auto; padding: 15px; } .frequency-grid { grid-template-columns: repeat(2, 1fr); } .nav { flex-direction: column-reverse; } .nav.end { flex-direction: column; } .btn { width: 100%; } .price { font-size: 35px; } .result { padding: 27px 15px; } .mobile-bar { display: flex; position: fixed; left: 0; right: 0; bottom: 0; z-index: 999999; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 13px max(10px, env(safe-area-inset-bottom)); border-top: 1px solid #dce6eb; background: #fff; box-shadow: 0 -5px 24px rgba(0,0,0,.10); } .mobile-price small { display: block; color: var(–muted); font-size: 10px; } .mobile-price strong { display: block; color: var(–blue); font-size: 19px; margin-top: 2px; } .mobile-next { min-height: 44px; padding: 10px 17px; border: 0; border-radius: 9px; background: var(–blue); color: #fff; font-weight: 800; cursor: pointer; } }
FREE INSTANT ESTIMATE

How Much Will Your Cleaning Cost?

Build your cleaning estimate in less than a minute. No commitment required.

Step 1 of 5 20%
1

What type of cleaning do you need?

Select the service that best matches your home.

2

Tell us about your home

These details determine the estimated cleaning time.

Bedrooms Number of bedrooms
3
Bathrooms Full or half bathrooms
2
Approximate Home Size Under 1,000 sq. ft. 1,000 – 1,499 sq. ft. 1,500 – 1,999 sq. ft. 2,000 – 2,499 sq. ft. 2,500 – 2,999 sq. ft. 3,000 – 3,999 sq. ft. 4,000+ sq. ft.
3

What condition is your home in?

Choose the description that fits best.

How often would you like cleaning?
4

Would you like any extras?

Add optional services to your estimate.

Inside Oven Interior grease and buildup cleaning +$50 Inside Refrigerator Shelves and interior surfaces +$65 Inside Cabinets Interior cabinet surface cleaning +$40 Interior Windows Interior glass cleaning +$35 Extra Pet Hair Extra vacuuming and hair removal +$30 Change Bed Linens Customer-provided clean linens +$25 Detailed Baseboards Detailed baseboard cleaning +$30 Garage Sweep-Out Basic garage floor sweep +$25
YOUR ESTIMATED CLEANING RANGE
$0$0
Home
Service
Frequency
Add-ons
This is an instant preliminary estimate and not a final contractual quote. Final pricing may vary depending on actual condition, layout, accessibility and service requirements.
Request My Exact Quote
Current estimate $0 – $0
`; const $ = selector => root.querySelector(selector); const $$ = selector => Array.from(root.querySelectorAll(selector)); const state = { step: 1, service: “standard”, bedrooms: 3, bathrooms: 2, size: 1750, condition: 1, frequency: 1 }; function money(value) { return “$” + Math.round(value).toLocaleString(“en-US”); } function round5(value) { return Math.round(value / 5) * 5; } function serviceName() { if (state.service === “deep”) return “Deep Cleaning”; if (state.service === “move”) return “Move-In / Move-Out Cleaning”; return “Standard Cleaning”; } function frequencyName() { if (state.service !== “standard”) { return “One-Time Service”; } if (state.frequency === .86) return “Weekly”; if (state.frequency === .92) return “Every 2 Weeks”; if (state.frequency === .97) return “Every 4 Weeks”; return “One-Time”; } function calculate() { /* Knoxville-oriented estimate model. Change these values later if ProCare wants to raise or lower pricing. */ let price = 65; price += state.size * 0.046; if (state.bedrooms > 1) { price += (state.bedrooms – 1) * 13; } price += state.bathrooms * 25; if (state.service === “deep”) { price *= 1.52; } if (state.service === “move”) { price *= 1.78; } price *= state.condition; if (state.service === “standard”) { price *= state.frequency; } let addonTotal = 0; $$(“.addon input:checked”).forEach(input => { addonTotal += Number(input.dataset.price); }); price += addonTotal; let minimum = 125; if (state.service === “deep”) { minimum = 245; } if (state.service === “move”) { minimum = 295; } price = Math.max(price, minimum); return { low: round5(price * .93), high: round5(price * 1.12) }; } function updateEstimate() { const result = calculate(); $(“.price-low”).textContent = money(result.low); $(“.price-high”).textContent = money(result.high); $(“.live-price”).textContent = money(result.low) + ” – ” + money(result.high); $(“.result-type”).textContent = serviceName() + ” • Knoxville, Tennessee”; $(“.summary-home”).textContent = state.bedrooms + ” bed / ” + state.bathrooms + ” bath”; $(“.summary-service”).textContent = serviceName(); $(“.summary-frequency”).textContent = frequencyName(); const addons = $$(“.addon input:checked”) .map(input => input.dataset.name); $(“.summary-addons”).textContent = addons.length ? addons.join(“, “) : “None”; } function showStep(number) { state.step = Math.max(1, Math.min(5, number)); $$(“.step”).forEach(step => { step.classList.remove(“active”); }); const current = $(`.step[data-step=”${state.step}”]`); if (current) { current.classList.add(“active”); } const percent = state.step * 20; $(“.progress-fill”).style.width = percent + “%”; $(“.step-text”).textContent = “Step ” + state.step + ” of 5″; $(“.percent”).textContent = percent + “%”; $(“.mobile-bar”).style.display = state.step === 5 ? “none” : “”; updateEstimate(); if (window.innerWidth { button.addEventListener(“click”, function () { $$(“.service”).forEach(item => { item.classList.remove(“selected”); }); this.classList.add(“selected”); state.service = this.dataset.service; $(“.frequency-wrap”).style.display = state.service === “standard” ? “block” : “none”; updateEstimate(); }); }); $$(“.condition”).forEach(button => { button.addEventListener(“click”, function () { $$(“.condition”).forEach(item => { item.classList.remove(“selected”); }); this.classList.add(“selected”); state.condition = Number(this.dataset.condition); updateEstimate(); }); }); $$(“.frequency”).forEach(button => { button.addEventListener(“click”, function () { $$(“.frequency”).forEach(item => { item.classList.remove(“selected”); }); this.classList.add(“selected”); state.frequency = Number(this.dataset.frequency); updateEstimate(); }); }); $$(“.plus”).forEach(button => { button.addEventListener(“click”, function () { const target = this.dataset.target; if ( target === “bedrooms” && state.bedrooms < 8 ) { state.bedrooms++; } if ( target === "bathrooms" && state.bathrooms { button.addEventListener(“click”, function () { const target = this.dataset.target; if ( target === “bedrooms” && state.bedrooms > 1 ) { state.bedrooms–; } if ( target === “bathrooms” && state.bathrooms > 1 ) { state.bathrooms -= .5; } renderCounters(); }); }); function renderCounters() { $(“.bedrooms-value”).textContent = state.bedrooms; $(“.bathrooms-value”).textContent = state.bathrooms; updateEstimate(); } $(“.home-size”).addEventListener( “change”, function () { state.size = Number(this.value); updateEstimate(); } ); $$(“.addon input”).forEach(input => { input.addEventListener( “change”, function () { this.closest(“.addon”) .classList.toggle( “checked”, this.checked ); updateEstimate(); } ); }); $$(“.next”).forEach(button => { button.addEventListener( “click”, function () { showStep( state.step + 1 ); } ); }); $$(“.back”).forEach(button => { button.addEventListener( “click”, function () { showStep( state.step – 1 ); } ); }); $(“.mobile-next”).addEventListener( “click”, function () { showStep( state.step + 1 ); } ); $(“.restart”).addEventListener( “click”, function () { state.service = “standard”; state.bedrooms = 3; state.bathrooms = 2; state.size = 1750; state.condition = 1; state.frequency = 1; $$(“.service”).forEach(button => { button.classList.toggle( “selected”, button.dataset.service === “standard” ); }); $$(“.condition”).forEach(button => { button.classList.toggle( “selected”, button.dataset.condition === “1” ); }); $$(“.frequency”).forEach(button => { button.classList.toggle( “selected”, button.dataset.frequency === “1” ); }); $$(“.addon input”).forEach(input => { input.checked = false; input.closest(“.addon”) .classList.remove(“checked”); }); $(“.home-size”).value = “1750”; $(“.frequency-wrap”).style.display = “block”; renderCounters(); showStep(1); } ); renderCounters(); showStep(1); })();

At ProCare Clean LLC, we understand that every home and business has unique cleaning needs. Whether you’re looking for recurring cleaning, a one-time deep clean, commercial maintenance, or short-term rental services, we’re here to help.

Tell us about your property and the services you need, and we’ll provide a customized quote tailored to your space and schedule.

📍 Knoxville, Tennessee

procarecleanknoxville@gmail.com

🕒 Monday – Friday | 8:00 AM – 5:00 PM

← Back

Thank you for your response. ✨

Family of four smiling and watching an aroma diffuser in a bright living room