Most contractors know their revenue. Very few know their actual profit by service line. One Charlotte-area contractor was doing strong top-line numbers but couldn’t figure out why his bank account never matched. A custom-built job costing application finally gave him the answer, and it wasn’t pretty.
The problem with spreadsheets and gut feelings
If you run a contracting business (HVAC, plumbing, electrical, general contracting, landscaping), you’ve probably got some version of a tracking system. Maybe it’s QuickBooks. Maybe it’s a spreadsheet one of your office staff built three years ago. Maybe it’s a whiteboard and a good memory.
The problem isn’t effort. None of those tools connect your actual field time, material costs, subcontractor invoices, and overhead to the specific job and then compare that to what you quoted.
For one contractor in the Charlotte metro area, that disconnect was costing him money. He was booking $2M+ a year across four service lines: new installs, maintenance contracts, service calls, and commercial retrofits. On paper, all four looked profitable. In reality, one of them was quietly eating his margins alive.
He just didn’t know which one.
What the app actually did
Working with systemsevendesigns, he got a custom application built specifically around how his business operates, not a generic platform he had to bend his processes to fit.
What it tracked, in plain terms:
Labor costs by job. Every technician logged time against a job code. The app pulled their loaded hourly rate (including benefits and overhead allocation) and attached it to that job in real time.
Material costs were logged by job code when parts were pulled from the truck or ordered. No more lumping everything into a general “cost of goods” bucket. Any third-party work was entered against the relevant job before the invoice was marked payable.
Every job also had an original estimate attached. The app calculated actual margin at close and flagged anything that deviated more than 8% from the quoted number.
Built on Laravel, the application ran in a browser on any device. Office staff on desktops, field supervisors on tablets. No app store installs, no per-seat licensing fees, no features they didn’t need.
What the data showed
After 90 days of clean data, the picture was clear.
New installs and commercial retrofits were hitting 34-38% gross margin consistently. Maintenance contracts were thin but predictable. Acceptable.
Service calls? Averaging 11% gross margin. Sometimes negative on jobs that ran long or needed a second truck.
The service call division felt busy and looked busy. It generated a lot of invoices. But once labor time was accurately tracked (technicians were spending 30-40% more time on service calls than the flat-rate pricing assumed), the numbers collapsed.
He had two choices: reprice service calls to reflect true costs, or restructure how they were dispatched and handled. He did both. Within two quarters, service call margins were back above 28%.
Why off-the-shelf software didn’t solve this
He had tried two different field service management platforms before coming to systemsevendesigns. Both had job costing features. Neither worked the way his business actually worked.
One couldn’t handle his overhead allocation model. The other required so many manual workarounds that his office manager spent more time maintaining the system than using it.
This is the core argument for custom web development when you’re dealing with a business process that has real complexity. Generic software is built for the average contractor. Your business has its own pricing logic, its own cost structure, its own workflow.
When the software is built around your process instead of the other way around, the data you get out is actually useful.
What to do if you’re in the same situation
If you’re running a service business and you genuinely don’t know which service lines are profitable, start here.
Map your cost inputs first. Labor, materials, subs, and overhead. Know what each one actually costs you, not what you estimate. From there, track time honestly. Flat-rate pricing is fine for customers, but internally you need to know what jobs are actually taking.
Close the loop on estimates. Every quoted job should be compared to actual costs at close. Even a simple review process catches patterns fast. And if your current software can’t show you margin by service line in under 60 seconds, it’s not doing its job.
You don’t need a massive ERP implementation. You need a focused tool built around the specific decisions you’re trying to make.
The bottom line
Data doesn’t lie, but only if you’re collecting it in a way that makes sense. This contractor wasn’t failing at business. He was flying blind on one critical dimension. One well-built application changed that, and the margin improvement more than covered the cost of building it.
If you’re a contractor or service business in the Charlotte area and you’re running on gut feel and spreadsheets, it might be time to find out what your numbers are actually telling you.