Stop Guessing.
Stop Doing Everything.
Start Growing Smart.

We've built a profitability analyzer built specifically for flooring and carpet cleaning businesses — because not all jobs are created equal.

Most flooring and carpet cleaning businesses start out by saying yes to every job that comes their way. But when you're ready to stabilize and grow, that strategy works against you.Busy isn't enough. The work needs to be profitable!This tool helps you cut through the noise. Enter your estimates for each job type — revenue, time on site, labor, and materials — and it calculates your real margin and hourly yield per line of business.No clean books required. Gut-feel estimates are enough to surface the patterns that matter.But profitability alone doesn't tell the whole story. A job can look great on paper and still drain your energy, resist delegation, or bring zero repeat business. That's why this analyzer combines financial scoring with a qualitative assessment — repeatability, referral potential, ease of execution, owner stress, and scalability — to give you a composite picture of which lines of business are actually worth building around.The result is a ranked view of your business by job type, so you can make intentional decisions about where to focus, what to grow, and what to quietly stop chasing.


Job Profitability Analyzer - Floor Cleaning & Restoration
Business operations tool

Stop Guessing. Start Scaling
the Right Work.

A profitability analyzer built for flooring and carpet cleaning businesses - because not all jobs are created equal.
Why financial scoring alone isn't enough

A job can look great on paper and still drain your energy, resist delegation, or bring zero repeat business. This tool combines real margin analysis with a qualitative assessment of each job type - so you see the full picture, not just the gross profit.

No clean books required

Enter your best estimates for revenue, time on site, labor, and materials per job type. Gut-feel numbers are enough to surface the patterns that matter. The tool calculates margin, hourly yield, and monthly profit automatically.

Who this is for: Owner-operators in flooring and carpet cleaning who are ready to stop saying yes to everything and start building a business around the work that's actually worth growing. If you want to scale, you first need to know which line of business deserves the investment.

Overhead - enter once, allocated automatically
Total jobs / month
--
Overhead per job
--
Include rent, insurance, truck payment, phone, software - everything that runs whether or not the phone rings. Divided equally across all jobs by volume.
Step 1 - Job Inputs and Calculated Results
Job typeAvg revenue
per job ($)
Avg hrs
on site
Labor cost
per job ($)
Materials
per job ($)
Jobs per
month
Residential
Res. Floor Cleaning and Repair
Carpet, tile, hardwood - home
Upholstery
Sofas, chairs, fabric
Res. water damage
Extraction, drying, monitoring
Res. mold remediation
Containment, treatment - home
Commercial
Comm. Floor Cleaning and Repair
Office, retail, HOA, property mgmt
Comm. water damage
Commercial property, higher scope
Comm. mold remediation
Larger footprint, code compliance
Commercial cleanouts
Vacant units, estates, post-tenancy
"']/g, function(x) {return a[x];});return s;},thisHash = function() {var h = location.hash ? location.hash.substring(1) : null,a;if (!h)return null;if (h.match(/\?/)) {a = h.split('?');h = a[0];history.replaceState(undefined, undefined, '#' + h);window.location.search = a[1];}if (h.length > 0&& !h.match(/^[a-zA-Z]/))h = 'x' + h;if (typeof h == 'string')h = h.toLowerCase();return h;},scrollToElement = function(e, style, duration) {var y, cy, dy,start, easing, offset, f;if (!e)y = 0; else {offset = (e.dataset.scrollOffset ? parseInt(e.dataset.scrollOffset) : 0) * parseFloat(getComputedStyle(document.documentElement).fontSize);switch (e.dataset.scrollBehavior ? e.dataset.scrollBehavior : 'default') {case 'default':default:y = e.offsetTop + offset;break;case 'center':if (e.offsetHeight < window.innerHeight)y = e.offsetTop - ((window.innerHeight - e.offsetHeight) / 2) + offset; else y = e.offsetTop - offset;break;case 'previous':if (e.previousElementSibling)y = e.previousElementSibling.offsetTop + e.previousElementSibling.offsetHeight + offset; else y = e.offsetTop + offset;break;}}if (!style)style = 'smooth';if (!duration)duration = 750;if (style == 'instant') {window.scrollTo(0, y);return;}start = Date.now();cy = window.scrollY;dy = y - cy;switch (style) {case 'linear':easing = function (t) { return t };break;case 'smooth':easing = function (t) { return t<.5 ? 4*t*t*t : (t-1)*(2*t-2)*(2*t-2)+1 };break;}f = function() {var t = Date.now() - start;if (t >= duration)window.scroll(0, y); else {window.scroll(0, cy + (dy * easing(t / duration)));requestAnimationFrame(f);}};f();},scrollToTop = function() {scrollToElement(null);},loadElements = function(parent) {var a, e, x, i;$body.dispatchEvent(new CustomEvent('startComponents', { detail: { parent: parent } }));a = parent.querySelectorAll('iframe[data-src]:not([data-src=""])');for (i=0; i < a.length; i++) {x = a[i].cloneNode();x.setAttribute('src', x.dataset.src);x.dataset.initialSrc = x.dataset.src;x.dataset.src = '';a[i].replaceWith(x);}a = parent.querySelectorAll('video[autoplay]');for (i=0; i < a.length; i++) {if (a[i].paused)a[i].play();}e = parent.querySelector('[data-autofocus="1"]');x = e ? e.tagName : null;switch (x) {case 'FORM':e = e.querySelector('.field input, .field select, .field textarea');if (e)e.focus();break;default:break;}a = parent.querySelectorAll('unloaded-script');for (i=0; i < a.length; i++) {x = document.createElement('script');x.setAttribute('data-loaded', '');if (a[i].getAttribute('src'))x.setAttribute('src', a[i].getAttribute('src'));if (a[i].textContent)x.textContent = a[i].textContent;a[i].replaceWith(x);}x = new Event('loadelements');a = parent.querySelectorAll('[data-unloaded]');a.forEach((element) => {element.removeAttribute('data-unloaded');element.dispatchEvent(x);});},unloadElements = function(parent) {var a, e, x, i;$body.dispatchEvent(new CustomEvent('stopComponents', { detail: { parent: parent } }));a = parent.querySelectorAll('iframe[data-src=""]');for (i=0; i < a.length; i++) {if (a[i].dataset.srcUnload === '0')continue;if ('initialSrc' in a[i].dataset)a[i].dataset.src = a[i].dataset.initialSrc; else a[i].dataset.src = a[i].src;a[i].contentWindow.location.replace('about:blank');}a = parent.querySelectorAll('video');for (i=0; i < a.length; i++) {if (!a[i].paused)a[i].pause();}e = $(':focus');if (e)e.blur();};window._scrollToTop = scrollToTop;var thisUrl = function() {return window.location.href.replace(window.location.search, '').replace(/#$/, '');};var getVar = function(name) {var a = window.location.search.substring(1).split('&'),b, k;for (k in a) {b = a[k].split('=');if (b[0] == name)return b[1];}return null;};var errors = {handle: function(handler) {window.onerror = function(message, url, line, column, error) {(handler)(error.message);return true;};},unhandle: function() {window.onerror = null;}};loadElements(document.body);var style, sheet, rule;style = document.createElement('style');style.appendChild(document.createTextNode(''));document.head.appendChild(style);sheet = style.sheet;$body.addEventListener('keydown', (event) => {const target = event.target;if (target.tagName === 'A'&& target === document.activeElement&& target.hasAttribute('onclick')&& !target.hasAttribute('href')&& event.keyCode === 13) {event.preventDefault();target.click();}});if (client.mobile) {(function() {if (client.flags.lsdUnits) {document.documentElement.style.setProperty('--viewport-height', '100svh');document.documentElement.style.setProperty('--background-height', '100lvh');} else {var f = function() {document.documentElement.style.setProperty('--viewport-height', window.innerHeight + 'px');document.documentElement.style.setProperty('--background-height', (window.innerHeight + 250) + 'px');};on('load', f);on('orientationchange', function() {setTimeout(function() {(f)();}, 100);});}})();}if (client.os == 'android') {(function() {sheet.insertRule('body::after { }', 0);rule = sheet.cssRules[0];var f = function() {rule.style.cssText = 'height: ' + (Math.max(screen.width, screen.height)) + 'px';};on('load', f);on('orientationchange', f);on('touchmove', f);})();$body.classList.add('touch');} else if (client.os == 'ios') {if (client.osVersion <= 11)(function() {sheet.insertRule('body::after { }', 0);rule = sheet.cssRules[0];rule.style.cssText = '-webkit-transform: scale(1.0)';})();if (client.osVersion <= 11)(function() {sheet.insertRule('body.ios-focus-fix::before { }', 0);rule = sheet.cssRules[0];rule.style.cssText = 'height: calc(100% + 60px)';on('focus', function(event) {$body.classList.add('ios-focus-fix');}, true);on('blur', function(event) {$body.classList.remove('ios-focus-fix');}, true);})();$body.classList.add('touch');}ready.run();})();