> For the complete documentation index, see [llms.txt](https://help.agencydesk.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.agencydesk.io/jobs/estimates.md).

# Estimates

Build, edit, download, and activate Cost Estimates on a Job. Quote straight from the Job Costing, then turn an approved Estimate into live work in one click.

A **Cost Estimate** is what the client sees before the work starts. It is generated from the [Job Costing](/jobs/job-costing.md), so the [Tasks](/jobs/tasks.md), [Costs](/jobs/costs.md), rates, and descriptions on it are the same ones your team will deliver against.

Because Agencydesk was built exclusively for agencies, an Estimate is not a document you retype in a separate quoting tool. It is a view of the costing you have already built, and once the client approves it, one button turns it into live work.

## The Estimates list

Open a Job and click the **Estimates** tab. Every Estimate raised on the Job is listed with:

| Column          | What it shows                                                                                                           |
| --------------- | ----------------------------------------------------------------------------------------------------------------------- |
| **CE**          | The Cost Estimate number, for example `CE1437`                                                                          |
| **CE Name**     | The name given when the Estimate was created, with an **Activated** tag alongside it once its items have been activated |
| **Excl.**       | The total excluding tax                                                                                                 |
| **Incl.**       | The total including tax                                                                                                 |
| **Created**     | The date it was raised                                                                                                  |
| **Valid Until** | The expiry date on the quote                                                                                            |

Click **+ New Estimate** in the top right to raise one.

Hovering a row reveals two icons on the right: a **cloud-download** icon to download the PDF, and a **trash** icon to delete the Estimate.

### Multiple Estimates per Job

A Job can carry as many Estimates as you need, each drawn from the same costing but covering different parts of it.

{% hint style="info" %}
**Great for** quoting options. From one costing you can raise `CE1435 Monthly SEO`, `CE1436 Monthly Reporting`, and `CE1437 Monthly SEO/SEM + Reporting`, then let the client choose between the retainer on its own, the reporting on its own, or the bundle. You cost the work once and present it three ways.
{% endhint %}

### The activity log

Beneath the list, an **Activity** log records every Estimate action with the user, the value, and a timestamp: Cost Estimate created, and Cost Estimate activated.

{% hint style="info" %}
**Great for** reconstructing how a client was quoted. When someone asks six weeks later which version was approved and when, the log answers it with a name and a time rather than a search through sent mail.
{% endhint %}

## Creating an Estimate

{% stepper %}
{% step %}
Click **+ New Estimate**. The **New Cost Estimate** popup opens.
{% endstep %}

{% step %}
Enter a **Cost Estimate Name**. This becomes the heading on the Estimate and on the PDF, so name it for the client, for example *Monthly SEO/SEM + Reporting*.
{% endstep %}

{% step %}
Set **Valid Until**, the date the quote expires.
{% endstep %}

{% step %}
Check the **Payment Terms**. These pull through from the [Client's profile](/admin/clients.md#financial-details-on-a-client) and can be overridden on this Estimate.
{% endstep %}

{% step %}
Edit the **Description** if needed. It pre-fills from the [Job's description](/jobs/managing-jobs.md#creating-a-job) and appears under the heading on the PDF.
{% endstep %}

{% step %}
Under **Select Items**, tick what this Estimate covers.
{% endstep %}

{% step %}
Check the running **Total** at the bottom, then click **Generate Estimate**.
{% endstep %}
{% endstepper %}

### Payment Terms

The **Payment Terms** dropdown offers:

* Cash on Delivery
* Payment in Advance
* 7 Days
* 14 Days
* 30 Days
* 60 Days
* 90 Days
* 120 Days
* **Custom**, which lets you type your own wording

The Client's default is selected automatically, so you only touch this when a particular quote is priced on different terms.

{% hint style="info" %}
**Great for** protecting cash flow on production-heavy work. A campaign carrying large supplier costs can go out on Payment in Advance or a deposit arrangement, while the client's standing 30-day terms stay in place for their retainer.
{% endhint %}

### Selecting items

The **Select Items** panel lists the Job Costing exactly as you built it, [Group](/jobs/job-costing.md#groups) by Group, with each line item's quantity, price per unit, and total billable value.

There are three ways to build the selection:

* **Select All** — the checkbox at the top right takes the whole costing in one click.
* **By Group** — the checkbox on a Group header takes every line item in that Group.
* **By line item** — tick individual Tasks and Costs.

The **Total** at the bottom updates as you tick, so you can see what the client will be quoted before you generate anything.

{% hint style="info" %}
**Great for** phased work. On a website build costed as Discovery, Design, Development, and QA, quote Discovery on its own to get started, then raise the second Estimate for the remaining phases once the direction is signed off.
{% endhint %}

## The Estimate detail page

Clicking an Estimate opens its detail page.

The header carries the Estimate number, a **Show Hours on Pdf** checkbox, an **Activate Tasks** button, and a **Download** button. Beneath it sit **Date Created**, **Terms**, and **Valid Until**, then the **Description**.

The Estimate itself is laid out Group by Group, matching the costing:

| Column             | What it shows                                                                     |
| ------------------ | --------------------------------------------------------------------------------- |
| **Group and item** | The Group heading, then each line item with its status tag and description        |
| **Qty**            | Hours for a Task, units for a Cost                                                |
| **Price/Unit**     | The rate per hour or per unit, shown with `/hr` where the line is priced per hour |
| **Billed Amount**  | Qty × Price/Unit                                                                  |

Each Group carries its own **Total**, and the foot of the Estimate shows the **Sub Total**, **Tax** at the Client's rate, and the **Total** including tax.

Line items keep their live status tag, **Draft** or **Active**, so you can see at a glance which parts of this Estimate have already been approved to proceed and which have not.

### An Estimate is a snapshot

An Estimate holds the figures as they stood **when it was generated**. Later changes to the Job Costing do not flow back into it.

So a Task quoted at 12 hours that later picks up a one-hour [Amendment](/jobs/tasks.md#briefs-and-amendments) still reads 12 hours on that Estimate, while the Job Costing now carries 13. That is the correct behaviour, since the Estimate is a record of what the client was actually quoted on that date.

{% hint style="info" %}
When the scope moves, delete the Estimate and generate a fresh one, or raise a second Estimate covering the additional work. Which one you choose usually depends on whether the client has already seen the first.
{% endhint %}

### Non-billable lines

A line item marked non-billable still appears on the Estimate, with its quantity and rate shown and a **Billed Amount** of zero.

{% hint style="info" %}
**Great for** making goodwill visible. A line reading *Non-billable Changes, 1.00, R1,050.00/hr, R0.00* tells the client exactly what a round of revisions is worth and that you are not charging for it. Value the client can see is worth more than value you absorb silently.
{% endhint %}

## Editing an Estimate

Hover over the **Date Created / Terms / Valid Until** row on the detail page and a **pencil** icon appears on the right. Click it to edit the Estimate.

You can change the **Cost Estimate Name**, **Valid Until**, **Payment Terms**, and **Description**. Click **Save**.

{% hint style="warning" %}
**Line items cannot be edited on an Estimate.** The quantities, rates, and descriptions come from the [Job Costing](/jobs/job-costing.md), so that is where they have to be changed.

This keeps the quote and the costing in agreement. An Estimate that could be edited independently would let you quote one number while the Job was built on another, which is exactly how scope arguments start.
{% endhint %}

To change what an Estimate covers, adjust the Job Costing and raise a new Estimate, or delete this one and generate it again.

## Activating Tasks from an Estimate

When the client approves the quote, click **Activate Tasks**.

This activates **every item on the Estimate** in one action. The Tasks move onto the [Tasks tab](/jobs/tasks.md), become bookable on the [Resource Planner](/task-schedule/resource-planner.md), and inherit the [Job's start and end dates](/jobs/managing-jobs.md#creating-a-job). Costs move onto the Costs tab, ready for [Purchase Orders](/jobs/financial/purchase-orders.md). The Job itself moves from [Draft to Active](/jobs/managing-jobs.md#activating-a-job).

The Estimate is then tagged **ACTIVATED**, shown in green beside the Estimate number on the detail page and alongside the CE Name on the Estimates list. The status also carries through to the **Active Jobs Report**, so approved work is visible at agency level rather than only inside the Job.

Once an Estimate has been activated, the header shows only the **Download** button. The approval has already happened, so there is nothing left to activate.

{% hint style="info" %}
This is why every Job requires a start and end date. Because the Job carries the range, activating twenty Tasks at once gives all of them a workable date range without anyone setting dates line by line. Approval becomes one click instead of an afternoon.
{% endhint %}

{% hint style="info" %}
**Great for** the moment a pitch converts. The costing was built to price the campaign, the Estimate went out as the quote, and the client's approval turns the whole thing into scheduled studio work without anything being rebuilt or retyped.
{% endhint %}

## Downloading the PDF

Click **Download** on the detail page, or the **cloud-download** icon on the Estimates list.

The PDF carries:

* Your agency logo, name, address, VAT number, and contact details, from [Company Settings](/company-settings/general/details.md).
* The **Cost Estimate number** and date.
* The Client's code and Job number together, for example `THE001 / JB1057`, plus their VAT number and address.
* **Attention**, **Valid until**, **Terms**, and **Account Manager**.
* The Estimate name, description, and every Group with its line items and subtotals.
* **Total**, **Tax**, and **Total Incl. Tax**.
* Your **Bank Details**, with the CE number as the payment reference.
* A **Terms and Conditions** footer, editable under **Company Settings > General** and applied to every Cost Estimate you generate.

### Show Hours on Pdf

The **Show Hours on Pdf** checkbox on the detail page controls how much detail the client sees.

* **Ticked** — hour-based lines show their **Qty** and **Price/Unit** alongside the price. `SEO Management (DM), 12, R1 050.00, R12 600.00`
* **Unticked** — those columns are left blank and only the price shows. `SEO Management (DM), R12 600.00`

The setting only suppresses **hours**. Unit-priced [Costs](/jobs/costs.md) keep their quantity and unit price either way, so a licence quoted at 3 units of R550.00 still itemises even with hours hidden. Descriptions, subtotals, and totals are unaffected throughout.

{% hint style="info" %}
**Great for** clients who buy outcomes rather than hours. Some want to interrogate the hours line by line, others read an hourly breakdown as an invitation to negotiate the rate down. The same Estimate serves both, and you decide per document rather than per agency.
{% endhint %}

### Groups costed as a unit

Where a Group has [**Cost Group as Unit**](/jobs/job-costing.md#cost-group-as-unit) switched on, it compresses to a **single line** on the Estimate PDF: the top item's title with the Group's total as the amount, and no hours, units, or breakdown beneath it.

So a brand identity package built internally as twelve Tasks across design, copywriting, and account management reaches the client as one line with one price, while your team keeps every Task it needs to schedule and measure the work.

## Deleting an Estimate

Hover the Estimate's row on the list and click the **trash** icon.

Unlike an [Invoice](/jobs/financial/invoices.md), an Estimate can be deleted outright with no conditions attached. An Estimate is a proposal rather than a financial record, so nothing needs voiding and no audit trail is broken.

{% hint style="info" %}
CE numbers are still consumed. Deleting `CE1437` does not release that number for reuse, so a gap in the sequence simply means an Estimate was raised and later removed. Generating a few versions before the client settles is completely normal.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://help.agencydesk.io/jobs/estimates.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
