Your bids are only as accurate as your cost history. And your cost history is only as good as your chart of accounts.
Most specialty contractors don't lose margin on the job site. They lose it before the project starts, because they priced it wrong. And they priced it wrong because they couldn't see where the money went on the last five jobs.
That's the problem a well-built general contractor chart of accounts actually solves.
What is a general contractor chart of accounts?
A general contractor chart of accounts is the organized list of every account used to record financial transactions in a construction business. For specialty contractors, it's built around job costs so every dollar spent can be traced to a specific project, phase, and cost type.
A basic construction accounting structure includes:
- Assets
- Liabilities
- Equity
- Revenue, broken out by contract and change order
- Direct job costs: labor, materials, equipment, subs
- Indirect costs and overhead
The difference between a generic chart of accounts and one built for contractors is how finely you break down job costs. That detail is what makes cost tracking and bid accuracy possible.
Why your chart of accounts matters more than you think
Bad account structure doesn't just create problems for your bookkeeper. It bleeds into your bid pricing, your buyout negotiations, and your win rate.
Here's what happens in practice. An estimator is pricing a $4M mechanical job. They pull historical labor costs from the last similar job. But half of those costs were coded to a catch-all "field labor" account that mixed journeymen, apprentices, foremen, and overtime. The estimator can't tell what the real craft labor rate was. They guess. Sometimes they're close. Sometimes they're not.
Over a full year of bidding, those guesses add up. Some bids come in fat and you don't win them. Others come in tight and you win work you lose money on.
A clean general contractor chart of accounts gives you the data to price accurately. It also matters during GC buyout negotiations. When a GC asks you to break out your labor versus material costs, you either have that data or you don't. The subs who have it walk into that conversation with actual numbers behind them.
The core structure: organizing a general contractor chart of accounts for your trade
A chart of accounts for a specialty contractor isn't the same as a generic small business accounting setup. You need accounts that map to how you actually build and how you actually bill.
At the top level, you have your standard categories: assets, liabilities, equity, revenue, and costs. What's different is how you break down your job costs. This is the foundation of construction bookkeeping that most small and mid-size subs skip.
The main cost buckets for specialty contractors:
- Direct labor. Broken out by trade classification. Journeymen, apprentices, foremen, and superintendents each get their own account. Prevailing wage and non-prevailing wage should be separate too.
- Labor burden. Payroll taxes, fringes, union benefits, workers' comp. Keep this separate from base wages so you can see your true labor cost.
- Direct materials. Organized by material type, not just by job. Copper pipe, steel conduit, fittings, wire, insulation. If you're a fire protection sub, sprinkler heads and pipe should be in separate accounts.
- Equipment. Owned equipment depreciation or allocation, plus rental costs coded separately.
- Subcontractors. Any work you're buying out to sub-tier contractors. This needs its own account, separate from your own labor.
- Direct job overhead. Superintendent trucks, project-level insurance, permit fees, temporary utilities. These are job costs, not G&A.
Above that, you have your indirect costs and overhead: estimating salaries, business development, office rent, vehicle fleet, general liability, and equipment not tied to a specific job. These get allocated to jobs, but they live in their own accounts first.
Building your general contractor chart of accounts: a step-by-step framework
This doesn't have to be complicated. But it has to be intentional.
Step 1: Define your cost centers.
Start with the job as the primary cost center. Every dollar should be traceable to a job number. Within each job, you'll have cost codes that break down by trade and phase.
Step 2: Create a naming convention that maps to your bid line items.
If your bids break out "rough-in labor" and "finish labor," your accounts need to match that. If your bid has a line for "copper material" and one for "insulation," your chart of accounts needs those same breakdowns. This is where most subs get lazy. They bid in detail but code in bulk, and then they can't compare actual to estimated.
Step 3: Link your accounts to the schedule of values.
When you submit an SOV to a GC, those line items should correspond directly to your internal accounts. This makes monthly billing reconciliation faster and makes it obvious when you're over or under in a phase.
Step 4: Set up variance tracking.
Every account with a budget, based on your bid, needs to track actual versus budgeted. This is how you catch problems early. If you're 30% over on copper material in month two of a six-month job, you want to know now, not at closeout.
Step 5: Assign cost codes to your estimating software and timesheets.
Your estimators build the bid in one system. Your field guys code time in another. If those cost codes don't match, you'll never get a clean actual-to-bid comparison. This is the most common breakdown point in job accounting.
QuickBooks can handle this for smaller contractors. For larger operations, construction-specific platforms like Viewpoint or Procore have more built-in job cost structure. The right choice depends on your volume and complexity, but cost code alignment matters more than which software you pick.
Labor accounts and prevailing wage tracking
If you do any public work, prevailing wage tracking isn't optional. And even on private work, separating union from merit shop labor is worth doing if you run both types of projects.
Prevailing wage rates vary by classification and by county. California has different rates than Texas, and a journeyman electrician rate differs from an apprentice rate in the same county. If you lump all labor into one account, you can't prove compliance to the GC or the awarding authority. In an audit, that becomes a real problem.
What to separate in your labor account classification:
- Base wages by classification: journeymen, apprentices, foremen
- Prevailing wage premium, meaning the difference between your base rate and the required prevailing rate for that classification and jurisdiction
- Union fringe benefits: health, pension, vacation, training, reported separately because they're paid to a trust fund, not to the worker directly
- Non-union burden: FICA, FUTA, workers' comp, general liability portion, which has a different rate structure than union fringes
When a GC asks for a labor cost breakdown during a buyout negotiation, you pull this in minutes. That kind of transparency builds the GC relationship. It also makes you harder to shop.
Material and equipment accounts: tracking what you actually spent
The most common mistake is treating materials as a single account. That works fine for a bookkeeper. It's useless for an estimator trying to improve future bids.
Think about what you actually want to know after a job closes. Did you overspend on copper or on fittings? Was the overage because of waste, or because your original quantity takeoff was wrong? If everything goes into "mechanical materials," you can't answer those questions.
A more useful breakdown for construction bookkeeping:
- Materials purchased for a specific job, coded at the time of the purchase order
- Materials pulled from stock, which requires a transfer entry when consumed
- Materials wasted or left over, tracked separately so you can see your actual waste factor by job type
On equipment, the question is whether you're renting or using owned equipment. Rental costs are straightforward: code the invoice to the job. Owned equipment is trickier. You need an hourly or daily allocation rate that captures depreciation, maintenance, and insurance. If you're running a $150,000 man-lift on three jobs at once, you need a system for splitting that cost. Most contractors undercharge their jobs for owned equipment and then wonder why equipment profit looks good on paper but feels wrong.
Subcontractor and vendor accounts in your chart of accounts
When you buy out work to sub-tier contractors, that cost needs its own account, separate from your own labor and material.
A few reasons this matters. First, when you're tracking job profitability, you want to know your self-perform margin versus your subcontracted margin. Second, retainage tracking is much cleaner when sub costs are isolated. Third, lien waiver reconciliation goes faster when you can pull a clean list of every sub-tier payment by job.
Set up vendor accounts for your major suppliers and subs. After a year of consistent account coding, you can pull vendor-level cost data and compare it across jobs. If one insulation sub is consistently running 10% over their bid, that's a negotiation point, or a decision to rebid that scope.
Overhead and indirect costs: the part most contractors get wrong
Overhead is where specialty contractors most often leave money on the table or price themselves out of bids.
The typical overhead rate for specialty contractors in the $10M to $50M range runs between 10% and 18% of revenue, depending on how lean the operation is and whether they carry a large preconstruction team. But if you don't have clean indirect cost accounts, you're guessing at that rate.
What belongs in indirect costs:
- Estimating and BD salaries, not field labor
- Office rent and utilities
- Accounting and legal fees
- General liability and umbrella insurance not allocated to specific jobs
- Company vehicles not assigned to a project
- Technology and software subscriptions
What does NOT belong in overhead:
- Project superintendent salaries (direct job cost)
- Permit fees (direct job cost)
- Equipment on a job site (direct job cost)
Getting this split right matters for your bid markup. If you're loading 15% overhead into every bid but your actual overhead rate is 11%, you're pricing yourself out of competitive bids. If you're loading 10% but running at 14%, you're winning work and losing money.
Real-world example: mechanical contractor's chart of accounts
Here's what a basic account structure looks like for a commercial mechanical subcontractor doing $20M to $40M per year. The account numbers below follow a standard construction account classification format most accounting systems can import directly.
Revenue accounts:
Direct cost accounts:
Indirect cost accounts:
A $22M mechanical contractor we worked with was using seven total cost accounts. Everything was bundled. Their estimators were essentially guessing at labor costs on every bid because there was no clean data to pull from. After rebuilding their chart of accounts and coding consistently for two quarters, they could see actual craft labor rates by classification for the first time. Their bid accuracy on similar projects improved noticeably, and they started winning buyout negotiations more often because they could back up their numbers with real cost accounting data.
Using your chart of accounts to improve bid accuracy and win rate
The whole point of doing this work is to get better at pricing. And pricing accuracy directly affects your win rate.
The average win rate for commercial specialty contractors runs between 20% and 30%. The contractors at the higher end of that range consistently have one thing in common: they know their numbers. They can look at a bid and say, "our actual labor rate on similar work last year was $X per hour all-in, and our material waste factor on copper in commercial ground-up is Y%."
That's not possible without a general contractor chart of accounts that captures costs at that level of detail.
The workflow that actually works:
- Bid goes out. Cost estimate is built in the estimating software with cost codes.
- Job is awarded. Cost codes from the estimate get loaded into the accounting system as the job budget.
- Field codes time and materials to those same cost codes.
- Project manager reviews actual versus budget weekly or biweekly.
- At job close, the variance report gets saved as historical data for future bids.
After six months of doing this consistently, your estimators are pricing off real data instead of gut feel. That's where the improvement in bid accuracy comes from.
Common mistakes in a general contractor chart of accounts
A few patterns come up over and over.
Too many catch-all accounts. "Miscellaneous job costs" should not be one of your top five accounts by dollar volume. If it is, you've got a coding problem.
Inconsistent coding across jobs. If one PM codes foreman time to "supervision" and another codes it to "field labor," your historical data is garbage. It has to be the same every time.
Not tracking small items. Consumables, small tools, waste. These don't seem like much on one job. Across 30 jobs a year, they add up.
No monthly variance review. Problems compound. A job that's 5% over budget in month two can be 20% over by month four. If nobody looks at the numbers until closeout, it's too late to fix anything.
Chart is too complex for the field. If your foreman can't find the right cost code in under 60 seconds, he'll pick the wrong one. Every time. Simple enough to use consistently beats detailed and ignored.
Tools and software that support a solid chart of accounts
QuickBooks works for contractors doing under $10M, especially with a good bookkeeper setting it up. Above that, you'll feel the limitations. QuickBooks doesn't have native job cost reporting that's granular enough for a 20-job, $30M operation.
For mid-size specialty contractors, construction-specific platforms like Viewpoint Vista, Sage 300 Construction, or Procore's financials module handle job cost structure better. The connection between estimating, field time tracking, and accounting matters a lot. If your estimating software can push cost codes directly into your accounting system, that's worth real time and accuracy in your construction bookkeeping.
Spreadsheets can hold the data. They can't enforce consistency. One wrong cell reference or one person formatting a date field differently, and your historical comparisons break down.
Getting your team to actually use the chart of accounts you build
You can build a perfect account structure and it won't matter if your field supervisors and PMs don't code consistently.
The common failure here is building the chart in the accounting department and then handing field guys a list of 200 cost codes with no training. They'll either code everything to the first thing on the list or ignore cost codes entirely.
What actually works:
- Start with the 20 to 30 cost codes that cover 90% of your costs. Add more only as needed.
- Train PMs and foremen with real examples from actual jobs, not hypothetical ones.
- Do a biweekly coding review for the first 90 days. Catch errors before they become habits.
- Tie job profitability visibility to bonus conversations. When PMs understand that their job cost data drives the year-end bonus discussion, they start caring about code accuracy.
If your team can't find the right cost code in under 60 seconds, the chart is too complicated. Simplify it.
Next steps: audit your current chart of accounts
Start with a simple self-audit. Pull your last three closed jobs. Can you see actual labor cost by classification? Can you compare material spend to what the bid included? Can you see what your sub-tier costs were, separately from your own labor?
If the answer to any of those is no, that's your starting point.
Pick your top three miscoded or bundled expense categories. Fix those first. Don't try to rebuild everything at once. One quarter of consistent, clean job accounting in those three areas will give you more useful data than years of sloppy data across 200 accounts.
Your general contractor chart of accounts is the foundation of your bid accuracy, your margin visibility, and your ability to walk into a GC buyout with real numbers. It's worth getting right.
Want to know where your bid pipeline and job costing process are breaking down? Fill out the contact form below and we'll take a look at what's working and what's not.