---
title: "Estimates"
slug: workspace/estimates
url: https://projectri.com/docs/workspace/estimates
section: workspace
audience: workspace
app_route: "/[slug]/[user]/estimates"
permissions: [estimate.view, estimate.manage, estimate.margin]
plan: commercial.estimates
mobile: "/estimates"
updated: 2026-09-08
source: Projectri documentation
---

# Estimates

The list of priced work — every estimate with its client, status, value, margin and validity date, revisions folded away by default.

![Estimates](https://projectri.com/docs-shots/workspace-estimates.png)

## What it is

An estimate is a piece of work priced before it exists — roles, hours and a rate
card. This screen lists them: number, name, client, status, value, margin, owner
and the date the offer stops being valid. It is the internal arithmetic;
[Quotes](/docs/workspace/quotes) is the document a client reads.

## How to get there

Estimates is in the main navigation and needs the `estimate.view` permission.
That key is deliberately excluded from the blanket viewer grant — the pipeline
of unsigned deals with the price offered on each is commercially sensitive — so
an administrator grants it per role at
[Admin → Permissions](/docs/admin/permissions).

The **Margin** column exists only for readers with `estimate.margin`. The API
*deletes* the cost keys from its response rather than zeroing them, and the
screen keys the column off their absence, so there is one source of truth for
whether a number exists to render.

Creating and editing needs `estimate.manage`; marking one sent needs
`estimate.send`; turning an accepted one into a project needs
`estimate.convert`. Every write is gated on the `commercial.estimates` plan
feature — reading the list is not.

## How to use it

### Read the list

1. Filter by **Status** and by **Client** with the two pickers in the header.
2. Revisions are folded away by default; **Revisions** shows every version. The
   question "how many live offers are out" gets asked far more often than "what
   did v2 say".
3. A row past its **Valid until** date is marked *lapsed* beside the date.
   Nothing sweeps an estimate to Expired, so a Sent row whose date passed last
   month is still Sent — the word beside the date is what tells you.
4. Click a row to open the builder.

### Create an estimate

1. Press **New estimate**, or use the **New** menu in the app header.
2. Four fields: **Name**, **Client**, **Expected start** and **Rate card**.
3. There is no currency picker. The API takes the client's currency, falling
   back to the workspace's reporting currency — offering the choice here is how
   a firm in Dubai quotes dollars to a UAE client by accident. It is editable on
   the estimate afterwards, next to the numbers it moves.
4. **Expected start** is the date the work is priced at. A card that takes
   effect in January is the right card for a January project, and this is the
   one field that changes the numbers before any line exists.

## What it affects

- **Quotes.** An estimate is the only source a quote can be made from, and
  making one freezes a snapshot of the lines as they stand.
- **The pipeline.** A deal links estimates, and exactly one of them is primary —
  the one capacity forecasting turns into hours by role. Accepting or declining
  a quote also moves its estimate to Accepted or Declined, so the pipeline does
  not go on showing an open deal the client has already answered.
- **Projects.** An accepted estimate can be converted into a project. That is a
  deliberate step somebody inside the workspace takes; a client accepting a
  quote never provisions delivery on its own.
- **Rate cards.** Every line's rate is resolved from a card at pricing time and
  frozen onto the line. Changing a card afterwards does not move a stored price.

## On mobile

The **Estimates** tab in the Expo app is read-only and answers the corridor
question — what did we quote them, and is it still live. Revisions are collapsed
by the server, and the version chip appears only when the row is not v1. Pricing
happens on the web, where the grid has room for a rate column.

## Limits and gotchas

- **Lapsed is not a status.** Nothing expires an estimate. A Sent estimate past
  its validity date is still Sent, and its quote is what actually refuses a
  signature.
- Margin absent is not margin unknown. A reader without `estimate.margin` gets a
  response with the cost keys deleted, and the screen drops the whole column
  rather than printing a dash — a dash reads as "we do not know our cost", and
  finance acts on that.
- Money on the wire is in **minor units**. The list divides by the currency's own
  exponent; a three-decimal currency rendered with two is a thousandfold error
  in a number somebody is about to sign.
- The value shown is what the estimate stored, never a figure the screen
  recomputed. A number the client is holding and a number the screen calculated
  are two numbers, and only one of them is on the offer.

## Related

- [The estimate builder](/docs/workspace/estimate) — lines, sections, rates and margin.
- [Quotes](/docs/workspace/quotes) — the client-facing document made from an estimate.
- [Pipeline](/docs/workspace/pipeline) — the deals estimates are linked to.
- [Clients](/docs/workspace/clients) — where the currency and credit terms come from.

## Related

- [The estimate builder](https://projectri.com/docs/workspace/estimate.md): A spreadsheet-shaped grid for pricing work — sections, lines, resolved or pinned rates, discount, margin, and the buttons that send it, revise it, quote it or turn it into a project.
- [Quotes](https://projectri.com/docs/workspace/quotes.md): What is out with clients and what they did with it — send a quote on a private link, watch it be opened, and turn the accepted one into a statement of work.
- [Pipeline](https://projectri.com/docs/workspace/pipeline.md): The deals being chased, on a board of stages, with a weighted forecast by month and conversion rates behind a second tab.
- [Clients](https://projectri.com/docs/workspace/clients.md): The account record for every client and prospect — contacts, projects, contracts, meetings, portal logins and an activity trail, one client at a time.
