Price Carpet Cleaning Jobs: Build a Per-Room Calculator With AI

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Price Carpet Cleaning Jobs: Build a Per-Room Calculator With AI.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Price Carpet Cleaning Jobs: Build a Per-Room Calculator With AI.

Build per-room carpet prices from the hour: cost one hour of your time, van and machine, time each room size, add a share of the visit's set-up and driving, then divide that cost by one minus your target margin. Per-square-foot prices come from the same sum. AI can build the spreadsheet; you supply the costs and check it by hand.

Generic carpet pricing guides give a range per room and stop there. A range tells you what the market charges, not what you need to charge. Two cleaners can both quote $40 a room, and one earns a living while the other pays to work, because their costs differ. The calculator below starts from your own costs. The numbers in it are illustrative; swap in yours.

Follow me on Instagram@sagnikteaches

Three ways to quote, one cost model underneath

Per room, per square foot and per hour are three views of the same job. ISSA's article on carpet pricing, published in 2018, makes the same point: start from the hourly rate your income goal, expenses and billable hours require, then derive the per-square-foot price from it. Your quoting method changes how the number looks to the customer, not what it has to cover.

Connect on LinkedInSagnik Bhattacharya
MethodWorks best forWhat it hidesHow the calculator handles it
Per room, by size bandHomes, and customers who want a number on the phoneFixed visit time spread over an assumed number of rooms; open-plan spaces; heavy soilCard prices built from room minutes plus a share of fixed minutes, with a minimum charge
Per square footLarge open areas, offices, empty rentalsCost per square foot falls as jobs grow; stairs, furniture and stainsRate read from the quote tab at several job sizes
Per hourRestoration, heavy soil, anything you cannot scope in advanceThe customer cannot compare it, and it rewards slow workPrice per job hour: cost per hour divided by one minus the margin

If you work in square metres, every sum below is identical; only the units change.

Subscribe on YouTube@sagnikteaches

What one hour of job time costs you

Start with the hour, because everything else is built from it. A one-technician truck-mount business might look like this:

InputIllustrative valueWhere it comes from
Technician wage$22.00 an hourPay yourself this if you are the technician
Payroll burden18%Take the real figure from payroll or your accountant
Loaded labour$25.96 an hour$22.00 × 1.18
Van and machine$14.00 per job hourFuel, servicing, wear on the extractor
Overhead$15.00 per job hour$1,650 a month ÷ 110 job hours
Cost per job hour$54.96$25.96 + $14.00 + $15.00
Price per job hour at a 25% margin$73.28$54.96 ÷ 0.75

"Job hours" means paid hours spent on jobs: set-up, cleaning, pack-down and driving between customers. The $1,650 of monthly overhead in this example is liability and van insurance, marketing, software and phone, accountancy and the time you spend quoting.

The classic slip is dividing overhead by every paid hour in the month instead of the hours you actually put on jobs. Divide the same $1,650 by 160 and overhead drops to $10.31 an hour, which pulls the price per job hour down to $67.03. You would undercharge by $6.25 for every hour on site, on every job, without any single quote looking wrong.

The margin here is profit as a share of the price, not a markup on cost. The difference matters enough that it gets its own sum further down. If you want help working out your own hourly figure first, working out an hourly rate for a tradesman walks through the same arithmetic.

The Complete Excel Course with AI Integration thumbnail

The Complete Excel Course with AI Integration

From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.

By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner

Buy now

Time your rooms, then check them against published rates

Next comes the minutes table. Take a stopwatch to ten rooms in each size band and time everything from the pre-vacuum to the final groom, including pre-spray, extraction and spotting, but not set-up or driving. Those belong to the fixed visit time, which is 45 minutes in this example. The averages become the table:

Room size bandTypical areaMinutes at average soilImplied speed
Small (up to 100 sq ft)80 sq ft10480 sq ft an hour
Standard (101 to 180)140 sq ft16525 sq ft an hour
Large (181 to 300)240 sq ft26554 sq ft an hour
Extra large (301 to 450)370 sq ft38584 sq ft an hour

Soil level then scales the minutes. A reasonable starting set is light 0.85, average 1.00 and heavy 1.35, which you adjust as your logs build up.

The last column is your cross-check. ISSA's article gives production rates by soil level: as low as 400 square feet an hour for extremely soiled carpet, around 600 for moderate to heavy soil, up to 1,000 for average to moderate soil and over 1,600 for light soil. Its author also says the most reliable figures come from your own tracked experience. The speeds in the table are slower than the published ones because they include pre-vacuuming, spotting and grooming. If your own timings fall far outside the published ranges, find out why before you trust either. The article is from 2018, so use it for production rates only and ignore the prices it quotes.

Add-ons priced from minutes and materials

Add-ons are where small jobs leak margin, because each one feels minor. Price each from its own minutes and materials, using the same cost per job hour and margin. They leave out the fixed visit time, which the room prices and the minimum charge already cover.

Add-onMinutesMaterialsCalculated priceCard price
Stairs, per step1.5$0.30$2.23$2.25
Pet odour treatment, per room8$6.00$17.77$18
Moving a heavy item4none$4.89$5
Heavy-soil surcharge on a large room9.1 extranone$11.11$11

One worked line: stairs cost 1.5 minutes × $0.916 a minute ($54.96 ÷ 60) = $1.37, plus $0.30 of materials, which is $1.67 of cost. Divide by 0.75 and you get $2.23. Gum is worth a note: ISSA says chewing gum can cut your production rate in half, so if you want to price gum removal, price it by the minute and keep a floor.

A three-bedroom house with stairs and a pet, priced line by line

Here is the job, in the shape a customer would describe it on the phone. Two standard bedrooms, a large primary bedroom, a large living room with heavy traffic lanes, a small hallway, thirteen stairs, pet odour treatment in the living room and two heavy items to move. Minutes come from the tables above:

LineWorkingMinutes
Two standard bedrooms2 × 1632.0
Primary bedroom (large)26 × 1.0026.0
Living room (large, heavy soil)26 × 1.3535.1
Hallway (small)10 × 1.0010.0
Stairs, 13 steps13 × 1.519.5
Pet odour treatment1 room × 88.0
Heavy items moved2 × 48.0
Fixed visit timeset-up, walk-through, pack-down, driving45.0
Total183.6 (3.06 hours)

Time cost is 3.06 hours × $54.96 = $168.18. Materials are $30.90: chemicals on 840 square feet of rooms at $0.025 a square foot ($21.00), $3.90 for the stairs and $6.00 for the pet treatment. Total cost is $199.08. At a 25% margin the price is $199.08 ÷ 0.75 = $265.44, so you quote $265. That works out at about $0.32 a square foot over the rooms, and $86.60 for each hour on the job.

The hourly method gives the same answer by construction: 3.06 hours × $73.28 is $224.24, and $30.90 of materials at the same margin adds $41.20, which is $265.44. The three methods only differ in how you present the number.

The per-room card and the minimum charge

Homeowners want a number on the phone, so turn the minutes table into a card. Assume your average visit covers four rooms, which your last 30 invoices will confirm or correct. The 45 fixed minutes become 11.25 minutes per room, which you add to each room's own minutes before pricing:

Size bandRoom minutes plus fixed shareCalculated priceCard price
Small10 + 11.25$28.62$30
Standard16 + 11.25$37.95$40
Large26 + 11.25$53.49$55
Extra large38 + 11.25$72.48$75

The minimum charge protects the small end. A one-room visit still costs you the 45 fixed minutes, so set the minimum at the price of fixed time plus the smallest job you will accept. Taking two standard rooms as that job: (45 + 32 minutes) × $0.916 plus $7.00 of chemicals is $77.53 of cost, which becomes $103.38 at a 25% margin. Round up to a $105 minimum.

Now compare the card with the calculator on three jobs:

JobCard totalCalculatorWhat you charge
One standard bedroom$40$79$105 (minimum)
Two standard bedrooms$80$103$105 (minimum)
The three-bedroom house with add-ons$288$265$265 (calculator)

The card overshoots on the five-room house because it assumed four rooms per visit and rounds every price up. On a single room it is far too low, which is why the minimum exists. A sound rule is to quote from the calculator and advertise "from" prices from the card. If the card is more than about 10% away from the calculator on your typical job, change the rooms-per-visit assumption.

Why one price per square foot fails on small jobs

The fixed visit time is also why a single per-square-foot rate never works. Run the calculator at four job sizes, assuming whole-job production of 550 square feet an hour:

Job sizeMinutes including fixed timePrice at 25% marginPer square foot
200 sq ft66.8$88$0.44
500 sq ft99.5$138$0.28
1,000 sq ft154.1$222$0.22
2,000 sq ft263.2$388$0.19

A flat $0.25 would lose money on the 200 square foot job, miss your margin on the 500 and overcharge the 2,000. Use a per-square-foot price only for big open areas, and read it off a table like this one rather than typing a single figure.

Asking an AI to build it: prompt, output and fixes

You have four sensible routes, and three of them work inside the spreadsheet. ChatGPT for Excel and Google Sheets is an OpenAI add-in; OpenAI's help article lists which ChatGPT plans include it and how much use each allows, so check it against yours. Gemini in Google Sheets can build tables, formulas and whole sheets, but only on an eligible Workspace or Google AI plan. Copilot in Excel can add formulas and edit worksheets, although Microsoft's own page warns it might not be included with your Microsoft 365 subscription. The fourth route works with any chat assistant: paste the prompt, then copy the formulas across by hand. For writing Excel formulas with ChatGPT and prompting inside Google Sheets there are longer walk-throughs on this site.

Whichever you pick, give it the structure and the numbers, and ask it to show its working:

Build a carpet cleaning price calculator that works in Excel and Google Sheets.
Four tabs: Inputs, Rooms, Soil, Quote. No number typed inside a formula.

Inputs: technician wage 22.00; payroll burden 18%; van and machine cost per
job hour 14.00; monthly overhead 1650; job hours per month 110; target margin
25% (profit divided by price, NOT markup on cost); fixed minutes per visit 45;
chemicals per sq ft 0.025.
Rooms: Small 80 sq ft 10 min; Standard 140 / 16; Large 240 / 26; XL 370 / 38.
Soil: Light 0.85; Average 1.00; Heavy 1.35.
Quote: one line per room (size, soil, quantity) plus add-on lines (stairs per
step 1.5 min + 0.30 materials; pet odour 8 min + 6.00; heavy item 4 min).
Output: total minutes, cost, price at target margin rounded to the nearest 5,
a minimum charge cell, and a check cell that says BELOW TARGET if margin is
more than 2 points under target.
Use INDEX and MATCH, not XLOOKUP. List every formula. Then give me three test
jobs with the answers worked out step by step so I can check them by hand.

A typical reply (illustrative) arrives with a tidy layout and formulas like these:

Inputs!B10  Loaded labour per hour   =B2*(1+B3)
Inputs!B11  Overhead per job hour    =B5/B6
Inputs!B12  Cost per job hour        =B10+B4+B11
Inputs!B13  Minimum charge           =MROUND(((B8+2*INDEX(Rooms!C2:C5,2))*B12/60+2*INDEX(Rooms!B2:B5,2)*B9)/(1-B7),5)
Quote!E5    Minutes for a line       =C5*INDEX(Rooms!C:C,MATCH(A5,Rooms!A:A,0))*INDEX(Soil!B:B,MATCH(B5,Soil!A:A,0))
Quote!B20   Time cost                =(SUM(E5:E14)+Inputs!B8)/60*Inputs!B12
Quote!B21   Materials                =SUM(D5:D14)*Inputs!B9+SUM(F5:F14)
Quote!B22   Cost                     =B20+B21
Quote!B23   Price                    =MAX(Inputs!B13,MROUND(B22/(1-Inputs!B7),5))
Quote!B24   Margin                   =(B23-B22)/B23
Quote!B25   Flag                     =IF(B24<Inputs!B7-0.02,"BELOW TARGET","OK")

The layout is good and the formulas need a careful read, because five problems turn up again and again:

  • Markup instead of margin. The price cell often reads =B22*(1+Inputs!B7). That is a 25% markup, which is a 20% margin. Replace it with the division by one minus the margin.
  • A number buried in a formula. A stray 0.025 or 45 inside a formula means that changing the input will not change the quote. Search the formulas for digits.
  • A range that stops short. SUM(E5:E14) misses a line you add in row 15. Ask for a total that covers the whole block, or leave spare rows inside the range.
  • No minimum charge. The model may leave out the MAX that applies the minimum, so a one-room job quotes at $79.
  • An unrequested lookup function. If your Excel is older than 2021 it may not have XLOOKUP at all, which is why the prompt names INDEX and MATCH.

Then test it. Enter the three test jobs and compare each answer with the AI's hand-worked figure and with your own calculator sum. Whichever route built the sheet, review every formula, calculation and changed cell before you trust it, and let an in-sheet assistant work on a copy of the file rather than your live price list. Do not ask a chat assistant for the price of each job directly: spreadsheet arithmetic is repeatable and a conversation is not.

Margin check: markup, overruns and the line you must not cross

Two sums are worth running before you publish a price card. First, markup against margin. On the $199.08 house job, a 25% markup gives $248.85, which looks reasonable, yet your real margin is 20.0%. The correct price is $265.44, so the markup version leaves $16.59 on the table per job. At 40 jobs a month that is about $664, and you would never see it as a line in the accounts.

Second, overruns. Quote $265 and the job takes longer than estimated, because the carpet was dirtier than it looked or the customer remembered two more rooms. Time costs rise and materials do not:

Job runs longer than estimated byCostMargin at a $265 price
0% (as quoted)$199.0824.9%
10%$215.9018.5%
20%$232.7112.2%
30%$249.535.8%

A 20% overrun halves the margin, and a 39% overrun wipes it out. That is why the calculator carries a check cell: it flags a quote below target. Any job that finishes under 15% deserves a second look at its minutes. It is also why heavy soil needs its own factor and why you should price on what you saw at the walk-through, not on what the customer said on the phone.

Checking the sheet against five real jobs

A calculator is a hypothesis until it meets real jobs. For the next ten jobs, record the start and finish times and compare them with the sheet's minutes. A log from five jobs, with illustrative figures, shows where the model is wrong:

JobCalculator minutesActual minutesVariance
Three-bedroom house with stairs and pet treatment184201+9%
Two standard bedrooms7774-4%
Stairs (14 steps) and landing7695+25%
Four-bedroom house, no add-ons129126-2%
Living room, heavy soil, pet treatment88112+27%

The plain bedroom jobs are within a few per cent, so the room times are sound. The two big misses both involve stairs or heavy soil. Fix the input that caused each miss, not the final price: raise the stairs time per step, raise the heavy-soil factor, then keep logging and re-check after ten more jobs. If you averaged the five variances into one fudge factor you would overcharge the plain jobs and still under-price the stairs.

The customer's "one room" that measures 520 square feet

A realistic mistake shows up in the open-plan lounge. The customer says "one room, the living area", you price it on the card as a large room at $55, and on arrival it measures 520 square feet because the dining area runs into it. That is bigger than the top band, so the card has no price for it. At 584 square feet an hour, the room takes about 53 minutes. Add the 45 fixed minutes and $13 of chemicals and the cost is $103, which needs about $138 to hit target.

The minimum of $105 would have saved you from the $55, but at $105 the margin is under 2%. The fix has two parts. Define rooms by measured area, not by what the customer calls them, and ask for a rough floor plan or photos when you book. Then make the quote tab take square feet as an input, so an open-plan space is priced from its area at the speed of the nearest band. When you move the finished sheet into software later, the carpet cleaning quote template shows the customer-facing wording for rooms, stairs and pets, and markup against margin in construction gives a second set of worked numbers for the same trap.

Carpet pricing questions the calculator answers

What should a carpet cleaning minimum charge be?

Set it at the price of your fixed visit time plus the smallest job you are happy to take, at your target margin. In the worked example that is 45 fixed minutes plus two standard rooms, which comes to about $103, so the minimum is $105. Use your own costs and minutes, not these figures.

Should I advertise a price per square foot?

Only for large open areas, and with a minimum. Cost per square foot falls as the job grows because the fixed visit time is spread over more carpet, so one rate overcharges big jobs and undercharges small ones. Per-room prices with a minimum charge are easier for homeowners to compare and for you to protect.

How do I price stairs?

Time a few flights, then price per step from the minutes and the materials, divided by one minus your margin. At 1.5 minutes a step the example comes to about $2.25 a step, so thirteen steps add roughly $29. Steep, curved or stained stairs deserve a higher minutes figure.

Can I just ask ChatGPT for the price of each job?

Use it to build and test the spreadsheet, not to do the sums in conversation. A chat reply can slip on arithmetic and will differ from one attempt to the next. A spreadsheet gives the same answer every time, and you can check it against a job worked out by hand.

Further reads

Sources: ISSA article 'Carpet Care 101: Pricing and Production Rates' (2018); OpenAI help article on ChatGPT for Excel and Google Sheets; Google Docs Editors Help page on Gemini in Google Sheets; Microsoft support page on Copilot in Excel.

Want your price list built from your own costs?

On a 1:1 call we can go through your job times and overheads, decide which parts of the calculator an AI assistant should build, and hand over a sheet your team can run.

Book a 1:1 call with me