Free quote generator

Fill in your prices and download a clean quote PDF to send to your customer. No sign-up, and no watermark.

  • No sign-up
  • No watermark
  • 10 free PDFs a day
pdfgen.com/tools/quote-generator

Add your logo

PNG, JPG or WebP

1Your business
2Customer
3Quote details
4Items

Estimated total $16,000.00

5Notes

Live preview

Estimated total $16,000.00

Free for up to 10 PDFs a day. Includes a small “Made with PDFgen” line at the foot of each page.

Your quote in three steps

  1. Q-3391

    Step 1

    Fill in your details

    Add your logo, the quote details and each item. The page updates as you type.

  2. $16,000.00

    Step 2

    Check the preview

    What you see is what you get, and totals are worked out for you.

  3. PDF

    quote.pdf

    Step 3

    Download the PDF

    Download your quote, ready to send or print.

Anatomy of a quote

Everything that belongs on the page, and where it goes.

What a good quote does

A quote tells a customer what a job will cost before they commit. Clear line items make it easy to compare with other offers, and show which part of the price pays for what, which saves a round of questions.

An expiry date matters as much as the price. Material costs and your availability change, so a "valid until" date stops an old number from coming back months later. Thirty days is common, and shorter works better when your costs move quickly.

Make every quote automatic

This request creates the document in the form above, and it updates as you type. Connect it to your app or order system and each quote makes itself.

  • The same template, filled from your own data
  • A PDF back from a single POST request
  • No browsers or servers to run yourself
curl -X POST https://pdfgen.com/api/v1/generate \
-H "Authorization: Bearer pdfg_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"data": {
"company": {
"name": "Beacon Consulting",
"address": "41 Harbor Lane\nBoston, MA 02110"
},
"client": {
"name": "Riverside Retail Group",
"address": "900 River Road\nHartford, CT 06103"
},
"quoteNumber": "Q-3391",
"currency": "USD",
"taxRate": 0,
"notes": "This estimate is non-binding and excludes applicable taxes.",
"issuedDate": "2026-11-03",
"validUntil": "2026-12-03",
"items": [
{
"description": "Discovery workshop",
"quantity": 1,
"unitPrice": 2500,
"lineTotal": 2500,
"amount": 2500
},
{
"description": "Implementation (per month)",
"quantity": 3,
"unitPrice": 4000,
"lineTotal": 12000,
"amount": 4000
},
{
"description": "Training and handover",
"quantity": 1,
"unitPrice": 1500,
"lineTotal": 1500,
"amount": 1500
}
],
"subtotal": 16000,
"tax": 0,
"shipping": 0,
"total": 16000
},
"format": "A4",
"engine": "handlebars",
"html": "<div style=\"max-width:760px;margin:0 auto;padding:48px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#111827;\">\n <div style=\"display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:36px;\">\n <div>\n {{#if logo}}<img src=\"{{logo}}\" alt=\"\" style=\"display:block;max-width:200px;max-height:56px;margin:0 0 10px;\">{{/if}}\n <h1 style=\"font-size:24px;font-weight:800;margin:0;\">{{company.name}}</h1>\n {{#if company.address}}<p style=\"color:#6b7280;margin:6px 0 0;font-size:13px;white-space:pre-line;\">{{company.address}}</p>{{/if}}\n </div>\n <div style=\"text-align:right;\">\n <h2 style=\"font-size:28px;letter-spacing:2px;color:#0f766e;margin:0;font-weight:800;\">QUOTE</h2>\n <p style=\"margin:6px 0 0;color:#6b7280;font-size:13px;\">#{{quoteNumber}}{{#if issuedDate}} &middot; {{formatDate issuedDate}}{{/if}}</p>\n <p style=\"margin:2px 0 0;color:#6b7280;font-size:13px;\">Valid until {{formatDate validUntil}}</p>\n </div>\n </div>\n <p style=\"font-size:11px;text-transform:uppercase;letter-spacing:1px;color:#9ca3af;margin:0 0 6px;\">Prepared for</p>\n <p style=\"margin:0;font-weight:600;\">{{client.name}}</p>\n {{#if client.address}}<p style=\"margin:2px 0 0;color:#6b7280;font-size:13px;white-space:pre-line;\">{{client.address}}</p>{{/if}}\n <div style=\"height:28px;\"></div>\n <table style=\"width:100%;border-collapse:collapse;font-size:14px;\">\n <thead>\n <tr style=\"background:#f0fdfa;text-align:left;\">\n <th style=\"padding:12px;border-bottom:1px solid #ccfbf1;\">Service</th>\n <th style=\"padding:12px;border-bottom:1px solid #ccfbf1;text-align:center;\">Qty</th>\n <th style=\"padding:12px;border-bottom:1px solid #ccfbf1;text-align:right;\">Price</th>\n </tr>\n </thead>\n <tbody>\n {{#each items}}\n <tr>\n <td style=\"padding:12px;border-bottom:1px solid #f3f4f6;\">{{description}}</td>\n <td style=\"padding:12px;border-bottom:1px solid #f3f4f6;text-align:center;\">{{quantity}}</td>\n <td style=\"padding:12px;border-bottom:1px solid #f3f4f6;text-align:right;\">{{formatCurrency amount ../currency}}</td>\n </tr>\n {{/each}}\n </tbody>\n </table>\n {{#if taxRate}}\n <table style=\"font-size:14px;line-height:inherit;min-width:240px;margin:20px 0 0 auto;\">\n <tr><td style=\"padding:4px 0;color:#6b7280;\">Subtotal</td><td style=\"padding:4px 0;text-align:right;\">{{formatCurrency subtotal currency}}</td></tr>\n <tr><td style=\"padding:4px 0;color:#6b7280;\">Tax ({{taxRate}}%)</td><td style=\"padding:4px 0;text-align:right;\">{{formatCurrency tax currency}}</td></tr>\n </table>\n {{/if}}\n <div style=\"display:flex;justify-content:flex-end;margin-top:20px;\">\n <div style=\"background:#0f766e;color:#fff;padding:14px 24px;border-radius:8px;font-size:16px;font-weight:800;\">\n Estimated total: {{formatCurrency total currency}}\n </div>\n </div>\n <p style=\"margin-top:40px;font-size:12px;color:#9ca3af;\">{{notes}}</p>\n</div>"
}' --output quote.pdf
200 OKapplication/pdf · quote.pdf

Questions, answered

The things people usually ask before they download.

What is the difference between a quote and an estimate?

An estimate is an informed guess that can change as the work goes on. A quote is usually a firmer price for a defined job. If yours can change, say so in the notes: this generator lets you word that however you need.

Is a quote legally binding?

It can be, depending on where you are and how it is worded, particularly once a customer accepts it. If you do not want to be held to a figure, label it as an estimate and state that it is non-binding. For anything high value, check with a legal adviser.

How long should a quote be valid?

Thirty days is a common default. Choose less if your supplier prices change often, and more for projects with long approval cycles.

Is this quote generator really free?

Yes. You can create up to 10 PDFs a day without an account or a credit card.

Will there be a watermark on my PDF?

No. Your document stays clean, with one small “Made with PDFgen” line at the foot of each page.

Do you store what I enter?

No. Your details are sent to our server to create the PDF and are not saved. The form lives in your browser, so copy anything you want to keep before leaving the page.

Can I create quotes automatically?

Yes. The API call further up this page produces the same quote from your own data, so your app or order system can create them without anyone filling in a form.

Make this quote your own

Match the template to your brand, then create one for every order or customer with a single API call.