Estimate vs actual in QuickBooks Desktop, and your quote win rate
Premier and Enterprise have a Job Estimates vs. Actuals report. It compares what you quoted on a job with what you invoiced and what it cost. It does not know which quotes you lost, or why, or how long the open ones have been sitting. Win rate is not in the software.
What we do about it
We take your data out of QuickBooks as reports, put it in a database, and connect it to your Claude or ChatGPT. QuickBooks stays as it is.
The first step is small on purpose. We model one year of your sales data and get on a live call where you ask and your own numbers answer. You give us the three questions you most want answered, and we get you those answers or figure out how we can deliver them. You keep the database, connected to your Claude or ChatGPT.
The first step is $950, credited in full toward your setup if you go ahead. If you don’t, we delete the project and your data doesn’t stay with us. If it earns its place, we keep it current every week and send the reports you pick.
Nothing we build can write to your books.
What the built-in report does
It lists each job with estimated and actual cost and revenue, and the differences. For a contractor tracking a job against its budget it is the right report.
It only sees estimates that turned into invoices on the same job. Quotes that went nowhere are invisible, and there is no field for why a quote was lost.
Where win rate lives
QuickBooks holds every estimate you wrote. Won, lost or still open, and the reason, is in your head or in a sheet. Put the estimate report and that sheet in the same database and both questions answer themselves. Most owners do not keep the sheet yet. It gets built at the start, from memory and the invoice numbers, and kept from then on.
Three questions in a row from a fictional company’s estimates.
What’s our quote win rate, by rep, last year against this year?
| Year | Rep | Won | Lost | Win rate |
|---|---|---|---|---|
| 2024 | Sam Lindqvist | 155 | 89 | 64% |
| 2024 | Marcus Jarvi | 197 | 117 | 63% |
| 2024 | Teresa Ruiz | 253 | 153 | 62% |
| 2024 | Dana Kowalski | 188 | 113 | 62% |
| 2025 | Marcus Jarvi | 162 | 158 | 51% |
| 2025 | Sam Lindqvist | 125 | 125 | 50% |
| 2025 | Teresa Ruiz | 209 | 218 | 49% |
| 2025 | Dana Kowalski | 38 | 43 | 47% |
| 2026 (through July 24) | Teresa Ruiz | 147 | 66 | 69% |
| 2026 (through July 24) | Sam Lindqvist | 101 | 47 | 68% |
| 2026 (through July 24) | Marcus Jarvi | 97 | 48 | 67% |
Everyone dropped to about half in 2025 and everyone is back near two-thirds this year. It was the market, not a rep.
How that was computed
select year, rep_name,
sum(case when status = 'Won' then 1 else 0 end) as won,
sum(case when status = 'Lost' then 1 else 0 end) as lost,
round(100.0 * sum(case when status = 'Won' then 1 else 0 end)
/ sum(case when status in ('Won', 'Lost') then 1 else 0 end)) as win_pct
from v_estimates
where rep in ('MJ', 'DK', 'TR', 'SL') and year in ('2024', '2025', '2026')
group by year, rep_name
order by year, win_pct descWhen we lose a quote, is it price or lead time?
| Year | Reason | Quotes lost | Value lost |
|---|---|---|---|
| 2024 | price | 185 | $1,008,371 |
| 2024 | went with another supplier | 109 | $644,334 |
| 2024 | project cancelled | 100 | $480,481 |
| 2024 | no response | 57 | $304,853 |
| 2024 | lead time | 40 | $219,600 |
| 2025 | price | 260 | $1,456,666 |
| 2025 | lead time | 159 | $858,603 |
| 2025 | project cancelled | 57 | $356,437 |
| 2025 | went with another supplier | 71 | $341,855 |
| 2025 | no response | 33 | $194,761 |
| 2026 | price | 62 | $298,854 |
| 2026 | went with another supplier | 41 | $240,381 |
| 2026 | project cancelled | 26 | $119,851 |
| 2026 | no response | 21 | $117,925 |
| 2026 | lead time | 18 | $101,244 |
Price is always first. But “lead time” went from $219,600 in 2024 to $858,603 in 2025, and the purchase-order side of the database shows why: the window supplier went from late on one order in five to one in two that year.
How that was computed
select year, lost_reason,
count(*) as quotes_lost,
round(sum(total)) as value_lost
from v_estimates
where status = 'Lost' and year in ('2024', '2025', '2026')
group by year, lost_reason
order by year, value_lost descWhich quotes have been sitting open for more than ninety days?
| Estimate | Date | Customer | Rep | Quoted |
|---|---|---|---|---|
| 10516 | 2026-02-26 | Zahn Contracting | Sam Lindqvist | $2,563 |
| 10555 | 2026-03-16 | Severson Home Improvement | House | $14,781 |
| 10559 | 2026-03-19 | Ostrom Carpentry | Sam Lindqvist | $11,375 |
| 10568 | 2026-03-23 | Quade Remodeling | House | $7,901 |
| 10576 | 2026-03-27 | Ruud Carpentry | Sam Lindqvist | $456 |
| 10597 | 2026-04-02 | Zahn Carpentry | Sam Lindqvist | $2,992 |
| 10621 | 2026-04-13 | Ecklund Custom Decks | Marcus Jarvi | $11,931 |
7 quotes worth $51,999, the oldest from February, that nobody has closed out.
How that was computed
select num, date, customer, rep_name, round(total) as quoted
from v_estimates
where status = 'Open' and date < '2026-04-28'
order by dateNorthgale Building Products is a fictional company. Every name, figure and supplier on this page is made up, built to behave like a real three-and-a-half-year QuickBooks Desktop file so we can show real screens without showing anyone’s real numbers. Data as of the 2026-07-27 refresh; the last invoice in the file is dated 2026-07-24.
Short answers
- Does QuickBooks Desktop track quote win rate?No. It stores estimates but never asks whether one was won or lost.
- Which QuickBooks Desktop versions have Estimates vs Actuals?Premier and Enterprise. Pro has estimates but not the job-costing reports.
- What if we do not track lost quotes today?Nobody does at first. Won ones are found from the invoices. Open and lost ones are tracked from the week the sheet exists.