Quote Generator
Universal quote / estimate generator with line items, discounts, tax, trade presets, and printable PDF. No signup.
How this is calculated
The engine sums each line as qty × unitPrice, then
applies a discount and tax based on the modes you pick. Modes are
independent — you can use per-line discount with aggregate tax, or
any other combination.
lineSubtotal = qty × unitPrice
lineNet = lineSubtotal − (linePct/100 × lineSubtotal)
quoteSubtotal = Σ lineSubtotal // always gross (before any discounts)
discount = aggregate: applyDiscount(subtotal, discountSpec)
= per-line: Σ (linePct/100 × lineSubtotal)
taxable = subtotal − discount // = Σ lineNet for per-line mode
tax = aggregate: taxable × rate
= per-line: Σ (lineTaxPct/100 × lineNet)
= inclusive: taxable − taxable / (1 + rate)
total = inclusive: taxable
= otherwise: taxable + tax
An amount discount is clamped to the subtotal so the total
never goes negative. inclusive tax mode treats line prices
as gross — the tax line is the extracted portion, and the headline
total equals the taxable base.
Trade preset values are metadata for the printable header only. They never branch the math, which keeps this generator usable for any trade.
Line items are worth building before they are typed. The job cost quote calculator derives a defensible total from labor, materials and overhead, and the notes field is where a written scope of work earns its keep by naming what the figure does not include. Where the work is open-ended enough that no fixed figure is honest, quote it as time and materials instead.
A quote is a stage, not a document type: the difference between the three words customers use interchangeably is set out in estimate vs quote vs bid. Once the job is accepted and done, the same lines become an invoice in the invoice generator. A janitorial bid carries more scope language than a line-item quote comfortably holds, so that one is better written as a purpose-built cleaning proposal, where the cleaning frequency and what is excluded sit beside the price.