(443) 600-8990Get a free consultation
  1. Home
  2. Blog
  3. Cleaning services
Cleaning services

One-time deep cleans vs. recurring contracts: track them separately

Learn why mixing deep-clean and recurring revenue hides which jobs actually pay, with a simple setup to split them and compare revenue per labor hour.

One-time deep cleans vs. recurring contracts: track them separately

October 15, 2026 · Mitt Patel · 6 min read

It's the end of another month, and your bank account looks fine. You booked three move-out cleans at $300 each and your usual eight recurring houses at $150 a visit, and your bank balance climbed as usual. Total revenue looks healthy. But you have no idea which of those jobs actually made you money once you count the hours your crew spent on them.

Why this happens

Most cleaning businesses start with one income category in QuickBooks Online, called "cleaning revenue" or "services income." Every invoice, whether it's a two-hour biweekly visit or a six-hour move-out deep clean, lands in the same bucket.

That feels simpler. But it means you can't answer a basic question: are your deep cleans actually worth the hours they take, or are they eating into time you could spend on steady recurring clients?

Deep cleans and move-outs usually take more labor per job. They often involve ovens, baseboards, inside cabinets, and corners nobody touches during a regular visit. Recurring work is faster per visit because the home or office is already maintained. If you price both types off the same mental formula, or you don't track hours against revenue separately, you can end up with a calendar full of deep cleans that look great on the invoice but quietly cost you more in labor than your recurring contracts do.

The bad decision this causes is simple: you keep saying yes to one-time jobs because the invoice total looks bigger, while the lower-dollar recurring contract was actually your best use of a crew's time. Without separate numbers, you can't see it.

A worked example

Say you run one crew of two people. In a given week, you do one move-out deep clean that takes 6 hours and bills at $300. You also do four recurring visits that each take 2 hours and bill at $150.

Here's what that looks like per labor hour:

  • Deep clean: $300 divided by 6 hours equals $50 per labor hour.
  • Recurring visit: $150 divided by 2 hours equals $75 per labor hour.

Both jobs look fine as standalone numbers, but one uses labor far more efficiently than the other. But the recurring work is earning you $25 more per hour of labor. If you spent that same crew week doing four more recurring visits instead of the one deep clean, you'd gross less per job but more per hour worked.

This doesn't mean deep cleans are bad business. Some owners use them to fill gaps between recurring routes, attract new recurring clients, or charge a premium that makes the math work. The point is you can't make that call unless you can see the per-hour number for each type of work separately.

How to set it up

  1. Create two income accounts in QuickBooks Online. Under your chart of accounts, split your current "cleaning services" income line into two: "recurring contract revenue" and "one-time/deep clean revenue." If you also do move-outs or post-construction cleans, you can add those as a third line or group them with deep cleans, depending on how often you do them.
  1. Tag every invoice correctly at the time you create it. When you invoice a client, choose the right income account based on the job type, not the client. The same client might book a recurring contract most months and a one-time deep clean once a year. Both get recorded, just under different lines.
  1. Track labor hours per job, not just per week. Use whatever system your crew already logs time in, whether that's a paper sheet, an app, or notes in your scheduling software. You need hours by job, not just total hours for the week.
  1. Calculate revenue per labor hour monthly for each category. Take total recurring revenue for the month and divide by total recurring labor hours. Do the same for one-time and deep clean revenue. Keep these as two separate numbers you check every month, not one blended average.
  1. Compare the two numbers over a few months. One month of data can be thrown off by a single unusually long job. Look at the pattern over three or four months before you decide anything about pricing or how many deep cleans to accept.

The mistakes that undo it

Letting the bookkeeping default back to one line. If you're not watching for it, new invoices sometimes get coded to whichever income account is listed first, regardless of job type. Check this every month, especially if someone else on your team creates invoices.

Not counting setup and travel time. If your crew spends 30 minutes loading extra equipment for a deep clean, that time belongs in the deep clean labor hours, not lumped into general overhead. Leaving it out makes deep cleans look more profitable than they are.

Mixing one-time jobs that are actually different. A move-out clean, a post-construction clean, and a one-time "spring cleaning" request can have very different labor demands. If you lump them all into one "one-time" category and the mix changes month to month, your per-hour number will bounce around for reasons that have nothing to do with pricing.

Forgetting to revisit pricing once you see the number. Tracking revenue per labor hour only helps if you use it. If deep cleans consistently come in low, that's information for your next pricing conversation, not something to note and ignore.

Monthly checklist

  • Confirm every invoice from the past month is coded to the correct income account: recurring or one-time.
  • Pull total revenue for each category from QuickBooks Online.
  • Pull total labor hours for each category from your crew's time records.
  • Calculate revenue per labor hour for recurring work and for one-time work.
  • Compare both numbers to the prior two or three months.
  • Flag any one-time job that came in far below your recurring rate for a closer look at what made it run long.

Common questions

Should I track every type of one-time job separately, or lump them together?

It depends on how many different types of one-time work you do and how different they are in scope. If you mostly do move-outs and they're fairly similar in size, one combined "one-time" category is usually enough. If you also take on post-construction cleans or large commercial one-offs that run much longer, a separate line for those makes the numbers easier to read.

What if my recurring contracts include different frequencies, like weekly versus monthly?

You can keep them in one "recurring" category for revenue-per-hour purposes, since the comparison you're making is recurring versus one-time. If you want more detail later, you can break recurring revenue down further by frequency, but start with the simpler two-category split first.

How many months of data do I need before I trust the numbers?

Three to four months is a reasonable minimum. A single slow week or one unusually long job can skew a single month. Looking at a few months together smooths out those swings and shows you the real pattern.

Does this replace the need to track overhead costs like supplies and mileage?

No. Revenue per labor hour tells you about labor efficiency specifically. It doesn't account for supply costs, vehicle expenses, or other overhead tied to a job. Those belong in a separate conversation about full job costing, which is a useful next step once you have labor hours sorted out.

Setting up separate income lines and getting labor hours tracked consistently takes some initial work, and keeping it accurate month after month takes more. North Hudson Bookkeeping sets this up for cleaning businesses and keeps it current, so the numbers are ready when you need to make a pricing decision. The first call is free.

Want this handled for you?

Monthly bookkeeping from $500 a month: every account reconciled, clear reports and a short summary each month. Book a free 20-minute call or call (443) 600-8990.

Get a free consultation

Talk to MittCall or text (443) 600-8990 · or book a free consultation
Free consultationFree callCallTextWritten quoteQuote