The owner ran a $5.2M SWPPP and erosion control operation — stormwater pollution prevention plans, BMP installation and maintenance, inspection management, regulatory compliance. A seasonal, portfolio-based business where 30 to 50 sites might be active simultaneously at the peak of the construction season.
Cost tracking was done at the company level. Total labor out, total materials out, total fuel out — all tracked, none of it allocated to individual sites. When a crew went to five sites in a day, the labor for that day went into one bucket. There was no way to know how much labor had been spent on each of those five sites.
The P&L showed a profit. But the owner had a nagging sense that some sites were burning through labor at a rate that was far above the bid assumptions — particularly sites with inspection failures that required re-work, or sites that were being visited more frequently than the contract stipulated. He had no data to confirm or deny that sense.
From the owner: "I know some sites are killing us. I just don't know which ones. And every spring I'm scrambling to find cash to mobilize new sites while I'm waiting for checks on the ones already running."
Two problems stacked on each other. The per-site visibility problem was a job costing failure — costs weren't allocated to sites, so there was no way to see cost overruns until they showed up in the blended annual margin. The spring cash problem was a structural working capital issue — SWPPP contractors mobilize multiple sites quickly at the start of the season, spending on materials, supplies, and mobilization labor before the first billing cycle on new sites generates any cash.
The failure chain: Company-level cost tracking → no per-site visibility → high-cost sites run undetected → blended margin masks individual site losses → spring mobilization creates cash gap → owner scrambles for cash every March and April without a structured plan to cover it.
When CFOS rebuilt the cost structure with site-level job codes, the variance across sites became clear for the first time. The highest-cost sites were running 40 to 60% over the bid labor assumption — driven primarily by inspection failures that required additional service visits and BMP reinstallation. Without site-level tracking, those costs had been absorbed into the company total and spread across all sites. The sites that were performing well were subsidizing the ones that weren't.
SWPPP sites require inspections after rain events. When a site fails inspection — BMP displaced, silt fence down, inlet protection missing — the contractor mobilizes a crew to fix it. That fix costs labor and material. In many contracts, the fix is at the contractor's expense, not a billable change order. CFOS identified that the owner had no system to track the cost of failed-inspection responses by site. Several sites were generating 8 to 12 untracked fix visits per season. At $300 to $600 per visit, those sites were running $2,400 to $7,200 over budget in labor and material alone — invisible until site-level costing was live.
Every March and April, the owner mobilized 15 to 25 new sites. Each mobilization required BMP materials, installation labor, and setup costs — expenses incurred before the first monthly billing on those sites. The cash gap between mobilization spend and first payment was 45 to 60 days on average. The owner had no LOC draw plan built around this cycle. He drew on the LOC reactively when the account got low, paid it back when collections came in, and repeated the cycle without a formal structure. CFOS built a 13-week cash forecast around the seasonal mobilization cycle that sized the LOC draw in advance and scheduled the paydown.
Every active site was set up as a separate job in ControlQore. Labor entries were restructured so crew time was allocated by site, not by day. Material purchases were tagged to site at the point of ordering. The system to capture per-site cost was live by end of week two.
Within three weeks of going live on the new structure, enough cost data had flowed in to run a site-level variance report. Eight sites were running more than 30% over budget. Four of them had active inspection failure patterns. The owner could now see which sites to scrutinize and why. Crew schedules were adjusted for the high-cost sites.
CFOS built a 13-week rolling cash forecast that mapped mobilization spend by week against expected billing and collection timelines. The forecast sized the spring LOC draw at $140K and scheduled the paydown over 10 weeks as collections came in. The owner had a plan for the spring gap instead of a crisis every year.
40+ active sites each showing labor, material, and cost-to-complete versus the bid. Monthly variance reports running. Spring mobilization plan structured and the LOC draw pre-approved. The portfolio-level visibility the business needed to manage at scale was live.
The owner stopped managing by feel and started managing by data. Sites that were running over budget were visible within three weeks of a cost overrun starting. The spring cash panic was replaced by a structured LOC draw plan the owner could see coming months in advance. The portfolio could grow without the financial visibility falling further behind.
Day one of the CFOS engagement to per-site margin live across 40+ sites: 60 days. First site-level variance report in week three. Cash forecast built and LOC plan in place by week six.
SWPPP operators manage by relationships and site quality — not by spreadsheets. CFOS doesn't ask owners to manage differently. It builds the visibility around how the owner already works, so the financial picture is always accurate without adding administrative burden to the field.
SWPPP and erosion control operators who recognize this story usually share these patterns:
The feeling is there. The data isn't. Costs tracked at the company level make it impossible to see which sites are eating labor until year-end when it's too late to do anything about it.
Each failed inspection response costs real labor and material. Without a system to track those costs by site, they disappear into the overhead pool and you lose the ability to see which sites — or which GCs — are costing you the most in re-work.
Every March you're scrambling. Mobilizing 15 to 25 new sites costs money before it generates any. Without a structured LOC draw plan, that gap becomes a panic instead of a plan.
Adding sites doesn't add margin proportionally. Something is leaking but you can't see where. Per-site visibility is the only way to manage a portfolio at scale without the leaks getting bigger as you grow.
CFOS Job Profitability and Working Capital modules are built specifically for multi-site SWPPP operations. See how CFOS is built for SWPPP contractors →
If you can't answer that in 30 seconds, CFOS can change that in 60 days. Schedule a call.
SCHEDULE A CALL