Feature

Send a quote. Customer accepts. You're ready to invoice.

Quotes share the same shareable link, the same brand, and the same recipient experience as your invoices. They expire when you say. They flip to accepted or declined with one click on the customer's side. No separate quoting tool to wire up.

Why quotes are different from invoices (but not that different)

A quote is the same data as an invoice with two changes: it has an expiration instead of a due date, and the customer accepts or declines it instead of paying it. Most quoting products treat this as a reason to build a parallel app with parallel concepts. We treated it as a reason to add one toggle.

Same form, same brand, same share link, same view tracking. The recipient sees a "Quote" badge, a "Valid until" date, and Accept / Decline buttons in the place where the bank details would be on an invoice.

What you get

One toggle on the new-invoice form

Pick "Quote" instead of "Invoice" at the top of the form. The "Due Date" label becomes "Valid until," the totals say "Quoted Total" instead of "Total Due," and the bank details get hidden. Everything else is identical.

Expiration handling, automatic

Pick a valid-until date the same way you pick a due date (Net 7 / 30 / 60 chips, or a custom date). When the date passes, the quote shows "Expired" to the recipient and the accept button stops working.

Accept and decline buttons on the share link

Where the payment details would be on an invoice, your customer sees two buttons: Accept Quote (sends a confirmation, pings you on Slack) and Decline (with a reason in the comment thread).

Same recipient features as invoices

The customer can leave comments, ask for changes via the comment thread, and forward the quote to their own decision-maker. Recipient editing of address and tax ID still works for prep.

Webhook + Slack notifications

quote.accepted and quote.declined fire on your subscribed webhook URLs. Slack pings on either action. Wire your CRM or project tool to start the work the moment a quote turns green.

View analytics, same as invoices

See whether the customer actually opened the quote, what city they opened it from, and when. Your own previews don't pollute the count. More on view analytics →

When you'd use a quote

  • Procurement gating. The customer's procurement team requires a quote before they cut a PO. You send the quote with a 30-day validity, they accept, you invoice with the matching PO.
  • Scope confirmation. Before starting work, you want the customer to sign off on the line items and price. Accept-button on the share link is your sign-off.
  • Multiple options pricing. Send three quotes for three packages, let the customer accept the one they want, decline the others.
  • Pre-approval audit trail. Some industries (legal, regulated) need a documented "yes" before billable work starts. The accept action and timestamp gives you that trail.

How quotes work in JupiterInvoice

Is a quote a separate object from an invoice?
No. A quote is an invoice with doc_type set to 'quote'. The data model, share link, PDF, and view tracking are identical. Only the labels and the accept/decline UI differ. Once the quote is accepted, you can convert it to an invoice in a single click without losing any line items or recipient details.
What happens to an expired quote?
Once the valid-until date passes, the recipient sees an 'Expired' badge and the Accept button stops working. The quote stays in your list with the Expired status. You can edit the date and re-send it (which counts as a fresh quote with a new validity window) or duplicate it as a new quote.
Does the recipient need an account to accept a quote?
No. Same as invoices: anyone with the share link can view, accept, or decline. There's no signup wall. The link is the credential.
What's the URL for accepting / declining?
Both actions POST to the recipient's existing share link. /i/<token>/accept-quote flips the status to Accepted; /i/<token>/decline-quote flips it to Declined. Both fire webhooks (quote.accepted, quote.declined) so your CRM or project tooling can react in real time.
Can I send a quote without filling in payment details?
Yes. Quotes hide the payment details block on the recipient view since nothing is owed yet. Your bank info isn't shown until the quote becomes an invoice. You also don't need to have a sender profile fully configured to send a quote — though we recommend it for branding consistency.
Does the quote have a different number format?
Right now it uses the same auto-generated number format as your invoices. Per-customer or per-type prefixes (Q-001 vs INV-001) are coming. You can also set the number manually on creation if your accounting system requires a specific format.

Try sending a quote

Free to try. The toggle is right at the top of the new-invoice form. Send a real quote in under two minutes.

Create your first invoice

No signup required. Build now, save later.