Skip to main content

Cost Codes: Build Your Library and Track Job Costs

How to set up your company cost code library, assign codes to estimate items, and use them in the Budget tab and QuickBooks.

Written by Handoff Support

Overview

Cost codes are your company's classification system for work — 01-100 Site Prep, 06-200 Finish Carpentry, and so on. In Handoff you build one cost code library for your company, assign codes to estimate line items, and every downstream number — budget, actuals, change orders, QuickBooks — rolls up the same way every time.

Cost codes are available on the Pro and Scale plans.


Why use cost codes

Without cost codes, every estimate categorizes work a little differently and your reporting never lines up. With them:

  • Budget vs. actual actually reconciles. Line items and their real costs land in the same buckets, project after project.

  • You can compare jobs. Framing on this kitchen vs. framing on the last one, because both are coded the same.

  • QuickBooks stays clean. Codes map to your chart of accounts instead of a pile of one-off descriptions.

  • Change orders inherit the structure. Added scope lands in a bucket you already track.


Step 1: Open your cost code library

  • Go to Settings → Cost codes.

This is the company-wide library — every estimate in your account draws from it.

You need the Company Settings permission to add or edit codes. Anyone on your team can see and assign existing codes.


Step 2: Build your library

Tap Set up and pick a starting point. You can mix and match — start with NAHB and add your own codes later.

Option A: Import the NAHB standard library (fastest)

Set up → NAHB cost codes opens a review list of the National Association of Home Builders standard cost code catalog. Search it, look it over, then tap Import library.

If you already have an active code with the same code as an NAHB code, yours is archived and the NAHB version replaces it. Nothing is deleted — archived codes can always be brought back.

Best for builders and remodelers who want a proven structure without designing one from scratch.

Option B: Import from a file (your existing codes)

Set up → Import from file lets you upload the cost code list you already use. Handoff accepts CSV, Excel, PDF, and images — a screenshot of a spreadsheet works.

  • Upload the file.

  • Handoff's AI reads it and extracts the code and name pairs. This takes a moment.

  • Review the results. On desktop you can edit any row inline; on mobile, tap a row to edit the code or name.

  • Anything that duplicates a code you already have is flagged Duplicate, shown read-only, and skipped on import.

  • Tap Import. You'll get a confirmation like "18 imported, 2 skipped."

If you upload something that isn't a cost code list, Handoff tells you it couldn't find any codes rather than importing junk.

Option C: Create codes manually

Set up → Create manually adds a single code with a Code and a Name. Once you have codes in the list, the Add cost code button on the search row is the quicker path.

Option D: Let QuickBooks fill it in

If QuickBooks Online is connected and cost code sync is turned on in your QuickBooks settings, your QuickBooks cost-of-goods-sold and expense accounts come in as cost codes automatically. See Cost codes and QuickBooks below.


Step 3: Assign cost codes on your estimate

Open an estimate and use the Cost code selector on a row:

  • Item rows — the individual line items. This is where coding matters most.

  • Section or group rows — code a whole section at once for higher-level rollups.

The selector shows a green check next to the code currently assigned, and a None option to clear it. There's also a Manage cost codes shortcut that jumps to Settings.

Let Handoff code the estimate for you

If your library is set up but an estimate has nothing coded yet, you'll see a banner: "Apply cost codes to this estimate." Tap Apply codes and Handoff's AI classifies every item against your company library, so you're reviewing suggestions instead of tagging rows one at a time.

If you don't have a library yet, the banner instead reads "Set up cost codes to track job costs" and takes you straight to Settings. Either banner can be dismissed.


Step 4: See your codes in the Budget tab

Open a project and go to the Budget tab. Cost codes appear on item rows in two places:

  • In the collapsed view, as a pill next to the Labor/Material category pill.

  • In the fullscreen table, as a dedicated Cost code column right after Category.

Codes display as code plus name — for example, 06-200 Finish Carpentry. Only item rows with an assigned code show one.

CSV export

The internal estimate CSV export includes a Cost Code column. This column is internal only — it does not appear on client-facing proposal exports.


Managing your library over time

The list view

Each code shows its Code, Name, Source (Manual, Upload, QuickBooks, or NAHB), and a Status badge:

  • Assigned — this code is used on at least one estimate row.

  • Unassigned — nothing references it yet.

Search by code or name, and switch between Active and Archived. Codes sort in true numeric order, so 2 comes before 10 comes before 100, and dashed codes like 01-100 sort segment by segment.

Archive vs. delete

This is the one rule worth remembering: if a code is already on an estimate, archive it — Handoff won't let you delete it.

  • Archive is reversible, works whether or not the code is in use, and leaves existing assignments intact. The code simply stops appearing as a choice on new rows. Unarchive it any time.

  • Delete is permanent and is only allowed for codes that aren't assigned anywhere.

Archiving retires a code from future use without rewriting history on jobs you've already estimated.

Bulk delete

Select multiple codes with the row checkboxes (or the select-all in the header) and tap Delete. Assigned codes can't be selected. If any selected code turns out to be in use, the rest are deleted and you'll get a message naming the ones that were refused.

Reusing a code

A code only has to be unique among your active codes. So if you archive or delete 03-100, you're free to create a new 03-100 later.


Cost codes and QuickBooks

When QuickBooks Online is connected and cost code sync is enabled, cost codes sync two ways:

  • From QuickBooks into Handoff — your cost-of-goods-sold and expense accounts import as cost codes, keeping the QuickBooks account name and its place in your account hierarchy.

  • From Handoff into QuickBooks — a new cost code is created in QuickBooks as a cost-of-goods-sold account, with the code as the account number. Renaming a code in Handoff renames the matching QuickBooks account; for a nested account, only that account is renamed and its type and parent stay put.

Cost code sync also unlocks expense sync: confirmed project expenses can post to QuickBooks once vendor sync and cost code sync are both on.


FAQ

Do I have to code every line item?

No, but coding is what makes the Budget tab useful. The "Apply codes" AI shortcut exists so this isn't a manual slog.

Can I use my own numbering instead of NAHB?

Yes. Import your own list from a file, or create codes manually. NAHB is a convenience, not a requirement.

What happens to my estimates if I archive a code?

Nothing changes on existing estimates — the code keeps displaying wherever it's already assigned. It just stops appearing as a choice on new rows.

Why can't I delete this code?

Because it's assigned to at least one estimate row. Archive it instead.

Will my clients see cost codes?

No. Cost codes are internal. They appear in the Budget tab and the internal estimate CSV export, never on a proposal or client-facing export.

Can my whole team assign cost codes?

Yes — anyone can view and assign existing codes. Creating, editing, archiving, and deleting codes requires the Company Settings permission.

I don't see Settings → Cost codes.

Cost codes are a Pro and Scale feature that is still rolling out. Reach out at [email protected] and we'll check your account.

Did this answer your question?