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.
"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.
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.
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.
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.
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.
Estimates were built on $34/hour for field labor. The wage is $26. Feels like a comfortable cushion — until you stack the whole iceberg.
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.
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 leaked | Annual |
|---|---|
| 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 |
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.
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.
$137,000 a year in marketing. Almost all of it pointed — with real skill, honestly — at exactly the wrong target.
| Channel | Monthly | Feeds | Cost / closed job |
|---|---|---|---|
| Google Ads"garage floor coating," "epoxy near me" | $4,800 | Residential | $338 |
| SEO agencyRanking for residential keywords | $2,500 | Residential | — |
| Lead marketplacesShared leads, 22% close rate | $2,100 | Residential | $412 |
| Facebook / Instagram | $1,000 | Residential | $296 |
| Trade association + 2 industry eventsWhere the industrial work actually comes from | $1,000 | Industrial | $71 |
| Total | $11,400 | ||
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.
Profitable on paper, tight in the bank — the classic contractor squeeze. Here's the shape of it.
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.
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.
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.
| Tool | Does | Monthly |
|---|---|---|
| QuickBooks Online Advanced | Accounting | $235 |
| Field service appScheduling + dispatch, 8 seats | Scheduling | $349 |
| QuickBooks Time | Time tracking | $170 |
| CRM starter planHalf-adopted; sales still lives in a spreadsheet | Pipeline | $90 |
| Photo documentation app19 seats | Job photos | $228 |
| Google Workspace25 seats | Email + Drive | $300 |
| Legacy DropboxOld jobs; nobody dares turn it off | More files | $120 |
| E-signature | Contracts | $75 |
| Estimating spreadsheetBuilt by a consultant in 2019; one person understands it | Estimating | $0 |
| Email marketing | Newsletters | $85 |
| Scheduling links + automation glue | Duct tape | $103 |
| Misc. single-seat tools | Various | $585 |
| Software subtotal — $28,080/year and counting | $2,340 | |
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.
| Path | Year 1 | 3-yr total | The honest trade-off |
|---|---|---|---|
| Keep the stackDo nothing | $58,700 | $176,100 | Zero disruption. The double entry, version drift, and $30K of retyping continue forever. |
| Contractor platformServiceTitan-class FSM | $68,800 | $162,400 | Proven, 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,000 | Infinitely 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,600 | Fits 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. |
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.
None of it required new customers, new crews, or new revenue. All of it was already inside the building.
| Finding | Annual 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.
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.