Create a Service Item mapped to an expense account, not an income account, and apply a Credit Memo using that item on the job's invoice for the dealer-fee amount. That nets the fee off the top line instead of letting it inflate your revenue, and a Profit and Loss report confirms it landed as an expense. It matters because per the CFPB, dealer fees typically run 10-30% of the cash price of the job — book a financed roofing or solar job at the loan total instead of the cash price, and your reported job margin is wrong by the exact size of that fee, every time.
Every roofing and solar shop that offers 0%-or-low-rate financing runs into the same quiet bookkeeping problem: the number the customer signs for on the loan paperwork is not the number that should hit your books as revenue. Somewhere between the loan documents and the QuickBooks entry, a fee the lender charges you — the "dealer fee" — has to get pulled back out, or every margin report downstream of that job is wrong. This isn't tax advice or a substitute for your CPA. It's the actual mechanics: what the fee is, how big it really runs, why regulators are suing over it right now, and the specific QuickBooks setup that keeps it from quietly inflating your numbers.
What exactly is a solar dealer fee, and why does a lender charge it?
A dealer fee is what a financing company charges the installer — the "dealer" — for originating a loan that advertises a low or 0% rate to the homeowner. Per the CFPB's Issue Spotlight on solar financing (August 7, 2024): "Hidden fees typically range from between 10 to 30 percent of the cash price but can exceed 50 percent." The report notes lenders use several names for the same markup — "program fees," "lending fees," "finance fees," "platform fees," "original issue discounts," and "dealer fees" all describe the same mechanism.
The fee doesn't show up as a disclosed line item the way a normal financing charge would. Per the CFPB: "Typically, lenders do not include the hidden fees in the total costs of credit that they present to consumers." It gets folded directly into the loan principal instead, which is why a homeowner can be quoted a 1-7% APR and still be repaying a system that cost far more than its actual cash price — the fee never enters the interest-rate math at all, it just inflates the number the rate is applied to.
How much does a dealer fee actually add to the loan?
The CFPB illustrates the mechanism with its own round-number example, and it's worth walking through exactly as the regulator laid it out. A system with a $30,000 cash price, financed with a 30% dealer fee, becomes a $39,000 loan principal — a $9,000 markup the homeowner repays, with interest, typically over 20 to 25 years. The lender keeps the fee and remits the underlying cash price to the installer.
| Cash price of the system | $30,000 |
| Dealer fee (illustrative, 30%) | $9,000 |
| Loan principal | $39,000 |
Why did Minnesota just sue four solar lenders over this exact fee?
Because the same mechanism, at scale, is now the subject of active state enforcement. Per the Minnesota Attorney General's own press release (March 8, 2024), AG Keith Ellison filed suit against GoodLeap, Sunlight Financial, Solar Mosaic, and Dividend Solar Finance, alleging the four lenders hid dealer fees inside more than 5,000 Minnesota solar loans, inflating costs to homeowners by 15% to 30%, for a total of roughly $35 million.
| Source | What it found |
|---|---|
| CFPB Issue Spotlight (Aug. 2024) | Dealer fees run 10-30% of cash price nationwide, some exceeding 50%; excluded from the advertised cost of credit. |
| Minnesota AG lawsuit (Mar. 2024) | 5,000+ Minnesota loans inflated 15-30% by four named lenders, totaling ~$35 million in hidden fees. |
Sources: CFPB, "Issue Spotlight: Solar Financing" (Aug. 7, 2024); Minnesota Attorney General press release (Mar. 8, 2024). One-line takeaway: a federal report and a state lawsuit independently landed on the same 15-30% range, which is exactly the gap a shop's own books can hide or expose.
Per the AG's office, the fees were "often canceling out the benefit of credits designed to reduce the cost of and incentivize solar-panel purchases." None of the four defendants are accused of wrongdoing by Top Builder AI here — this is a live, contested lawsuit — but the underlying fee mechanism it describes is the same one the CFPB documented nationally, and it's the same one sitting in most shops' financing paperwork today regardless of which lender is on the loan.
If I book the fee against income, what does it do to my margin?
It overstates it, by the exact dollar size of the fee. If a $30,000 cash-price roofing-and-solar job gets entered into QuickBooks at the $39,000 financed total instead of the $30,000 you were actually paid, your reported revenue on that job is $9,000 too high — and so is every margin, cost-per-job, and profitability rollup built on top of it. The math scales down the same way: even at the low end of the CFPB's 10-30% range, a $15,000 roofing job with a 10% dealer fee still carries $1,500 of misclassified revenue if the financed total gets entered instead of the cash price. Multiply either scenario across a season of financed jobs and a shop can be running a materially different real margin than its own reports show, without a single number being "wrong" in the sense of a data-entry mistake. The entry was just made against the wrong price.
This is also why the fee has to be pulled out at the invoice level, not patched later with a spreadsheet adjustment at year-end. A shop that runs even a modest volume of financed jobs and only catches the overstatement during tax prep has already made every mid-season decision — what crew to add, what to bid on the next job, whether the quarter can absorb a slow stretch — off of a margin number that was never real.
Does ServiceTitan handle this automatically?
Partially, and only at the setup stage. ServiceTitan's own GreenSky Custom Financing documentation shows an "Average Dealer Fee" percentage displayed on each financing tier when a shop configures its plans. That's genuinely useful — you can see the fee rate before you offer a plan to a customer. What the published documentation does not spell out is how that fee flows through afterward: whether it's reflected on the customer-facing invoice, how it affects the payout your shop actually receives, or how it's supposed to land in job-costing and margin reports once the job closes. The rate is visible going in; keeping the books honest coming out is still the shop's own workflow to build, in QuickBooks or wherever job costing actually happens.
So what's the actual bookkeeping walkthrough, step by step?
This is the exact fix documented in QuickBooks' own community support (quickbooks.intuit.com, contractor accounting board), in response to a contractor asking almost this exact question: how to record a bank's dealer fee without it distorting the customer-facing invoice.
The result: your invoice and your books both reflect the cash price the job was actually worth, the dealer fee sits in its own expense account where it's traceable, and nothing about the customer's experience or paperwork has to change.
How does Top Builder AI help without me changing accountants or software?
It doesn't replace your QuickBooks setup or your CPA's judgment on how to book the fee — the three-step method above is the actual mechanism, and it's yours (or your bookkeeper's) to run. What it does is keep the number downstream of that entry honest and current: the Financial agent computes earned revenue, cost to date, and margin straight from your real ServiceTitan job data, so a financed job's true margin is visible the day it closes instead of getting discovered months later during a bookkeeping cleanup.
- No filed returns, no accounting advice. The dealer-fee entry above is your bookkeeper's call; the agent's job is an accurate margin number once it's entered.
- No invented figures. Every margin and revenue number comes from your real ServiceTitan job data, computed deterministically.
- Nothing posts itself. The numbers are decision-support; the operator approves every action.
- Delivered as a configured install, set up against your real ServiceTitan job data from day one.
See your real margin on financed jobs, not the loan total
Run your next financed roofing or solar job through the cash price, not the inflated loan total, and see what your true margin actually looks like.
Book a fit call →