Skip to content
Zelvari Flow

A Zelvari Flow field guide

How to calculate profit margin on a cleaning job

Work through a cleaning-job example, see what an extra hour changes, and understand the difference between profit margin and markup.

Start with the cost of doing the work

A visit price tells you what a customer pays. It does not tell you what the job leaves after the work is done. To estimate that, count the labor and other costs attached to the visit. Include your own pay when you clean: treating your time as free makes the result look healthier than it is.

Use total cleaner-hours. Two people working for two hours contribute four cleaner-hours. Add paid travel, applicable payroll burden, supplies, payment fees, and a reasonable share of overhead. Keep track of which costs you included so the same expense is not counted twice.

A simple job, worked through

Consider an illustrative solo-cleaner job priced at $150. It takes three hours, labor costs $25 per hour, and the entered other costs total $15. For this example, assume the $15 includes all other modeled visit costs and there are no additional payment fees.

The visit costs (3 × $25) + $15 = $90. Estimated profit is $150 − $90 = $60. Profit margin is profit divided by revenue: $60 ÷ $150 = 40%. These are example inputs, not recommended pay or market rates. The result is before income tax and any costs omitted from the calculation.

Watch what an extra hour does

Now the same visit takes four hours, while the price and other costs stay unchanged. Cost becomes (4 × $25) + $15 = $115. Estimated profit falls to $35, and the margin becomes $35 ÷ $150 = about 23.33%.

The customer still pays $150, but the job leaves $25 less after the modeled costs. That change is a reason to investigate the visit: an added task, a different condition, a timing error, or an unrealistic original estimate can each call for a different response.

Margin and markup use different denominators

A 25% target margin means keeping 25% of revenue after the entered costs. With $115 of costs and no separate processing fees, the calculation is $115 ÷ (1 − 0.25) = $153.333… per visit. That is approximately $153.33; rounding the price up to $153.34 avoids rounding below the target.

A 25% markup instead adds 25% of cost: $115 × 1.25 = $143.75. Profit is then $28.75, and $28.75 ÷ $143.75 = a 20% margin. Both calculations are valid; they answer different questions. Label your worksheet clearly before using either number in a quote.

Handle payment fees consistently

If processing fees are modeled separately, use target price = (visit cost + fixed payment fee) ÷ (1 − target margin − percentage fee). Enter percentage values as decimals in that formula. The denominator must stay above zero.

Do not also include those same fees in other visit costs. A fee based on revenue changes when the price changes, which is why separating it can make the estimate more useful. The full Zelvari Flow toolkit separates these inputs; the free check groups other costs into one entered amount.

Use the result to choose your next conversation

A cost-based target is a scenario, not proof that a customer will accept that price. Check your records and agreed scope first. You can discuss a revised price, quote additional tasks separately, or agree less work within the existing budget. Keep the assumptions and the customer’s decision beside the job so the next review starts with evidence.

From reading to reviewing

Look at one recurring job.

Enter your own time, costs, and target margin in the free check. You can also see what the full toolkit includes and its current launch status.