Pricing a cleaning contract: how to build a cleaning cost estimate

Pricing a cleaning contract comes down to three numbers: how long each room takes, how often it is cleaned, and what an hour actually costs you. Get one of them wrong and you lose either the tender or the margin.
This guide walks through the whole estimate step by step, with rates and a complete worked example you can check. It is the same model as the cost engine in CleanFlow, so you can calculate by hand today and automate tomorrow. If you would rather not calculate by hand, the whole model is ready in the "Kalkyle" sheet of our cleaning plan template in Excel.
The model: price per room, not per building
A professional cleaning estimate is calculated per room and summed up:
- Time per visit = area × minutes per m² × floor factor + set-up time
- Cost per visit = (time ÷ 60) × hourly cost + any per-m² costs
- Annual cost per room = cost per visit × the room's visits per year
- Annual price for the building = sum of all rooms + transport + fixed costs + margin
Why per room? Because frequency varies. The toilets are cleaned every day, the storage room once a week. Calculate the whole building at one frequency and the estimate is systematically wrong. More on that trap at the end.
Step 1: Find the true hourly cost
The base wage is only the starting point. This is how a realistic Norwegian hourly cost is built up. The rates are the same defaults CleanFlow uses in its cost templates, so adjust them to your own numbers.
Cost line | Rate | NOK/hour |
|---|---|---|
Base wage, cleaner |
| 220.00 |
Holiday pay | 12% | 26.40 |
Employer's contribution (zone 1) | 14.1% | 31.00 |
Pension (OTP) | 5% | 11.00 |
Insurance |
| 8.00 |
Direct wage cost |
| 296.40 |
Training (HSE and professional) |
| 7.00 |
Uniform and laundry |
| 5.50 |
IT (mobile, systems) |
| 4.00 |
HSE work |
| 4.50 |
Administration, HR and quality |
| 17.00 |
True hourly cost |
| approx. 334 |
Three things people forget:
- The employer's contribution depends on the zone. 14.1 percent in zone 1, down to 5.1 percent in zone 4 and 0 percent in zone 5. Price a contract in Tromsø at the Oslo rate and you price yourself out.
- Consumables are counted per m², not per hour. Cleaning agents, mops, paper and bags typically add 7 to 10 NOK per m² per year.
- Transport is counted per visit. A mileage allowance of, say, 45 NOK per visit becomes 11,700 NOK a year on a daily contract.
Step 2: Set the time per room
Time is calculated from the area and a productivity rate per room type. The rate is given either as m² per hour or minutes per m². One is 60 divided by the other. Typical ranges for ordinary maintenance cleaning:
Room type | m² per hour | min per m² |
|---|---|---|
Open-plan office, open areas | 200–400 | 0.15–0.30 |
Private office | 100–200 | 0.30–0.60 |
Meeting room | 150–250 | 0.24–0.40 |
Corridor and common areas | 300–500 | 0.12–0.20 |
Toilets and sanitary rooms | 60–120 | 0.50–1.00 |
Kitchen and break room | 80–150 | 0.40–0.75 |
Stairs | 100–150 | 0.40–0.60 |
The range is decided by furnishing, floor type and accessibility. In the CleanFlow model this is handled with multipliers on the base time: densely furnished room × 1.2, hard to reach × 1.3, and carpet has its own factor. On top comes set-up time per room or per visit, meaning trolley, keys and waste handling. Typically 3 to 15 minutes. That item is notoriously underestimated.
If you have your own figures from time measurements, they always beat table values. The point is that the number must sit per room type in the estimate, not as one gut feeling for the whole building. If the team uses CleanFlow, the experience figures collect themselves: every completed task is logged with actual time, and the app calculates actual min/m² per task type and shows it next to your estimate. If you underestimate, you see it in red, and "Update estimate" writes the actual average into the template with one click, so the next quote is priced with numbers from your own buildings.

Step 3: Convert frequency to visits per year
The annual price needs the number of visits per year, per room:
Frequency | Visits per year |
|---|---|
Every weekday (Mon–Fri) | 260 |
3 times a week | 156 |
2 times a week | 104 |
Weekly | 52 |
Every other week | 26 |
Monthly | 12 |
Quarterly | 4 |
If parts of the building need seasonal adjustment, such as a wing closed in summer or extra entrance cleaning in winter, adjust the frequency for the months in question before you sum up. A cleaning plan with frequency per room is the basis for this step.
Worked example: a 1,000 m² office building
Five-day operation, three zones with different frequency and productivity:
Zone | m² | m²/h | Time per visit | Visits/year | Hours/year |
|---|---|---|---|---|---|
Offices and open plan | 700 | 250 | 2.8 h | 156 (3 × per week) | 437 |
Corridors and common areas | 180 | 400 | 0.45 h | 260 (daily) | 117 |
Sanitary and kitchen | 120 | 80 | 1.5 h | 260 (daily) | 390 |
Set-up (15 min per visit) |
|
| 0.25 h | 260 | 65 |
Total | 1,000 |
|
|
| approx. 1,009 |
Then the costs:
Item | Calculation | NOK/year |
|---|---|---|
Labour | 1,009 h × 334 NOK | 337,006 |
Consumables and equipment | 1,000 m² × 10 NOK | 10,000 |
Transport | 260 visits × 45 NOK | 11,700 |
Cost price |
| 358,706 |
Profit margin | 15% | 53,806 |
Annual price (excl. VAT) |
| approx. 412,500 |
Per month | ÷ 12 | approx. 34,400 |
Per m² per year | ÷ 1,000 | approx. 413 |
Staffing comes with it. 1,009 hours divided by a realistic annual capacity (46 working weeks × 37.5 hours × utilisation, minus sick leave) gives roughly 0.7 full-time equivalents. That is useful both for rota planning and for checking that the price actually covers an employment.
Remember: quotes are given excluding VAT. Value added tax of 25 percent is added on the invoice.
What is the "right" price per square metre?
For ordinary office cleaning in Norway, estimates like this typically land in the range of 300 to 600 NOK per m² per year, depending on frequency, room mix and quality requirements. The example above lands in the middle. But the price per m² is a result of the estimate, not a starting point. Two 1,000 m² buildings can differ by 40 percent because one has twice as many sanitary rooms. Whoever prices with a flat m² rate subsidises wet-room-heavy buildings with the dry ones.
The five most common estimate mistakes
- Every room is priced at the building's highest frequency. The classic: the building "is daily", so everything is counted × 260, including the storage room cleaned weekly. Then you invoice weekly rooms five times too often, and the estimate does not survive a tender review. Every room goes on its own frequency.
- Set-up and travel between rooms are forgotten. 15 minutes per visit sounds innocent. On a daily contract it is 65 hours a year, over 20,000 NOK straight out of the margin.
- Margin is calculated on wages instead of cost price. 15 percent on the wage cost alone lets consumables, transport and administration eat into the profit.
- Wrong employer's contribution zone. Up to 9 percentage points difference in hourly cost between zone 1 and zone 4.
- The quality requirement is not read. A tender with INSTA 800 requirements at level 4 or 5 in selected zones needs more inspection time and closer follow-up than one without. Read up on the quality levels before you price.
From spreadsheet to cost engine
Everything above can be calculated in Excel, and our template does it for you: one room per row, and the "Kalkyle" sheet gives annual price, monthly price and full-time equivalents. The problem is maintenance over time. A new room, a changed frequency, a new wage rate, and the whole sheet has to be checked again. And when the customer asks to see the basis per room, the work starts over.
In CleanFlow the estimate lives as cost templates with your rates per room type. Upload the floor plan, and rooms and square metres are picked up automatically, every room is priced at its own frequency, and the quote with margin, staffing need and monthly price is generated from there. Change a rate and the whole estimate updates.

Frequently asked questions
What does cleaning cost per square metre? For ordinary office cleaning in Norway, 300 to 600 NOK per m² per year is a common range. Frequency, share of sanitary rooms and quality requirements decide where in the range you land. Always calculate bottom-up, per room.
How many square metres are cleaned per hour? From 60 to 120 m² per hour in sanitary rooms to 300 to 500 m² per hour in open corridors. Office space is typically 200 to 400 m² per hour. Use your own time measurements where you have them.
What should the hourly price to the customer be? True hourly cost (wages, social costs and overheads, typically 320 to 350 NOK) plus margin. Below 400 NOK invoiced per hour, someone is usually paying the bill somewhere else in the estimate.
Are the prices with or without VAT? Cleaning quotes are given excluding VAT. Value added tax of 25 percent is added on the invoice.
Want to see the estimate done automatically from the floor plan? See how CleanFlow prices a building, or try it free for 14 days.