Pricing and billing

Quote / proforma builder

Build a real quote PDF with a validity date, right in your browser, then convert it to an invoice in one click.

Free, no accountIn your browser

Whatever you number your own quotes.

Printed on the quote exactly as typed.

Printed as a validity line on the quote. Leave blank to print none.

Shown next to your business name on the document. PNG or JPG, up to 2 MB.

One line per address line.

Your VAT or tax number, if you have one. Left off the document when blank.

One line per address line.

The customer's VAT or tax number, if they gave you one.

A three-letter code: USD, EUR, GBP.

One per line: description, quantity, unit price - the same first-column reading a pasted CSV already gets elsewhere on this site.

Leave at 0 if this document carries no tax.

Payment terms, bank details, or anything else to print at the foot of the document.

Try

Result

USD 409.00 across 2 line items

The PDF below is built entirely in your browser: nothing is uploaded, stored or sent.

  • Passed

    2 line items, USD 409.00 before tax

    Every line parsed into a description, a quantity and a unit price, and the subtotal is the sum of each line's own total.

Convert to invoice

Line items

DescriptionQtyUnit priceTotal
Website hosting1USD 49.00USD 49.00
Support retainer3USD 120.00USD 360.00

Totals

Subtotal
USD 409.00
Total
USD 409.00
Valid until
2026-02-15
  • This is a document generator, not a sales tool: it does not know whether this quote was sent, seen or accepted by anyone.
  • Tax is a flat percentage of the subtotal that you type in, never looked up from a rate table or a tax authority.

What this is

This quote builder shares its engine with the invoice maker, with one difference printed on the document: a validity date, so whoever reads it knows how long the price in it is good for.

A quote, or proforma invoice, states a price before the sale is final - the same line items, subtotal and total an invoice has, plus a date past which the numbers are no longer promised.

Line items are typed one per line as "description, quantity, unit price", the same shape the invoice maker reads, so moving from a quote to an invoice never means re-entering them by hand.

How to read the result

The table and totals on screen match the PDF exactly, with the validity date printed as its own line above the table.

Once a customer accepts the quote, press "Convert to invoice" to open the invoice maker with the same parties, line items, currency and tax already filled in - the invoice still needs its own number and issued date, since those belong to the invoice, not the quote.

Common mistakes

What goes wrong most often, and how to tell.

  • Leaving the validity date blank on a quote whose prices can changeA blank validity date prints no deadline at all, which reads as a price good indefinitely. If the cost behind any line item can move, the validity date is what protects against being held to an old number.
  • Assuming this tracks whether the quote was acceptedThis page only builds the PDF and, on request, prefills the invoice maker. Whether a customer actually agreed to the quote is not recorded here - that has to be tracked wherever the sale itself is managed.

Questions

What people ask about this tool.

  • The same engine, the same line items and totals, plus a validity date printed on the document. A quote is what is offered before the sale; an invoice is what is billed once it is agreed.
  • No. "Convert to invoice" is an ordinary link to the invoice maker with the quote's own details already filled into the form through the page address - nothing is submitted or stored in the process.
  • No. Nothing here tracks whether a quote was sent, opened or accepted - it only builds the PDF and, once you decide it was accepted, hands its details to the invoice maker.

Use it from the API

The same check, as one request.

Request
curl -X POST https://resellerhq.com/api/tools/quote-proforma-builder \
  -H "Content-Type: application/json" \
  -d '{"number":"QUO-3001","validityDate":"2026-02-28","fromName":"Acme Resales LLC","billToName":"Example Customer Ltd","lines":"Website hosting, 1, 49.00\nSupport retainer, 3, 120.00","currency":"USD"}'
Response
{
  "tool": "quote-proforma-builder",
  "input": {
    "number": "QUO-3001",
    "issuedDate": "2026-01-15",
    "validityDate": "2026-02-28",
    "fromName": "Acme Resales LLC",
    "logo": "",
    "fromAddress": "123 Market Street\nAustin, TX 73301\nUnited States",
    "fromTaxId": "",
    "billToName": "Example Customer Ltd",
    "billToAddress": "45 Harbour Road\nLondon E1 6AN\nUnited Kingdom",
    "billToTaxId": "",
    "currency": "USD",
    "lines": "Website hosting, 1, 49.00\nSupport retainer, 3, 120.00",
    "taxPercent": 0,
    "note": ""
  },
  "result": {
    "verdict": {
      "tone": "success",
      "headline": "USD 409.00 across 2 line items",
      "summary": "The PDF below is built entirely in your browser: nothing is uploaded, stored or sent."
    },
    "findings": [
      {
        "id": "lines-total",
        "severity": "pass",
        "title": "2 line items, USD 409.00 before tax",
        "detail": "Every line parsed into a description, a quantity and a unit price, and the subtotal is the sum of each line's own total."
      }
    ],
    "parts": [
      {
        "kind": "document",
        "filename": "QUO-3001.pdf",
        "spec": {
          "kind": "quote",
          "title": "Quote",
          "number": "QUO-3001",
          "issuedDate": "2026-01-15",
          "from": {
            "name": "Acme Resales LLC",
            "addressLines": [
              "123 Market Street",
              "Austin, TX 73301",
              "United States"
            ]
          },
          "billTo": {
            "name": "Example Customer Ltd",
            "addressLines": [
              "45 Harbour Road",
              "London E1 6AN",
              "United Kingdom"
            ]
          },
          "currency": "USD",
          "lines": [
            {
              "description": "Website hosting",
              "quantity": 1,
              "unitPrice": 49,
              "total": 49
            },
            {
              "description": "Support retainer",
              "quantity": 3,
              "unitPrice": 120,
              "total": 360
            }
          ],
          "subtotal": 409,
          "total": 409,
          "extraLines": [
            {
              "label": "Valid until",
              "value": "2026-02-28"
            }
          ],
          "footer": "Made with ResellerHQ - resellerhq.com"
        },
        "convert": {
          "label": "Convert to invoice",
          "href": "/tools/invoice-maker?fromName=Acme+Resales+LLC&fromAddress=123+Market+Street%0AAustin%2C+TX+73301%0AUnited+States&billToName=Example+Customer+Ltd&billToAddress=45+Harbour+Road%0ALondon+E1+6AN%0AUnited+Kingdom&currency=USD&lines=Website+hosting%2C+1%2C+49.00%0ASupport+retainer%2C+3%2C+120.00&taxPercent=0"
        }
      },
      {
        "kind": "table",
        "title": "Line items",
        "columns": [
          "Description",
          "Qty",
          "Unit price",
          "Total"
        ],
        "rows": [
          [
            "Website hosting",
            "1",
            "USD 49.00",
            "USD 49.00"
          ],
          [
            "Support retainer",
            "3",
            "USD 120.00",
            "USD 360.00"
          ]
        ]
      },
      {
        "kind": "facts",
        "title": "Totals",
        "rows": [
          [
            "Subtotal",
            "USD 409.00"
          ],
          [
            "Total",
            "USD 409.00"
          ],
          [
            "Valid until",
            "2026-02-28"
          ]
        ]
      }
    ],
    "limits": [
      "This is a document generator, not a sales tool: it does not know whether this quote was sent, seen or accepted by anyone.",
      "Tax is a flat percentage of the subtotal that you type in, never looked up from a rate table or a tax authority."
    ]
  }
}

See the same wholesale prices this calculator works from, in your own dashboard.

Get started

Company names and logos are trademarks of their owners, shown only to identify each service.