Small Contractor Bookkeeping Spreadsheet: Your Bank Balance Is Not Your Money

A two-crew remodeler opens the business checking account on October 8 and sees $71,400. Four jobs are running, the trucks are paid off, and a $30,000 owner draw looks safe. It is not. Customers have paid $24,225 for work nobody has done yet, $10,480 of supplier, sub and overhead bills are open, $3,860 of withheld payroll tax has not been deposited, and $8,117 of federal tax on this year's profit has no money set aside for it. After a $9,000 operating floor, the amount this owner can actually take out is $15,718. A small contractor bookkeeping spreadsheet that lists income and expenses by month cannot show that number, because none of those four claims on the cash is an expense yet. The version below is built to produce it.
Every figure in this article comes from one model: a sole proprietor filing Schedule C on the cash method, four jobs in progress, $412,000 collected and $318,500 of deductible expenses paid since January 1, and a federal tax picture taken from last year's return. State income tax is left out; add a row with the same structure for your state.
The Number Your Books Should Produce Is Spendable Cash
Most contractor bookkeeping starts and ends with profit. Profit matters at tax time. During the year, the decision you actually make every week is whether you can spend money: take a draw, put a deposit on a truck, hire a third carpenter. For that decision the bank balance is the wrong number, and the profit figure is wrong too, because a cash-basis profit counts every customer deposit as income the day it lands.
The Cash tab of the workbook shows the remodeler's position on October 8.
| Cash tab line | Source | Amount |
|---|---|---|
| Bank balance (business checking) | Statement, reconciled | $71,400 |
| Less: deposits for work not yet done | Jobs tab | $24,225 |
| Less: open bills (subs, suppliers, overhead) | Bills tab | $10,480 |
| Less: payroll tax withheld, not yet deposited | Payroll register | $3,860 |
| Less: federal tax reserve on profit to date | Tax tab | $8,117 |
| Less: operating floor | Your choice | $9,000 |
| Spendable cash | $15,718 |
Spendable cash sits in Cash!B9, and its formula is deliberately boring: =B3-SUM(B4:B8). The work happens in the tabs that feed B4 through B7; B7, for instance, is simply =Tax!B9. The four claims add up to $46,682, which is 65 percent of what the bank shows. That ratio is normal for a remodeler who collects deposits, and it is why owners who manage by bank balance feel rich in spring and broke in November.
Four Tabs and a Short Category List
The workbook has a Ledger tab where every transaction lands once, a Jobs tab, a Bills tab and a Tax tab, plus the Cash tab above. The Ledger is the only place you type money. Every other tab reads it with SUMIFS, so a payment entered once updates the job, the tax reserve and the 1099 list at the same time.
Ledger columns: A date, B account, C payee, D job code (A, B, C, D, or OH for overhead, OWNER for draws and contributions, TAX for estimated payments), E category, F Schedule C line, G money in, H money out, I W-9 on file (Y or blank).
Keep the category list short and tie every category to the line it ends up on in Schedule C (2025 form). A 60-account chart copied from accounting software creates coding decisions nobody makes consistently, and inconsistent coding is worse than coarse coding.
| Category (column E) | Schedule C line (column F) | Counts as an expense? |
|---|---|---|
| Customer payment | Line 1, gross receipts | No, income |
| Materials | Part III, line 38 | Yes |
| Subcontractor | Line 11 or Part III, line 39 (pick one with your preparer and keep it) | Yes |
| Crew wages | Line 26, or Part III, line 37 | Yes |
| Equipment rental | Line 20a | Yes |
| Truck and fuel | Line 9 | Yes |
| Insurance | Line 15 | Yes |
| Permits and licenses | Line 23 | Yes |
| Small tools and shop supplies | Line 22 | Yes |
| Owner draw, estimated tax payment, equipment purchase, loan principal | Blank | No |
The last row is where most homemade books go wrong. A draw is not an expense for a sole proprietor, an estimated tax payment is not an expense, and a truck is depreciated over several years unless your preparer elects section 179 or bonus depreciation. Leaving column F blank for those rows is what keeps them out of the profit figure: the Tax tab only sums rows that carry a Schedule C line. If you buy equipment, track it separately; the equipment depreciation tracker covers MACRS schedules and the real hourly cost of a machine.
Materials bought tax-free on a resale certificate and installed on a job can create use tax you owe later. That is its own log, covered in the material sales tax and use tax tracker; flag those purchases in the Ledger with a note so they are easy to pull.
Customer Deposits Are a Liability Until the Work Is Done
The biggest line on the Cash tab is money customers paid for work that has not happened. The Jobs tab measures it per job with a cost-to-cost percent complete: cost incurred so far divided by the estimated total cost.
| Job | Contract | Est. cost | Cost incurred | % complete | Earned | Collected | Unearned | Underbilled |
|---|---|---|---|---|---|---|---|---|
| A, kitchen remodel | $48,000 | $34,000 | $28,900 | 85% | $40,800 | $38,400 | $0 | $2,400 |
| B, primary bath | $22,500 | $16,000 | $4,000 | 25% | $5,625 | $11,250 | $5,625 | $0 |
| C, garage addition | $96,000 | $72,000 | $18,000 | 25% | $24,000 | $38,400 | $14,400 | $0 |
| D, rear deck | $14,000 | $9,800 | $0 | 0% | $0 | $4,200 | $4,200 | $0 |
| Total | $180,500 | $50,900 | $70,425 | $92,250 | $24,225 | $2,400 |
Row 5 holds job A, with the job code in A5:
D5paid to date:=SUMIFS(Ledger!$H:$H,Ledger!$D:$D,$A5)E5open bills on the job:=SUMIFS(Bills!$D:$D,Bills!$B:$B,$A5,Bills!$E:$E,"Open")F5cost incurred:=D5+E5. Unpaid bills count, because the lumber is on site whether or not you paid for it.G5percent complete:=IF(C5=0,0,MIN(1,F5/C5))H5earned:=B5*G5I5collected:=SUMIFS(Ledger!$G:$G,Ledger!$D:$D,$A5)J5unearned:=MAX(0,I5-H5)K5underbilled:=MAX(0,H5-I5)
Job C is where the money sits. The customer paid a 40 percent deposit on a $96,000 addition, the framing is a quarter done, and $14,400 of that deposit is still owed back to the customer as work. Job A runs the other way: the kitchen is 85 percent done and the customer has paid $2,400 less than the work is worth. That $2,400 is your next invoice, not cash. It never offsets the deposits on B, C and D, which is why the Cash tab reads column J and ignores column K.
Cost-to-cost only works if the estimated cost is current. If job C is running over budget, cost incurred climbs faster than the work, percent complete overstates progress and the unearned figure shrinks on paper. Re-forecast C5:C8 monthly from your job costing spreadsheet. Larger contractors report the same calculation to their bank and surety as a WIP schedule; the construction WIP report shows that version.
Some states put the deposit rules in statute
California caps the deposit itself. Business and Professions Code section 7159(d)(8) requires home improvement contracts to state that the downpayment "MAY NOT EXCEED $1,000 OR 10 PERCENT OF THE CONTRACT PRICE, WHICHEVER IS LESS," and section 7159(d)(9) requires the warning that "IT IS AGAINST THE LAW FOR A CONTRACTOR TO COLLECT PAYMENT FOR WORK NOT YET COMPLETED, OR FOR MATERIALS NOT YET DELIVERED." A California remodeler should never see a $14,400 unearned balance on a home improvement job; if column J shows one, the payment schedule is the problem.
Texas goes after what you do with the money. Property Code section 162.001 makes construction payments to a contractor under a contract for specific Texas real property trust funds, and section 162.031 says a trustee who intentionally or knowingly uses or diverts trust funds "without first fully paying all current or past due obligations" to the beneficiaries has misapplied them. Under section 162.032, misapplying $500 or more is a Class A misdemeanor, and a third-degree felony with intent to defraud. In the model, the $2,600 lumber bill on job C is open. Knowingly paying job A's cabinet installer with job C's deposit while that lumber bill stays open is the pattern the statute describes. A Jobs tab that shows collected and paid by job is the record that proves you did not do it.
Open Bills and Payroll Tax: Money You Have Already Spent
The Bills tab is a five-column list: A vendor, B job code, C due date, D amount, E status. On October 8 it holds $7,000 of job bills (the $2,800 cabinet install sub on A, $1,600 of tile for B, $2,600 of lumber for C) and $3,480 of overhead: a $1,150 insurance installment and a $2,330 card balance. The Cash tab reads it with =SUMIFS(Bills!$D:$D,Bills!$E:$E,"Open"). When you pay a bill, enter the payment in the Ledger and change the status to Paid in the same sitting, or the bill is counted twice, once as cash gone and once as cash owed.
The payroll line is smaller and more dangerous. The $3,860 is income tax and the employees' share of Social Security and Medicare withheld from paychecks, plus your matching share, waiting for the next deposit. The withheld part is trust fund tax: under 26 U.S.C. section 6672, a person required to pay over withheld tax who willfully fails to do so is liable for a penalty "equal to the total amount of the tax evaded, or not collected, or not accounted for and paid over." It is assessed against the responsible person, so the LLC or the corporation does not stand between that bill and you. If your payroll service debits the deposit automatically, this line is still worth keeping until the debit clears, because the money sits in your checking account in the meantime.
The Tax Reserve: The IRS Taxes Deposits You Cannot Spend
On the cash method, IRS Publication 538 says you include in gross income "all items of income you actually or constructively received during the tax year." A deposit is income the day it lands, even though the Jobs tab says it belongs to the customer. That is the tension this tab resolves: the tax reserve is computed on cash profit, and the unearned deposits sit inside that profit.
| Tax tab line | Formula | Value |
|---|---|---|
| B3 Receipts year to date | =SUMIFS(Ledger!$G:$G,Ledger!$E:$E,"Customer payment") | $412,000 |
| B4 Deductible expenses paid | =SUMIFS(Ledger!$H:$H,Ledger!$F:$F,"<>") | $318,500 |
| B5 Net profit to date | =B3-B4 | $93,500 |
| B6 Self-employment tax | =B5*0.9235*0.153 | $13,211 |
| B7 Federal income tax | =B5*B12 | $10,506 |
| B8 Estimated payments made | =SUMIFS(Ledger!$H:$H,Ledger!$D:$D,"TAX") | $15,600 |
| B9 Reserve still needed | =MAX(0,B6+B7-B8) | $8,117 |
The self-employment line uses the statutory rates: 12.4 percent for Social Security and 2.9 percent for Medicare, 15.3 percent in total, applied to 92.35 percent of net earnings. That is 14.13 percent of profit, before a single dollar of income tax. It ignores the Social Security wage base, which only matters above that year's cap.
B12 is the rate that turns profit into federal income tax, and the most honest source for it is your own last return. The remodeler's 2025 return shows $82,000 of Schedule C profit and $20,800 of total federal tax, of which $11,586 was self-employment tax and $9,214 was income tax. B12 is =9214/82000, or 11.24 percent. Because the brackets are progressive, a ratio taken from a lower-profit year understates this year's tax, so treat B9 as a floor and ask your preparer for the marginal rate once profit passes last year's.
Safe harbor protects you from the penalty, not from the bill
Under section 6654(d)(1)(B), you avoid the underpayment penalty if your four installments cover the lesser of 90 percent of this year's tax or 100 percent of last year's, and section 6654(d)(1)(C) raises the second figure to 110 percent when last year's adjusted gross income exceeded $150,000. The installments are due April 15, June 15, September 15 and January 15 of the following year. The remodeler's adjusted gross income was under $150,000, so each installment is =IF(B14>150000,1.1,1)*B15/4, or $5,200, and three were paid on time.
That keeps the penalty away. It does nothing about the size of the April check. Tax on profit so far is already $23,717 against $15,600 paid, and every profitable week adds to the gap. Owners who pay the safe harbor and spend the rest discover the difference on April 15, usually in the slowest month of the year.
The December deposit problem
Of the $93,500 profit, $24,225 is unearned deposits. At the model's rates, $6,145 of this year's federal tax ($3,423 of self-employment tax and $2,722 of income tax) is tax on money that still belongs to customers B, C and D as work. It is a timing difference, since next year's profit will be lower by the same amount when the work is done, but the cash leaves this year. A $20,000 deposit received December 20 for a January start adds $2,826 of self-employment tax and $2,247 of income tax to this year's bill. If the customer is solid and the start date is firm, invoicing that deposit on January 2 moves the tax a full year. If you need the deposit to order materials, take it in December and put $5,073 of it in the reserve the same day.
What a $30,000 Draw Does to Each Number
The table reads the same October 8 balance two ways: a draw sized on the bank balance and a draw sized on spendable cash.
| Line | Draw sized on bank balance | Draw sized on spendable cash |
|---|---|---|
| Bank balance before draw | $71,400 | $71,400 |
| Owner draw | $30,000 | $15,718 |
| Bank balance after draw | $41,400 | $55,682 |
| Claims on that cash (deposits, bills, payroll tax, tax reserve) | $46,682 | $46,682 |
| Cash left after every claim | -$5,282 | $9,000 |
| Operating floor intact? | No, $14,282 below it | Yes |
After the $30,000 draw, the remodeler can no longer pay every open bill, finish the work customers have paid for and cover the tax already earned. The account still shows $41,400, so nothing feels wrong. The shortfall surfaces in six or eight weeks when job C needs its roof trusses, and the usual fix is the next customer's deposit. That is the deposit chase: each new job funds the end of the previous one, which works until sales slow down. In Texas, it is also the pattern section 162.031 describes.
Sizing the draw on spendable cash leaves exactly the $9,000 floor after every claim. The owner takes $14,282 less today, and none of it has to be borrowed back from a customer in December.
Two Checks That Keep the Books Honest
Monthly bank reconciliation
Every number above depends on the Ledger matching the bank. Put the opening balance in Setup!B2, then on the Cash tab compute the ledger balance with =Setup!B2+SUM(Ledger!$G:$G)-SUM(Ledger!$H:$H) and compare it with the statement balance in B3: =IF(ABS(B3-B11)<0.01,"RECONCILED","OFF BY "&TEXT(B3-B11,"$#,##0.00")). A difference is almost always a check that has not cleared, a card fee you never entered, or a deposit you entered twice. Find it before you trust Cash!B9, the spendable line; a spendable figure built on an unreconciled ledger is a guess.
The 1099-NEC and W-9 list
For payments made after December 31, 2025, the IRS instructions for Forms 1099-MISC and 1099-NEC require a Form 1099-NEC for each person you paid at least $2,000 in the course of your business, filed by January 31. The old $600 figure still appears in the 2025 Schedule C instructions because it applied to 2025 payments. A Vendors tab lists each sub in column A, computes the year's payments in B5 with =SUMIFS(Ledger!$H:$H,Ledger!$C:$C,$A5,Ledger!$E:$E,"Subcontractor"), keeps the W-9 status in C5, and flags the gap in D5 with =IF(AND(B5>=2000,C5<>"Y"),"GET W-9",""). Collect the W-9 before the first check; by January the sub may have moved on to another state. The landlord version of this list, with the backup withholding rules, is in the 1099-NEC vendor tracking article, and the same Vendors tab is the right place for the insurance expiration dates described in the certificate of insurance tracker.
What to Set Up This Week
- Open a separate business checking account if you do not have one. Every formula above assumes the bank balance in
B3is business money only. - Enter year-to-date transactions in the Ledger with a job code and a category on every row. Leave column F blank for draws, tax payments and equipment purchases.
- Build the Jobs tab with current estimated costs, and check column J against your contracts. If you work in California and any home improvement job shows a large unearned balance, fix the payment schedule on the next contract.
- Pull last year's return and fill
B12,B14andB15on the Tax tab. Move theTax!B9reserve to a separate savings account today. - Reconcile to the bank statement, then read
Cash!B9before every draw, equipment purchase or hire.
For the remodeler, those five steps turn a $71,400 balance into a $15,718 decision, and a $30,000 draw that would have left the business $5,282 short of its obligations into one that leaves the $9,000 floor intact.
The Jobs tab is only as good as the cost data behind each job. The Construction Budget Tracker keeps that data per project: budget by CSI division or your own categories, actual cost against each line with the variance, change orders, percent complete against percent spent, and a payment log showing which sub and supplier invoices are paid, pending or due this week. It does not keep your company books or compute the tax reserve. Use one tracker per job, read its paid and pending totals into columns D and E of the Jobs tab, and the unearned deposit figure on your Cash tab will rest on the same numbers you use to run the job.
Related template
Construction Budget Tracker
Track every line item, change order, and payment across your entire project. Spot a $23K billing discrepancy before it hits your bottom line — not after.
Get the Template — $49