Skip to content

Job costing

Know which cleans make money before you rebook them

Labor from real timesheets, supplies from real usage and receipts from the field, all rolled up per job. See the profit on every clean and get alerted when a job slips.

app.erp.io/service/reports
Insights · Last 12 weeks

Revenue

$48,210

+12%

Recurring clients

184

+9

Avg job margin

41%

+3 pts

1

Real labor cost

Labor is actual time multiplied by each cleaner's rate, not a guess based on the scheduled duration.

2

Profit bar on every job

Revenue, labor, supplies and expenses in one bar you can read at a glance.

3

Margin alerts

Get flagged when a job drops below your target margin, while you can still fix it.

The costs that hide in a cleaning business

Cleaning looks simple on a price sheet: bedrooms, bathrooms, square footage. Then the real costs pile on. The home that always runs long. The drive across the river. The client who needs a special floor cleaner. The two-person team that should have been one.

Job costing puts all of it on the job. Labor comes from approved time entries. Supplies come from what the crew logged on the visit. Expenses come from receipts snapped in the field.

  • Labor = time on the visit x cleaner rate
  • Drive time counted, not ignored
  • Supplies used on the visit
  • Receipts with OCR, flagged reimbursable or not

A profit bar you can read in two seconds

Every job shows a simple bar: what you billed, what labor cost, what supplies and expenses cost, and what's left. Recurring jobs show it across all visits, so you see whether that biweekly client is worth what they pay.

Only people with the 'see costs' permission see these numbers. Your crews see the job; your managers see the margin.

It works the same way for one-off work. A move-out clean quoted at a flat price shows exactly how much of that price went to labor and product once the crew closes it out, so the next move-out quote is based on evidence instead of memory.

app.erp.io/service/invoices/2291
Invoice #2291

Billed to

Chen Family · Weekly

Paid · Autopay

Due on receipt

Service dateItemAmount
Oct 2Weekly clean$140.00
Oct 9Weekly clean$140.00
Oct 9Inside oven$35.00

Subtotal $315.00

Tip (15%) $47.25

$362.25

Catch bad jobs early

Set a target margin, and maid.co flags jobs that fall below it. A recurring client whose home has quietly grown harder to clean shows up before you've done twenty underpriced visits.

The job profitability report ranks jobs, services and clients by margin. Sort by service type and you might find that move-outs carry the business while Airbnb turnovers barely break even, or the reverse.

  • Margin alerts at your threshold
  • Job profitability report by client, service or team
  • Compare scheduled vs actual hours
  • Export to CSV for your own analysis

Pricing decisions with evidence behind them

Raising prices is uncomfortable, especially with long-time recurring clients. It's easier when you can show why. Job costing gives you actual hours, supply usage and before and after photos to explain that a home has changed since it was first quoted.

It also tells you when to say no. If Airbnb turnovers in one neighborhood always run long and pull your crew away from better-paying work, the numbers make that call for you. And in the CFO module you can model what happens to margin if you add a second crew or shift your service mix.

A day with maid.co

The commercial contract that was losing money

Say you picked up a three-night-a-week office cleaning contract last spring. It felt like steady money. Then a margin alert fires on the job: it's sitting well below your target. You open the profit bar and see labor is higher than you priced it.

The time entries tell the story. The building added a second floor of tenants in August and your crew's nightly time grew by an hour. Supplies are up too, since they're restocking more restrooms. You take the job profitability report to the property manager, show the change in scope, and negotiate a new monthly rate that reflects the real work. The contract is worth keeping again.

FAQ

Questions, answered

Where does the labor cost come from?

Labor cost is calculated from actual time entries on each visit multiplied by each cleaner's pay rate. Because it uses real timers, not scheduled duration, it reflects what the clean actually took. Drive time and other categories can be included so you see the full cost of serving the client.

Can cleaners submit receipts?

Yes. Cleaners or managers take a photo of a receipt in the field app, and OCR reads the vendor, date and amount. Mark the expense as reimbursable if a cleaner paid out of pocket, and attach it to the job it belongs to. Reimbursements flow into payroll prep.

Can I hide job costs from my cleaners?

Yes. Cost and margin information is controlled by the 'see costs' permission. Field crew presets don't include it by default. You can give it to managers, owners or specific crew leads you trust with that information. Permissions can be changed at any time, and the change applies immediately across web and the field app.

How do supplies get counted in job costing?

When crews log supplies used on a visit, such as a bottle of hardwood cleaner or a box of trash liners, the cost is added to the job from the item's cost in inventory. That gives you true supply cost per clean instead of spreading one monthly supply bill evenly across every job.

Can I use this to reprice recurring clients?

That's one of the most common uses. The job profitability report shows margin across all visits for each recurring client. When a home is consistently taking longer than quoted, you have the time entries and photos to back up a conversation about a new price.

Keep exploring

Run your whole cleaning company from one place.

Try every module free for 30 days. No card, no setup fee, and we'll help you bring your clients over.