September 19, 2026 · 9 min read
Cost Codes and Projects in QuickBooks Online for General Contractors
By 909 Bookkeeping
How to set up cost codes and projects in QuickBooks Online for a general contractor. Tie labor, materials, subcontractors and overhead to the job so your profit per project is real. Plain English from 909 Bookkeeping.
What cost codes and projects do
A general contractor runs more than one job at a time. Each job has labor, materials, subcontractors and equipment costs. Some jobs pay well. Some cost more than they should. The only way to tell the difference is to keep each job on its own and keep each kind of cost in its own bucket.
A cost code is the bucket. Labor is one code. Materials is another. Subcontractors are another. Permits can be one of their own. Each cost goes into the code that fits it. When you sort this way, you can see what labor cost on job one and what labor cost on job two.
A project is the job. QuickBooks Online lets you set up a project and tie every invoice, bill and check to it. When you do, the project pulls all of its costs and all of its income into one place. You can open the project and see what it earned and what it cost.
The two work together. The project keeps each job apart. The cost codes keep each kind of cost apart inside the job. With both, your profit per project is real. With only one, or with neither, you are guessing.
Here is how the two fit together.
| Name | What it does | Example |
|---|---|---|
| Cost code | Sorts a cost by kind | Labor, materials, subcontractors |
| Project | Groups one job together | Kitchen remodel on Maple Street |
| Cost code on a project | Shows the kind of cost on that job | Labor on the Maple Street remodel |
| Project profit | Income minus all costs for that job | What the Maple Street remodel paid |
How to set up cost codes in QuickBooks Online
QuickBooks Online has a few ways to sort costs. The two that work best for a general contractor are class tracking and location tracking. You can also use sub customers or projects. The right setup depends on how many jobs you run at once and how you bill.
The simple path is to turn on project tracking and use cost codes inside each project. Labor gets one code. Materials get one. Subcontractors get one. Permits get one. Equipment rental gets one. You do not need a long list. You need the same list every time.
Turn on projects in the settings. Then turn on class or location tracking if you want a second level, such as new construction versus remodel. Keep the list short. A long list of codes breaks down when people forget which code to use.
Here is a simple cost code list to start with.
- **Labor: ** your crew wages and the labor you pay for.
- - **Materials: ** lumber, concrete, drywall and the supplies you buy for the job.
- - **Subcontractors: ** the trades you hire, such as plumbers and electricians.
- - **Equipment rental: ** the machines you rent for the job.
- - **Permits and fees: ** the city permits and inspection fees for the job.
- - **Other job costs: ** anything else that belongs to the one job.
Keep the same list for every project. When the list is the same, your month end totals mean something.
How to set up a project for each job
A project is one job. When you set one up, you tie the customer, the estimate, the invoices and the bills to that one project. QuickBooks Online keeps them together on a project page.
Start the project when you sign the job. Give it a clear name. Use the job name or the street. Do not use a number alone. Later, when you want to know what a job cost, the name should tell you which one.
Then tie every transaction to it. Every invoice goes to the project. Every bill goes to the project. Every check you write for the job goes to the project. When a cost does not get tied, it sits in a pile and no one knows which job it was for.
Here is how to keep a project clean.
- **Start the project when the job starts: ** not at month end.
- - **Tie every invoice to the project: ** so the income shows on the job.
- - **Tie every bill to the project: ** so the cost shows on the job.
- - **Tie every check to the project: ** so nothing sits in a pile.
- - **Close the project when the job ends: ** so old costs do not land on the wrong job.
Where labor, materials and subcontractors go
Most of the cost on a general contractor job falls into three buckets. Labor is your crew. Materials are what you buy from the supply yard. Subcontractors are the trades you hire. Each one should land in its own cost code on the project.
Labor is your crew wages. When you run payroll, the wages for the time spent on the Maple Street job go to labor on the Maple Street project. You can tag time by job in the time tracking. Then the payroll cost lands on the right project.
Materials are what you buy for the job. The lumber, the concrete, the drywall. When you buy at the supply yard, you tie the bill to the project and put it in the materials code. When a supply run covers two jobs, you split the bill so each job gets its own share.
Subcontractors are the trades you hire. The plumber. The electrician. The drywall crew. When they send a bill, you tie it to the project and put it in the subcontractors code. Each one should have its own form on file too, but that is a separate habit.
Here is where the main costs go.
- **Labor on the project: ** crew wages tied to the job they worked on.
- - **Materials on the project: ** what you bought for that one job.
- - **Subcontractors on the project: ** the trades you hired for that one job.
- - **Equipment rental on the project: ** the machine you rented for that job.
- - **Permits on the project: ** the city fees for that one job.
How overhead sits apart from job costs
Not every cost belongs to a job. Some costs keep the business running. Rent on the shop. The truck payment. The office phone. The software you use to run the jobs. These are overhead, and they do not belong on any one project.
When overhead lands on a project, that project looks too expensive. When job costs land in overhead, the project looks too cheap. Both make your profit per project wrong.
The rule is simple. If the cost is for one job, it goes on that project. If the cost is for the whole business, it goes to overhead. You can see overhead on the profit and loss report in its own section. Job costs show inside each project.
Here is the line between the two.
- **Job cost: ** spent for one project, such as lumber for the Maple Street remodel.
- - **Overhead: ** spent for the whole business, such as the shop rent.
- - **A truck used on many jobs: ** overhead, unless you track it by job, and most small contractors do not.
- - **Software for the whole business: ** overhead, away from any one project.
How to read profit per project at month end
At month end, every job should show its income and its costs in one place. Open the project page. The income is at the top. The costs are below it. The gap between the two is what that job paid the company.
Cost codes make the costs readable. You can see how much labor was on the job, how much material, and how much subcontractor work. When the same codes are on every job, you can compare them. Labor ran high on job two. Materials ran high on job three. That is the story the codes tell.
The profit and loss report shows the whole company. The project reports show each job. Read them both. The whole company report tells you whether the business is sound. The project reports tell you which kinds of jobs pay and which ones cost you.
Here is a simple month end check.
- **Open each project: ** income at the top, costs below.
- - **Check the cost codes: ** labor, materials, subcontractors and the rest.
- - **Compare jobs of the same kind: ** which paid and which did not.
- - **Look for costs with no project: ** a pile means something was not tied.
- - **Read the whole company profit and loss: ** to see overhead next to job costs.
A situation we clean up
The remodels that all looked the same
A general contractor runs five remodels in a month. Every supply yard bill lands in one materials account. Every subcontractor bill lands in one subcontractors account. No cost is tied to a project. At month end, the books show one big pile of costs and one big pile of income. The owner can not tell which job paid and which one cost the company.
Here is how we handle it. We pull the supply yard bills for the month. We tie each one to the project it was bought for. We split any bill that covered more than one job. We tie each subcontractor bill to the job it was hired for. We move the crew time to labor on each project. When we are done, the owner can see the profit on each remodel. We set up a rule so the next bill and the next check land on the right project from the start.
Mistakes we fix
- Supply yard bills booked to one materials account with no project
- Subcontractor bills booked to one account with no job tag
- Crew time booked to labor with no project
- Permits and fees booked to overhead instead of the job
- Equipment rental for one job booked as overhead
- No project set up, so no job ever shows its own profit
- Cost codes used on some jobs but not on others
Common questions
What is the difference between a cost code and a project? A cost code sorts a cost by kind, such as labor or materials. A project groups all the costs and income for one job. You need both, and they work together.
Do I need class tracking or project tracking in QuickBooks Online? For most general contractors, project tracking is the place to start. Add class or location tracking if you want a second level, such as remodel versus new construction. Keep the list short.
Where does overhead go? Overhead goes to its own accounts, away from any one project. The shop rent and the truck payment belong to the whole business. Job costs belong on the job they were for.
How do I see profit per project? Open the project page. The income is at the top. The costs are below. The gap is what the job paid. Read each project and the whole company profit and loss together.
