Free Quotation Maker

Create professional quotes in minutes – free, fast, and easy.

Company Information

Client Information

Quotation Details

Branding Options

Items & Services

S.No. Item Description Qty Unit Price Total
Subtotal: ₹0.00
%
-₹0.00
Tax:
%
Tax Amount: ₹0.00
Grand Total: ₹0.00

Terms & Notes

' + printContent + ''); doc.close(); setTimeout(() => { iframe.contentWindow.focus(); iframe.contentWindow.print(); document.body.removeChild(iframe); }, 250); } async function generatePDF() { const pdfButton = app.querySelector('#pdf-btn'); const pdfBtnText = app.querySelector('#pdf-btn-text'); const spinner = app.querySelector('#pdf-spinner'); pdfBtnText.style.display = 'none'; spinner.style.display = 'inline-block'; pdfButton.disabled = true; try { const data = getQuotationData(); const { jsPDF } = window.jspdf; const doc = new jsPDF(); const pageW = doc.internal.pageSize.getWidth(); const margin = 15; let y = 20; if (data.companyName.trim() === '') { alert('Please enter a company name before generating the PDF.'); throw new Error("Company name is required."); } // --- HEADER --- const logoSrc = app.querySelector('#logoPreview').src; if (logoSrc.startsWith('data:image')) { const img = new Image(); img.src = logoSrc; await new Promise(resolve => { img.onload = resolve; }); const aspectRatio = img.width / img.height; const logoHeight = 20; const logoWidth = logoHeight * aspectRatio; doc.addImage(img, 'PNG', margin, 15, logoWidth, logoHeight); } doc.setFont('helvetica', 'bold'); doc.setFontSize(22); doc.setTextColor(data.themeColor); doc.text('QUOTATION', pageW - margin, 25, { align: 'right' }); doc.setFont('helvetica', 'normal'); doc.setFontSize(10); doc.setTextColor(50,50,50); doc.text(`Quote #: ${data.quoteNumber}`, pageW - margin, 35, { align: 'right' }); doc.text(`Date: ${data.quoteDate}`, pageW - margin, 40, { align: 'right' }); doc.text(`Valid Until: ${data.quoteValidUntil}`, pageW - margin, 45, { align: 'right' }); y = 55; // --- COMPANY DETAILS --- doc.setFont('helvetica', 'bold'); doc.setFontSize(11); doc.setTextColor(data.themeColor); doc.text(data.companyName, margin, y); y += 5; doc.setFont('helvetica', 'normal'); doc.setFontSize(10); doc.setTextColor(80,80,80); const addressLines = doc.splitTextToSize(data.companyAddress, 80); doc.text(addressLines, margin, y); y += addressLines.length * 4 + 2; doc.text(`Email: ${data.companyEmail}`, margin, y); y += 5; doc.text(`Phone: ${data.companyPhone}`, margin, y); y += 5; if (data.version === 'advanced') { if (data.companyWhatsapp) { const cleanNum = data.companyWhatsapp.replace(/[^0-9]/g, ''); doc.setTextColor(43, 137, 216); doc.textWithLink(`WhatsApp: ${data.companyWhatsapp}`, margin, y, { url: `https://wa.me/${cleanNum}` }); y += 5; } if (data.companyFacebook) { doc.setTextColor(43, 137, 216); doc.textWithLink(`Facebook: ${data.companyFacebook}`, margin, y, { url: data.companyFacebook }); y += 5; } } // --- CLIENT DETAILS --- y = Math.max(y, 60) + 5; doc.setDrawColor(222, 226, 230); doc.line(margin, y, pageW - margin, y); y += 10; doc.setFontSize(10); doc.setTextColor(data.themeColor); doc.setFont('helvetica', 'bold'); doc.text('BILLED TO:', margin, y); y += 5; doc.setFontSize(10); doc.setTextColor(50,50,50); doc.text(data.clientName, margin, y); y += 5; doc.setFont('helvetica', 'normal'); doc.setTextColor(80,80,80); const clientAddress = doc.splitTextToSize(data.clientAddress, 80); doc.text(clientAddress, margin, y); y += clientAddress.length * 4 + 2; doc.text(data.clientEmail, margin, y); y += 5; doc.text(data.clientPhone, margin, y); // --- ITEMS TABLE --- const allDescriptionsEmpty = data.items.every(item => item.description.trim() === ''); const tableHead = [['#', 'Item']]; if (!allDescriptionsEmpty) tableHead[0].push('Description'); tableHead[0].push('Qty', 'Unit Price', 'Total'); const finalTableBody = data.items.map((item, index) => { const row = [index + 1, item.name]; if (!allDescriptionsEmpty) row.push(item.description); row.push(item.qty, Number(item.price).toFixed(2), Number((item.qty || 0) * (item.price || 0)).toFixed(2)); return row; }); let columnStyles = { 0: { halign: 'center', cellWidth: 10 } }; if (allDescriptionsEmpty) { columnStyles[2] = { halign: 'right' }; // Qty columnStyles[3] = { halign: 'right' }; // Unit Price columnStyles[4] = { halign: 'right' }; // Total } else { columnStyles[3] = { halign: 'right' }; // Qty columnStyles[4] = { halign: 'right' }; // Unit Price columnStyles[5] = { halign: 'right' }; // Total } doc.autoTable({ head: tableHead, body: finalTableBody, startY: y + 10, theme: 'grid', headStyles: { fillColor: data.themeColor }, styles: { fontSize: 9, cellPadding: 2.5 }, columnStyles: columnStyles }); y = doc.autoTable.previous.finalY; // --- TOTALS --- const totals = data.totals; const totalsX = pageW - margin - 60; y += 10; doc.setFontSize(10); doc.setFont('helvetica', 'normal'); doc.setTextColor(80,80,80); doc.text('Subtotal:', totalsX, y); doc.text(formatCurrency(totals.subtotal, data.currency), pageW-margin, y, { align: 'right' }); y += 6; if (data.version === 'advanced') { doc.text(`Discount (${data.discount}%):`, totalsX, y); doc.text(`-${formatCurrency(totals.discountAmount, data.currency)}`, pageW-margin, y, { align: 'right' }); y += 6; } doc.text(`Tax Amount (${data.tax}%):`, totalsX, y); doc.text(formatCurrency(totals.taxAmount, data.currency), pageW-margin, y, { align: 'right' }); y += 6; doc.setLineWidth(0.5); doc.line(totalsX - 2, y, pageW - margin, y); y += 6; doc.setFont('helvetica', 'bold'); doc.setFontSize(12); doc.setTextColor(data.themeColor); doc.text('Grand Total:', totalsX, y); doc.text(formatCurrency(totals.grandTotal, data.currency), pageW-margin, y, { align: 'right' }); y += 15; // --- NOTES & TERMS --- if (data.terms) { doc.setTextColor(data.themeColor); doc.setFontSize(11); doc.setFont('helvetica', 'bold'); doc.text('Terms & Conditions', margin, y); y += 5; doc.setTextColor(100,100,100); doc.setFontSize(8); doc.setFont('helvetica', 'normal'); const termsLines = doc.splitTextToSize(data.terms, pageW - (margin * 2)); doc.text(termsLines, margin, y); y += termsLines.length * 3 + 5; } if (data.notes) { doc.setTextColor(data.themeColor); doc.setFontSize(11); doc.setFont('helvetica', 'bold'); doc.text('Notes', margin, y); y += 5; doc.setTextColor(100,100,100); doc.setFontSize(8); doc.setFont('helvetica', 'normal'); const notesLines = doc.splitTextToSize(data.notes, pageW - (margin * 2)); doc.text(notesLines, margin, y); y += notesLines.length * 3 + 5; } // --- SIGNATURE --- const signatureSrc = app.querySelector('#signaturePreview').src; if (data.includeSignature && signatureSrc.startsWith('data:image')) { const spaceNeeded = 45; if (y > doc.internal.pageSize.getHeight() - spaceNeeded) { doc.addPage(); y = margin; } doc.setTextColor(data.themeColor); doc.setFontSize(11); doc.setFont('helvetica', 'bold'); doc.text('Authorized Signature', margin, y); y+=2; const sigImg = new Image(); sigImg.src = signatureSrc; await new Promise(resolve => { sigImg.onload = resolve; }); const sigAspectRatio = sigImg.width / sigImg.height; const sigHeight = 20; const sigWidth = sigHeight * sigAspectRatio; doc.addImage(sigImg, 'PNG', margin, y, sigWidth, sigHeight); doc.setTextColor(80,80,80); doc.setFont('helvetica', 'normal'); doc.setFontSize(10); doc.text(data.signatureName, margin, y + sigHeight + 5); doc.text(data.signatureTitle, margin, y + sigHeight + 10); } doc.save(`Quotation-${data.quoteNumber || 'details'}.pdf`); } catch (error) { console.error("Failed to generate PDF:", error); alert("Sorry, there was an error generating the PDF."); } finally { pdfBtnText.style.display = 'inline-block'; spinner.style.display = 'none'; pdfButton.disabled = false; } } // Initialize the app initialize(); setupEventListeners(); });

How to Create a Quotation Online

Step1: Enter Business Information

Add your company name, contact details, and logo.

Step2: Fill in Client Details

Mention the customer’s name, company, and contact info.

Step3: Add Items & Services

Input item description, quantity, unit price, tax, and discounts.

Step4: Preview the Quotation

Check totals, currency format, and overall layout.

Step5: Download PDF

Save or share the quotation instantly.

Related Tools

Create Business Quotations Instantly

The Free Quotation Maker is designed for businesses, freelancers, and service providers who want to save time while maintaining professionalism. Instead of struggling with templates in Word or Excel, you can generate a structured quotation in minutes and download it directly as a PDF.

Why Choose Our Free Quotation Maker?

  • No Design Skills Needed – The tool handles formatting for you.
  • Quick Turnaround – Create and send quotations within minutes.
  • Brand Consistency – Add your business logo, address, and signature.
  • Error-Free Calculations – Built-in automatic tax and total calculation.
  • Completely Free – No sign-up, no subscriptions, no hidden costs.

Benefits of Using an Online Quotation Tool

  1. Professional Image – Clients are more likely to trust businesses that send clean and well-structured quotations.
  2. Time Efficiency – Save hours compared to manual document editing.
  3. Accuracy – Automatic totals and tax calculations reduce human errors.
  4. Easy Sharing – Export as PDF and send via email, WhatsApp, or print directly.
  5. Environment Friendly – Go paperless with digital quotations.

Common Use Cases for Free Quotation Maker

  • Freelancers – Web designers, content writers, photographers, etc.
  • Small Shops – Electronics, clothing, repair services, etc.
  • Agencies – Marketing, design, IT support, consulting firms.
  • Contractors – Construction, maintenance, and project-based work.
  • Startups – Quick, polished quotations for early clients.

Tips for Writing a Good Quotation

  1. Be Clear & Detailed – Mention all services or products included.
  2. Add Validity Period – Define how long the quotation is valid (e.g., 30 days).
  3. Include Payment Terms – State advance percentage, due dates, or conditions.
  4. Highlight Special Discounts – Make your offer more attractive.
  5. Keep Branding Consistent – Use your logo and official business details.

Difference Between Quotation, Invoice, and Estimate

  • Quotation – A formal document sent before a sale, showing price and terms.
  • Invoice – A payment request sent after work or delivery.
  • Estimate – A rough price approximation, not always final.

Having a proper Free Quotation Maker helps you create a formal, client-ready document rather than just an estimate.

Frequently Asked Questions (FAQ)

Yes, it is 100% free with no hidden charges or sign-up required.

Yes, the tool is fully responsive and works on smartphones, tablets, and PCs.

Yes, you can add or edit GST, VAT, or any other applicable tax.

You can download it as a PDF and share via email, WhatsApp, or print it.

Yes. All data stays on your device and is not stored on any server.

Freelancers, small businesses, agencies, and service providers who need quick and professional quotations.