Job Costing for DFW Contractors: How to Know Which Jobs Actually Make You Money
Written and reviewed by Moji Shobowale, CPATexas & Illinois CPA · QuickBooks Online ProAdvisor · Updated October 2026
The short answer
Job costing tracks every dollar of labor, materials, subs and equipment against the job that caused it, then compares what you spent to what you bid. Most contractors undercount labor because they use the wage instead of the true cost of an hour. Set up Projects and classes in QuickBooks Online, check open jobs weekly, review closed jobs monthly and price your next bid from real numbers.
Yes, we wrote this so contractors across Dallas-Fort Worth searching for "job costing for contractors" would find Mashbooks. That's the honest reason. We also wrote it because we keep seeing the same pattern in trade businesses: the crew is booked solid, the phone keeps ringing, and the owner still can't say which jobs made money.
So here's the real answer, from a CPA who started her career as an auditor.
Key takeaways
✓Job costing tracks revenue and direct costs by job, so you can see gross margin on every job and every job type.
✓The true cost of a labor hour includes employer payroll taxes, workers' comp, benefits and the hours you pay for but can't bill. In our example scenario, a $28 per hour tech costs about $48 per billable hour.
✓QuickBooks Online Plus and Advanced include Projects and class tracking. Tags are being retired, so new setups should use custom fields.
✓Check open jobs weekly and review closed jobs monthly. The close-out review is where your next bid gets better.
✓Price from margin, not markup. A 30% markup only produces about a 23% gross margin.
01
Busy Isn't Profitable
A full schedule feels like success. But revenue tells you how much work you did. It doesn't tell you whether the work paid.
Most contractors look at one number at year end: total profit on the tax return. If it's fine, every job feels fine. If it's bad, every job feels suspect. Neither is true.
In almost every trade business, some jobs carry the company and others quietly drain it. A plumber's water heater swaps might earn strong margins while new-construction rough-ins barely break even. Without job costing, you'll keep saying yes to the work that hurts you, because it looks just like the work that helps you.
Moji's take
“When I review a contractor's books, the first question isn't 'How much did you make?' It's 'Which jobs made it?' If the books can't answer that, we fix the books first.”
02
What Job Costing Is (and Direct vs. Indirect Costs)
Job costing means assigning revenue and costs to the specific job that earned or caused them. Every job becomes its own small profit and loss statement.
What's left after the job's costs is gross profit. Divide it by the job's revenue and you get gross margin, the share of each dollar you kept after paying for the work itself.
To get there, sort costs into two buckets.
Direct costs
Direct costs exist only because a specific job exists:
Field laborfor crew hours on that job, at the burdened rate (more below)
Materialslike wire, pipe, tile, shingles, sod, epoxy and fixtures
Subcontractorshired for that job
Equipment rentalfor that job, like a lift or a floor grinder
Job feeslike permits, dumpsters and disposal
Indirect costs (overhead)
Overhead keeps the business running no matter which job you're on: shop rent, software, general insurance, office staff, marketing, phones, and trucks and tools that move between jobs.
Overhead has to be covered. But mixing it into job costs makes every job look worse and hides the ones that are truly underwater. Keep the buckets separate, then deal with overhead on purpose.
minus Direct Labor (crew hours x burdened hourly cost)
minus Materials (including sales tax you paid on them)
minus Subcontractors
minus Equipment Rental and Job Fees (permits, dumpsters, disposal)
= Gross Profit on the Job
Gross Margin %Gross Profit ÷ Job Revenue
Then subtract allocated overhead to see what the job really added to your bottom line.
03
Labor Burden: The True Cost of an Hour of Crew Time
Labor is where most job costing goes wrong. Contractors cost labor at the wage, say $28 an hour. But that employee costs you far more than $28 for every hour on a job.
The difference is labor burden: every cost of employing someone on top of their wage, plus the paid time that never lands on a job.
Employer payroll taxes (verified for 2026)
Social Security and MedicareYou match your employee's 6.2% Social Security and 1.45% Medicare, for 7.65% on top of wages, according to IRS Topic No. 751. For 2026, Social Security applies to wages up to $184,500.
Federal unemployment (FUTA)The rate is 6.0% on the first $7,000 of each employee's wages, with a credit of up to 5.4% if you pay state unemployment tax, which brings it to 0.6%, per IRS Topic No. 759.
Texas unemployment taxThe Texas wage base is $9,000 per employee per year, and the 2026 new-employer rate is 2.70%, according to the Texas Workforce Commission. Established employers get their own rate, so check your TWC notice.
The other costs riding on every hour
•Workers' comp insurance, if you carry it. Ask your agent for your rate.
•Health insurance and benefits you pay for.
•Paid time off and holidays, which never land on a job.
•Non-billable time like drive time, supply house runs, shop time and warranty callbacks.
That last one is the big one. If a tech is paid for 2,080 hours but only 1,500 land on customer jobs, every billable hour has to carry the other 580.
Example scenarioThe True Cost of a Labor Hour (Example Scenario)
Base wage: $28.00/hr x 2,080 paid hours$58,240
Employer Social Security and Medicare (7.65%)$4,455
FUTA (0.6% on first $7,000, with full state credit)$42
Texas unemployment (2.70% new-employer rate on first $9,000)$243
Workers' comp insurance (illustrative)$2,900
Health insurance contribution (illustrative)$4,800
Uniforms, phone, training (illustrative)$1,200
Total yearly cost of this employee$71,880
Cost per paid hour: $71,880 ÷ 2,080$34.56
Billable hours after PTO, holidays, drive and shop time1,500
True cost per billable hour: $71,880 ÷ 1,500$47.92
Example scenario. Illustrative numbers, not a real employee. The $28 wage is only about 58% of what this hour really costs. Tax rates verified for 2026 (IRS Topics 751 and 759, Texas Workforce Commission).
If you cost this tech at $28, every 100-hour job is undercosted by about $2,000. Multiply that across a year and you can see how a busy company ends up short on cash.
If you run payroll through Gusto, the wage and tax numbers already sit in your payroll reports. Our payroll, 1099s and sales tax service makes sure wages and employer taxes land in the right accounts, so this calculation takes minutes instead of guesswork.
Want job costing set up in your books?Free review. One-page summary. No obligation.
Materials feel easy because you have receipts. In practice, they leak in predictable ways:
•Supply house runs on a shared card that never get assigned to a job
•Truck stock used on a job but never charged to it
•Returns credited to your account but not back to the job
•Customer upgrades bought without a signed change order
•Waste that runs higher than your estimate assumed
The fix takes discipline, not software. Every bill and receipt gets a job name before it's entered. Ask suppliers to print the job name or PO number on every ticket.
For truck stock, pick one method and stick with it. Charge a flat shop-supplies amount per job, or assign each restock to the jobs that used it. Either works. Not tracking it doesn't.
05
Subcontractors and 1099s
Contractor or employee?
W-9 first, then 1099-NEC
The 1099-NEC threshold changed for 2026
Subs are a direct cost of the job they work on, so enter every sub's bill against that job. Then handle the paperwork.
Contractor or employee?
Calling someone a "sub" doesn't make them one. The IRS weighs three groups of facts: behavioral control (do you control how the work is done?), financial control (who supplies tools, how they're paid) and the type of relationship (contracts, benefits, whether the work is ongoing and key to your business). The IRS guide to independent contractors vs. employees ↗ explains each one.
If your "subs" work only for you, use your tools and follow your schedule, talk to a CPA. Getting this wrong can mean back payroll taxes.
For payments made in 2026, you file Form 1099-NEC when you pay someone $2,000 or more for services during the year. That's up from $600, and it may be adjusted for inflation starting in 2027, according to the IRS Instructions for Forms 1099-MISC and 1099-NEC ↗. The form is due to the IRS and to your subs by January 31.
Two details from those instructions matter for contractors:
•Payments to a corporation (including an LLC taxed as a C or S corporation) generally don't need a 1099-NEC, except payments for legal services.
•Payments for merchandise alone aren't reported. But if a sub supplies parts or materials as part of their service, the whole payment counts.
Once direct costs are clean, deal with overhead. You have two honest options.
Option 1: Keep overhead out, and set a target margin
This is what we recommend for most small trade businesses. Track gross margin by job and compare it to overhead as a percentage of revenue.
Example scenario: a contractor has $180,000 a year in overhead and $1.2 million in revenue. Overhead runs 15% of revenue. Any job with a gross margin under 15% lost money once overhead is counted.
Option 2: Allocate overhead to each job
Percent of revenueIn the scenario above, a $38,000 job carries $5,700 of overhead (15%).
Per labor hourIf that contractor's crews bill 6,000 hours a year, overhead is $30 per crew hour. A job that runs long eats more overhead, which is closer to how it really works.
Moji's take
“Pick one method and use it consistently. A simple method you actually use beats a perfect one that lives in a spreadsheet nobody opens.”
07
Gross Margin by Job and by Job Type
Job margins tell you how each job went. Job type margins tell you what kind of company you should be.
Group jobs the way you sell them. An electrician might use service calls, panel upgrades and new construction. A remodeler might use kitchens, baths and repairs. A lawn care company might use weekly maintenance, installs and irrigation.
Example scenario: a Garland HVAC company does $600,000 in system replacements at a 28% gross margin and $250,000 in repairs at a 55% gross margin. Replacements bring in more gross profit ($168,000 vs. $137,500), but repairs keep far more of each dollar. That changes how the owner hires, prices and spends the marketing budget.
You won't see that on a single company profit and loss statement. You see it when every job is labeled with its type, which is what classes in QuickBooks Online are for.
Want to know which of your jobs are paying the bills?
Book Your Free Books & Tax Review. We'll look at your books and last year's return and send you a one-page summary of what's working, what's broken and what to fix first. Whether you run a crew out of Garland or a shop in McKinney, it's free and there's no pressure.
Book Your Free Books & Tax Review · Call (469) 712-4199
08
Worked Example: One Remodel, Estimate vs. Actual
Everything below is an example scenario with illustrative numbers. It isn't a real client or job.
Example scenario: a remodeler bids a bathroom remodel for a homeowner in Plano at a lump-sum price of $38,000. Crew labor costs $48 per billable hour (rounded from the calculator above). Overhead runs 15% of revenue. The job wraps, the homeowner is happy, and the close-out review shows this.
ComparisonExample Scenario: Bathroom Remodel, Estimate vs. Actual
Line item
Estimate
Actual
Variance
Contract revenue
$38,000
$38,000
$0
Crew labor
160 hrs x $48 = $7,680
205 hrs x $48 = $9,840
+$2,160
Materials (incl. sales tax paid)
$9,500
$10,650
+$1,150
Subcontractors (plumbing, electrical)
$6,800
$7,400
+$600
Equipment rental and disposal
$900
$1,350
+$450
Permits
$450
$450
$0
Total direct costs
$25,330
$29,690
+$4,360
Gross profit
$12,670
$8,310
minus $4,360
Gross margin
33.3%
21.9%
minus 11.4 points
Overhead at 15% of revenue
$5,700
$5,700
$0
Net job profit
$6,970 (18.3%)
$2,610 (6.9%)
minus $4,360
Example scenario. Illustrative numbers, not a real job or client. Same contract price. A $4,360 cost overrun cut the job's net profit by about 63%.
The margin math
Estimated gross profit$38,000 minus $25,330 = $12,670, a 33.3% gross margin.
Actual gross profit$38,000 minus $29,690 = $8,310, a 21.9% gross margin.
After overheadsubtract $5,700. The estimate promised $6,970 of net profit. The job delivered $2,610.
With overhead allocated per labor hour instead ($30 per crew hour), the actual job carries 205 x $30 = $6,150 of overhead, and net profit drops to $2,160, or 5.7%. Long jobs cost twice: once in wages and again in overhead.
What the variances tell you
Labor ran 45 hours overTile layout? A bad wall behind the vanity? If tile always runs long, your next bid needs more tile hours.
Materials ran $1,150 overThe homeowner picked a nicer shower valve on site, and nobody wrote a change order.
Subs ran $600 overThe electrician added a heated-floor circuit. Another missed change order.
Disposal ran $450 overAn extra dumpster swap. Worth a line in the next estimate.
Two of the four overruns were billable. With signed change orders, this job's margin would've landed much closer to the estimate.
Want job costing set up in your books?Free review. One-page summary. No obligation.
QuickBooks Online (QBO) can handle job costing for most small trade businesses, as long as the setup is right. Menu names change from time to time, so your screen may look a little different.
Step 1: Check your plan
Intuit's help article on setting up and using projects ↗ says Projects are available in QuickBooks Online Plus or Advanced, and project estimates with estimate-vs.-actual tracking are Advanced only. Class tracking is also a Plus and Advanced feature, per Intuit's guide to turning on class tracking ↗.
Step 2: Create a project for every job
Go to Business overview, then Projects, and select New project. Name it so your team will recognize it (customer last name, street and job type works well) and pick the customer. Then choose the project in the Customer or Customer/Project field on every estimate, invoice, bill and expense.
Step 3: Turn on classes for job type
Go to the Settings gear, then Account and settings, Advanced and Categories, and turn on Track classes. Choose One to each row in transaction so one bill can split across job types, and turn on Warn me when a transaction isn't assigned a class. Then create one class per job type.
Projects track the job. Classes track the kind of job. Together, they give you margin by job and by job type.
Step 4: Put labor on the job
Worth rememberingestimated hourly costs
Intuit's article on tracking hourly labor costs by project ↗ describes two methods: payroll expenses, which post to the project after payroll runs, and estimated hourly costs, which multiply tracked hours by each employee's cost rate and show up right away.
Intuit's guide to estimating hourly employee cost rates ↗ lets that rate include wages, employer taxes, benefits, workers' comp and overhead items. That's the labor burden calculation, built into the project. Set rates before anyone tracks time, because Intuit says they only apply to time tracked afterward.
One caution: Intuit says the Project profitability report on the Project Reports tab uses payroll expense data. If you only track hourly costs, test it on one job before relying on it.
Step 5: Skip tags. Use custom fields.
Older guides tell you to use tags. Don't build a new setup on them. According to Intuit's article on migrating tags to custom fields ↗, QuickBooks stopped letting users create new tags for reporting on May 16, 2025, and existing tag users keep them until May 2028. The replacement is custom fields. Plus includes 4 and Advanced includes 12, and Advanced custom fields work on projects.
Step 6: Split your chart of accounts
Create cost of goods sold accounts (the accounts for direct job costs) for Direct Labor, Materials, Subcontractors, Equipment Rental, and Permits and Fees. Keep overhead in regular expense accounts. Now gross profit shows on its own line.
Step by stepSetting Up Job Costing in QuickBooks Online
1Check your planProjects and classes need QuickBooks Online Plus or Advanced. Estimate vs. actual on projects needs Advanced.
2Create a project for every jobBusiness overview, then Projects, then New project.
3Turn on classes for job typeSettings, then Account and settings, then Advanced, then Categories, then Track classes.
4Put labor on the jobSet employee cost rates, then track time to projects or post payroll costs.
5Use custom fields, not tagsNew tags can no longer be created for reporting. Add a "Lead Source" custom field.
6Split your chart of accountsCost of goods sold for direct job costs, regular expenses for overhead.
Menu names change over time. Source: Intuit QuickBooks support articles, checked October 2026.
If that sounds like a weekend you don't have, it's what our QuickBooks Online setup and training service covers. Moji is a QuickBooks Online ProAdvisor, and we build projects, classes, cost rates and accounts around how your crews actually work. If your books are already a mess, start with bookkeeping cleanup and catch-up so the job costs you see are real.
10
Weekly and Monthly Job Costing Habits
Setup is the easy part. The habits make it pay.
Every week (about 30 minutes)
•Assign every receipt and bill to a project before it's entered
•Approve timesheets and put every hour on a job, or mark it as shop or drive time
•Compare open jobs to the estimate. If a job has used 70% of its labor budget at 40% done, you want to know now
•Write change orders the same day the customer asks for something extra
•Send progress invoices on schedule
Every month
•Reconcile bank and credit card accounts
•Run a close-out review on every finished job, line by line like the worked example
•Review margin by job type using classes
•Check overhead as a percentage of revenue
•Update your estimating numbers: hours per task, waste factors and burdened labor rate
This is the payoff. With real close-out numbers, your next estimate stops being a guess.
Start from actual costs
In our example scenario, the bathroom was bid at $25,330 in direct costs and actually cost $29,690. If the next bathroom is similar, start from $29,690 and adjust for what's different.
Price from margin, not markup
Markup is what you add on top of cost. Margin is what you keep out of the price. Mixing them up is one of the most common pricing mistakes in the trades.
Example scenario, 30% markup$29,690 x 1.30 = $38,597. That's only about a 23.1% gross margin, almost exactly what the first job delivered.
Example scenario, 30% target margin$29,690 ÷ (1 minus 0.30) = $42,414. Round up to $42,500 for about a 30.1% gross margin.
To set your target margin, add your overhead percentage to the net profit you want. In our scenario, 15% overhead plus a 15% profit target means a 30% target gross margin. At $42,500, overhead is $6,375 and net profit is $6,435, about 15.1%.
ChecklistPrice Your Next Bid: A Contractor's Checklist
Pull the close-out numbers from your last 3 to 5 similar jobs
Use actual labor hours by task, not the hours you hoped for
Cost labor at your true burdened rate per billable hour, not the wage
Add materials with your real waste factor and the sales tax you'll pay
Get current sub quotes in writing
Add equipment rental, disposal, permits and fees
Add a contingency line for known risks (old houses, hidden damage)
Set your target gross margin = overhead % + target net profit %
Price = direct costs ÷ (1 minus target gross margin)
Double-check: markup is not margin (30% markup is only about 23% margin)
Write clear exclusions and require signed change orders for extras
Label the estimate with its job type class and lead source
Know your walk-away number
Your walk-away number is the lowest price that still covers direct costs and the job's share of overhead. Below it, the job loses money even if everything goes right. Saying no is a profit decision, not a lost sale.
Moji's take
“The best bids come from contractors who treat every finished job like a lesson. Their estimates get a little sharper every month, and so do their margins.”
Most contractors know what they spend on marketing. Few know the gross profit each channel brings in. Referrals might bring larger, better-margin jobs. A lead service might bring lots of small, thin-margin ones.
Here's how to track it:
1Ask every new customer how they found you.
2Create a "Lead Source" custom field in QuickBooks Online with a dropdown (Referral, Google, Repeat Customer, Yard Sign, Social Media).
3Fill it in on every estimate and invoice.
4Each quarter, compare revenue and job margins by source against what you spent on each channel.
Example scenario: a McKinney roofer spends $350 a month on online ads, or $2,100 over six months. If those ads produced four roof replacements with $24,000 of combined gross profit, the channel is pulling its weight. If they produced a dozen small repairs that barely covered the trip charge, it's time to rethink.
13
Texas Sales Tax Notes for Contractors
Texas sales tax for contractors depends on the type of property and the type of contract. Our Texas small business taxes guide covers the bigger picture.
Residential repair and remodeling
According to the Texas Comptroller's publication on real property repair and remodeling ↗, labor to repair, remodel or restore residential real property isn't taxable. Materials depend on your contract:
Lump-sum contract(one price for the job): you pay sales tax on materials when you buy them and don't charge the customer tax. That tax is a real job cost, so include it in materials.
Separated contract(materials and labor listed separately): you can give suppliers a resale certificate for incorporated materials, then collect tax from the customer on the materials charge.
Commercial work and new construction
The same publication says the total charge for remodeling, repairing or restoring nonresidential real property is taxable, and that construction labor on new construction isn't. If you do both residential and commercial work, keep them in separate job types. Homebuilders can find more in the Comptroller's publication on homebuilders and real property services ↗.
Landscaping and lawn care
According to the Comptroller's publication on landscaping and lawn care services ↗, mowing, planting, fertilizing and tree trimming are generally taxable, including residential work. There's a narrow exception for a self-employed person with no employees and $5,000 or less in gross receipts from these services in the most recent four calendar quarters.
We'll be honest one more time. We'd love to be your accountant. But even if we never work together, we hope this helps you price your next job with real numbers.
If you'd like a CPA to look at your books, book your free Books & Tax Review. We'll review your books and last year's return and send a one-page summary of what's working, what's broken and what to fix first.
This article is general information, not tax or legal advice for your situation. Talk with a CPA before acting on it.
About the author: Written and reviewed by Moji Shobowale, CPA, founder of Mashbooks in McKinney, TX. Licensed CPA in Texas and Illinois and QuickBooks Online ProAdvisor. Last updated: November 2026
Frequently asked questions
Job costing for contractors is tracking revenue and direct costs (labor, materials, subcontractors, equipment and job fees) for each job. It shows the gross profit and gross margin on every job, so you can see which jobs and job types actually make money.
To calculate the true cost of a labor hour, add up everything an employee costs you in a year (wages, employer payroll taxes, workers' comp, benefits and other costs), then divide by the hours they actually bill to jobs. In our example scenario, a $28 per hour employee costs about $48 per billable hour.
Moji Shobowale, CPACPA · Texas & Illinois · QuickBooks Online ProAdvisorMoji started her career as an auditor and now helps DFW business owners keep clean books and plan their taxes all year.