Skip to main content
Estimates are pre-sales documents — quotes, proposals, statements of work — that you send to prospects before any money changes hands. The client reviews, optionally negotiates revisions, and accepts. On acceptance, you convert the estimate to an invoice with one click and bill them for the agreed scope. The Estimates UI lives at /dashboard/commerce/estimates/, with data in crm_estimates and crm_estimate_line_items.

When to use estimates vs. invoices

  • Estimate — The client hasn’t yet committed. You want their explicit approval of scope and price before any work starts. They need to see numbers but you’re not ready to demand payment.
  • Invoice — The work is committed (verbally, by signed contract, or by accepted estimate). You’re asking for payment now.
If your sales motion is “send a quote, get approval, then bill,” estimates are the right starting point.

The estimate lifecycle

1

Draft

A new estimate starts as a draft — visible to your team only. Iterate on line items, scope language, and pricing until it’s ready.
2

Sent

Click Send and the prospect receives an email with a public approval link. The estimate is now visible to the prospect.
3

Accepted

The prospect clicks Accept on the public link (or you mark it accepted manually for offline approvals). Convert to invoice with one click.
4

Declined

The prospect clicks Decline or you mark it declined. Often paired with creating a revised estimate (see versioning below).
5

Expired

Estimates have an optional expiry date. Past the expiry, the public link returns an “expired — request a new quote” message and the status flips to expired.

Creating an estimate

Click New Estimate, pick a prospect (CRM contact or company — they don’t need to be a paying client yet), and start adding line items.

Line items

Estimate line items work the same way as invoice line items — pulled from your Products catalog or added ad-hoc. Each line has:
  • Product reference (optional)
  • Description (the client-facing scope language)
  • Quantity
  • Unit price (overridable)
  • Discount (per-line)
  • Taxable flag
For estimates especially, the description field is where you sell the work — write it like the SOW it is, not a single-line product name.
Use the description field generously on estimates. “Strategy workshop — 2 days, in-person, with deliverable summary deck” reads better and reduces post-acceptance scope arguments than just “Strategy workshop.”

Tax, discounts, and terms

Same structure as invoices:
  • Tax — Per-jurisdiction rates, tax-exempt clients honored.
  • Discounts — Per-line and estimate-level, percentage or fixed.
  • Terms — Free-text field for payment terms, project timeline, or any conditions tied to acceptance (“Pricing valid for 30 days from issue”).
The accepted estimate carries these forward to the converted invoice.

Sending for approval

When you click Send, the prospect gets an email with:
  • A summary of the estimate
  • A link to the public approval page
The public approval page is unauthenticated — no login required, just the unique URL. The prospect sees the line items, totals, terms, and two buttons: Accept and Decline. Optional fields let them leave a comment (“Looks good, but can we drop the workshop down to 1 day?”) which you’ll see in the estimate’s activity log.
The approval link is single-use per email send but can be re-sent. If you need to update the estimate after sending, create a revision (see versioning) — don’t edit the live estimate, since the prospect’s view would change underneath them.

Versioning and revisions

When a prospect requests changes, click Create Revision. This:
  • Locks the current version (rev 1) so the audit trail stays intact
  • Creates a new draft (rev 2) with the same line items
  • You edit, send, and the prospect sees rev 2
The activity log shows every revision and the comments on each. If they accept rev 2, only rev 2 converts to an invoice — earlier revisions are inert.

Converting to an invoice

When the estimate is accepted, the Convert to Invoice action:
  • Copies all line items, tax, discounts, and terms to a new draft invoice
  • Links the estimate to the invoice (visible on both records)
  • Leaves the estimate accepted — it’s a historical document; conversion doesn’t void it
The invoice starts as a draft so you can adjust the due date, payment terms, or add a deposit line before sending. From there, it follows the standard invoice lifecycle.
Conversion creates one invoice per estimate. If your accepted estimate covers a multi-phase project (“10know,10k now, 10k on milestone 2”), either convert into one invoice and edit it into a deposit line, or split the estimate into separate phase-specific estimates upfront.

Multi-signer estimates and contracts

For larger deals where the prospect needs internal sign-off (legal, finance), pair the estimate with a contract from the Contracts module. Send the estimate first for pricing approval, then the contract for legal terms — or combine them into a single signature workflow if your process supports it.

API patterns

Common API operations against /api/crm/estimates:
  • POST /api/crm/estimates — create a draft
  • POST /api/crm/estimates/:id/send — transition to sent and email the prospect
  • POST /api/crm/estimates/:id/accept — manual acceptance (for offline approvals)
  • POST /api/crm/estimates/:id/convert — convert to a draft invoice
  • GET /api/crm/estimates?status=sent&older_than=14d — list stale outstanding estimates for follow-up automation

Best practices

  • Set an expiry date. Open-ended estimates haunt your pipeline. 14 or 30 days is standard.
  • Write descriptions for the buyer, not for accounting. This is your sales document.
  • Track accepted/declined ratios. Estimates create a clean acceptance funnel — if you’re at 30% acceptance, your pricing or scoping needs work; if you’re at 95%, you’re under-pricing.
  • Convert on acceptance, not before. Don’t pre-convert as an invoice — the conversion timestamp is meaningful for revenue recognition.

Troubleshooting

The button only appears for status accepted. If they accepted via comment in email instead of clicking the public link, mark it accepted manually from the estimate’s actions menu.
Check whether you edited the estimate after acceptance — the converter copies the current state of the estimate, not the snapshot at acceptance. For audit-clean conversions, lock the estimate before clicking Accept.
Use Void from the actions menu. The public link starts returning a “no longer available” message and the estimate is removed from active reporting.

What’s next?

Create and Send an Estimate

Build, send, and convert your first estimate.

Contracts & E-Signatures

Pair estimates with legally binding contracts.

Invoices

Where accepted estimates end up.

Products Catalog

The line items that power estimates and invoices.