Calculation Model
The calculation engine models the same variables any legitimate commercial window cleaning company uses to build a quote. The logic is identical in both the Python (FastAPI) and Rust (Actix-web) engines.
Base Minutes per Window
Time-per-window varies significantly by glass type. Specialty installations like skylights and atriums — common in medical facilities and office towers across Northern Ontario — take roughly three times longer than standard single-pane windows.
Window Type |
Base Minutes |
Common In |
|---|---|---|
Standard single pane |
4 min |
Office buildings, residential units |
Double pane |
5 min |
Modern office towers, medical clinics |
Floor-to-ceiling |
8 min |
Retail storefronts, hotel lobbies |
Storefront |
6 min |
Street-level retail, restaurants |
Specialty (skylights/atriums) |
12 min |
Atriums, medical centres, industrial skylights |
Service Type Multipliers
Service Type |
Multiplier |
|---|---|
Interior only |
0.45 |
Exterior only |
0.55 |
Both interior and exterior |
1.0 |
Access Method Multipliers
Access method is the single largest variable in commercial window cleaning pricing after window count. A 50-window office building in downtown North Bay that can be cleaned entirely from ground level with extension poles costs a fraction of the same building requiring boom lift or rope access for upper floors.
Access Method |
Multiplier |
Typical Use |
|---|---|---|
Ground level / extension pole |
1.0× |
Single-storey retail, ground-floor offices |
Ladder (second storey) |
1.4× |
Two-storey commercial buildings |
Boom lift / aerial platform |
2.2× |
Mid-rise office buildings (3–6 floors) |
Rope access (SPRAT/IRATA certified) |
3.0× |
High-rise buildings, difficult access points |
Swing stage |
3.5× |
High-rise towers, full-facade cleaning |
Frequency Discounts
Frequency |
Discount Factor |
Effective Discount |
|---|---|---|
One-time |
1.00 |
0% |
Quarterly |
0.90 |
10% |
Monthly |
0.80 |
20% |
Weekly |
0.70 |
30% |
Calculation Formula
1. time_per_window = base_minutes × service_multiplier × access_multiplier
2. total_minutes = time_per_window × window_count
3. labour_cost = (total_minutes / 60) × labour_rate × frequency_discount
4. materials_cost = labour_cost × 0.08
5. subtotal = labour_cost + materials_cost
6. margin_amount = subtotal × (margin_pct / 100)
7. final_price = subtotal + margin_amount
8. per_window_cost = final_price / window_count
All monetary values are in Canadian dollars (CAD). The default labour rate of $22.00/hr reflects the Northern Ontario average for experienced commercial cleaning technicians as of 2026.