Cost codes make the connection between estimate, budget, and actual possible. An estimate line item for "framing — $42,000" becomes a budget cost code. Workers clock their hours into that cost code using a construction time tracking app. Material invoices are coded the same way. At any point in the project, actual cost code expenditure can be compared to budget — not as a lump sum, but line by line, scope by scope.
This guide covers how cost code systems work, the CSI MasterFormat structure most contractors use, how to build a code structure that fits your company, how to connect cost codes to time tracking and job costing, and the most common cost code mistakes that make financial data unreliable.
A cost code is a numeric or alphanumeric identifier assigned to a specific category of work or expense. Every cost incurred on a project — labor hours, material purchases, subcontractor invoices, equipment charges — is coded to a cost code at the time it's recorded.
The three-way connection:
ESTIMATE → BUDGET → ACTUALS "Framing labor Cost Code 06-100 Workers clock hours $42,000" Budget: $42,000 into Code 06-100 Actual: $38,240 Remaining: $3,760 Material invoices % used: 91% coded to 06-100
This connection only works if:
Break any link in the chain and the data becomes unreliable. The most commonly broken link is #2 — workers clocking into the project without selecting a cost code, or selecting a generic "labor" code instead of the scope-specific code.
An estimate line item such as “Framing Labor – $42,000” becomes a cost code in your job cost system. Workers then clock into that cost code using a structured system like Construction Time Tracking Software
Most construction cost code systems use the Construction Specifications Institute (CSI) MasterFormat as their organizing structure. MasterFormat divides construction work into numbered divisions:
MasterFormat Divisions (primary):
|
Division |
Scope |
|---|---|
|
01 |
General Requirements (supervision, temp facilities, cleanup) |
|
02 |
Existing Conditions (demolition, site investigation) |
|
03 |
Concrete |
|
04 |
Masonry |
|
05 |
Metals (structural steel, misc metals) |
|
06 |
Wood, Plastics, Composites (framing, millwork) |
|
07 |
Thermal and Moisture Protection (roofing, insulation, waterproofing) |
|
08 |
Openings (doors, windows, glazing) |
|
09 |
Finishes (drywall, flooring, painting, tile) |
|
10 |
Specialties (toilet partitions, signage, louvers) |
|
11 |
Equipment (commercial kitchen, lab equipment) |
|
12 |
Furnishings |
|
21 |
Fire Suppression |
|
22 |
Plumbing |
|
23 |
HVAC |
|
26 |
Electrical |
|
27 |
Communications |
|
28 |
Electronic Safety and Security |
|
31 |
Earthwork |
|
32 |
Exterior Improvements (paving, landscaping) |
|
33 |
Utilities (underground piping, site drainage) |
Most contractors use a simplified version of MasterFormat — keeping the division structure but creating only the sub-codes relevant to their scope of work.
With cost codes tied to field reporting and time tracking tools like GPS Timesheets for Contractors
Too few codes: A single "labor" code for all field work tells you total hours but nothing about where overruns occur. Useless for estimating improvement and change order documentation.
Too many codes: 200+ codes creates administrative burden that field workers won't maintain accurately. Workers guess at codes rather than selecting the right one, producing garbage data.
Right depth: Enough codes to identify overruns by meaningful scope category, not so many that code selection becomes a burden. For most contractors: 30–80 active cost codes per project depending on scope complexity.
If you're implementing structured job costing within a larger system, explore how it fits into broader Construction Project Management workflows
Division-based (CSI aligned):
06-100 Rough Framing — Labor 06-110 Rough Framing — Material 06-200 Finish Carpentry — Labor 06-210 Finish Carpentry — Material 09-250 Drywall — Labor 09-260 Drywall — Material
Phase-based (sequence-aligned):
100 Site Work 200 Foundation 300 Structural 400 Envelope 500 Rough MEP 600 Insulation 700 Drywall 800 Finish MEP 900 Finishes
Hybrid (division + phase):
P1-06-100 Phase 1 Framing Labor P1-09-250 Phase 1 Drywall Labor P2-06-100 Phase 2 Framing Labor
Useful for phased projects where the same scope recurs in multiple phases and must be tracked separately for billing.
Most contractors use division-based codes aligned to CSI — consistent with spec books, subcontract scopes, and estimating software. The familiarity reduces training time when new PMs or foremen join.
Keep labor and material in separate codes for each scope category. This allows:
Combining labor and material into one code produces a single cost number that can't be analyzed — you can't tell if the framing scope ran over because of labor inefficiency or material overruns.
This is where a structured tool like TaskTag Product Features
becomes critical, because cost code selection is enforced at clock-in.
If you're evaluating software depth, compare functionality in TaskTag vs CompanyCam Comparison
CompanyCam focuses on photos — TaskTag connects time tracking, cost codes, and documentation.
DIVISION 01 — GENERAL CONDITIONS 01-100 Project Manager (indirect) 01-110 Superintendent 01-120 Project Engineer / Coordinator 01-200 Temporary Utilities 01-210 Temporary Facilities (office, toilets, fence) 01-220 Small Tools and Consumables 01-230 Dumpsters and Waste Disposal 01-240 Site Signage and Safety 01-250 Final Cleaning 01-260 Permits and Fees 01-900 Change Orders (parent — sub-codes per CO) DIVISION 03 — CONCRETE 03-100 Concrete Forming — Labor 03-110 Concrete Forming — Material 03-200 Concrete Placing — Labor 03-210 Concrete — Material (ready-mix) 03-300 Finishing — Labor DIVISION 06 — WOOD / FRAMING 06-100 Rough Framing — Labor 06-110 Rough Framing — Material 06-200 Blocking and Backing — Labor 06-210 Blocking and Backing — Material 06-300 Finish Carpentry — Labor 06-310 Finish Carpentry — Material DIVISION 07 — MOISTURE / THERMAL 07-100 Waterproofing — Labor 07-110 Waterproofing — Material 07-200 Insulation — Labor 07-210 Insulation — Material 07-300 Roofing (subcontract) DIVISION 08 — OPENINGS 08-100 Doors and Hardware — Labor 08-110 Doors and Hardware — Material 08-200 Windows (subcontract) 08-300 Glazing (subcontract) DIVISION 09 — FINISHES 09-200 Metal Framing — Labor 09-210 Metal Framing — Material 09-250 Drywall — Labor 09-260 Drywall — Material 09-300 Tile — Labor 09-310 Tile — Material 09-650 Flooring (subcontract) 09-680 Carpet (subcontract) 09-900 Painting — Labor 09-910 Painting — Material DIVISION 21–28 — MEP (subcontracted) 21-000 Fire Suppression (subcontract) 22-000 Plumbing (subcontract) 23-000 HVAC (subcontract) 26-000 Electrical (subcontract) DIVISION 31 — EARTHWORK 31-100 Excavation — Labor 31-200 Excavation — Equipment 31-300 Grading and Compaction — Labor 31-310 Grading — Equipment CHANGE ORDERS CO-001 [Description] CO-002 [Description] (Each change order gets its own code — essential for T&M documentation)
Every cost code system fails if workers don't clock into the right code.
A beautifully structured 60-code system produces nothing if workers clock into "Project 47 — Labor" for every shift. The data is aggregate and useless. Cost code tracking requires that every clock-in includes both:
A construction time clock app that requires cost code selection at every clock-in — not optional, not skippable — is the enforcement mechanism. Workers who can clock in without selecting a cost code will clock in without selecting a cost code.
What good cost code time tracking produces:
After 4 weeks on a project, the PM can see:
|
Code |
Scope |
Budget Hrs |
Actual Hrs |
% Used |
Efficiency |
|---|---|---|---|---|---|
|
06-100 |
Framing labor |
180 |
142 |
79% |
On track |
|
09-250 |
Drywall labor |
95 |
88 |
93% |
Watch |
|
09-300 |
Tile labor |
110 |
47 |
43% |
On track |
|
03-200 |
Concrete labor |
60 |
71 |
118% |
Over — investigate |
Concrete labor at 118% of budget with scope apparently 70% complete is a visible problem. Without cost code tracking, it's invisible until closeout.
Construction employee time tracking with cost code selection also enables:
The cost code structure in the estimate must match the cost code structure in the job cost system — otherwise the estimate-to-actual comparison is impossible.
Setup process when a project is awarded:
If the estimate was organized by scope category but the cost code system uses different groupings, the comparison will never align. Standardize the estimate template to match the cost code structure from day one.
Specialty contractors (electrical, plumbing, HVAC, concrete) typically have a narrower scope range but need deeper code granularity within their trade:
Electrical contractor cost code example:
E-100 Conduit — Labor E-110 Conduit — Material E-120 Wire and Cable — Labor E-130 Wire and Cable — Material E-200 Panels and Switchgear — Labor E-210 Panels — Material E-300 Devices and Fixtures — Labor E-310 Devices — Material E-400 Gear Installation — Labor E-500 Start-up and Testing — Labor E-600 Service and Troubleshooting — Labor E-700 Change Orders (per CO)
A concrete contractor needs separate codes for formwork, rebar, placing, and finishing — because each has a different production rate and different labor cost profile. Combining them into "concrete labor" masks which sub-scope is efficient and which is not.
For landscaping contractors, see Time Tracking for Landscapers — cost code structures for landscape maintenance vs. installation differ significantly.
Company-level (one time):
Project setup (before first day of work):
Weekly during project:
Cost codes connect estimating, budgeting, and actual performance. But structure alone isn’t enough — field adoption and enforcement are what make the data meaningful.
If you want to improve cost visibility and connect field reporting to job costing, you can Book a TaskTag Demo
Or start immediately with Start Your Free TaskTag Account
(Insert link on this anchor text: You can also review TaskTag Pricing Plans
For more contractor-focused resources, visit the Contractor Productivity Blog
To learn more about the company behind the platform, see About TaskTag
TaskTag Features
Related Blog Posts