How to organize your subcontractor list by CSI division
A practical walkthrough for coding your trade list with CSI MasterFormat, with a 30-code starter list, how to handle subs that span divisions, and the seven-step rebuild.
"Find everyone who does drywall" should be a five-minute filter. On most trade lists it's an archaeology project, because the trade column contains "Drywall," "Dry wall," "Gyp," "Steel stud & drywall," "Interior systems," and, somewhere near the bottom, "ask Paul."
CSI MasterFormat fixes this. Your specs are already organised by it. Your estimate probably is too. Once the trade list follows suit, "who do we invite for 09 29 00" becomes a filter instead of a conversation.
Why codes and not trade names
Trade names have no canonical spelling, and the moment a second person edits the list the spellings multiply. MasterFormat numbers are identical in every spec book in North America. And codes let you filter, count and invite by scope in a single step.
You don't have to love MasterFormat. You just have to agree to use it, and then actually use it.
Division or section? Decide per trade
MasterFormat has divisions (two digits, like 26 Electrical) and sections underneath them (like 26 51 00 Interior Lighting). Coding everything to the section is overkill and nobody will maintain it. Coding everything to the division is too coarse for the busy divisions.
The rule that works: division level by default, section level only where you invite different companies.
Division 26 Electrical? Division is fine. Division 09 Finishes? No. Drywallers, painters, tile setters and flooring companies are different firms, so use sections. Division 23 HVAC is usually fine at division, with 23 09 00 added if you invite controls separately. Division 03 Concrete, division for most, but add 03 30 00 (cast-in-place) and 03 40 00 (precast) if those are different subs in your market.
A 30-code starter list for a commercial GC
Adjust for your market. The point is a finite list to choose from rather than codes typed freehand.
| Code | Trade |
|---|---|
| 02 41 00 | Demolition |
| 03 00 00 | Concrete |
| 04 00 00 | Masonry |
| 05 12 00 | Structural steel |
| 05 50 00 | Metal fabrications, misc. metals |
| 06 10 00 | Rough carpentry, framing |
| 06 40 00 | Millwork |
| 07 20 00 | Insulation |
| 07 50 00 | Roofing |
| 07 90 00 | Caulking, joint sealants |
| 08 10 00 | Doors and frames |
| 08 40 00 | Glazing, curtain wall |
| 08 70 00 | Door hardware |
| 09 29 00 | Gypsum board, steel stud |
| 09 30 00 | Tile |
| 09 51 00 | Acoustic ceilings |
| 09 65 00 | Resilient flooring, carpet |
| 09 90 00 | Painting |
| 10 00 00 | Specialties |
| 14 20 00 | Elevators |
| 21 00 00 | Fire suppression |
| 22 00 00 | Plumbing |
| 23 00 00 | HVAC |
| 26 00 00 | Electrical |
| 27 00 00 | Communications, low voltage |
| 28 31 00 | Fire alarm |
| 31 00 00 | Earthwork |
| 32 10 00 | Paving |
| 32 90 00 | Landscaping |
| 33 00 00 | Site utilities |
Subs that do more than one thing
Give the company every code it should be invited under. An interiors firm might carry 09 29 00, 09 51 00 and 09 90 00 all at once. Filter to ceilings, they show up. Filter to painting, they show up.
In a spreadsheet that's a Codes column with the codes separated by commas, filtered with "text contains 09 29." Crude, but it works. In a directory tool it's a multi-select field and the filter just works without the crudeness.
The wrong way, which people reach for because it feels tidy, is a separate row per code per contact. Do that and you'll invite the same person three times on one bid and hear about it.
Coding the list, in seven steps
Freeze the list first. Nobody edits it for two days. Take one copy and declare that the copy.
Add a Codes column, and keep the old trade-name column next to it for reference, for now.
Sort by the old trade name. The variants cluster together, which makes coding fast.
Assign codes from the fixed list using a dropdown or a lookup. Two people, two hours, for around 400 companies.
Then look for companies with only one code that you know do more. Add the others. This is the step people skip, and then they wonder why the ceiling filter returns two firms.
Delete the old trade-name column. If it stays, people keep filling it in, and in six months you're back where you started.
Finally, put the code list on a second tab so everyone knows what to pick from.
Two edge cases
Trades that don't map cleanly. Building envelope firms that do air barrier, insulation and cladding: either give them every relevant section, or add a house code (07 00 00, "envelope, general") and document it on the code tab. What you must not do is leave it blank.
Cross-border or regional numbering. Keep MasterFormat as your internal key and translate at the spec. The list is for you, not for the consultant.
What you get on bid day
Once the list is coded, inviting a scope is: filter to the code, filter to the region, select all, send. Whether that "send" is forty emails from Outlook or one click in a tool, the archaeology is gone. That filter-and-send is exactly how the directory in Invite All works, and it imports a coded spreadsheet directly. The coding is the work, though. A spreadsheet gets you most of the benefit on its own.
If the list is rough well beyond the trade column, rebuild the database first and then come back to this.