Your Software Has the Data — You're Just Pulling the Wrong Report
Your Software Has the Data — You're Just Pulling the Wrong Report
Every night for my first year running five trucks, I'd open Housecall Pro on my phone before bed. Revenue this month. Jobs completed. The numbers were going up and to the right, and I'd close the app feeling like I was doing something. I was not doing something. I was reading a summary of money that had come in and going to sleep.
That habit cost me real money in 2023. Here's how much, and how it happened.
The Dashboard That Lies to You
Month two of Reeves Electric, my NPS was a 4. Not 40. A 4. I wasn't ignoring the business — I was checking revenue, watching jobs booked, tracking the topline. Things looked fine. Things were not fine. The problem was in the actual phone calls I wasn't listening to, in the intake process I hadn't built yet.
The revenue dashboard is the same trap. It's a summary metric. It collapses everything going on in your operation into a single number that's either up or down from last month. When it's up, you close the tab. When it's down, you panic. The number doesn't tell you what's causing either.
I fixed the NPS problem by listening to actual calls for ninety days — stop staring at the summary, go find the data underneath it. The margin problem required the same move.
Revenue Is a Mood, Not a Decision
Here's what I've said to shop owners who've pushed back on this: your gut after 4,000 service calls is data. You've run enough panel upgrades and dealt with enough Friday inspections that fall apart at 4pm that your instincts are calibrated. That's real. Your gut after staring at a topline revenue number is not data. It's a mood.
The default dashboard feeds the mood. For a five-truck residential shop, most of what's on that screen is orientation, not intelligence.
"Jobs completed" tells you volume. It doesn't tell you which jobs were worth doing. "Average ticket" tells you what customers spent, not what you kept. "Total revenue" tells you how much came in — not whether any of it was worth the labor that produced it.
The question the default dashboard never asks: how much of what we sold was actually worth selling?
Most contractors never notice the question is missing, because the first set of numbers feels complete.
Your gut after staring at a topline revenue number is not data. It's a mood. The dashboard feeds the mood, not the decision.
What's Actually in There — If You Dig for It
Job-level gross margin by tech is the number that matters. Cut it by job type and you've got something you can act on. Neither of those surfaces automatically in Housecall Pro without a manual export — the default reporting screen won't hand it to you.
Here's the concrete version. After my first full year at five trucks, I pulled job-level margin by job type. The topline had looked fine. Underneath it, panel upgrades were performing noticeably worse on Fridays. The reason: inspection scheduling lag. A panel upgrade finishing late in the week means the utility inspection often slides to Monday. My techs were logging partial hours Friday, returning Monday morning for a 45-minute inspection window, and that return trip wasn't being captured against the original job's labor cost. The Friday panel upgrade that looked like $2,800 at 54% margin was actually closer to 41% once you accounted for the Monday return.
Invisible in the revenue report. Showed up the minute I looked at margin by job type, cut by day of close.
Getting to that data isn't automatic. Housecall Pro exports to CSV. That CSV lands in a spreadsheet. I built a Google Sheets template that cross-references labor hours logged per job against total job revenue and parts cost from the purchase order. One Saturday afternoon. Not a beautiful dashboard — a tab with five columns and a calculated margin field. Worth more to me than anything on the default reporting screen.
What a Bad Report Cost Me in 2023
In early 2023, EV charger installs were running hot. Lots of calls, new customers, real demand. I leaned into it — marketed the service specifically, trained two techs on the nuances, made it a named service line.
The revenue from charger installs looked strong. I kept scaling.
What I didn't see until mid-year, when I finally pulled job-level margin on that service line, was that about half of those installs — the ones where I'd quoted close to franchise rates to win the customer and then discovered the panel scope on-site — were running at 18% gross margin. My shop target is 52%. I'd been scaling a margin trap for two quarters while the topline hid it, because the high-revenue panel-upgrade-plus-charger jobs were averaging out against the clean installs.
Eighteen percent. On jobs I was actively marketing for. On jobs my techs were spending full days on.
The fix came directly from the margin data. Once I could see which job configurations were blowing up the margin, I built the pre-quote phone screen — five questions, 20 minutes, identifies the panel situation before we're on-site with a deposit down. And the $99 site assessment for anything that might need a service upgrade, credited against the install if they book. Both of those exist because I finally looked at the right number.
What did it cost me? I've done the math a few different ways. The most honest answer is about $47,000 in gross profit across those two quarters — jobs I completed, customers I satisfied, techs I paid, and margin I didn't capture because I was pricing from the wrong starting point. I made it worse by celebrating the revenue while it was happening.
How to Build the One Report You'll Actually Use
Five fields. One tab. Reviewed every Monday morning.
Tech name. Job type — I categorize at job creation in Housecall Pro, and the categories are specific: panel upgrade, EV charger, service call, new circuit, ceiling fan, subpanel, service upgrade. Not "electrical." Specific. Total revenue for the job. Total labor hours logged. Parts cost from the purchase order. Calculated gross margin as a percentage.
The margin field is (revenue - parts cost - labor cost) / revenue, where labor cost is hours logged multiplied by your fully loaded labor rate per tech. If you don't know your fully loaded rate — wages plus burden plus benefits, divided by billable hours — that's the first thing to solve, not the second.
The review takes 20 minutes on Monday morning. I run it at the same time I do the CallRail call sample review with my dispatcher. We look at the previous week's jobs, flag anything below target margin, and ask two questions: was this a pricing problem or an execution problem? If it's neither, it's usually a scope problem that turned into a change order we didn't write. Name it. The dispatch decisions for the following week get adjusted based on what we see.
The report is not the point. Running it once and filing it is useless. Running it every Monday until the pattern is familiar — that's what changes how you operate.
Stop Blaming the Software
Housecall Pro is not dumb. The default reporting setup is not designed to run your business — it's designed to make sense during a demo. Those are different goals.
Fixing it takes one afternoon. Not a platform switch.
Export every completed job from the last 90 days as a CSV. In Housecall Pro it's in the reporting tab — look for the export button, takes about four minutes if you've never done it.
If you're not logging hours by job right now, go into your software settings today and turn on time tracking. Tell your techs it's mandatory starting this week. You can't rebuild the last 90 days, but you can start collecting clean data right now.
Once you have the export, calculate gross margin for the ten largest jobs by revenue. Just those ten. Parts cost, labor hours multiplied by your loaded rate, subtract from revenue, divide by revenue.
Then ask one question: which job type has the widest spread between your best-margin and worst-margin installs of the same type? A panel upgrade at 61% and a panel upgrade at 19% on the same week's schedule are not a coincidence. That spread is a pricing problem, a scoping problem, or a change order you didn't write. Probably some combination. The point is you can name it now instead of feeling vaguely anxious about a number you can't explain.
Feeling it is how you spend two quarters scaling a margin trap while the revenue dashboard tells you things are fine.
FAQ
My software rep told me the reporting dashboard covers everything I need — is that true?
No. The default dashboard covers everything you need to feel oriented — that's a different thing. Revenue, jobs completed, average ticket are useful for knowing roughly where you stand. They're not operational metrics. The rep is showing you what the software displays by default, which is not the same as what you need to make decisions. The underlying data for a real margin report is in the software. It usually just requires a CSV export and 20 minutes in a spreadsheet to build something useful.
What's a realistic gross margin target by job type for a residential electrical shop?
In my shop, I target 52% across the board, but it breaks down by job type in practice. Clean EV charger installs with no panel work run higher — sometimes 58% to 62%. Service calls with parts-heavy repairs compress toward 44% to 48%. Panel upgrades mid-week, with clean inspection scheduling, come in around 50% to 55%. The number that matters is your number, not something I've read somewhere. Calculate your current average by job type first. Then decide what you're trying to move and by how much.
I don't log labor hours by job right now — is it too late to go back and rebuild that data?
You can't reconstruct what wasn't tracked. Don't try. Turn on time-by-job logging in your software settings today, set the expectation with your techs this week, and start building clean data from here. In my experience, 90 days of clean logging is enough to pull a first real margin report. The past data isn't gone — it's just imprecise, and trying to reverse-engineer hours from memory will introduce more error than you're solving for.
ServiceTitan has way more reporting than Housecall Pro — should I switch just for the reporting capability?
Probably not. ServiceTitan's reporting is genuinely more powerful, but the implementation is a real project — I've talked to shops that were five months into a ServiceTitan setup before the data was clean enough to trust. If your core workflow on Housecall Pro is solid, fix your reporting process first with CSV exports and a Google Sheets template. If you're still hitting walls after six months of clean data, then have the ServiceTitan conversation. That's a process problem before it's a platform problem.
How do I get my techs to actually log their hours accurately?
In Housecall Pro, techs can start and stop a job timer from the mobile app. If they're not doing it, it's because nobody made clear it was required. Set the expectation explicitly, spot-check a few jobs per week where you know the actual hours, and have the conversation when the numbers don't match. In my shop, accuracy got tight within about three weeks once people knew I was looking at the data every Monday.
How often should I be pulling and reviewing job-level margin?
Weekly, on the previous week's completed jobs, for a five-truck shop. Monthly is too slow — a margin problem that runs four weeks costs real money before you catch it. By individual job in real time isn't sustainable without automation I don't have yet. Weekly gives you enough jobs to see a pattern, and you're close enough to the work to still make adjustments that matter. Build it into a fixed Monday review and it takes 20 minutes once the template exists.
Enjoyed this article?
Get articles like this in your inbox every Monday. Free, no spam.
