40 SITES. ZERO PER-SITE VISIBILITY. FIXED.
A $5.2M SWPPP and erosion control contractor was running 40 active sites with a single blended P&L. No per-site profitability. No way to tell which sites were winning and which were bleeding. Losing sites were subsidizing winners and nobody knew which was which. CFOS built site-level job costing in ControlQore and delivered per-site profitability within 45 days.
WHERE THIS CONTRACTOR STOOD.
A $5.2M SWPPP and erosion control contractor — BMP installation, maintenance, and inspection across commercial and residential development sites — came to SPM in summer 2025. The owner had built the company over nine years from a one-truck operation to a fleet of 12 service trucks and a crew of 19.
The company's revenue model was recurring service contracts — site visits billed monthly, BMP installation billed on mobilization, and inspection reports bundled into a per-site monthly rate. Forty active sites at any given time, spread across two states. The owner managed dispatch and estimating personally. His office manager handled invoicing.
Revenue was growing. Profit wasn't. The quarterly P&L showed 5% net margin — half of what the owner expected given his pricing model. He couldn't tell whether the problem was overhead, pricing, labor efficiency, or some combination. He had no per-site data to investigate. The 40-site blended P&L was the only number he had.
WHAT THE OWNER WAS EXPERIENCING.
The owner was making pricing decisions on gut feel because he had no per-site cost data. When he bid a new site, he estimated drive time and material cost based on experience. He had no way to verify whether those estimates held in the field — his crews tracked hours by day, not by site.
BMP material costs were hitting the books as a single monthly purchase rather than by site. When a rain event required emergency BMP installation on multiple sites in the same week, the material cost showed up as a lump sum against the company P&L. No site attribution. No way to know which sites triggered the spend.
The seasonal cash cycle was brutal. Summer dry season meant lower BMP activity and lower variable billing — but the 19-person crew was still on payroll. The offset was supposed to come from inspection billing, which was consistent year-round. But inspection billing was bundled into the monthly per-site rate and never tracked separately — so the owner couldn't tell if inspection was actually profitable or subsidizing installation losses on slow sites.
WHAT CFOS FOUND.
The diagnosis was a Job Profitability System failure at the portfolio level. Three mechanisms were identified:
Mechanism 1 — No Per-Site Cost Attribution. Labor hours were tracked by crew, not by site. Material costs were booked by purchase date, not by site. Forty sites were effectively one revenue stream and one cost pool. There was no way to calculate margin at the site level — which meant no way to identify losing sites, renegotiate bad contracts, or replicate winning ones.
Mechanism 2 — Drive Time Subsidized by Profitable Sites. Some sites required 45 minutes of drive time per visit. Others were 10 minutes away. Both were billed at the same monthly rate. The owner knew this intuitively but had no data to quantify the margin difference or to identify which remote sites needed repricing at renewal.
Mechanism 3 — Material Spikes Invisible at Site Level. Rain event BMP installations created large, irregular material spikes. Without site-level material tracking, those spikes couldn't be attributed to specific contracts — and any emergency BMP work that exceeded the contract allowance couldn't be billed as a change order because there was no documentation of which site triggered the spend. See how the Job Profitability System builds per-site visibility →
WHAT CHANGED AND WHEN.
Built a site master list in ControlQore — one job code per active site, 40 jobs total. Matched each job code to the corresponding monthly contract rate and billing terms. Implemented a field time-tracking protocol: crews log hours by site via a simple job code system on their phones. Material purchases routed through a purchase order process with site code required before PO is approved.
First month of per-site data collected and loaded into ControlQore. Ran site-level P&L for all 40 sites. Results: 26 sites profitable, 14 sites losing money. The 14 losing sites had one of three problems: excessive drive time vs contract rate, material usage above the contracted allowance, or inspection time exceeding the bundled rate. Owner saw this breakdown for the first time — 45 days after engagement start.
Repriced 11 of the 14 losing sites at renewal — drive time premium added to remote sites, emergency BMP material billed as change orders with documentation from the new PO system. Three sites that couldn't be repriced (mid-contract, fixed-rate developer) were flagged for non-renewal. Material change order billings recovered $38,000 in the first two months that had previously been absorbed. Emergency BMP installation now generates a documented change order within 48 hours of site visit.
Seasonal cash modeling built into the 13-week forecast — dry season crew costs projected against inspection-only billing months. Owner saw the summer dip 10 weeks before it hit and adjusted draw schedule accordingly. Net margin improved from 5% to 11.4% by portfolio month six. ControlQore delivers per-site profitability every month — the 40-site blended P&L is no longer the only number available.
WHAT ACTUALLY HAPPENED.
Time to headline outcome: Per-site profitability visible across all 40 sites: 45 days. First losing sites repriced: 60 days. $38K in change order recovery: 60 days.
DO YOU RECOGNIZE THIS STORY?
SWPPP contractors running multi-site portfolios without per-site visibility usually share the same patterns:
The feast-or-famine seasonal cash cycle and multi-site profitability blindness are the two defining financial problems for SWPPP contractors. CFOS solves both. See how CFOS applies to SWPPP contractors specifically →