Job costing for an electrical contractor comes down to two habits. Code every supply house invoice to the job on the ticket instead of booking the monthly statement as one materials expense, and move field labor onto jobs from your time records at what each hour really costs you. Do both, reconcile the supply house statement every month, and every open job shows its true cost against the contract while there's still time to act on it.
Where an electrical job's cost comes from
On most electrical jobs, two costs carry most of the weight: materials from the supply house and field labor. Permits, equipment rentals and subs are smaller, and each one usually arrives on its own bill with an obvious job attached. The two big costs are the two that tend to land in the books as one lump.
- Materials. Wire, conduit, boxes, panels, breakers, fixtures and devices, mostly charged to one supply house account.
- Labor. Apprentice, journeyman and foreman hours, paid through payroll every week or two.
- Permits and inspections. Usually one fee per job, easy to code if someone writes the job down.
- Rentals and subs. Lifts, trenchers, a low-voltage sub or a concrete cutter, billed separately.
If materials and labor aren't tied to jobs, the rest of job costing barely matters. You'll know what the company made in total, but not which jobs made it.
Why the supply house statement breaks job costing
Your supply house account covers every job at once. Crews pick up material at the counter most days, the yard delivers to a site, and someone brings back unused fixtures for credit. At month end you get one statement with dozens of tickets, returns and credits on it.
The easy way to handle that statement is to pay it and book the payment to a Materials account. That one entry wipes out job costing for materials: every job's wire and panels end up in a single number. It also tends to create a second problem. If someone enters a few invoices as bills during the month and the statement payment is also booked as an expense, those invoices are counted twice.
The fix is to treat the invoice, not the statement, as the source document. Each invoice is entered as a bill coded to the job on the ticket. Each return is entered as a credit against the job it came from. The statement then becomes a check: the open bills and credits in your books should add up to the statement balance, and the payment simply pays those bills.
Getting the job onto every ticket
Coding invoices to jobs only works if the ticket says which job it was for. The simplest habit is a job name or number in the PO field on every counter purchase and delivery. Ask your supply house whether your account can require a PO or job name on every ticket. It is a small change that makes every later step easier.
Truck stock is the exception. Wire, connectors and breakers pulled off the truck weren't bought for any one job, so the restock ticket has no honest job to carry. Coding restocks to whichever job happened to be open that day makes one job look expensive and the rest look cheap. We agree with you on one simple method for truck stock and use it every month.
Labor by job: from time records to the job report
Payroll usually reaches the books as one total per pay run. To get labor onto jobs, you need two things: hours by job from your time records or field service app, and a loaded hourly cost for each type of worker.
The loaded cost matters because gross wages aren't the whole cost of an hour. Employer payroll taxes, workers' comp and any benefits or union fringes come with every hour worked. A job costed at wages alone looks better than it is, and the bids built on it are too low. Your actual loaded rates come from your own payroll, insurance and benefit costs, so we work them out from your records rather than using a rule of thumb.
After each payroll, hours by job times the loaded rate gives labor cost by job. Whatever doesn't land on a job, such as shop time, training or meetings, goes to an indirect labor account. That account should be small and visible. If it grows, time records are missing jobs.
A worked example
Say a shop is wiring a small commercial tenant buildout on a $40,000 contract. The estimate for the whole job allowed $11,000 for materials and 300 labor hours. Partway through, the costs to date look like this.
| Cost to date | Where it comes from | Amount |
|---|---|---|
| Supply house invoices (6 tickets) | Coded to the job from the PO on each ticket | $10,400 |
| Return credit (unused fixtures) | Credit applied to the same job | -$600 |
| Journeyman labor | 120 hours at a $55 loaded rate | $6,600 |
| Apprentice labor | 120 hours at a $35 loaded rate | $4,200 |
| Permit | City permit fee | $400 |
| Total cost to date | Against a $40,000 contract | $21,000 |
Materials net to $9,800 against an $11,000 allowance, so they're on track. Labor is the line to watch: 240 of the 300 estimated hours are already used, and trim-out is still ahead. Seeing that now gives you time to look at the crew plan, or to check whether extra work belongs on a change order.
Picture the same job in books that only record the statement and the payroll total. The $10,400 sits in Materials with every other job's tickets, the $600 credit reduces the statement and never reaches the job, and the 240 hours are part of one payroll number. The job looks fine until it closes, and often the books never show its margin at all.
Recording it, step by step
- Set up each job as a project or sub-customer in QuickBooks Online, with the contract amount and the estimate. Use the same job name or number that goes on tickets and time records.
- Enter every supply house invoice as a bill coded to its job, from the invoice itself or your account's online invoice history, not from the statement total.
- Enter returns and credits against the job the material came from.
- Reconcile the statement every month. Open bills less credits should equal the statement balance. Apply the payment to those bills, and record any prompt-pay discount your account offers on its own line.
- Allocate labor after each payroll from hours by job at loaded rates, with leftover hours going to indirect labor. Then check that what you allocated ties to the payroll totals.
- Code permits, rentals and subs to the job as each bill arrives.
- Review the job cost report for every open job: cost to date by category against the estimate, and the contract value billed so far.
Mistakes we see most often
- Booking the statement instead of the invoices. Job costing for materials is gone the moment the statement total hits one account.
- Counting invoices twice. Bills entered during the month, plus the statement payment booked as an expense.
- Credits that never reach the job. The return comes off the statement, but the job keeps the cost.
- Restocks coded to whatever job was open. One job carries the truck, and the others look better than they are.
- Labor at gross wages. Every job looks more profitable than it was, and the next bid is too low.
- Extra work with no change order. Costs land on the job with no billing to match. Tag change order costs so they can be billed.
Each month, and what to hand your CPA
A monthly close for an electrical shop should produce a job cost report for every open job, a reconciled supply house statement, labor allocations that tie to payroll, and receivables by customer. On commercial work, that includes retainage on its own list, as covered in our post on how to record retainage as a subcontractor.
At year end, your CPA gets the job detail behind every number: contract amounts, billings, costs to date and what's still open. Which revenue method your jobs use for taxes, and how materials or truck stock on hand are treated, is your CPA's decision. Our general guide to job costing for contractors covers those methods and work in progress in more depth.
How we handle it
Our bookkeeping for electricians runs in QuickBooks Online from your supply house invoices, payroll reports, time records and bank feeds. Every invoice and credit is coded to its job, every statement is reconciled, Gusto payroll is reconciled each run with labor split by job, and you get a job cost report for every open job each month. It sits under our wider contractors and trades bookkeeping.
If your books are behind, we rebuild them from your statements and invoice history first, coding materials and labor to jobs where the records support it. Plans start at $299 a month; any setup or catch-up fee is quoted up front. See our electrical contractor bookkeeping page for how the monthly work runs.
Common questions
Should I code supply house invoices to jobs or just pay the statement?
Code the invoices. Each invoice is entered as a bill against the job on the ticket, and each return as a credit against the same job. The statement is then a monthly check that the open bills and credits match the balance, and the payment pays those bills.
How do I figure labor cost per job?
Take hours by job from your time records or field service app and multiply by a loaded hourly rate for each type of worker: wages plus employer payroll taxes, workers' comp and benefits. Do it after every payroll and check that the total allocated ties to the payroll report.
What about wire and parts I keep on the truck?
Truck stock wasn't bought for one job, so restock tickets shouldn't be coded to whichever job was open. We agree with you on one simple method and use it every month. Whether truck stock is carried as inventory or expensed is your CPA's call.
Can you job cost from my field service software?
Yes, if it records jobs and time. Field service tools like ServiceTitan, Housecall Pro and Jobber produce job and time reports we can work from, and QuickBooks Online stays the main set of books. See our bookkeeping for electricians page for the rest of the monthly routine.
See What Each Job Really Costs
Book a free books review and we'll show you how your supply house bills and labor are recorded today.
Book a Free Books Review →