How to price a cleaning job from costs and target margin

A cost-first cleaning job pricing method with formulas, a worked example, and a margin-versus-markup correction.

Pricing a cleaning job from cost starts with a boundary: estimate the work and the costs you expect, then solve for a selling price. Do not begin by copying a competitor's number.

The full guide and quote-ready checklist are here:

yunczo.github.io/cleanquote-profit-toolkit/guides/how-to-price-a-cleaning-job.html

The cost-first formula

Let:

  • C = total estimated job cost
  • m = target margin written as a decimal
  • P = calculated pre-tax client price

Then:

P = C / (1 - m)

For a 30% target margin, use 0.30—not 30—in the formula. The target must be below 100% so the denominator stays positive.

After calculating the price, verify the model:

amount above modeled cost = P - C
realized modeled margin = (P - C) / P

If you round the client price, run the margin check again. Rounding down can put the modeled result below the target.

1. Estimate cleaner-hours

Cleaner-hours combine crew size and on-site time:

cleaner-hours = number of cleaners × hours on site

Two cleaners working three hours create six cleaner-hours. Do not divide the labor cost by the crew size a second time.

Include setup, laundry, disposal, or other paid time when those activities belong in your cost model. Define the scope and exclusions before estimating time; a scope change should trigger a new estimate.

2. Turn hours into labor cost

Multiply cleaner-hours by your own internal labor cost per cleaner-hour. Use current business records, and decide which payroll-related costs belong in that rate. Do not count the same cost again in overhead.

If the owner will perform the cleaning, omitting owner labor can make the job appear less costly than the work required.

3. Add other direct costs and overhead

Add the costs that the labor calculation does not already include, such as:

  • supplies consumed by the job
  • travel or vehicle cost assigned to the job
  • job-specific fees
  • a consistent allocation of overhead

Use one documented allocation method. A cost omitted from the model makes the calculated margin look higher; counting one twice makes it look lower.

Worked example

Every dollar amount below is illustrative arithmetic, not a suggested wage, cost, or market price.

Suppose a job is modeled this way:

  • 2 cleaners × 3 hours = 6 cleaner-hours
  • 6 cleaner-hours × an illustrative $25 internal labor cost = $150
  • illustrative supplies = $18
  • illustrative travel = $12
  • illustrative overhead allocation = $30

Total estimated cost:

C = $150 + $18 + $12 + $30 = $210

With a 30% target margin:

P = $210 / (1 - 0.30)
P = $210 / 0.70
P = $300

The modeled amount above cost is $90. The check is $90 / $300 = 30%. This verifies the arithmetic; it does not predict the completed job's result.

Margin is not markup

Margin divides the amount above cost by the selling price. Markup divides it by cost.

Adding 30% to the same $210 cost produces:

$210 × 1.30 = $273

That leaves $63 above the modeled cost. The margin is $63 / $273 = 23.1%, not 30%.

To convert between them:

markup = margin / (1 - margin)
margin = markup / (1 + markup)

A 30% margin corresponds to a 42.9% markup. That is why multiplying cost by 1.30 misses a 30% margin target.

Before sending the quote

  1. Write the cleaning scope, assumptions, add-ons, and exclusions.
  2. Multiply crew size by expected on-site time to get cleaner-hours.
  3. Apply your current internal labor cost without double-counting it elsewhere.
  4. Add supplies, travel, job-specific fees, and allocated overhead.
  5. Divide total cost by one minus the target margin.
  6. Recheck the margin after rounding the price or changing the scope.
  7. Handle applicable taxes and business terms separately for your location.
  8. After the job, record actual hours and costs so the next estimate can improve.

Extra time, rework, omitted labor, unplanned supplies, and costs tied to the final selling price can all change the result. A target margin is a planning input, not a promise.

If you want the assumptions, client quote, and actual-versus-quoted log in an editable workbook, the CleanQuote Profit Toolkit is $9 USD equivalent in Bitcoin. Its encrypted form requests a signed quote first; nothing is charged by the form, and payment is requested only after the reply confirms the exact amount, address, and expiry. It is a spreadsheet tool, not accounting, tax, legal, or profit advice, and it makes no profit guarantee: yunczo.github.io/cleanquote-profit-toolkit/#order