> 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/job-costing.md).

# Job Costing

The Job Costing is the financial blueprint of every Job. Build it out of Groups, Tasks, and Costs, and everything downstream reads from it: Estimates, Invoices, scheduling, and profitability.

The **Job Costing** is the backbone of every [Job](/jobs/managing-jobs.md) in Agencydesk. It's where scope becomes structure and price: the Groups, Tasks, and Costs that make up the work, each with its quantity, rate, and total.

Because Agencydesk is built exclusively for agencies, everything downstream reads from the Job Costing rather than being rebuilt. [Cost Estimates](/jobs/estimates.md) are generated from it. [Invoices](/jobs/financial/invoices.md) bill against it. [Tasks](/jobs/tasks.md) flow to the [Resource Planner](/task-schedule/resource-planner.md) when activated. [Recon](/jobs/recon.md) measures actual performance against it. Cost the Job properly once and the rest of the workflow follows.

## The Job Costing at a glance

Open a Job and click the **Job Costing** tab.

Across the top of the costing you'll find:

* **Status tabs** with live counts, filtering the view: **Active**, **Invoiced**, and **Completed**.
* **Expand / Collapse** — toggles the full descriptions on every Task and Cost. Collapsed gives you a clean price list; expanded shows the detail your team and client need.
* **Search** — find a Task or Cost within a large costing.
* **+ New Group** — add a new Group to the costing.

Each Group is a table with these columns:

| Column         | What it shows                                                           |
| -------------- | ----------------------------------------------------------------------- |
| **Group name** | The Group heading, then each Task or Cost beneath it                    |
| **Qty**        | Hours for a Task (for example `02:00`), or units for a Cost             |
| **Unit Price** | The rate per hour or per unit                                           |
| **Markup**     | The markup on a Cost. Tasks show a dash                                 |
| **Total**      | Qty × Unit Price                                                        |
| **Status**     | The line item's state, its invoiced progress bar, and the Active toggle |

### The Timeline strip

Above the costing sits the Job's [Timeline](/jobs/timeline.md) strip, showing the Job date range, the next milestone, and an **+ Add Milestone** button. Collapse or expand it with the chevron on the right.

## Groups

A Job Costing is built out of **Groups**. A Group is a logical section of the work: a phase, a deliverable, a workstream, or a department's contribution.

Typical agency Groups might be *Strategy*, *Design Assets*, *Implementation*, *Content Production*, *Media Spend*, or *Admin*. On a website build you might use *Discovery*, *Design*, *Development*, and *QA & Launch*. On a retainer, *Account Management*, *Content*, *Paid Media*, and *Reporting*.

### Creating a Group

{% stepper %}
{% step %}
Click **+ New Group** in the top-right of the costing.
{% endstep %}

{% step %}
Name the Group, then add Tasks and Costs to it using **+ Add Task** and **+ Add Cost** at the bottom of the Group.
{% endstep %}
{% endstepper %}

### The Group menu

Click a Group name to open its menu:

* **Edit Group** — rename the Group.
* **Duplicate Group** — copy the Group with all its Tasks and Costs. Useful for repeated phases, for example duplicating a *Month 1* retainer Group into *Month 2*.
* **Cost Group as Unit** — see [below](#cost-group-as-unit).
* **Delete Group** — remove the Group.

{% hint style="warning" %}
A Group can only be deleted if **every** Task and Cost inside it can be deleted. The same conditions apply as for individual line items: no time tracked, nothing invoiced, and no Purchase Orders raised. See [Deactivating a line item](#deactivating-a-line-item).
{% endhint %}

{% hint style="info" %}
**Great for** retainers. Cost one month properly, then duplicate the Group for each following month. Pair it with a [Job Template](/company-settings/job-templates.md) or a [Recurring Job](/company-settings/recurring-jobs.md) and the same structure rolls forward without being rebuilt from memory.
{% endhint %}

## Cost Group as Unit

**Cost Group as Unit** changes how a Group appears on client-facing documents. The top line item in the Group becomes the main element, and every other item indents beneath it.

On a Cost Estimate or Invoice PDF, the Group is then compressed into a **single line**: the top item's title, with the Group's total as the amount. No hours, no units, no breakdown. You're choosing not to show the detail.

{% hint style="info" %}
**Great for** a deliverable you've broken into small internal Tasks across several departments, where the client just needs the deliverable and the price. A *Brand Identity Package* might be twelve Tasks across design, copywriting, and account management internally, but the client sees one line: **Brand Identity Package — R48,000**. You keep the granularity you need to schedule and measure the work, and the client gets a clean, simple quote.
{% endhint %}

{% hint style="warning" %}
**Cost as Unit and Xero.** When a Group with Cost as Unit active is synced to [Xero](/company-settings/integrations.md), **every line item syncs individually**, not the compressed single line. This is deliberate: it keeps [departmental](/company-settings/departments.md) reporting in Xero accurate, so the right departments are credited with their income and cost.

The practical implication: if you normally send Invoices from Xero but you don't want a particular client seeing the Cost-as-Unit breakdown, send that Invoice from Agencydesk instead.
{% endhint %}

## Adding a Task

{% stepper %}
{% step %}
Inside a Group, click **+ Add Task**. The Task detail slider opens.
{% endstep %}

{% step %}
Select a **Task Type** from your [Rate Card](/company-settings/rate-card/task-types.md). This determines the [department](/company-settings/departments.md) and pulls in the rate for the Job's [Billing Tier](/company-settings/general/billing-tiers.md).
{% endstep %}

{% step %}
Fill in the rest:

* **Task Name** — optional. Use it when the Task Type alone isn't specific enough, for example *Graphic Design – Co-branded asset designs*.
* **Rate / Hour** — populated from the Rate Card. The padlock icon shows whether the rate is locked to the Rate Card value.
* **Estimated Time** — the hours you're costing for this Task.
* **Billable** — toggle off for internal or goodwill work that should be tracked but not charged.
* **Description** — what the Task covers. This appears on Estimates and Invoices, so write it for the client as well as the team.
  {% endstep %}

{% step %}
Click **Add Draft Task**. The Task is added in **Draft** status.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
A Task in Job Costing has **no date range yet**. It picks one up when it's activated, inheriting the Job's start and end dates. That's what makes bulk activation from an Estimate or Invoice possible without setting dates one Task at a time.
{% endhint %}

Once a Task is active, everything else about it (assigning users, briefs, amendments, reviews, notes, and its time log) is covered on the [Tasks](/jobs/tasks.md) page.

## Adding a Cost

{% stepper %}
{% step %}
Inside a Group, click **+ Add Cost**. The Cost Detail slider opens.
{% endstep %}

{% step %}
Select a **Cost Type** from your [Rate Card](/company-settings/rate-card/cost-types.md), and the [Supplier](/admin/suppliers.md) you're buying from.
{% endstep %}

{% step %}
Fill in the rest:

* **Cost Name** — optional, for when you need more detail than the Cost Type.
* **Markup Method** — how the resell price is calculated on top of the cost price.
* **Billable** — toggle off for costs the agency is absorbing.
* **Description** — what the Cost covers.
* **+ Add a Document** — attach the supplier quote, spec, or proof of pricing directly to the Cost.
  {% endstep %}

{% step %}
Click **Add Cost**.
{% endstep %}
{% endstepper %}

Once a Cost is active, pricing, currency conversion, markup, and the procurement view are covered on the [Costs](/jobs/costs.md) page.

{% hint style="info" %}
**Great for** keeping supplier quotes where they belong. Attach the printer's quote to the print Cost, the photographer's rate sheet to the shoot Cost, or the media platform's proposal to the ad-spend Cost. When someone questions the number six weeks later, the evidence is on the line item.
{% endhint %}

## Reading line items

### Line item status

Every Task and Cost carries a status tag:

* **Draft** — costed but not approved to proceed. Nothing has been committed.
* **Active** (green) — activated and in production. Tasks appear on the Tasks tab and can be scheduled; Costs appear on the Costs tab.
* **Issued** (orange) — some or all of the line item is included on an **issued** Invoice.

{% hint style="info" %}
A line item sitting on a **draft** Invoice still shows as **Active**, not Issued. Only once the Invoice is issued does the Job Costing reflect it as invoiced. This keeps the costing honest about what has actually been billed rather than what someone is preparing to bill.
{% endhint %}

### The invoiced progress bar

Beneath each status tag is a progress bar showing how much of that line item has been invoiced:

* **Light grey** — not yet invoiced.
* **Orange** — partially invoiced.
* **Red** — invoiced in full.

This lets an Account Executive scan a long costing and immediately see what's still to bill, which is exactly what you want before raising the next [progress Invoice](/jobs/financial/invoices.md#creating-an-invoice).

### The Active toggle

The toggle to the right of the progress bar switches a line item between **Draft** and **Active**.

Activating a Task puts it on the **Tasks** tab, where it can be [assigned and scheduled](/jobs/tasks.md#assigning-users) on the [Resource Planner](/task-schedule/resource-planner.md). Activating a Cost puts it on the **Costs** tab, where a [Purchase Order](/jobs/financial/purchase-orders.md) can be raised against it. Activating anything also moves the Job itself from [Draft to Active](/jobs/managing-jobs.md#activating-a-job).

### Deactivating a line item

A line item can only be toggled back to Draft under certain conditions:

* **A Task** can be deactivated only if **no time has been tracked** against it and it has **not been invoiced**, even partially.
* **A Cost** can be deactivated only if **no Purchase Order** has been created against it.

{% hint style="info" %}
These guardrails stop work that has already consumed time or money from being quietly reverted to draft, which would leave your tracked time and billing records pointing at something that no longer exists.
{% endhint %}

## Totals and tax

Each Group shows its own **Total**. At the bottom of the costing, a summary shows the **Sub Total**, **Tax** at the [Client's rate](/admin/clients.md#financial-details-on-a-client), and the **Total** including tax.

Group-level totals make it easy to discuss scope in chunks with a client: what Strategy costs, what Production costs, what the Media budget is.

## Currency

A Job Costing is always in the **currency selected when the Job was created**, which comes from the [Billing Tier](/company-settings/general/billing-tiers.md) assigned to the Job.

{% hint style="warning" %}
You can't change a Job's currency (which means changing its Billing Tier) once **Invoices or Purchase Orders** exist on the Job. Those would need to be deleted or voided first.

This protects the integrity of documents already issued. An Invoice sent to a client in USD can't have its underlying Job quietly repriced into ZAR.
{% endhint %}

If you need the same structure in a different currency, [duplicate the Job](/jobs/managing-jobs.md#duplicating-a-job) and select the new Billing Tier. Task rates transpose to the new tier's rates and Costs convert at the live exchange rate.


---

# 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/job-costing.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.
