Commercial Cleaning

Custom commercial cleaning software in Baltimore: the tax is on the room, not the job

Two crews, one building, one night, one mop. Maryland taxes the leased office suite at 6% and exempts the community room across the hall — then, for the rooms in between, taxes the proportionate share of the building. Every janitorial platform on the market meters buildings, seats, cleaners or jobs. Not one of them has a field for the only quantity the statute actually asks you to know.

The short version. We priced one firm — 33 people, the Baltimore City average — across every janitorial platform that publishes a number, on 18 August 2026. The answers ranged from $588 to $35,388 a year for the same company, on six different meters: buildings, seats, cleaners, user bands, jobs and flat. Janitorial Manager, the category leader, publishes a floor of $1,000 a month and counts buildings. Maryland counts something else entirely. Tax-General §11–101(m)(3) taxes the cleaning of a commercial building at 6%; §11–235 exempts it when a condominium or retirement community owns the building and the room is a common use; and §11–235(b) splits the difference by the proportionate share of the building — a percentage the statute never tells you how to measure. Meanwhile the wage floor for a state contract is set by where 50% of contract value sits, not where your worker stands, and the card rail on a $1.9M book costs $63,504 a year against $4,800 on bank transfer — a $58,704 swing, about the entire published software floor.
Custom commercial cleaning and janitorial software in Baltimore: a supply room worktable with folded microfiber cloths, spray bottles, a blank clipboard, brass keys and a tablet, and at the center a large sheet of drafting paper lying open and completely blank

The question that started this article was asked in a clubhouse in Owings Mills, in a hallway, by a woman who had been cleaning that building for eleven years.

She runs a cleaning company. Nine employees when we met, fourteen now. The clubhouse belongs to a condominium association and she has the whole thing: the lobby, the fitness room, the party room they rent out for birthdays, the little management office where the property manager sits two days a week, the mail room, the corridor to the pool. One building, one contract, one invoice a month.

Her accountant had just told her the invoice was partly taxable. Not the building — parts of it. And she stood in that hallway and asked me a question I have thought about ever since, which was not how much tax do I owe. It was:

“Which of these doors is the taxable one?”

That is the correct question, and it is the one no software in her industry can answer, because no software in her industry stores a door. They store buildings. They store customers, sites, jobs, shifts, seats and inspections. Maryland taxes rooms.

This is the thirtieth trade we have taken apart in this series, and it is the first one where the unit of account in the statute is smaller than the unit of account in every product built for the trade. In towing, the law priced by a boundary and the software priced by the call. In landscaping, the law pointed at a document written by a manufacturer. Here the law reaches inside a single building, sorts the rooms by what people do in them, and then — when the sorting does not come out clean — asks for a fraction.

Let us start with the market, because commercial cleaning in Maryland is much bigger than people assume, and its shape is the reason per-seat software hurts so much here.

Thirty-three people

The Census Bureau's County Business Patterns for 2023 — the most recent county-level release — counts 1,436 janitorial services establishments with paid employees in Maryland (NAICS 561720), employing 31,862 people against an annual payroll of $939,194,000. That is a real industry: more than twenty-six times the employment of the state's towing trade and more than one and a half times its landscaping workforce.

The interesting number is not the total. It is the shape.

Janitorial services establishments with paid employees, Maryland, by jurisdiction (NAICS 561720, County Business Patterns 2023)
JurisdictionEstablishmentsEmployeesPer establishmentAnnual payrollPer employee
Montgomery32213,09540.7$417,542,000$31,886
Prince George's2323,62615.6$104,308,000$28,767
Baltimore County2092,86613.7$79,457,000$27,724
Anne Arundel1393,64026.2$85,950,000$23,613
Baltimore City1023,37733.1$101,969,000$30,195
Howard811,63820.2$50,762,000$30,990
Harford514298.4$9,510,000$22,168
Frederick5152010.2$14,621,000$28,117
Carroll3038812.9$11,356,000$29,268
Maryland total1,43631,86222.2$939,194,000$29,477

A Baltimore City janitorial firm averages 33.1 employees. Hold that against the other trades we have measured out of the same dataset: Baltimore City towing averages 6.1 people per establishment, and Baltimore City landscaping averages 5.1. A cleaning company is not a small business in the headcount sense. It is a small business with a payroll the size of a mid-sized company's, which is a genuinely unusual thing to be, and it is the single most important fact about buying software in this trade.

Now put the pay next to it. Maryland janitorial payroll averages $29,477 per employee per year. Maryland's minimum wage has been $15.00 an hour for all employers since the start of 2024, and a full year at that rate is $31,200. The statewide average pay in this industry sits below a full-time minimum-wage year, and it is not because anybody is being underpaid relative to the law — it is arithmetic proof that most of this workforce is part-time, works partial years, or turns over inside the year. Probably all three.

Thirty-three people per firm, at $30,195 a head, in a business where the work happens after everyone else has gone home. That combination is why the per-seat pricing model lands harder in commercial cleaning than in any trade we have looked at.

Two more things in that table are worth a sentence each. Montgomery County holds 13,095 of the state's 31,862 janitorial employees — forty-one percent of the industry in one county, at the largest average firm size in the state, which is what a federal-contracting corridor looks like in the payroll data. And Baltimore City pays $30,195 per employee against Baltimore County's $27,724, which is the opposite of the pattern in most trades: the city pays about nine percent more here, on firms more than twice the size.

The usual County Business Patterns caveat matters more than usual in this trade: the series counts only establishments with paid employees. Residential house-cleaning in particular is full of sole proprietors and two-person partnerships who appear nowhere in these figures. That is worth knowing when a vendor quotes you an addressable market, and it explains why so many products in this category are built and priced for a solo operator with a van — a business that is not remotely the same animal as a 33-person building services contractor with night crews in nine buildings.

The vendors, and the six things they count

I want to be fair to the incumbents here, because the software in this category is better than its reputation and some of it is very cheap, and the argument I am going to make is not that you should replace it.

We went to each vendor's own pricing page on 18 August 2026, rather than to an aggregator or a review site, and read what was actually printed there. The transparency in this category is middling by the standards of this series — better than towing, far better than independent pharmacy, well behind home improvement — but the more interesting result is not whether they publish. It is what they count.

Start with the category leader, because it is the exception that frames everything else. Janitorial Manager publishes this, in plain text, on its plans page: “Plans start at $1,000 a month.” And then it explains the meter: “Pricing is based on the number of buildings, features needed, and level of service.” Its three tiers are named Small Operations, Growing Multi-Building, and Multi-Site & Multi-State. Its quote form says the team will review “your buildings, square footage, staffing, and support needs.” It states explicitly that this is “not a flat per-seat rate.”

I went into this expecting the usual finding — that the biggest brand in the trade hides its price. It does not. It publishes a floor and it publishes its logic, and the logic is more thoughtful than most of the market's. A janitorial contractor's cost really does scale with buildings and square footage more than with headcount. Credit where it is due.

It is also $12,000 in year one before anybody negotiates, which is exactly what we charge, once, to build an entire operations system. Hold that thought.

Commercial cleaning and janitorial software pricing pages, checked 18 August 2026
ProductPublished priceWhat it metersIncluded seats
Janitorial ManagerFrom $1,000 / monthBuildings, square footage, staffingNot stated
Housecall Pro$59 / $149 / $299 per month (annual)Seats— / 5 / 8; +$100 and +$75 per extra user
ServiceMonster$99.99 / $199.99 / $279.99 per monthSeats1 / 5; +$15 and +$25 per extra user
CleanGuru$79 / $129 / $159 per monthCleaners5 / 10 / 15; +$5 per cleaner
Connecteam$29 / $49 / $99 per month per hubUser bandsFirst 30 users; +$0.80 to $4.20 thereafter
Otuvy (was CleanTelligent)$150 / $250 / custom per monthSeats, plus modules+$25 and +$45 per user; one-time implementation fee, amount not stated
Maidily$0 / $29 / $49 / $99 per monthJobs per monthUnlimited users
Launch27$75 / $150 / $299 per monthFlatUnlimited users
ZenMaid$19 / $39 / $49 per monthFlatResidential focus
SweptFrom $30 and $150 / month; top tier unpricedNot fully statedNot stated
TEAM Software / WorkWaveNoneNot stated
Aspire404 at /pricingNot stated
JobberPage behind a bot challengeNot stated

Six meters, in one category: buildings, seats, cleaners, user bands, jobs, and flat. I have not seen that spread anywhere else in this series. Towing was mostly calls and seats. Landscaping was mostly seats. Here the vendors cannot agree on what the unit of work even is, which tells you something true about the trade — and, as we will see, all six of them are wrong about what the state is counting.

Two smaller findings worth your time before you shortlist anything. CleanTelligent is now Otuvy — same product, new brand, and the old name is still what half the buyer's guides call it. And on Otuvy's own comparison table there is an asterisk that reads “One-time implementation investment required” with no figure attached; a mandatory fee with no published amount is the one thing on this table I would insist on pinning down in writing before signing. Aspire, meanwhile, returns a 404 at its pricing URL — the third consecutive trade in this series where that has happened with the same vendor.

The meter is the seat, and the seat is the wrong unit

Here is the arithmetic. One company: 33 employees, the Baltimore City average, straight out of the table above. Everything below is the vendor's own published rate card applied to that headcount, on the annual billing option where one exists.

Same 33-person Baltimore cleaning company, priced on each vendor's published rates (18 August 2026)
Product and planThe arithmeticPer monthYear one
Housecall Pro — Essentials$149 + (33 − 5) × $100$2,949$35,388
Housecall Pro — Max$299 + (33 − 8) × $75$2,174$26,088
Janitorial Manager — Small Operations$1,000 floor, metered by buildings$1,000$12,000
ServiceMonster — Grow$199.99 + (33 − 5) × $15$619.99$7,440
Launch27 — top tier$299 flat, unlimited users$299$3,588
CleanGuru — Guru Plus$159 + (33 − 15) × $5$249$2,988
Connecteam — Expert, one hub$99 + (33 − 30) × $4.20$111.60$1,339
Maidily — Scale$99 flat, 250 jobs, unlimited users$99$1,188
ZenMaid — top tier$49 flat$49$588

The same firm. The same buildings. The same work. $588 to $35,388, a spread of sixty to one, and almost none of it is explained by capability — it is explained by which noun the vendor decided to count.

I do not think the expensive ones are cheating. Housecall Pro is not built for a 33-person night-crew contractor; it is built for a five-person residential service business, where $149 a month is a fair price for a genuinely good product and the per-user charge almost never bites. The trouble is that it reads as though it is for you, the trial works, and the bill arrives at a shape nobody modeled.

What a seat costs when the seat earns $29,477

Do the division that nobody does. At Housecall Pro's published $100 per additional user per month, one seat costs $1,200 a year. The person occupying that seat earns, on the statewide average, $29,477. You are paying about four percent of somebody's annual wage for permission to put them in the schedule.

In a law firm, four percent of a salary for good software is a bargain nobody argues about. In a trade with a workforce this large and wages this thin, it is a line item that grows every time you win a contract — which is to say, it charges you for success in the one currency you cannot control.

And there is a quieter cost inside it. This industry turns over hard; that is what the sub-minimum-wage average annual pay is telling us. Every seat you forget to deprovision keeps billing. On a per-seat plan at $100 a head, four forgotten accounts is $4,800 a year — more than a full year of CleanGuru and Connecteam combined, for nothing at all. Ask any vendor you are evaluating exactly how mid-cycle seat removal is credited, and get the answer in writing.

None of which is the real problem. The real problem is that all six of these meters — buildings, seats, cleaners, bands, jobs, flat — are counting things the state of Maryland does not care about, and none of them is counting the thing it does.

The part no national platform models

This is the section that matters, and in this trade it is unusually concrete, because the rules are not about safety or licensing or disclosure. They are about arithmetic. Maryland has decided that a cleaning invoice is a calculation over the customer's floor plan and over the geography of the customer's contract, and it has not given you a single field to store either.

The tax is on the room

Start with the base rule, because it is broader than most operators realize. Md. Tax-General §11–101(m)(3) makes “cleaning of a commercial or industrial building” an enumerated taxable service, and §11–101(c) defines that phrase to mean, verbatim, “floor, carpet, wall, window, ceiling, and exterior cleaning” and “janitorial services.” That is the whole trade. Residential cleaning is not on the enumerated list at all, so a house-cleaning round is untaxed and an office round is taxed at the full 6%. Many small operators run both.

Then comes §11–235, added by Chapter 293 of the Laws of 2019, and it is drafted in a way I have not seen anywhere else in this series. The tax does not apply if the building is owned by a common ownership community or a retirement communityand the building is used for one of eleven listed purposes:

classrooms; dining; exercise; food preparation or cooking; meetings or gatherings; offices used by the common ownership community for management of the community; recreation; security; sports; storage; or any other common use.

Read that list again as an engineer rather than as a taxpayer. It is not a list of customers or of buildings. It is a list of activities that happen in rooms. A condominium clubhouse is not exempt because a condominium owns it. It is exempt because the fitness room is exercise, the party room is gatherings, the manager's office is management of the community, and the closet at the end of the hall is storage.

And the eleventh item swallows the other ten. “Any other common use” is a catch-all so wide that the enumerated ten are almost decorative — until you reach subsection (b), which is where the catch-all gets its teeth.

The proportionate share

§11–235(b), in full: the exemption “does not apply to the cleaning of a commercial or industrial building or the proportionate share of the building that is used for a purpose that requires the collection of the sales and use tax under this title.”

That sentence converts a yes-or-no question into a fraction, and it is the single most software-shaped clause we have found in thirty trades.

Go back to the clubhouse in Owings Mills. The fitness room, the party room and the mail room are common uses and exempt. But the association leases a corner suite to a physical therapist, and rents the party room out for events at a fee. Those are purposes that require the collection of sales and use tax. So the building is not exempt and it is not taxable. It is exempt in proportion, and somebody has to produce the proportion.

Here is what the statute does not say. It does not say to measure by square footage. It does not say to measure by hours of use, or by the association's revenue, or by the number of rooms. It prescribes no method, no documentation, no rounding convention, and no cadence — nothing about whether you recompute when the therapist's lease ends in March or wait for the next fiscal year. It hands you a percentage to calculate and leaves the calculation entirely to you.

One measurement to show how unusual this is. The phrase “proportionate share” appears exactly four times in the entire Tax-General Article. Three of those are pass-through allocations — a member's proportionate share of a tax credit, a partner's proportionate share of qualified research expenses. Ordinary entity arithmetic. §11–235(b) is the only place in Maryland's tax code where a proportionate share is taken of physical space.

Every other proportionate share in Maryland tax law divides something that was always a number. This one divides a building — and the only person standing in that building at 9pm with any idea which rooms are which is the person pushing the cart.

Now ask what any janitorial platform on that vendor table would do with this. Janitorial Manager, the best-designed meter in the category, counts buildings — so the clubhouse is one building. Housecall Pro has a customer and a job. Swept has a site and a shift. CleanGuru has a bid and an invoice. Not one of them has a row whose primary key is a space, carrying an ownership type, a use category, and a taxable fraction. Which means the number goes where every unmodeled number goes: a spreadsheet on the owner's laptop, recomputed once a year from memory, with no audit trail behind it.

Two words the tax code never defines

There is a drafting gap sitting underneath all of this, and it is the third time this series has found one.

§11–235 is the only place in the entire Tax-General Article where the phrase “common ownership community” appears — and it appears there with no definition and no cross-reference. That is not how this code normally behaves. The Tax-General Article borrows definitions constantly and says so when it does, pointing at the Real Property Article by section number when it needs a term from there. Here it borrows two terms and points at nothing.

In Maryland's other statutes, a common ownership community ordinarily means a condominium, a cooperative housing corporation or a homeowners association, and excludes a time-share project. That is almost certainly the intended reading. But “almost certainly” is doing real work in a sentence that determines whether you charge 6% or zero.

“Retirement community” is in worse shape, and the contrast inside the same subtitle is what makes it worth printing. In §11–235 the phrase stands entirely alone. A few sections earlier, an electricity exemption in that same subtitle takes the trouble to specify a “nonprofit planned retirement community of more than 2,000 housing cooperative or condominium units”, with ownership “restricted by age”, served by at least three bulk meters on or before 1 July 1979. That is a definition with four independent tests in it.

Same article. Same tax. Same two words. In one place, four tests and a date; in the other, nothing at all. If you clean a 55-and-over active adult community, an assisted living facility or a continuing care campus, the statute gives you no way to know whether you are inside §11–235 or outside it — and the answer moves six percent of that contract.

The practical consequence for a build is not that you should guess. It is that the determination is a decision with a date and a reason, made once per site, and it belongs in the system as exactly that: a stored decision, attributable to whoever made it, revisable without rewriting history, and attached to every invoice that relied on it. That is a ten-line data model and it is worth more than any feature on the vendor table above, because it is the only thing that will make an audit three years from now boring.

The recurrence test, which your scheduler already knows

One more tax rule, because it catches almost every commercial cleaner who touches mats, towels or uniforms.

§11–101(m)(2) makes taxable the “commercial cleaning or laundering of textiles for a buyer who is engaged in a business that requires the recurring service of commercial cleaning or laundering of the textiles.”

Look at what that condition attaches to. Not the textile. Not the price. Not the customer's industry. The taxability of a mat service turns on whether the buyer's business requires the recurring service — which means a one-off deep clean of a restaurant's floor mats sits differently from the same physical work performed every second Tuesday under a standing agreement.

The field that determines this already exists in every product on that table. It is the recurrence rule on the schedule. Weekly, biweekly, monthly, one-time. Your scheduler is quietly holding a tax input and reporting it to nobody, because in every one of these systems the schedule and the invoice are separate objects that happen to share a customer.

Three minimum wages for the same mop

Now leave the tax code, because the second allocation rule is stranger than the first.

A Baltimore commercial cleaner with any public-sector work is operating under three different wage floors at once, and they do not sort by employee, by site or by skill.

Wage floors applying to the same cleaner in Baltimore, August 2026
Which floorRateAuthorityWhat triggers it
Maryland minimum wage$15.00 / hourStatewide, all employersEmployment
State living wage — Tier 2$15.00 / hourSF&P §18–103State service contract, majority of value outside the Tier 1 counties
Baltimore City living wage$17.17 / hourCity Code Art. 5, Subt. 26A City service contract
State living wage — Tier 1$17.54 / hourSF&P §18–103State service contract, majority of value in Baltimore City or the five Tier 1 counties

The Baltimore City figure rose to $17.17 on 1 July 2026, and the mechanism behind it changed at the same time: the Wage Commission moved off the old federal poverty-threshold method and now indexes the rate annually to the CPI-U for the Washington–Baltimore–Arlington area. About 3,500 workers are covered. Practically, that means the City rate is now going to move every single year, in a month that is not January, by an amount nobody can predict in advance — so any system that stores a wage floor as a constant is wrong on a schedule.

The state figures come from Md. State Finance & Procurement §18–103, which applies to service contracts valued at $100,000 or more (or $500,000 for employers with ten or fewer employees), and which explicitly covers maintenance services. Tier 1 is Baltimore City plus Baltimore, Anne Arundel, Howard, Montgomery and Prince George's counties. Tier 2 is everywhere else.

The procurement officer sets your payroll

And now the clause that made me sit up, because it inverts the thing everybody assumes.

The tier is not determined by where the employee works. It is determined, in the Department of Labor's own words, by “the area where services valued at 50% or more of the total contract value is performed” — and the determination is made by the procuring agency's procurement officer, not by you.

Follow that through. You hold a state contract covering four buildings. Three are in Carroll County and one is in Baltimore City, and the Carroll work is worth fifty-five percent of the contract. Tier 2 governs the entire contract. Your crew cleaning the state building in downtown Baltimore is lawfully paid $15.00 an hour, while a crew across the street on a different contract is on $17.54, and a third crew on a City contract next door is on $17.17. Same city, same night, same job, three floors, and the reason sits in a percentage calculated by somebody in a procurement office who has never seen any of these buildings.

There is a circularity in here too, and it is the kind of thing that only becomes visible when you try to build it. The tier depends on the allocation of contract value by geography. In a labor business, contract value is mostly labor cost. Labor cost depends on the wage rate. The wage rate depends on the tier. You cannot bid the job without resolving a loop that the statute does not acknowledge exists — which is exactly why the determination is handed to a procurement officer and why it must be captured, as an input, the day the award lands.

The tax rule prorates and the wage rule cliffs. One asks for the fraction of a building; the other throws away the fraction and gives everything to whoever crosses fifty percent. Both govern the same crew on the same night, and no product on the market stores either input.

The compliance tail is real and cheap to automate: contractors must submit payroll records within 14 days after the end of each payroll period, and the Commissioner can order restitution and damages for underpayment. Fourteen days is a cron job. Reconstructing which of three floors applied to a shift eight months ago, from a timesheet that only recorded hours and a site, is not.

The sick leave clock nobody is accruing

One more labor rule, because it interacts with the headcount finding in a way that is specific to this trade.

Under the Maryland Healthy Working Families Act, employees accrue one hour of earned sick and safe leave for every 30 hours worked, capped at 40 hours a year. Employers with 15 or more employees must provide it paid; those with 14 or fewer must provide it unpaid.

Now recall that the average Baltimore City janitorial firm has 33.1 employees. Essentially every commercial cleaning company in this city is over the threshold — and unlike a trade where the threshold is a live question, here it is settled, so the paid obligation is simply a fact of the business. The interesting part is the accrual itself: one hour per thirty, on a workforce that is heavily part-time and works split shifts across multiple sites. That is a per-timesheet-row calculation across dozens of people, most of whom are not on a fixed weekly schedule. It is precisely the arithmetic computers are good at and humans are terrible at, and it is the single most common thing I have seen tracked in a spreadsheet in this industry.

The card rail costs more than every platform combined

Last, and financially the largest by a distance.

Commercial cleaning bills the way lawyers bill: monthly, by contract, to businesses, on terms. That makes the payment rail a completely different problem from a trade that takes cards at a counter, and it makes the difference between two rails enormous, because the invoices are large and they repeat.

Take our 33-person firm. Its payroll, from the table above, averages $999,696 a year. If payroll runs a little over half of revenue — the usual shape in a labor business like this one — the firm bills roughly $1.9 million a year, or about $160,000 a month. Say that arrives as 40 accounts averaging $4,000 a month.

Now price the two rails on Square's own published, first-party rates, read on 18 August 2026.

Same $160,000 monthly book, two payment rails (Square published rates, 18 August 2026)
RailPublished ratePer $4,000 invoicePer month, 40 invoicesPer year
Card, paid via invoice3.3% + 30¢$132.30$5,292$63,504
Card on file / keyed3.5% + 15¢$140.15$5,606$67,272
ACH bank transfer, via invoice1%, $1 minimum, $10 cap$10.00$400$4,800
Annual difference, card via invoice versus ACH$58,704

The $10 cap is the whole story. On a $4,000 invoice, a one percent fee would be $40 — but it is capped, so it is $10, and the effective rate collapses to 0.25%. The bigger your invoices, the more absurd the gap becomes. At $4,000 a card costs 13× what a bank transfer costs, and the multiple grows with every dollar you add to the invoice.

Set that against the software table. The most expensive product we priced was $35,388 a year and the category leader's published floor is $12,000. The payment rail difference is $58,704 — more than the most expensive platform, and nearly five times the leader's floor. It is the largest single controllable number in a commercial cleaning company's year, and it is invisible because it arrives as a deduction rather than as a bill.

Nothing here requires custom software to fix. You could move accounts to bank transfer tomorrow with the tools you already have. But almost nobody does, because the default on every invoicing product is the card, the customer's AP department prefers the card, and there is no screen anywhere in your business that shows you the annual cost of that preference. Building that one screen is usually the cheapest thing we do for anybody.

What Maryland does not tax, and what it does

The absences are worth stating plainly, because they save you worrying about the wrong things.

Searching the compiled Tax-General Article: housekeeping, disinfecting, sanitizing, day porter and restroom appear zero times each. Janitorial appears only inside the §11–101(c) definition and nowhere else in the article. Maryland has no interest whatsoever in what you clean, how you clean it, how often, or with what. The tax attaches to the character of the building and to nothing else. A hospital-grade terminal disinfection and a quick vacuum are the same transaction to the Comptroller if they happen in the same room.

Your software, on the other hand, is taxed. Since 1 July 2025, §11–101(m)(14) and (15) bring data and information technology services under NAICS 518, 519 and 5415, and software publishing under NAICS 5132, into the base at 3% under §11–104(l)(1). So the cleaning is taxed at 6% or at zero depending on a room, and the scheduling platform that arranged it is taxed at 3% regardless. On Janitorial Manager's $12,000 floor that is $360 a year, which is not the point. The point is §11–104(l)(2): where two rates could apply, the higher governs. A vendor that bundles a timeclock device, a hardware kit or SMS credits into a single undifferentiated subscription line can move that entire line from 3% to 6%. If your invoice shows one number, ask for it itemized. This applies to our own invoices too, and we itemize them for exactly this reason.

What custom actually costs

We publish our prices, so here they are against the problem described above.

founderandai fixed-price packages, applied to a commercial cleaning and janitorial contractor
PackageFromWhat it means here
Prototype Sprint$3,500One week, working software. Usually the space register: every room you clean, with its ownership type, its §11–235 use category and its taxable share, loaded from your real sites so you can see for the first time what fraction of your book is actually exempt.
Online Store$6,000The billing side as a real checkout: recurring commercial accounts on bank transfer by default with cards as the exception, per-space tax computed and shown on the invoice, customer portal for AP departments, and the one screen that puts the annual cost of your payment mix in front of you. On the numbers above this pays for itself in about five weeks.
Custom App$12,000The field half: crews, split shifts and multi-site nights, mobile clock-in that records which contract an hour belongs to rather than only which site, the three wage floors resolved per row, and sick leave accruing at one hour per thirty without anybody maintaining a spreadsheet.
Operations System$12,000All of it joined up: the space register driving both the invoice and the schedule, exemption determinations stored as dated decisions with an author, living wage payroll records filed inside the 14-day window automatically, and a sync back to whichever scheduling platform you keep.

The comparison is the part I would think about. Janitorial Manager publishes a floor of $1,000 a month, which is $12,000 in year one and $12,000 again in year two. An Operations System from us is $12,000 once, and you own the source code. I am not claiming we replace what they do — read the next section, because we mostly do not. I am saying that when a subscription floor and a fixed build price are the same number, the second year is where the conversation should start.

What we would actually build

Not a scheduling platform. CleanGuru is $159 a month with bidding, invoicing, scheduling, geofenced timekeeping and inspections, and Connecteam is $99 a month for the first thirty users. Rebuilding shift scheduling and mobile clock-in against products at that price would be indefensible, and I would tell you so on the call.

What we would build starts with one change to the data model, and everything else follows from it: the unit is the space, not the site.

A space belongs to a site. It carries an ownership type — commercial, industrial, residential, common ownership community, retirement community. It carries a use, drawn from the eleven §11–235 categories plus the catch-all. It carries a taxable share, which is usually zero or one hundred percent and occasionally something in between, with the basis for that fraction stored next to it in plain language. And it carries the date somebody decided all this, and their name.

From that one table, four things stop being projects and start being queries. The invoice computes its own tax, per space, and prorates the mixed ones, which is the entire §11–235(b) problem solved as a sum rather than as an annual panic. The audit answer is a report rather than an archaeology exercise, because every exemption you claimed has a date, an author and a reason attached. The bid gets better, because you finally know your revenue per square foot by use category rather than by building. And the schedule can carry the recurrence flag that §11–101(m)(2) turns into a tax input.

Around that sit three things, each small on its own and each nearly impossible to bolt on afterwards.

The contract layer, which is the wage half. An hour worked does not belong to a site; it belongs to a contract, and the contract carries the floor — $15.00, $17.17 or $17.54 — along with the procurement officer's tier determination and the date it was made. Every timesheet row resolves its own minimum through that link. Get this right and the 14-day payroll filing is a scheduled job. Get it wrong and you are reconstructing eight months of history from memory the first time somebody complains.

The accrual engine, which is genuinely just one hour per thirty worked with a 40-hour cap, but which has to run across split shifts and part-year employees and survive somebody leaving in March and coming back in September. Small, dull, and the thing most likely to be wrong in your current spreadsheet.

And the payment layer described above, where the only real requirement is that bank transfer is the default and the card is the exception, and that somebody can see the annual cost of the exceptions on one screen.

The reporting then comes almost free, and it includes the number I would put on the wall in this trade: revenue per exempt square foot versus revenue per taxable square foot. Nobody in commercial cleaning knows this about their own book. It tells you which kind of customer you are actually good at winning, and it is sitting in the space register the moment you build one.

Build, buy, or both

The honest answer for nearly every cleaning contractor in the Baltimore metro is both, and the split here is unusually clean because the vendors and the statute are simply solving different problems.

  • Buy the scheduling and inspection tools. Shift scheduling, geofenced clock-in, inspection scoring, work orders and bid templates are solved and cheap. At $99 to $159 a month, rebuilding any of it would be indefensible.
  • Build the space register. Rooms, not buildings, each with an ownership type, a §11–235 use category and a taxable share.
  • Build the invoice on top of it. Tax computed per space and prorated where the building is mixed, with the basis recorded.
  • Build the contract layer. Hours attach to contracts, contracts carry wage floors, and the tier determination is stored as an input the day the award lands.
  • Build the payment default. Bank transfer for recurring commercial accounts, cards as the exception, and one screen showing what the exceptions cost.
  • Keep the spreadsheet for exactly one thing. Your own internal margin modeling, where being wrong costs you nothing and being fast is worth everything.

If you take one thing from this article, make it the payment mix, because it is the largest number you can change this quarter and it needs no permission from anybody. If you take two, make the second the space register, because it is the only structure that makes the tax question answerable at all. And if you take three, make the third the question that woman asked me in the hallway in Owings Mills, which I still think is the sharpest question anybody has asked me in this series: which of these doors is the taxable one? Maryland has an answer. Your software should be able to give it.

Who we are

We are a small studio in Baltimore. We build custom web apps, online stores and operations systems at fixed prices, we hand over the source code, and we tell people to keep their existing software when keeping it is the right answer — which, in this trade, it almost always is for scheduling and never is for the invoice.

If you run a commercial cleaning, janitorial or building services company anywhere in the metro and any of the above sounded like your month-end, book a free call. Bring one month of invoices and a payment processing statement. We will work out what share of your book is exempt, what your payment mix is actually costing you against that $10 cap, and what we would build — with the fixed price attached before you decide anything.

This article describes Maryland and Baltimore City law as we read it in August 2026 and is not tax, legal or regulatory advice. Md. Tax-General §§11–101, 11–104 and 11–235, Md. State Finance & Procurement §18–103, the Maryland Healthy Working Families Act and Baltimore City Code Article 5 Subtitle 26 all change, and both living wage rates are indexed and move annually. The §11–235 exemption depends on facts about your customer's building that only your customer can confirm, and the proportionate share calculation has no prescribed method — take advice on it rather than taking our word for it. Establishment data is County Business Patterns 2023 (NAICS 561720) and counts only establishments with paid employees; the revenue figure used in the payments model is an assumption stated in the text, not a measurement. Vendor prices were read from public pages on 18 August 2026 and change without notice; where a vendor published no figure, we have said so rather than quoting an aggregator. Verify your own position with the Comptroller of Maryland, the Maryland Department of Labor, the Baltimore City Wage Commission, or your own advisers before relying on anything here.

Start here

What share of your book is actually exempt?

Book a free 30-minute call. Bring one month of invoices and a payment processing statement, and we'll work out with you which of your sites fall inside §11–235 and which are mixed, what a per-space invoice would change about your month-end, what your card-versus-bank-transfer mix is costing you against that $10 cap, and which of the three wage floors is actually governing your public-sector hours. Then we'll tell you what we'd build, what you should keep renting, and the fixed price that goes with it.