Managing Cost Codes
Create, edit, and organize your cost code structure.
Creating Cost Codes
Add a Cost Code
- Go to Settings → Cost Codes
- Click Add Cost Code
- Enter the details:
- Code Number - Numeric identifier (e.g., 09.3)
- Name - Description (e.g., Flooring)
- Parent - Select parent for subcodes (optional)
- Type - Production, Design, or Non-billable
- Configure additional settings
- Click Save
Required Fields
- Number - Must be unique
- Name - Descriptive label
Optional Fields
- Parent - For hierarchical organization
- Type - Production, Design, or Non-billable. Beyond estimating and reporting, this determines how time logged against the code is categorized — see Cost Code Types
- Markup - Default markup percentage
- QuickBooks Account - For accounting sync
- Sort Order - Custom display order
- Allowed for Time Entries - For companies using ID-filtered time cost codes, controls whether the code appears in the time-entry list. Production and Design have separate allowed lists. See Allowing Cost Codes for Time Entry.
Editing Cost Codes
- Find the code in the list
- Click to open
- Modify settings as needed
- Click Save
What You Can Change
- Name and description
- Default markup
- Parent assignment
- QuickBooks mapping
- Sort order
What to Be Careful With
Changing a code number affects historical reporting. Consider creating a new code instead of renumbering.
Changing a code's Type changes how time logged against it is categorized from that point on. Time entries already saved keep the Entry Type they were recorded with — they are not re-categorized. If existing entries need correcting, an approver can reclassify them individually.
- Code Number - Affects sorting and references
- Type - May affect where code can be used
- Parent - Changes hierarchy and roll-up reporting
Time Entry Cost Code Strategies
The list of cost codes an employee sees when logging time is not always the full cost code list. Readybuild supports several cost code strategies that decide which codes appear. Your company is set up with one strategy, and it can be set separately for Production, Design, and Non-billable work.
| Strategy | Which cost codes appear on time entry |
|---|---|
| Estimated (parents) | Only the parent cost codes that carry labor hours on the project's sold estimate. This is the default. |
| Estimated (children only) | Only the child cost codes that carry labor hours on the sold estimate. For companies that estimate and track labor at the child level. |
| Estimated (parents + children) | Both the parent cost codes and the child cost codes from the sold estimate. |
| All codes, sold projects only | Every cost code of that type, but only once the project has a sold estimate. Nothing is offered before the estimate is sold. |
| All codes | Every cost code of that type, all the time. No estimate required. |
| Allowed list (ID-filtered) | Only the codes you flag with the Allowed for Time Entries toggle on the cost code list. The estimate is ignored entirely. This is the one strategy whose list you curate yourself in the app — see Allowing Cost Codes for Time Entry. |
Which strategy each type uses is configured by Readybuild for your company — contact support to change it. Once you are on the Allowed list strategy, maintaining the list of allowed codes is done by you — see Allowing Cost Codes for Time Entry.
How the Estimate-Based Strategies Behave
The three estimate-based strategies share the same rules:
- Only sold estimates are considered.
- A cost code appears only if the estimate has labor hours on it. Material-only codes are left out.
- Codes marked time only always appear, whether or not they were estimated.
- On a change order, the parent project's estimate drives the list.
- If the project has no matching estimated codes at all, the full cost code list is shown instead, so the employee is never left with an empty list.
Deleting Cost Codes
Cost codes can only be deleted if not in use.
Prerequisites for Deletion
- No assemblies assigned to the code
- No estimate items using the code
- No schedule items using the code
- No time entries coded to it
To Delete a Code
- Reassign any associated items to other codes
- Select the code
- Click Delete
- Confirm deletion
Alternative: Disable Instead
If a code has historical data:
- Open the code
- Mark as Inactive or Disabled
- Code hidden from new entries but preserved for reporting
Organizing Cost Codes
Parent and Child Structure
Create hierarchies for detailed tracking:
09 - Finishes (Parent)
09.1 - Drywall (Child)
09.2 - Painting (Child)
09.3 - Flooring (Child)
09.4 - Tile (Child)
Setting Up Hierarchy
- Create the parent code first
- Create child codes
- Set the Parent field to the parent code
- Child codes indent under parent in lists
Benefits of Hierarchy
- Roll-up reporting - Parent totals include children
- Organization - Easier to navigate large lists
- Flexibility - Track detail, report summary
Reordering Cost Codes
By Code Number
Codes sort by number automatically:
01before0209.1before09.2
Custom Sort Order
Override automatic sorting:
- Open the code
- Set Sort Order value
- Lower numbers appear first
Drag and Drop
Some views support drag-and-drop reordering:
- Click and hold the code
- Drag to new position
- Release to save
Bulk Operations
Export Codes
Export your structure for backup or reference:
- Go to Cost Codes list
- Click Export
- Download CSV file
Best Practices
Before Creating Codes
- Plan your complete structure first
- Consider reporting needs
- Match accounting chart of accounts
- Review industry standards (CSI, etc.)
Naming Conventions
- Use clear, descriptive names
- Be consistent in style
- Avoid abbreviations that may confuse
- Include number in name for clarity (e.g., "09 - Finishes")
Maintenance
- Review codes annually
- Disable unused codes (don't delete)
- Add new codes as services expand
- Train team on proper code selection
Common Mistakes to Avoid
- Creating too many codes (hard to manage)
- Creating too few codes (insufficient detail)
- Inconsistent numbering schemes
- Not setting up hierarchy when needed
- Deleting codes with historical data
Troubleshooting
Can't Delete a Code
The code is in use somewhere:
- Check assemblies using the code
- Check estimate line items
- Check schedule entries
- Reassign items before deleting
Code Not Appearing in Estimates
Check that:
- Code type matches estimate type (a design code does not appear on production estimates)
- Code is a top-level code — subcodes are not offered on estimate line items
- Code is not marked Allowed for Time Entries only
- Code has not been deleted
- Code is not marked inactive
- Code is saved properly
Estimate line items can only use codes meeting all of the above. This is deliberate: a line item on a code that does not apply would be added into the estimate's totals but never shown in the line item list.
Code Not Appearing in Time Entry
Which codes appear depends on your cost code strategy. Check that:
- The code type (Production, Design, or Non-billable) matches the type of work being logged
- Allowed list (ID-filtered): the code's Allowed for Production/Design Time Entries toggle is on
- Estimate-based strategies: the project has a sold estimate, and that estimate has labor hours on the code. Mark the code time only if it should always be available regardless of the estimate
- All codes, sold projects only: the project has a sold estimate of that type
Hierarchy Not Working
Verify:
- Parent code exists
- Parent field is set correctly
- Both codes are active