Before I ever looked at a contractor's books, I spent years tracking restricted grant funding across a portfolio of nonprofits. At the peak we were managing the finances for organizations with a combined annual budget north of $150 million, with dozens of active grants, each one with its own rules about what the money could be spent on, its own reporting deadlines, and its own auditors checking that every dollar went exactly where it was supposed to go.
It was meticulous work. One misclassified expense could jeopardize a renewal. A grant spent even slightly outside its intended purpose had to be returned. The whole job was built around one core discipline: tracking every dollar to its source and its purpose, simultaneously.
When I started working with general contractors, I expected the work to feel completely different. What I found instead was that the mental model was almost identical, just applied to a different kind of organization with different stakes.
How Grant Tracking Works (And Why It's Not So Different From Job Costing)
In nonprofit accounting, restricted grants work like this: a foundation gives an organization $200,000 to run a specific program. That money can only be spent on that program. You can't use it to pay the executive director's salary unless the grant specifically allows it. You can't use it to fix the office roof. Every expense has to be tied back to the grant it was funded by, documented, and reported.
QuickBooks handles this through a system called Projects, or sometimes Classes and Locations depending on how the organization is set up. Every transaction gets tagged to a specific funding source. At any point you can run a report that shows exactly what has been spent on each grant, what's left, and whether you're on track to use the funds before the deadline.
Now replace "grant" with "job." Replace "funder" with "customer." Replace "restricted funding" with "job revenue." Replace "allowable expenses" with "direct job costs."
The structure is the same. The discipline required is the same. The reporting logic is the same. You're tracking money in and money out at the individual project level, making sure costs are assigned to the right bucket, and generating reports that tell you whether each project is performing the way it should.
What Nonprofit Work Taught Me About the Details That Matter
Grant tracking is unforgiving in a way that most bookkeeping isn't. When an auditor comes in to review a federal grant, they're not looking at your totals. They're looking at individual transactions. They want to see the invoice, the check, the coding in the system, and the budget line it maps to, all connected, all documented, all matching.
That level of specificity changed how I think about job costing for contractors. Most bookkeepers categorize expenses at the company level. Materials go to materials. Labor goes to labor. Subcontractors go to subcontractors. That's fine for tax purposes, but it tells you almost nothing about whether a specific job made money.
The nonprofit approach trains you to ask a different question: not "how much did we spend on materials this month?" but "how much did we spend on materials for this specific project, and how does that compare to what we budgeted for it?"
That's the question that actually helps a contractor run a better business. And it's the same question a grant manager is asking every single month.
The Setup Is Where Most Contractors Lose It
In the nonprofit world, we set up the chart of accounts and project structure before the grant started. We knew what categories of expenses were allowed, we built them into the system, and everyone who touched the books knew which grant to tag each transaction to before it was entered.
For contractors, the equivalent is setting up a job in QuickBooks before work begins, defining the cost categories you want to track, and making sure every bill, every receipt, and every labor entry gets assigned to the right job at the time of entry, not cleaned up at the end of the month, not reconstructed at tax time.
This sounds obvious, but most small contractor bookkeeping doesn't work this way. Expenses get entered generically. Jobs get added to the system late or not at all. By the time someone tries to run a job cost report, half the data is missing or in the wrong place.
In the grant world, that kind of setup failure would result in a qualified audit opinion and potentially returned funds. In contracting, it results in not knowing whether you made money on a job until you're standing at the end of it trying to reconstruct nine months of expenses from memory.
Why the Methodology Transfers Directly
Here's the practical translation I use when setting up job costing for a general contractor:
- Projects in QuickBooks Online = Grants in nonprofit accounting. Every active job gets its own project. Every transaction gets tagged to a project before it's saved.
- Job budget = Grant budget. Before work starts, we set up the estimated costs by category: labor, materials, subcontractors, equipment, permits. This gives us a baseline to compare actuals against throughout the job.
- Monthly job cost reports = Grant expenditure reports. At the end of each month, we run a report showing actual costs versus budget for each active job. If labor is running 20% over estimate on a job that's only 60% complete, that's a problem worth addressing now, not at closeout.
- Job closeout review = Grant final report. When a job ends, we reconcile the final costs, compare them against what was billed, and document what the actual margin was. That data feeds directly into estimating the next similar job more accurately.
The discipline of tracking every dollar to its purpose, which I learned under the pressure of federal grant compliance, turns out to be exactly what a contractor needs to know whether their business is actually profitable or just busy.
Busy Is Not the Same as Profitable
This is the insight that grant tracking gave me before I ever worked with a contractor: it's completely possible to spend a lot of money, do a lot of work, and still come out behind. In the nonprofit world, that happens when organizations take on grants that cost more to administer than they're worth, or when program costs run over what the grant covers and the organization has to make up the difference from unrestricted funds.
For contractors, it happens when jobs run over on labor, when change orders don't get billed, when material costs get absorbed at the company level instead of charged to the job, or when small overruns across a dozen jobs quietly eat the margin that looked good on the original estimate.
You can't see any of that without job-level tracking. And job-level tracking only works if the system is set up correctly and every expense is coded the right way from the start.
That's not a new idea. It's just nonprofit accounting, applied to a different kind of organization with a different kind of funder.