Free Invoice Generator

Create professional invoices with dynamic line items, automatic tax calculation, and one-click print. No signup required.

What Is an Invoice?

An invoice is a commercial document issued by a seller to a buyer that lists the products or services provided, their quantities and prices, and the total amount due. Invoices serve as a formal request for payment and are essential for maintaining accurate financial records, tracking revenue, and managing accounts receivable.

How to Use the Invoice Generator

Enter your business details and your client's information, set the invoice number and dates, add line items with descriptions, quantities, and rates, then optionally add tax and notes. Click Generate to create a formatted invoice that you can copy, download, or print directly from your browser.

Best Practices for Invoicing

Always use a unique invoice number for each invoice to make tracking easier. Include clear payment terms and due dates. Itemize all products or services with descriptions and rates. Add your payment instructions and preferred payment methods. Send invoices promptly after completing work to maintain healthy cash flow.

Related Tools

Frequently Asked Questions

Can I add multiple line items?
Yes, click the '+ Add Row' button to add as many line items as you need. Each row lets you enter a description, quantity, and rate, with the amount calculated automatically.
How is the total calculated?
The tool calculates the subtotal by summing all line item amounts (quantity multiplied by rate). Tax is then calculated as a percentage of the subtotal and added to produce the final total.
Can I print the invoice directly?
Yes, click the Print button to open the invoice in a new window formatted for printing. Your browser's print dialog will open automatically, allowing you to print or save as PDF.
Is this invoice valid for accounting purposes?
The generated invoice includes all standard fields required for business accounting: invoice number, dates, seller and buyer details, itemized charges, tax, and total. However, tax invoicing requirements vary by jurisdiction, so verify that it meets your local requirements.
Is any data stored or sent to a server?
No. All calculations and invoice generation happen entirely in your browser. Your business and client information never leaves your device.
+amt.toFixed(2);return amt;}function bindRow(row){row.querySelector('.inv-qty').addEventListener('input',function(){calcRow(row);});row.querySelector('.inv-rate').addEventListener('input',function(){calcRow(row);});}var rows=document.querySelectorAll('.inv-row');rows.forEach(function(r){bindRow(r);});document.getElementById('inv-add-row').addEventListener('click',function(){var container=document.getElementById('inv-items');var div=document.createElement('div');div.className='form-row inv-row';div.style.cssText='align-items:end;gap:8px;margin-top:8px';div.innerHTML='
';container.appendChild(div);bindRow(div);});function fmtD(d){return new Date(d+'T00:00:00').toLocaleDateString('en-US',{year:'numeric',month:'long',day:'numeric'});}function fmtM(n){return' +Number(n).toLocaleString('en-US',{minimumFractionDigits:2,maximumFractionDigits:2});}document.getElementById('inv-generate').addEventListener('click',function(){var fn=document.getElementById('inv-from-name').value.trim();var fa=document.getElementById('inv-from-addr').value.trim();var fe=document.getElementById('inv-from-email').value.trim();var tn=document.getElementById('inv-to-name').value.trim();var ta=document.getElementById('inv-to-addr').value.trim();var te=document.getElementById('inv-to-email').value.trim();var num=document.getElementById('inv-number').value.trim();var dt=document.getElementById('inv-date').value;var dd=document.getElementById('inv-due').value;var taxPct=parseFloat(document.getElementById('inv-tax').value)||0;var notes=document.getElementById('inv-notes').value.trim();if(!fn||!tn||!num||!dt||!dd){showStatus('Please fill in business name, client name, invoice number, and dates.',false);return;}var items=[];var subtotal=0;document.querySelectorAll('.inv-row').forEach(function(row){var desc=row.querySelector('.inv-desc').value.trim();var qty=parseFloat(row.querySelector('.inv-qty').value)||0;var rate=parseFloat(row.querySelector('.inv-rate').value)||0;var amt=qty*rate;if(desc&&amt>0){items.push({desc:desc,qty:qty,rate:rate,amt:amt});subtotal+=amt;}});if(items.length===0){showStatus('Please add at least one line item with a description and amount.',false);return;}var taxAmt=subtotal*(taxPct/100);var total=subtotal+taxAmt;var w=72;var txt='';txt+='='.repeat(w)+'\n';txt+='INVOICE\n';txt+='='.repeat(w)+'\n\n';txt+='Invoice Number: '+num+'\n';txt+='Invoice Date: '+fmtD(dt)+'\n';txt+='Due Date: '+fmtD(dd)+'\n\n';txt+='-'.repeat(w)+'\n\n';txt+='FROM:\n';txt+=' '+fn+'\n';if(fa)txt+=' '+fa+'\n';if(fe)txt+=' '+fe+'\n';txt+='\n';txt+='TO:\n';txt+=' '+tn+'\n';if(ta)txt+=' '+ta+'\n';if(te)txt+=' '+te+'\n';txt+='\n';txt+='-'.repeat(w)+'\n\n';var descW=36;var qtyW=8;var rateW=12;var amtW=14;txt+='Description'.padEnd(descW)+'Qty'.padStart(qtyW)+'Rate'.padStart(rateW)+'Amount'.padStart(amtW)+'\n';txt+='-'.repeat(w)+'\n';items.forEach(function(item){var d=item.desc.length>descW-2?item.desc.substring(0,descW-2):item.desc;txt+=d.padEnd(descW)+String(item.qty).padStart(qtyW)+fmtM(item.rate).padStart(rateW)+fmtM(item.amt).padStart(amtW)+'\n';});txt+='-'.repeat(w)+'\n';txt+='Subtotal:'.padStart(w-amtW)+fmtM(subtotal).padStart(amtW)+'\n';if(taxPct>0){txt+=('Tax ('+taxPct+'%):').padStart(w-amtW)+fmtM(taxAmt).padStart(amtW)+'\n';}txt+='='.repeat(w)+'\n';txt+='TOTAL DUE:'.padStart(w-amtW)+fmtM(total).padStart(amtW)+'\n';txt+='='.repeat(w)+'\n\n';if(notes){txt+='NOTES:\n';txt+=notes+'\n\n';}txt+='PAYMENT TERMS:\n';txt+='Payment is due by '+fmtD(dd)+'. Please include the invoice number ('+num+')\n';txt+='as a reference with your payment.\n\n';txt+='Thank you for your business!\n';var out=document.getElementById('inv-output');out.value=txt;out.style.display='block';showStatus('Invoice generated successfully!',true);});document.getElementById('inv-copy').addEventListener('click',function(){var o=document.getElementById('inv-output');if(!o.value){showStatus('Generate an invoice first.',false);return;}navigator.clipboard.writeText(o.value).then(function(){showStatus('Copied to clipboard!',true);});});document.getElementById('inv-print').addEventListener('click',function(){var o=document.getElementById('inv-output');if(!o.value){showStatus('Generate an invoice first.',false);return;}var pw=window.open('','_blank');pw.document.write('Invoice'+o.value.replace(//g,'>')+'');pw.document.close();pw.focus();pw.print();});})();