Estimates Overview
Estimates are the quote step that comes before billing. You build a line-item proposal, send it to the client, and they approve, decline, or request changes right in the portal. When they accept, you convert the estimate into an invoice in one click — the line items carry over exactly.
What Estimates Is
A complete quote-to-approval workflow that handles:
- Creating estimates with line items, quantities, unit prices, taxable flags, tax rate, a fixed discount, and currency — the same line-item shape an invoice uses
- A valid-until date that auto-expires the estimate if the client doesn't respond in time
- Generating branded PDFs through a secure download gateway
- Sending email to the client with a link to view and respond
- Client responses — Approve, Decline, or Request Changes, each from the client's portal view
- Converting to an invoice — an accepted estimate becomes a draft invoice with a two-way link
- Tracking status through Draft → Sent → Viewed → Accepted (or Declined / Expired) → Converted
- An activity log recording every action with who did it and when
Turn it on first. Estimates is gated by a feature flag. Enable Estimates under Settings → Core Features and the Estimates page and sidebar entry appear. (It's off by default.) Shipped in theme v2.64.0.
Quick Glossary
| Term | What it means |
|---|---|
| Estimate | An estimate custom post type — line items + totals + a status |
| Estimate Number | Auto-generated EST-YYYY-#### (e.g. EST-2026-0001) |
| Line Item | One row — description, optional details, quantity, unit price, taxable flag |
| Subtotal | Sum of line items before tax and discount |
| Tax Rate / Tax Amount | Percentage applied to taxable items, and the resulting amount |
| Discount | A fixed amount subtracted from the subtotal |
| Total Amount | Subtotal + Tax − Discount |
| Issue Date | When the estimate was issued (defaults to today) |
| Valid Until | When the quote expires (defaults to Issue Date + 30 days) |
| Status | Lifecycle state (Draft / Sent / Viewed / Accepted / Declined / Expired / Converted) |
| Converted To Invoice | The invoice an accepted estimate became — a two-way link |
| Terms / Notes | Free-text blocks shown on the estimate and its PDF |
The Estimates Page
Open Estimates from the left sidebar (/estimates/). It's a Vue.js app:
- Toolbar — a Create Estimate button, plus search, a status filter, a client filter, and a date range.
- List — each estimate shows its number, issue date, valid-until (flagged red if it has expired while still open), amount, and a status badge.
- Row actions — View, Download PDF, Send Email, Mark as Sent / Mark as Draft, Clone, Edit, and Delete (delete is blocked once an estimate has been converted).
Individual estimates live at /estimate/{number}/ (for example /estimate/est-2026-0001/).
Estimate Statuses
| Status | Meaning |
|---|---|
| Draft | Created but not yet sent |
| Sent | Emailed to the client; not opened yet |
| Viewed | The client has opened it |
| Accepted | The client approved it — ready to convert |
| Declined | The client rejected it (final) |
| Expired | The valid-until date passed while still Sent or Viewed (final) |
| Converted | Turned into an invoice — now read-only (final) |
A daily background job moves any Sent or Viewed estimate to Expired once its valid-until date has passed, and records the change in the activity log.
The Estimate Lifecycle
Draft ──send──▶ Sent ──client opens──▶ Viewed
│ │
└──────────┬────────────┘
▼
Accept / Decline / Request Changes
│
accepted ──convert──▶ Converted (→ draft Invoice)
│
(no response by Valid Until) ──▶ Expired
- Send moves a draft to Sent and stamps the send time.
- Viewing the estimate (the client opening its page) moves Sent to Viewed automatically.
- Accept / Decline / Request Changes are the client's three responses (see Client Acceptance).
- Convert to Invoice turns an accepted estimate into a draft invoice and locks the estimate.
- Admins also have a Set Status escape hatch to correct the status manually when needed.
How It Connects to Invoices
Estimates and Invoices share the same line-item model, so conversion is lossless. When you convert an accepted estimate:
- A new draft invoice is created with the client, line items, tax rate, discount, currency, and notes copied across.
- The two records are linked both ways — the estimate shows Converted To Invoice, and the invoice records its source estimate.
- The estimate becomes read-only so the quote and the bill can't drift apart.
See Converting to Invoices for the full mechanics.
Permissions Snapshot
| Who | Can |
|---|---|
| Administrators & Editors | Create, edit, send, clone, set status, convert, and see every estimate |
| Granted staff roles | See all estimates (add roles under Settings → Estimate Settings → Estimate Access) — view, not the admin actions |
| Assigned clients | See only their own estimates, and Approve / Decline / Request Changes on them |
| Everyone else | No access |
Client access is automatic: a user assigned to a client can view that client's estimates with no extra permission.