Roofing Accounting Software: Deposits, Progress Invoices, Job Costing, AI

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Roofing Accounting Software: Deposits, Progress Invoices, Job Costing, AI.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Roofing Accounting Software: Deposits, Progress Invoices, Job Costing, AI.

For most small roofing companies, QuickBooks Online Plus ($140 a month at list) fits best: it bills one estimate in stages and has Projects for job costing. Xero Established ($97) matches it through Xero Projects; Early and Growing have no Projects tool. AI speeds up bill entry and bank matching, but it does not cost a roof for you.

Roofing strains ordinary invoicing in a particular way. Money arrives in lumps: a deposit, a payment when the shingles land, a final payment, sometimes an insurer's cheque on top. Costs arrive as supplier bills that carry a delivery address or a purchase order number, not a customer name. So three tests matter more than a feature list: where a deposit sits before the roof exists, whether one estimate can be billed in parts without retyping it, and whether a bill from a roofing supplier can be pinned to the right roof.

Follow me on Instagram@sagnikteaches

Prices and plan limits here were read from Intuit's and Xero's own pages in October 2026. Where a page is silent (Xero's quotes page, for instance, does not describe billing part of a quote) that is flagged in place rather than guessed. Roofing CRMs such as AccuLynx and JobNimbus sit beside an accounting package instead of replacing it, and the CRM-or-field-app decision is a separate one.

Connect on LinkedInSagnik Bhattacharya

A $16,800 re-roof, stage by stage, as the books see it

Every test below uses one illustrative job: a two-storey house, 28 squares (a square is 100 sq ft), full tear-off and architectural shingles. The contract is $16,800 in three lines.

Subscribe on YouTube@sagnikteaches
Estimate linePrice
Tear-off, disposal and permit$3,360
Materials package (shingles, underlayment, flashing, vents)$8,736
Installation labour$4,704
Total$16,800

Here is what happens to money, in order.

  1. Contract signed. The homeowner pays a 25% deposit, $4,200, by card.
  2. Delivery day. The supplier drops the shingles and underlayment. The delivery ticket carries $6,350 of materials, but the supplier's invoice only reaches you at month end. The second payment, 50% or $8,400, falls due.
  3. Tear-off. The crew finds rot under one slope and replaces four sheets of decking. You charge the customer $420 as a change order; it costs you $190 of sheets and six extra crew hours worth $360.
  4. Completion. The final payment is the last 25% plus the change order: $4,620.
  5. Month end. The supplier's statement lists this roof's ticket between tickets for two other jobs.

Money in totals $17,220 over three payments. Costs total $12,525 across half a dozen documents. The software's job is to show that this roof earned $4,695, which is 27.3% of its revenue against 30.2% planned. Each section below tests one part of reaching that figure.

Deposits: money you hold before the roof exists

A deposit is a promise to deliver work. Until the roof is on, many accountants treat it as money you owe the customer in work rather than as earned income, and if the job is cancelled some or all of it may have to go back. How your own books should show it depends on your accounting method and the rules that apply to you, so settle that with your accountant first. The software question is narrower: which pattern can the package support without workarounds?

The vendor pages are thin here. Intuit's invoicing page says you can "collect deposits ahead of time", but it names no plan for that and does not say where a deposit sits in the books; its progress invoicing article never mentions deposits, and its pricing page lists no deposit feature against any plan. Xero's quotes page does not mention them either, but its Projects page says you can invoice deposits, lump sums and project progress payments from a project, and Projects only comes with Established. The pattern that rests on documented features in both packages is therefore the same: treat the deposit as the first invoice of the job.

PatternHow it worksWhere it breaks
Deposit as first progress invoiceA 25% invoice raised from the estimate, paid like any other invoiceYour accountant may want it held as a liability until the work is done; ask
Stand-alone deposit invoice, final invoice net of itA plain invoice called "Deposit, 12 Elm Street", later a final invoice with a negative lineThe estimate stops tracking what is left to bill, and the negative line is easy to forget
Payment taken with no invoiceCard taken at the door, entered as money receivedNothing on the customer's statement says what it was for

The first pattern leaves a trail: the deposit has an invoice number, a payment and a place on the estimate. If a customer cancels before delivery, a refund can be matched to that payment instead of to a loose receipt.

A realistic mistake shows why the third pattern costs more than it saves. A roofer takes four $2,500 deposits in September, and two of those jobs slip to November. If all four were entered as plain receipts and counted as September income, September profit is overstated by $5,000 and November's is understated by the same amount. Nothing in the software warns about it, because every entry was valid.

Name the deposit line the same way on every estimate, for example "Deposit 25% on signing", so that a search for deposits across all open roofs returns one consistent list.

Progress invoices: what each package lets you bill in stages

Intuit documents this properly, and its invoicing page places progress invoicing on Plus and Advanced (the help article itself names no plan). In QuickBooks Online the steps, from Intuit's progress invoicing article (updated August 2026), are:

  1. Open Account and settings, then the Sales tab, then Progress Invoicing, and turn on "Create multiple partial invoices from a single estimate".
  2. Send the estimate. Once the customer accepts it, choose Convert to invoice.
  3. Pick the billing method: the whole estimate, a percentage, or line by line.
  4. Send the invoice, then repeat at each stage.

Three rules from that article matter to a roofer. You cannot invoice beyond 100% of the estimate. Creating a progress invoice leaves the estimate itself unchanged, and when the whole estimate has been invoiced its status becomes Converted. And the report called "Estimates & Progress Invoicing Summary by Customer" lists each estimate, what you have invoiced and what is left, which is the nearest thing to a billing ledger for each roof that the package has out of the box.

InvoiceTriggerMethodAmountLeft to bill
1Contract signed25% of the estimate$4,200$12,600
2Delivery day50% of the estimate$8,400$4,200
3CompletionRemaining total$4,620 with the change order$0

Line by line suits a job where whole stages finish cleanly. The same roof could bill 25% of every line at signing ($4,200), the remaining 75% of the materials line on delivery ($6,552), the remaining 75% of the tear-off line once the old roof is off ($2,520), and the remaining 75% of labour at completion ($3,528). Those four invoices add back to $16,800. It gives the homeowner a clearer picture of what each payment buys, at the price of four invoices on a three-day job, so most roofers keep to percentages.

The decking change order is where the 100% cap bites. Add the four sheets as a new line on the estimate before you raise invoice 3, which takes it to $17,220, then bill the remaining total. Whether your invoice layout lets you edit the estimate after a first invoice is worth testing on a dummy job before you rely on it; the trial test further down includes that step. For the wording and pricing of the extra, the rotten-decking change order tutorial has a worked template.

Xero is different. An accepted quote becomes an invoice in one click and its lines stay editable, but Xero's quotes page does not describe billing only part of a quote. On Early or Growing, expect to cut the first invoice down to the deposit by hand, raise later invoices yourself, and keep the schedule in the quote notes. On Established, the Projects page describes creating fixed-price or time-and-materials invoices from the project and lists deposits and progress payments among them. Early's cap of 20 invoices is also tight: four roofs billed in three stages use 12 of them.

Job costing by roof: Projects, classes or a spreadsheet

How QuickBooks Plus and Advanced do it

Intuit's job-costing page says Plus and Advanced "include job costing", and its help article on projects (updated October 2026) explains the mechanics. A project belongs to one customer, so a homeowner with a house roof and a garage roof gets two projects. Estimates, invoices, bills, checks, expenses and timesheets can be tagged to a project, and when you mark the job completed you see income, expenses and profit margin. Labour costs update on their own if QuickBooks Time or Workforce is connected.

Two limits are worth knowing. The estimate-versus-actuals report is Advanced only, so on Plus you compare the estimate to the project's cost lines yourself. And the Plus card lists "Track classes and locations (40)": forty buckets suit job types such as re-roof, repair, gutters and insurance work, but not a year of individual roofs, which is why Projects rather than classes carry the per-roof view. Intuit's pages give no number for how many projects you can hold, only that marking one completed frees room on the Projects page. If you run dozens of open roofs at once, test that before relying on it.

How Xero does it

Xero Projects is on Established only. Its page describes a timer or location-based job tracking on a phone, bills, spending and expense claims assigned to a project, an optional project estimate, and a Project Summary report showing revenue, costs, time tracked and profit margin per project. The pricing-page FAQ adds that usage charges for Xero Projects are invoiced separately for the previous month, and no amounts are shown, so ask what they are before you switch it on.

On Early or Growing there is no Projects tool. Xero's usual stand-in is tracking categories, which tag each transaction. Xero's help pages would not load for me, so I cannot confirm the current number of categories, the number of options per category, or which plans carry them. Check those figures before building a scheme that gives each roof its own option. The alternative is to keep the sheet below outside Xero.

What a finished job-cost sheet shows

Whichever package you pick, keep the same cost buckets on the estimate and on the actual bills: materials, decking and extras, crew labour, disposal and dumpster, permit, and fuel and sundries. Same buckets mean a like-for-like comparison. Here is the example roof again.

LineEstimateActualDifference
Materials package$6,200$6,350+$150
Decking sheets (change order)$0$190+$190
Crew labour$4,480$4,840+$360
Disposal and dumpster$620$690+$70
Permit$240$240$0
Fuel and sundries$180$215+$35
Total cost$11,720$12,525+$805
Revenue$16,800$17,220+$420
Profit$5,080$4,695-$385
Margin30.2%27.3%about -3 points

Read the sheet for the lesson, not the total. The decking change order brought in $420 and cost $550 ($190 of sheets plus $360 of labour), so it lost money. At $105 a sheet the extra work was priced below its own cost; keeping a 30% margin on those four sheets needed about $196 each. No generic feature list would have told this roofer that. A project report did, because the decking cost had its own line.

Tag every bill on the day you enter it. A project tag added three weeks later is a tag nobody remembers, and the first month's profit figures will be wrong in exactly the way that looks plausible. For a wider view of how this feeds decisions, the construction job costing tutorial shows how to rank a year of jobs by actual margin.

Supplier bills: getting delivery tickets onto the right roof

A distributor's month-end invoice often bundles several delivery tickets. The accounting package wants one tag per cost line, and the ticket is the only document that says which roof it was for. Here is a realistic invoice and how each line should be coded.

Line on the supplier invoiceProblemCoded as
Ticket 1: shingles, underlayment, ridge caps, $6,350None; the order number matches the jobMaterials, project "2611 Elm Street re-roof"
Ticket 2: shingles and underlayment, $2,110No order number; the driver wrote "garage" by handHold; ask the crew lead which roof, then code it
Credit: six bundles returned, -$318The bundles came back from last month's roof, which is already closedMaterials credit on that earlier roof's project, so its margin is corrected rather than this one's flattered
Delivery charge, $65Covers both ticketsSplit between the two projects, or code to overheads and say so

The cheapest fix is upstream. Put the project name or street in the purchase order field on every order and ask the supplier to print it on every ticket. Then ticket 2 would never have needed a call to the crew lead.

Document capture is where the AI claims start. Xero's pricing page lists Smart Document Capture on all three plans. Intuit's pricing page names expense categorisation on Simple Start and Accounting AI from Essentials, but does not describe a feature that reads a supplier ticket and picks a roof. Bank-feed categorisation chooses an account such as Materials. Whether it also chooses the project is the thing to test: enter ten real bills and count the wrong project tags.

A quick sum shows why this deserves a test. If one bill in six lands on the wrong roof and your average materials bill is $6,000, that is roughly one misallocated bill a month on a firm finishing six roofs, and each one pushes about $6,000 of cost from one job to another. Both jobs then show a false margin until someone notices.

What the AI features add, read from the vendor pages

These are the AI features each vendor's own page names, with the plan and status as stated there.

PackageFeature namedPlanWhat the page says it doesUse for a roofer
QuickBooksIntuit Intelligence (labelled BETA)Not stated on its product pageExplains recommendations; sends cash-flow alerts such as bills coming due or unpaid invoicesA nudge to chase the final payment; it does not cost jobs
QuickBooksAccounting AIEssentials and upHelps clean up the booksA review queue for miscategorised bills
QuickBooksProject Management AI (Beta on the job-costing page)Advanced"Auto-creates projects and allocates costs" (pricing page)The one feature aimed at job costing; test it on ten bills
XeroJAX chatAll subscribers, no extra chargeAnswers questions; helps create invoices or quotes, for example an invoice based on the last quote for a contactDrafting and questions, not costing
XeroAuto-reconcileGrowing and up; $5 a month add-on on EarlyMatches bank lines to transactionsSpeed at month end
XeroSmart Document CaptureAll plansCaptures bills and receiptsGetting supplier invoices in without typing

Two plain limits follow. None of these pages claims that AI will price a roof or judge whether a bill belongs to one; the nearest is Project Management AI, still marked Beta on Intuit's job-costing page. And what these features add is admin speed. The judgement in the example above, that the change order lost money, came from a cost sheet that someone built and read.

Intuit has also announced a connector for Claude and a plugin for ChatGPT (28 July 2026). If you try either, start read-only; this tutorial on connecting Claude to QuickBooks covers the order to do it in. A simpler use needs no connection at all: export the project profit report, strip customer names, and ask an assistant to review it.

You are reviewing a roofing company's job profit export. Each row is one roof
(job code only): contract value, change orders, materials, decking and extras,
crew labour, disposal and permits, other costs.
1. Work out gross profit and margin (profit divided by revenue) for each roof.
2. Flag any roof whose margin is more than 2 points below our planned 30%.
3. For each flagged roof, name the cost line that moved most against its estimate.
4. List any roof where a cost line is zero; a bill may not be tagged yet.
Do not guess missing numbers. Say which ones are missing.

A realistic reply (illustrative) flags 2611 at 27.3% margin, 2.7 points under plan, names crew labour as the biggest mover at +$360, and lists 2614 because its disposal line is zero. Two things to fix in that reply. It may report markup instead of margin: $4,695 over $12,525 of cost is 37.5% markup, not 27.3% margin, so check which one it divided by. And it will treat a zero in the disposal line as missing when the crew took the old shingles to their own yard; only you know that, so correct the sheet instead of accepting the flag.

Comparisons of the assistants themselves are in the Xero versus QuickBooks AI tutorial, which looks at time saved rather than roofing fit.

Which plan fits which roofing company

SituationStart withWhy
Owner-operator, three or four roofs a month, one person doing the booksQuickBooks Plus ($140) or Xero Established ($97)Both give costing by roof and staged billing; the gap is small against one roof's profit
Same firm, but your bookkeeper works in XeroXero EstablishedA package your bookkeeper already knows saves more than any feature gap
Many open roofs, an office manager, estimates compared with actualsQuickBooks Advanced ($340)Adds the estimate-versus-actuals report, 25 users and the construction financials solution listed on Intuit's page
Mostly small repairs invoiced the same dayQuickBooks Essentials or Xero GrowingPer-roof costing matters less than quick invoicing and clean bank matching
A roofing CRM already runs the job fileKeep the CRM; add accounting that it syncs withSee below

Here is the quick sum on price. At ten roofs a month, Plus works out at $14 a roof and Established at $9.70 a roof. The $43 monthly gap is under 1% of the $4,695 profit on the example roof, so choose on fit and on your bookkeeper's habits, not on the gap.

For a firm with a CRM, treat the accounting package as the ledger and the CRM as the job file. AccuLynx's integrations page lists a QuickBooks integration and says invoices and payments can be viewed inside AccuLynx; it does not say whether that is QuickBooks Online or Desktop, or which plan is needed, so ask before you buy. JobNimbus's own pages would not load for me, so I cannot say what its sync covers. The AccuLynx versus JobNimbus tutorial compares the two as CRMs. If you use a field service app instead, Jobber's QuickBooks sync starts at its Connect plan and Housecall Pro's at its Essentials plan.

A 45-minute trial that tests all three jobs

QuickBooks lists a 30-day free trial and Xero's pricing page offered a month free when checked. Use the trial of the exact plan you would buy, with dummy data only.

  1. Create a customer called "Test, Elm Street" and an estimate with the three lines from the example. Pass mark: total $16,800.
  2. Switch on progress invoicing (QuickBooks), or create a project from the quote (Xero Established). Bill 25%. Pass mark: a $4,200 invoice, with $12,600 shown as left to bill.
  3. Add the $420 decking line after invoice 1. Pass mark: the estimate reads $17,220 and the balance left to bill is $13,020.
  4. Enter three bills: $6,350 of materials, a $2,110 bill split across two roofs, and a $318 credit. Pass mark: each lands on the right project.
  5. Run the project profit report. Pass mark: income and costs per roof match a quick hand sum.
  6. Open the customer's invoice and statement as the homeowner would see them. Pass mark: the deposit and stages read clearly without explanation.
  7. Time yourself finding how much is left to bill on this roof. If it takes more than a minute, your office will stop using the report.

A failed step points to the plan that fixes it, using the sections above: no Projects means Plus or Established, no estimate-versus-actual report means Advanced or a sheet, and no partial billing from one estimate means QuickBooks Plus or Advanced, where Intuit places progress invoicing, or Xero Established with Projects.

Roofing bookkeeping questions the plan tables leave open

Is the cheapest QuickBooks or Xero plan enough for a small roofer?

Rarely, once you want profit by roof. QuickBooks Simple Start has no Projects, which Intuit limits to Plus and Advanced, the same two plans it names for progress invoicing. Xero Early allows 20 invoices and five bills (its page does not say over what period) and Projects starts at Established. A roofer with one or two jobs a month can run a job-cost spreadsheet beside a cheap plan, but that sheet then becomes a second set of books to keep in step.

How do I record an insurer paying part of a roofing job?

Pick one pattern and use it on every job. Either bill the homeowner for the full contract and record each insurer payment against it, or raise one invoice for the deductible and another for the insurer's share. Note on each invoice who owes what. How the payments are recognised or taxed is a question for your accountant, not the software.

Should roofing job costing live in a spreadsheet instead?

A sheet works while one person enters every bill in the same week and the roof count is low. It strains once bills arrive through bank feeds, several people code them, or your accountant wants one set of books. A sensible middle route is accounting software for bills and payments, plus a sheet for the estimate-versus-actual comparison on plans without that report.

Can I switch off the AI features in QuickBooks or Xero?

Intuit says QuickBooks Online's AI features cannot currently be switched off one by one. Xero's JAX chat only runs when you ask it a question, and the automatic matching in Smart Document Capture can be turned off. Whichever you use, keep a person reviewing anything the AI categorises before the month is closed.

Further reads

Sources: Intuit QuickBooks Online pricing, invoicing, job-costing and Intuit Intelligence pages and help articles on progress invoicing, estimates and projects; Xero pricing, Projects, quotes and JAX pages; AccuLynx home and integrations pages (all read October 2026).

Want your roofing books to show profit by roof?

On a 1:1 call we'll map how one job moves from estimate to final payment, pick the accounting plan that fits it, and decide which bill-handling steps are worth automating first.

Book a 1:1 call with me