SPUNK.CODES

Artist Invoice Generator

Generate professional invoices designed for artists and freelancers. Itemized billing, automatic totals, tax calculation, and beautiful HTML export.

100% Free Tool

1 Your Details

2 Client Details

3 Invoice Details

4 Line Items

5 Notes & Terms

Upgrade to Pro for More Features

Recurring invoices, late fee automation, client portal, payment tracking, expense logging, multi-currency, branded templates, and cloud backup.

Get Pro Tools

Free Tools for Creators

Get new artist tools and tips every week.

More Free Creator Tools

Saved!
`; document.getElementById('previewSection').style.display='block'; document.getElementById('previewFrame').srcdoc=generatedHTML; showToast('Invoice generated!'); gtag('event','generate_artist_invoice',{event_category:'tool_use',value:Math.round(total)}); } function downloadInvoice(){if(!generatedHTML){showToast('Generate first');return}const blob=new Blob([generatedHTML],{type:'text/html'});const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='invoice.html';a.click();URL.revokeObjectURL(a.href);gtag('event','download_artist_invoice',{event_category:'tool_use'})} function printInvoice(){if(!generatedHTML){showToast('Generate first');return}const w=window.open('','_blank');w.document.write(generatedHTML);w.document.close();w.print()} function saveInvoice(){ const data={yourName:document.getElementById('yourName').value,yourEmail:document.getElementById('yourEmail').value,yourAddress:document.getElementById('yourAddress').value,paymentDetails:document.getElementById('paymentDetails').value,clientName:document.getElementById('clientName').value,clientEmail:document.getElementById('clientEmail').value,clientAddress:document.getElementById('clientAddress').value,invoiceNum:document.getElementById('invoiceNum').value,currency:document.getElementById('currency').value,taxRate:document.getElementById('taxRate').value,invoiceNotes:document.getElementById('invoiceNotes').value,invoiceTerms:document.getElementById('invoiceTerms').value}; localStorage.setItem('artistInvoiceDraft',JSON.stringify(data));showToast('Draft saved!');} function loadDraft(){const d=JSON.parse(localStorage.getItem('artistInvoiceDraft')||'null');if(!d)return;Object.keys(d).forEach(k=>{const el=document.getElementById(k);if(el&&d[k])el.value=d[k]});} loadDraft();