The structure
| Level | What it is | Example |
|---|---|---|
| Job | The contract | 2026-014 Riverside Clinic |
| Phase or sub-project | A part of the job with its own budget: building, area, bid package | Phase 2 Tenant improvements |
| Cost code | The scope element | 03 30 00 Cast-in-place concrete |
| Cost type | The nature of the cost within the code | Labor, material, subcontract, equipment, other |
Cost code and cost type are separate dimensions, and keeping them separate is what makes the list manageable. One concrete code with five cost types is better than five concrete codes. Labor codes carry hours as well as dollars so productivity can be measured; subcontract codes carry commitments.
CSI MasterFormat or your own list
CSI MasterFormat is the standard for commercial specifications and the natural basis for a general contractor’s cost codes: divisions 01 through 49, with the six-digit numbering used in specifications. Its advantage is that estimates, specifications, subcontract scopes and schedules of values all speak the same language. Its disadvantage is size: the full list runs to thousands of entries, and a contractor that loads all of them will code inconsistently.
- General contractors: MasterFormat divisions, trimmed to the codes the company actually buys and self-performs, usually 50–150 codes
- Specialty contractors: a custom list by the trade’s own work breakdown (rough-in, trim, fixtures) is often more useful than MasterFormat, with a mapping to the GC’s divisions for billing
- Heavy civil: bid-item based codes that follow the owner’s unit-price schedule
- Home builders: a stage-based list (foundation, framing, dry-in) that matches draw schedules
Rules that keep the list useful
- One company list; each job enables the codes it needs rather than inventing new ones
- Estimating, purchasing, field time entry and accounting use the same codes; a translation table between departments is where the data dies
- A code is added only when someone will manage to it; a code nobody reviews is a dumping ground
- Retire codes by disabling them, never by deleting or renumbering; history has to stay comparable
- Labor codes are the ones to get right first, since self-performed labor is where jobs are won and lost
- Review the “other” and “miscellaneous” codes every close; if they are growing, a real code is missing
How Forge ERP handles cost codes
In Forge, cost codes are shared across modules: the job budget is created from the awarded estimate by cost code, and every purchase order, subcontract, vendor bill, subcontractor pay application and time entry carries job, cost code and cost type at the point of entry. Phases and sub-projects can carry their own budgets and roll up to the project. Forecasts are entered by cost code, and job cost reports show budget, pre-encumbered, committed and actual side by side per code. Setup can create cost codes in bulk from a reviewed list, and cost codes support a parent hierarchy so a MasterFormat-style list can be loaded; Forge does not ship the CSI list itself.
Forge ERP covers projects, purchasing, accounts payable, billing and receivables, job cost and WIP, reporting and close. Payroll runs in your payroll provider and lands in Forge as job-costed labor with burden. Forge is in beta with a 14-day free trial.
Frequently asked
- How many cost codes should a contractor have?
- Enough to manage by, not enough to catalogue by. Most commercial general contractors settle between 50 and 150 active codes. If project managers cannot name the codes on their job without looking, there are too many.
- Should cost codes match the schedule of values?
- They should map to it, not match it. The schedule of values is agreed with the owner for billing and is often coarser than the cost codes. Keep a mapping from cost codes to SOV lines so the estimate-vs-actual view and the billing view can be reconciled.
- What is the difference between a cost code and a cost type?
- A cost code says what scope the cost belongs to (concrete, framing). A cost type says what kind of cost it is (labor, material, subcontract, equipment). Using both keeps the code list short and makes labor productivity and buyout analysis possible.