Home  /  Blog  /  Solar & Roofing Accounting
Solar · Roofing · Financing · Back Office

How Should Solar Dealer Fees Post to a Roofing or Solar Shop's QuickBooks?

Top Builder AI Published September 3, 2026 ~10 min read Roofing · Solar Updated September 3, 2026
A roofing and solar contractor reviewing a QuickBooks entry and a financed job invoice at a desk

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.

The nationwide range, from the regulator itself
10-30% of cash price
The CFPB's own reported range for solar dealer fees, with some lenders' fees exceeding 50% of the project's cash price. This is the markup baked into the loan principal, not a rate or a disclosed line item on the customer's paperwork.
Source: Consumer Financial Protection Bureau, "Issue Spotlight: Solar Financing" (consumerfinance.gov, August 7, 2024).

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.

The CFPB's own illustrative example
The job
Cash price of the system$30,000
Dealer fee (illustrative, 30%)$9,000
What the homeowner's loan actually finances
Loan principal$39,000
Source: Consumer Financial Protection Bureau, "Issue Spotlight: Solar Financing" (consumerfinance.gov, August 7, 2024). The lender retains the $9,000 fee; the cash price is what's remitted to the installer. The dollar figure that belongs in your books as job revenue is the cash price, not the financed total on the loan paperwork.

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.

SourceWhat 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.

1
Create a Service Item mapped to an expense account. In Products and Services, add a new Service item and point it at an expense account — not an income account. This is the step that keeps the fee out of revenue from the start.
2
Apply a Credit Memo on the job's invoice. Using that same service item, issue a Credit Memo for the dealer-fee dollar amount against the customer's invoice. It nets the fee off the visible sale without adding a confusing line item the customer has to interpret.
3
Confirm it on a Profit and Loss report. Run a P&L and check that the fee shows up as an expense, not as a silent reduction buried inside revenue. If it's not visible as its own line, the setup in step 1 needs a second look.

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 →

Frequently asked questions

How should a roofing or solar shop record a dealer fee in QuickBooks?
Create a Service Item mapped to an EXPENSE account, not an income account, then apply a Credit Memo using that item on the customer's invoice for the dealer-fee amount. That nets the fee off the top line instead of letting it sit inside revenue, and a Profit and Loss report confirms it landed as an expense, not income. This is the exact workaround documented in QuickBooks' own community support for contractors who take financed jobs.
What exactly is a solar dealer fee, and why does a lender charge it?
A dealer fee is what a solar or home-improvement lender charges the installer for originating a 0%-or-low-rate loan, and per the CFPB it typically runs 10 to 30 percent of the project's cash price, sometimes exceeding 50 percent. The fee gets folded into the loan principal the homeowner repays rather than disclosed as a separate line, and per the CFPB, lenders typically do not include it in the total cost of credit shown to the borrower, so the advertised low APR hides the real markup.
How much does a dealer fee actually add to the loan?
The CFPB's own illustrative example: a $30,000 cash-price system with a 30% dealer fee becomes a $39,000 loan principal, a $9,000 markup the borrower repays with interest over the loan term, commonly 20 to 25 years. The lender keeps the fee and remits the underlying cash price to the installer, so the dollar figure that should hit your books as the job's revenue is the cash price, not the inflated loan amount your customer sees on their paperwork.
Why did Minnesota just sue four solar lenders over this exact fee?
Minnesota Attorney General Keith Ellison sued GoodLeap, Sunlight Financial, Solar Mosaic, and Dividend Solar Finance in March 2024, alleging the four lenders hid dealer fees inside more than 5,000 Minnesota solar loans, inflating costs by 15 to 30 percent for a total of roughly $35 million. The fees were baked into the loan principal without clear disclosure, and the AG's office says they frequently canceled out the value of incentives meant to make solar more affordable for homeowners.
If I book the fee against income, what does it do to my margin?
It overstates your job margin, because the fee never touched your bank account as revenue in the first place. If a $30,000 cash-price job gets recorded at the $36,000 or $39,000 financed total instead of the actual cash price you were paid, your reported revenue, and your reported margin on that job, are both wrong by the exact size of the fee, and every rollup report built on top of that job inherits the error.
Does ServiceTitan handle this automatically?
Partially, and only at setup. ServiceTitan's own GreenSky financing documentation shows an "Average Dealer Fee" percentage per plan tier when you configure financing rules, but the published documentation does not spell out how that fee flows through to the customer invoice, the payout you actually receive, or job-costing and margin reporting after the job closes. The percentage is visible up front; keeping the books honest after the job is still the shop's own accounting workflow to build.
So what's the actual bookkeeping walkthrough, step by step?
Three steps, per QuickBooks' own community guidance for contractors: first, add a Service Item and map it to an expense account rather than an income account. Second, on the job's invoice, apply a Credit Memo using that service item for the dealer-fee dollar amount, which nets the fee out of the visible sale without adding a confusing line item for the customer. Third, run a Profit and Loss report and confirm the fee shows up as an expense, not as a reduction hidden inside revenue you can't trace later.
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. What it does is keep the job-margin number downstream of that entry honest and current: earned revenue, cost to date, and margin computed straight from your actual ServiceTitan job data, so a financed job's true margin is visible the day it closes instead of getting buried inside an inflated invoice total until someone reconciles it months later.