Buoyant OperationsBusiness operating systems
Keep your business above water.
Case study · Commercial flooring · Southwest Florida

We went looking for leaks in a $5.2M flooring contractor. We found $434,000.

A 25-person resinous flooring company with full crews, a strong reputation, and a healthy-looking P&L. Here's the diagnostic teardown — every number, every fix, and the KPIs any contractor can check this week.

$5.24M  annual revenue
25  employees
4  field crews
Fort Myers, FL
$0
Annual opportunity found
Across six findings
0%
Of ad spend
Feeding the worst-margin work
0
Day cash gap
Work done → cash in the bank
0
Software tools
Same job entered four times
The company

Good crews. Full calendar. Shrinking bank account.

"Gulf Coast Resinous Floors" installs epoxy and polyaspartic systems across industrial, commercial, and residential work. Sixteen installers in four crews, two PMs, two estimators, three office staff, an ops manager, and an owner who still walks jobs.

Revenue mix — trailing 12 months
Industrial & manufacturing — hangars, plants, warehouses$2.42M
Commercial — retail, medical, hospitality$1.94M
Residential — garages, lanais, decorative$880K
"We're busier than we've ever been. So why does it feel like there's less money than three years ago?"— The owner, in our first meeting

That question is the whole case study. The answer wasn't one leak. It was six — none visible on the P&L, all visible in the operational data. Here they are, worst first.

Finding 01 · Gross margin by segment

The blended margin was lying.

The P&L showed a respectable 29.3% gross margin. But a blended margin is an average — and averages hide the thing that's eating you.

Gross margin by segment
Industrial36%
Commercial27%
Residential16%
Residential was 17% of revenue but only 9% of gross profit — while consuming roughly a quarter of crew days, most of the schedule churn, and (as Finding 04 shows) 82% of the marketing budget.
The owner asked"But residential keeps the crews busy between big jobs. Isn't that worth something?"
+

It's worth exactly what it earns, and here's what it earns: at 16% gross margin, a $6,200 garage job contributes about $990 before a dollar of overhead. Mobilization, a two-visit install, and callback risk are nearly the same as a job three times the size.

Fill work has real value — but only if it's priced as fill work, not chased as a growth segment. The fix isn't dropping residential. It's (1) repricing it to a 25% floor, (2) taking it only inside a 30-minute radius, and (3) stopping paid advertising for it entirely. Let it come to you at a price that pays; spend the effort where margins are double.

The KPI to stealWhat should any contractor track here?
+

Gross margin by segment, monthly — not blended. And its sharper cousin: gross profit per crew-day by segment. Industrial here produced ~$1,860 of gross profit per crew-day; residential produced ~$610. Same crew, same day, three times the money. When you see that number, scheduling decisions make themselves.

Finding 02 · Fully-loaded labor cost

Every estimate underpriced labor by $5.90 an hour.

Estimates were built on $34/hour for field labor. The wage is $26. Feels like a comfortable cushion — until you stack the whole iceberg.

The labor burden iceberg — tap to build it
Base wage — what the estimate "sees"$26.00
FICA — employer share (7.65%)+$1.99
FUTA / FL reemployment tax+$0.55
Workers' comp — concrete coatings class+$2.47
General liability allocation+$1.12
Health insurance contribution+$3.75
PTO, holidays & paid training+$1.50
Small tools, consumables, PPE+$1.28
Vehicle & fuel allocation+$1.24
Cost per hour the estimate sees$26.00
Fully loaded: $39.90/hour — a 53% burden. Against a $34 bid rate, that's $5.90 lost on every field hour. Across ~27,600 billable field hours a year: $163,000 of margin that was never in the price.
Check your own bid rate
Fully loaded cost (53% burden, per the iceberg)$39.90
Annual gap−$159,528
A burden of 45–58% is typical for coatings contractors once comp, insurance, and non-billable time are counted honestly.
The owner asked"We've bid $34 for years and we're profitable. How can it be wrong?"
+

Because material markup and the industrial segment were quietly subsidizing it. The company was profitable — at 4.1% net. The point isn't that $34 bankrupts you; it's that every labor hour ships $5.90 of margin out the door, and the healthy segments absorb the loss so nobody sees it.

The fix took one afternoon: a burden worksheet per role, refreshed twice a year, feeding the estimating template automatically. New floor rate: $47/hour (loaded cost plus target margin). Win rates on industrial bids didn't move. Residential win rates dropped — which, per Finding 01, was the goal.

Finding 03 · Change-order capture

$152,000 of work was done and never billed.

Not stolen. Not disputed. Just… never invoiced. Extra prep on failed moisture tests, added coats, scope creep on "while you're here" requests — performed by crews, absorbed by the company.

Where it leakedAnnual
Extra surface prep after failed moisture / adhesion testsDocumented in crew texts, never converted to COs$61,400
Verbal "small adds" on active jobsCove base extensions, extra rooms, drain details$48,700
Return trips caused by other tradesDamage after install — back-charged 0 times in 12 months$27,300
Approved COs invoiced late or partially$14,600
Unbilled change-order leakage 2.9% of revenue$152,000
The owner asked"Why doesn't anyone flag this stuff?"
+

Because the system made flagging expensive. A change order meant: foreman calls the PM, PM emails the estimator, estimator prices it in the spreadsheet, someone types it into an email for the GC, and — if everyone remembers — it reaches the QuickBooks invoice weeks later. Five handoffs. On a job site, five handoffs means zero.

The fix was making capture cheaper than absorption: a foreman photographs the condition, taps a CO request with a price range on their phone, the client approves by text, and it lands on the next progress invoice automatically. Capture went from roughly 40% of eligible events to 91% in one quarter. The crews didn't change. The friction did.

The KPI to stealHow do you even measure what you're not billing?
+

Two numbers. CO capture rate: change orders invoiced ÷ change events logged (crews log events in seconds if it's one tap). And estimated vs. actual hours per job — when actuals consistently run over with no CO attached, that overage is your unbilled work, priced at your loaded labor rate. This company ran 6.4% over estimate on average. That's not an estimating problem; that's a billing problem wearing an estimating costume.

Finding 04 · Marketing allocation

82% of ad spend fed the worst-margin work.

$137,000 a year in marketing. Almost all of it pointed — with real skill, honestly — at exactly the wrong target.

ChannelMonthlyFeedsCost / closed job
Google Ads"garage floor coating," "epoxy near me"$4,800Residential$338
SEO agencyRanking for residential keywords$2,500Residential
Lead marketplacesShared leads, 22% close rate$2,100Residential$412
Facebook / Instagram$1,000Residential$296
Trade association + 2 industry eventsWhere the industrial work actually comes from$1,000Industrial$71
Total$11,400
Meanwhile: 61% of industrial revenue traced back to four relationships — two GCs, one facilities director, one flooring-adjacent trade — maintained for roughly $12K a year including events. The best channel was getting 9% of the budget.
Reallocate the budget — what happens to gross profit?
Annual budget redirected$62,400
Residential GP given up (16% margin work)−$29,500
Industrial GP gained (36% margin work)+$103,700
Net gross-profit impact+$74,200
Conservative model: redirected dollars produce industrial revenue at 40% of the efficiency of the existing relationship channel — new relationships take time. Even handicapped that hard, the math isn't close.
The owner asked"What does 'industrial biz-dev' even mean? You can't Google-Ads a hangar."
+

Correct — and that's precisely why the budget drifted residential: residential is the only segment you can buy with a credit card. Industrial spend looks like: memberships and actual attendance where facilities managers are (ABC, IFMA chapter), lunch-and-learns for GC estimating teams, case-study one-pagers per vertical, a referral structure for the two trades that see floors before you do (concrete polishers, mechanical contractors), and disciplined follow-up on every plant manager who ever said "not this year."

It's slower and less measurable per-click. It also produced jobs at $71 acquisition cost against $412 from lead marketplaces — for work at double the margin.

Finding 05 · Cash conversion

Payroll is weekly. Cash arrives 63 days after the work.

Profitable on paper, tight in the bank — the classic contractor squeeze. Here's the shape of it.

Day 0
Day 9
Day 63
LAG
WAITING ON PAYMENT — 54 DAYS
▲ payroll
▲ payroll
▲ payroll
▲ payroll
▲ payroll

Work performed → invoice sent: 9 days average. Invoice → paid: 54 days. Meanwhile a $34K weekly payroll never waits, and GCs hold $186K in retainage on top. The company bridged the gap with a line of credit — $14,200/year in interest to finance work it had already finished.

The invoice-lag dial
Average cash gap63 days
Working capital tied up$743,000
Annual LOC interest at 9.5%$14,200
Every day of invoice lag ties up roughly $11,800 of working capital. The lag is the only part of the cycle you control unilaterally — no client negotiation required.
The owner asked"Our GCs pay when they pay. What can we actually change?"
+

Three things, in order of leverage. First, the 9-day lag is entirely yours — it existed because progress billing required the PM to reconcile hours from the time app against the estimate spreadsheet, then hand totals to the office. Automating that turned lag into same-week invoicing: ~$106K of working capital released permanently, no conversation with any client.

Second, billing terms on new work: deposit on mobilization, materials billed on delivery (resin isn't cheap and it's yours the moment it ships), and progress billing weekly instead of monthly. GCs push back far less than owners fear — the ones who push hardest are usually the ones who were going to pay slow anyway, which is worth knowing at bid time.

Third, chase retainage like it's revenue, because it is. $186K held with no owner. Assigning one person a monthly retainage-release checklist recovered $61K of aged retainage in the first 90 days.

Finding 06 · The tech stack

Twelve tools. Four entries per job. Nobody's fault.

Every tool was bought for a good reason, one at a time, over eight years. The result: $2,340 a month in subscriptions — and a hidden cost that dwarfs it.

ToolDoesMonthly
QuickBooks Online AdvancedAccounting$235
Field service appScheduling + dispatch, 8 seatsScheduling$349
QuickBooks TimeTime tracking$170
CRM starter planHalf-adopted; sales still lives in a spreadsheetPipeline$90
Photo documentation app19 seatsJob photos$228
Google Workspace25 seatsEmail + Drive$300
Legacy DropboxOld jobs; nobody dares turn it offMore files$120
E-signatureContracts$75
Estimating spreadsheetBuilt by a consultant in 2019; one person understands itEstimating$0
Email marketingNewsletters$85
Scheduling links + automation glueDuct tape$103
Misc. single-seat toolsVarious$585
Software subtotal — $28,080/year and counting$2,340
The bigger line isn't on the invoice: the same job gets keyed into the estimate spreadsheet, the field app, QuickBooks, and the reporting sheet — four entries, ~19 admin hours a week. At loaded office cost, that's $30,600/year of skilled labor spent retyping — plus the errors that come from four versions of the truth.

What would it cost to fix the stack?

Three realistic paths, priced over three years, 25 people. Full disclosure: the third row is us. We build custom operating platforms — that's the business. We're biased. The numbers are still the numbers, and two of these options don't involve us at all.

PathYear 13-yr totalThe honest trade-off
Keep the stackDo nothing$58,700$176,100Zero disruption. The double entry, version drift, and $30K of retyping continue forever.
Contractor platformServiceTitan-class FSM$68,800$162,400Proven, strong dispatch. Per-seat pricing grows with you; estimating stays generic; you adapt your process to its opinions.
Enterprise CRM + field serviceSalesforce/Dynamics route$97,000$214,000Infinitely capable. Also overkill at 25 seats — implementation partners, admin overhead, and license creep are the real cost.
Custom command centerBuoyant build — estimate → schedule → field → invoice on one platform, QuickBooks kept for the books$66,200$58K build + hosting$86,600Fits the actual workflow; kills all four duplicate entries; no per-seat tax. Trade-off: you depend on your builder, and cheap generic features aren't the point.
The real comparison isn't software price vs. software price. It's 3-year cost including the $30,600/year of double-entry labor each option does or doesn't eliminate. Run it that way and "do nothing" — the option that feels free — is the most expensive row on the table.
The owner asked"Custom software for a flooring company? Isn't that for tech firms?"
+

Five years ago, fair. The economics changed: a focused operating platform — estimating with your burden rates, CO capture from the field, progress billing pushed to QuickBooks — is now a mid-five-figure build, not a seven-figure IT project. The question isn't "can we afford custom." It's whether $90K over three years to run your process beats $160–210K to rent someone else's.

And it's not for everyone — under ~$2M revenue or with dead-simple workflows, an off-the-shelf tool is genuinely the right answer, and we say so in diagnostics. The math turns at about this company's size, when per-seat pricing and process mismatch start compounding.

The scoreboard

Six findings. $434,000 a year.

None of it required new customers, new crews, or new revenue. All of it was already inside the building.

FindingAnnual value
02 · Labor burden priced into estimates$163,000
03 · Change-order capture (40% → 91%)$152,000
04 · Ad budget reallocated to industrial$74,200
06 · Double-entry labor eliminated$30,600
05 · LOC interest from same-week invoicing$14,200
Identified annual opportunity$434,000

Modeled impact from the diagnostic, phased over 12 months — burden repricing lands as contracts turn over, ad reallocation ramps with relationships, CO capture is immediate. Finding 01 (segment repricing) compounds through the labor and marketing lines rather than adding a separate row — we'd rather undercount than double-count.

The point

Your version of this list exists. You just can't see it from inside.

Every contractor at this size has some mix of these six leaks — usually three of them, usually invisible on the P&L, always visible in the operational data. Finding them takes about two weeks of diagnostic work with your actual numbers.

Keep your business above water.
Book a diagnostic See how we work