> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hiveku.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Estimates (Quotes)

> Pre-sales quotes that prospects approve online and convert to invoices in one click

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

<Steps>
  <Step title="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.
  </Step>

  <Step title="Sent">
    Click **Send** and the prospect receives an email with a public approval link. The estimate is now visible to the prospect.
  </Step>

  <Step title="Accepted">
    The prospect clicks **Accept** on the public link (or you mark it accepted manually for offline approvals). Convert to invoice with one click.
  </Step>

  <Step title="Declined">
    The prospect clicks **Decline** or you mark it declined. Often paired with creating a revised estimate (see versioning below).
  </Step>

  <Step title="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`.
  </Step>
</Steps>

## Creating an estimate

<Tabs>
  <Tab title="From scratch">
    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.
  </Tab>

  <Tab title="From a deal">
    On a CRM deal, the actions menu includes **Create Estimate**. The estimate links to the deal so revenue tracking and pipeline math stay accurate.
  </Tab>

  <Tab title="Cloning an existing estimate">
    For repeat work patterns ("we always do the same audit + workshop combo"), clone a prior estimate and adjust pricing. Saves time and enforces consistency.
  </Tab>
</Tabs>

## Line items

Estimate line items work the same way as invoice line items — pulled from your [Products catalog](/commerce/products) 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.

<Tip>
  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."
</Tip>

## 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.

<Info>
  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.
</Info>

## 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](/commerce/invoices#the-invoice-lifecycle).

<Warning>
  Conversion creates one invoice per estimate. If your accepted estimate covers a multi-phase project ("$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.
</Warning>

## 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](/commerce/contracts). 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

<AccordionGroup>
  <Accordion title="Public approval link shows 'expired' but I just sent it">
    Check the expiry date on the estimate — if it was copied from a template with a fixed date, the date may have already passed. Edit the estimate, set a fresh expiry, and re-send.
  </Accordion>

  <Accordion title="Prospect accepted but I don't see Convert to Invoice">
    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.
  </Accordion>

  <Accordion title="Converted invoice has the wrong amount">
    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.
  </Accordion>

  <Accordion title="Need to revoke a sent estimate">
    Use **Void** from the actions menu. The public link starts returning a "no longer available" message and the estimate is removed from active reporting.
  </Accordion>
</AccordionGroup>

## What's next?

<CardGroup cols={2}>
  <Card title="Create and Send an Estimate" icon="rocket" href="/how-tos/create-estimate">
    Build, send, and convert your first estimate.
  </Card>

  <Card title="Contracts & E-Signatures" icon="signature" href="/commerce/contracts">
    Pair estimates with legally binding contracts.
  </Card>

  <Card title="Invoices" icon="file-invoice-dollar" href="/commerce/invoices">
    Where accepted estimates end up.
  </Card>

  <Card title="Products Catalog" icon="box" href="/commerce/products">
    The line items that power estimates and invoices.
  </Card>
</CardGroup>
