HOME / BLOG

Profit · September 2, 2026 · 10 min read

Job Costing for Cleaning and Security Contracts: Find the Ones Losing You Money

How to job-cost cleaning and security contracts: loaded labor rates, bid-vs-actual drift, and a monthly per-contract P&L routine that finds money-losing accounts.

By StockPoint Research Team

Job costing means measuring what each contract actually costs you — real labor hours at fully loaded rates, supplies consumed, and a fair share of overhead — and comparing that number to what the contract bills every month. Most cleaning and security companies price a job once, at bid time, and never check again. The fastest way to raise your profit usually isn't winning new work; it's finding the two or three contracts that have quietly drifted below cost and fixing or repricing them.

Three facts frame the problem. Direct labor typically runs 45–55% of revenue in cleaning businesses, so small labor drift moves margins fast. An hour of labor costs roughly 12% more than the wage in mandatory employer burden alone — payroll taxes, unemployment insurance, and workers' comp — before a single benefit is added. And even the largest operator in the industry, ABM Industries, ran an operating margin of roughly 3.7% in fiscal 2025, which tells you how little room for error this industry leaves.

This guide walks through how to compute a loaded labor rate, the five numbers that decide whether a contract makes money, where bid-versus-actual drift comes from, and a monthly per-contract P&L routine that takes about an hour once your time data is reliable.

What is job costing for a cleaning or security contract?

Job costing is the practice of assigning every dollar of cost — labor, payroll burden, supplies, equipment, and overhead — to the specific contract that consumed it, then comparing each contract's true cost to its revenue. The output is a simple per-contract profit and loss statement: this building brings in $4,500 a month and costs $4,100 to serve, so it earns $400.

It is not the same thing as bidding. A bid is a forecast: you estimate hours, wages, and supplies before you've ever serviced the building. Job costing is the audit of that forecast, using actual punches, actual supply orders, and actual wage rates. If you bid carefully but never job-cost, you know what the contract was supposed to earn — not what it earns. (If the bid itself is the weak point, start with our guide to bidding commercial cleaning contracts without guessing.)

The distinction matters because contracts change after the ink dries: the client asks for a little more, crews take longer than the walkthrough suggested, wages rise, and supply prices creep. Flat-rate billing hides all of this — the invoice never changes, so nothing looks wrong.

Why profitable companies still keep money-losing contracts

A company can be profitable overall while several of its contracts lose money, because the winners cross-subsidize the losers. If your company nets 10% overall, a single contract losing $500 a month silently consumes the entire profit of $5,000 a month of healthy revenue. Owners who only look at the company-level P&L never see this — the blended number looks fine right up until a good contract cancels and the cross-subsidy collapses.

The margins in this industry make cross-subsidy expensive. ABM Industries, the largest publicly traded facility-services company in the US, reported operating income of about $322 million on $8.7 billion of revenue in fiscal 2025 — an operating margin of roughly 3.7%. Small operators typically target much higher per-contract margins (industry pricing guides commonly recommend building in 10–30%), but the point stands: nobody in field services has margin to burn on accounts that were never repriced.

What does an hour of labor really cost? (The loaded rate)

A loaded labor rate is the wage plus every employer-paid cost that scales with that wage. For US employers the mandatory pieces are: Social Security and Medicare taxes at 7.65% of wages (IRS Topic 751); federal unemployment tax, which nets out to 0.6% on the first $7,000 of each worker's annual wages for most employers, so only a few cents per hour; state unemployment insurance, which varies by state and by your experience rating; and workers' compensation. For janitorial work (class code 9014), workers' comp averages around $2.43 per $100 of payroll nationally, with higher rates in much of the Northeast.

Worked example (hypothetical): a cleaner earning $17.50 an hour — close to the national median of $17.71 for janitors and building cleaners in May 2025, per the Bureau of Labor Statistics — costs about $1.34 in FICA, roughly $0.43 in workers' comp at the national average rate, a few cents of federal unemployment, and typically $0.15–$0.40 in state unemployment depending on your state and rating. That's already about $19.50–$19.70 per hour, a 12% premium, before any benefit you choose to offer.

Add paid time off, holidays, health contributions, uniforms, and supervision, and the premium grows. Across all private-industry employers, BLS's Employer Costs for Employee Compensation data for March 2026 puts total benefits at 30.1% of compensation — hourly field-service crews usually carry lighter benefit loads than that average, but a fully loaded rate 20–30% above the base wage is a realistic planning number once PTO and any insurance are in. If you're job-costing with raw wages instead of loaded rates, every contract looks 15–25% more profitable than it is.

The five numbers that decide whether a contract makes money

1. Verified labor hours per site. This is the foundation, and it has to come from actual clock data tied to the specific building — scheduled hours and remembered hours both run low. If your punches aren't trustworthy, fix that first; job costing built on padded or buddy-punched hours is fiction.

2. The loaded labor cost of those hours. Multiply each worker's actual hours at the site by their loaded rate, including overtime premiums in the weeks they occur. Overtime is a job cost, not a payroll abstraction: the contract whose schedule forced the seventh shift should absorb the extra 50%.

3. Supplies consumed at the site. Chemicals, liners, paper, and consumable equipment, ideally tracked per building rather than lumped into one company-wide supplies line. Two similar buildings can differ by hundreds of dollars a month in supply burn.

4. Direct site costs. Travel time between sites, parking and tolls (a real line item in the New York metro), equipment assigned to the building, and any subcontracted work.

5. An overhead allocation. Office staff, insurance, software, vehicles, marketing. The simplest defensible method is a flat percentage of revenue: divide last year's total overhead by total revenue and apply that percentage to every contract. Precision matters less than consistency — the goal is comparing contracts against each other on equal footing.

Where margin drift comes from: bid versus actual

Contracts rarely lose money the day they start. They drift there. The usual causes: scope creep (the day porter stays an extra half hour, the extra Friday polish becomes routine), understaffed bids that get corrected upward after complaints, overtime bleeding in when crews cover call-outs, wage increases granted mid-contract with no price escalator, supply burn rising with building occupancy, and travel time that was never in the bid at all. Security contracts have their own version: a 24/7 post has to be covered no matter what, so every call-out becomes overtime for whoever stays, and the contract absorbs a time-and-a-half hour that was bid at straight time.

Worked example (hypothetical): you bid an office contract at $4,500 per month assuming 110 crew-hours at a $20 loaded rate ($2,200), $225 of supplies, and a 25% overhead allocation ($1,125). Expected profit: $950 a month, about 21%. Six months in, the client's requests have pushed actual hours to 128, and a $1 raise moved the loaded rate to about $21.10. Labor is now roughly $2,700, supplies have crept to $310, and overhead is unchanged — total cost about $4,135, leaving $365, an 8% margin. Nothing dramatic happened. Eighteen extra hours a month and a one-dollar raise cut this contract's profit by more than 60%, and because the invoice amount never changed, nothing on the company P&L pointed at this building.

That is the argument for costing per contract, monthly: each individual drift source is too small to notice and too steady to reverse on its own.

A monthly per-contract P&L routine

Once your time data is reliable, this takes about an hour a month. Step 1: pull actual hours per site from your time clock for the month, including overtime hours flagged separately. Step 2: multiply by loaded rates to get true labor cost per contract. Step 3: add supplies issued to each site, direct site costs, and your standard overhead percentage. Step 4: put each contract's revenue next to its cost and compute the margin. Step 5: rank contracts by margin and compare each against its bid assumptions — hours especially.

Then apply a simple traffic light. Green: margin at or near the bid. Yellow: margin more than a few points below bid — find out which input drifted before renewal. Red: margin below your overhead percentage (meaning the contract doesn't cover its share of running the company) — act now, not at renewal. The ranking matters more than any absolute threshold: your bottom two or three contracts are where next quarter's profit improvement lives.

The manual version of this lives in a spreadsheet fed by payroll reports and supply receipts, and it works — its weakness is the labor data, which is usually rounded, remembered, or copied from the schedule rather than measured. This is the specific problem StockPoint was built around: GPS-verified punches tied to each site produce the actual hours, per-site inventory tracks supply burn per building, and a per-contract monthly P&L is generated from those verified numbers instead of estimates. If you bill hourly clients, the same verified punches price the invoices themselves.

What should you do with a contract that's losing money?

Reprice it with evidence, not apology. A renewal conversation backed by data — "the building now takes 128 hours a month against the 110 we scoped; here's the log" — succeeds far more often than a rate-increase letter, because it reframes the increase as a scope correction the client can verify. Many clients would rather trim scope than pay more; both outcomes fix your margin.

Add an escalator going forward. A clause tying price to wage increases or an annual CPI adjustment prevents the next drift cycle. Mid-contract, propose it at the first scope change, when you're already renegotiating.

Exit as a last resort, with math in hand. If a red contract can't be repriced or re-scoped, compare its monthly loss against the cost of replacing that revenue. Sometimes keeping a mildly unprofitable anchor building is rational — it holds a route together or feeds referrals — but that should be a decision you make knowingly, with a number attached, not a surprise you discover in year three.

How often should you job-cost your contracts?

Monthly. A monthly cycle catches drift within one billing period, while the scope change that caused it is still fresh enough to renegotiate. Quarterly is the minimum that still deserves the name; annually is an autopsy. The monthly version only becomes practical when hours per site come out of a system automatically — if it takes a day of spreadsheet work, it won't happen after month two.

What's a good profit margin on a commercial cleaning contract?

Industry pricing guides commonly recommend building 10–30% margin into a bid after labor, supplies, and overhead, with most small commercial operators targeting the middle of that range per contract. Company-level net margins land lower once every cost is counted — direct labor alone typically absorbs 45–55% of revenue, and the largest facility-services operators run single-digit operating margins. The more useful benchmark is internal: each contract should at least cover its overhead allocation, and your portfolio ranking should drive where you spend renegotiation effort.

Is job costing worth it for a small company?

Yes — arguably more than for a large one. With eight contracts, one bad account can be 15% of your revenue and all of your profit, and you don't have a finance team to catch it. The small-company version doesn't need software to start: one spreadsheet row per contract, loaded labor from your last payroll run, supplies from receipts, and a fixed overhead percentage will find your worst contract in an afternoon. The hard part is keeping it honest month after month, which is where verified time data earns its keep.

If you'd rather have the per-contract P&L produced for you, see how StockPoint prices contracts from verified punches — from the time clock through to the monthly profit number per building — at getstockpoint.com/signup.

See it running on your sites this week.

Start free, load your clients and crew with guided onboarding, and print your first kiosk QR the same afternoon. No credit card. No installation. Nothing to maintain.