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

# Costs

Add, price, mark up, and manage Costs inside a Job. Costs cover everything the agency buys in, from print and promo to outsourced copywriting and media spend.

A **Cost** is anything the agency buys in rather than produces with its own hours. Print, promo items, stock imagery, hosting, a photographer's day rate, outsourced copywriting, legal fees, media placement.

Where a [Task](/jobs/tasks.md) is priced from your own rates and consumes time, a Cost is priced from what a [Supplier](/admin/suppliers.md) charges you and consumes money. Because Agencydesk was built exclusively for agencies, both sit in the same [Job Costing](/jobs/job-costing.md), quote on the same [Cost Estimate](/jobs/estimates.md), and bill on the same [Invoice](/jobs/financial/invoices.md), with the buy side and the sell side tracked separately throughout.

## Where Costs live

Costs appear in two places inside a Job:

* [**Job Costing tab**](/jobs/job-costing.md) — every Cost on the Job, including **Draft** Costs. This is where Costs are added and priced.
* **Costs tab** — only Costs that have been **activated**. This is the procurement view, where [Purchase Orders](/jobs/financial/purchase-orders.md) get raised and supplier commitments are tracked.

## The Cost Type sets the defaults

Every Cost starts from a [**Cost Type**](/company-settings/rate-card/cost-types.md) on your Rate Card. The Cost Type is the template, and it carries:

* The default **Supplier**
* The **Cost Currency**, inherited from that Supplier
* The **Pricing Structure**, Per Unit or Per Hour
* The **Cost Price**
* The **Markup Method** and markup amount
* Whether it is **Billable**
* The **Default Description**
* The [**Department**](/company-settings/departments.md) it belongs to

{% hint style="info" %}
The Supplier on a Cost Type is a **default, not a lock**. When you add the Cost to a Job you can change it. That matters in practice, because you often brief three suppliers on the same job and the one who wins the quote is not the one sitting on the template.
{% endhint %}

## Adding a Cost

Costs live inside [Groups](/jobs/job-costing.md#groups), the same as Tasks.

{% stepper %}
{% step %}
On the **Job Costing** tab, click **+ Add Cost** at the bottom of the Group. The **Cost Detail** slider opens.
{% endstep %}

{% step %}
Select a **Cost Type**. This pulls in the pricing structure, cost price, markup method, department, and default description.
{% endstep %}

{% step %}
Select the **Supplier**, or leave the one the Cost Type brought with it.
{% endstep %}

{% step %}
Add a **Cost Name** if the Cost Type needs more context. This is optional, and works the same way a [Task Name](/jobs/tasks.md#how-tasks-are-named) does.
{% endstep %}

{% step %}
Set **Billable** on or off, and edit the **Description**. The description appears on Estimates and Invoices, so write it for the client as well as the team.
{% endstep %}

{% step %}
Attach anything relevant with **+ Add a Document**, then click **Add Cost**. The Cost lands in the Group as a **Draft**.
{% endstep %}
{% endstepper %}

## The Costs tab

Once a Cost is activated it appears on the **Costs** tab.

Across the top sit a **Completed** counter, an **Expand / Collapse** control that shows or hides the description on every line, and **Search**.

Costs are listed inside their Groups, with these columns:

| Column              | What it shows                                                                                        |
| ------------------- | ---------------------------------------------------------------------------------------------------- |
| **Group and Cost**  | The Group heading, then each Cost beneath it                                                         |
| **Qty**             | The number of units, or hours where the pricing structure is Per Hour                                |
| **Unit Price**      | The **resell** price per unit, cost plus markup. Shown with `/hr` where the Cost is priced Per Hour  |
| **Markup**          | The markup amount on that Cost                                                                       |
| **Total**           | Qty × Unit Price                                                                                     |
| **Total Incl. Tax** | The same total with the [Client's tax rate](/admin/clients.md#financial-details-on-a-client) applied |

Where a [Purchase Order](/jobs/financial/purchase-orders.md) has been raised against a Cost, its **PO number** shows beneath the Cost name with a small delivery icon, for example `PO18`.

{% hint style="info" %}
**Great for** a production-heavy Job. Expand the descriptions and the Costs tab reads as a procurement list: what was bought, from whom, at what price, and which supplier commitments are already locked in behind a PO.
{% endhint %}

## The Cost slider

Click a Cost to open its slider. The header carries the Cost name with a **link icon** for copying a direct link, the Job reference beneath, a **complete** control, a **pencil** to edit, and a **...** menu.

The top of the slider summarises the Cost:

| Field                 | What it shows                         |
| --------------------- | ------------------------------------- |
| **Supplier**          | Who you are buying from               |
| **Supplier Currency** | The currency that Supplier charges in |
| **Billable**          | Yes or No                             |
| **Pricing Structure** | Per Unit or Rate Per Hour             |
| **Markup Method**     | Percentage or Per Unit                |
| **Description**       | What the Cost covers                  |

### Reading the Cost Detail box

Beneath that, the grey **Cost Detail** box carries the numbers:

* **Units** — how many.
* **Unit cost** — what the Supplier charges you per unit.
* **Unit Markup** — the uplift, shown as an amount or a percentage depending on the markup method.
* **Unit Price** — what the client pays per unit, cost plus markup.
* **Total** — Units × Unit Price.
* **Total Incl Tax** — the total with the Client's tax rate applied.

The buy side and the sell side sit on the same row, so the margin on any line is visible without opening a spreadsheet.

### Currency conversion

A Cost is charged to you in the **Supplier's currency** and billed to the client in the **Job's currency**. When those differ, Agencydesk converts the Unit cost and tells you it has done so with a line directly beneath the Cost Detail box:

> Supplier costs have been converted from USD to ZAR.

So a Job running in ZAR for a South African client, with hosting bought from a Supplier who invoices in USD, shows the Unit cost already converted into ZAR. The conversion note is always there when a conversion has happened, so a figure is never quietly in the wrong currency.

{% hint style="info" %}
Converted figures are rarely round. You can edit the Unit cost or Unit Price up or down to something presentable before the Estimate goes out, which is usually what you want on a client-facing document.
{% endhint %}

### Markup and Margin

Where the markup method is **Percentage**, a **Markup / Margin** toggle appears at the top right of the Cost Detail box. It changes how the uplift is expressed, and the formula is printed beneath the box so there is no ambiguity about which one you are reading.

* **Markup** — the column reads **Unit Markup**, and `Markup % = (price − cost) / cost`
* **Margin** — the column reads **Unit Margin**, and `Margin % = (price − cost) / price`

{% hint style="info" %}
A print job costs **R1,000** and sells for **R1,500**.

As **markup**, that is `(1500 − 1000) / 1000` = **50%**.

As **margin**, the same R500 is `(1500 − 1000) / 1500` = **33.3%**.

Same money, two numbers. Suppliers and production people tend to quote in markup, finance and management tend to report in margin. The toggle means nobody has to convert in their head, and nobody quotes 50% when they meant 50% the other way.
{% endhint %}

Where the markup method is **Per Unit**, the uplift is a fixed amount in the Job's currency rather than a percentage, so no toggle appears.

## Pricing structures

A Cost Type is set to one of two pricing structures, configured under **Settings > Rate Card > Cost Types**.

* **Per Unit** — priced per item.
* **Per Hour** — priced per hour.

Mechanically the two behave the same way, because an hour is just a unit. The difference is presentation. A Cost priced Per Hour displays its unit price with `/hr` on Estimates and Invoices, so outsourced copywriting quoted at $75 an hour reads as `$75.00/hr` rather than a bare `$75.00`.

{% hint style="info" %}
Choose the one that matches how the supplier quoted you and how the client expects to read it. A print run is Per Unit. A freelance developer or an outsourced copywriter is usually Per Hour, and showing the rate makes the line defensible when the client asks how the number was arrived at.
{% endhint %}

## Markup methods

Also set on the Cost Type:

* **Percentage** — the uplift is a percentage of the cost price. Scales automatically as the cost moves.
* **Per Unit** — the uplift is a fixed amount per unit, in the same currency.

Percentage suits categories where supplier pricing varies, since the margin holds regardless of the quote. A fixed amount suits a standard handling fee that should not balloon on a large purchase.

## Editing a Cost

A **Draft** Cost can be edited freely. Open it and click the **pencil**.

In edit mode you can change the **Supplier**, **Cost Name**, **Billable** state, **Description**, and every figure in the Cost Detail box: Units, Unit cost, Unit Markup, and Unit Price. **Cost Type** and **Markup Method** are fixed, since they come from the Rate Card.

Click **Update Cost** to save.

### The activation lock

{% hint style="warning" %}
An **active** Cost cannot be edited. To change one, deactivate it back to Draft on the [Job Costing](/jobs/job-costing.md#deactivating-a-line-item) first, make the change, then reactivate it.
{% endhint %}

Two things can block that deactivation, and they stack:

1. **A Purchase Order exists against the Cost.** A Cost with a [PO](/jobs/financial/purchase-orders.md) cannot be deactivated, so it cannot be edited. Delete the PO first, marking it unpaid if it has been paid.
2. **The Cost has been invoiced.** An invoiced Cost cannot be deactivated at all, so it cannot be edited. The [Invoice](/jobs/financial/invoices.md#voiding-an-invoice) would have to be voided or deleted first.

So the full unwind on a Cost that has gone all the way through looks like this:

{% stepper %}
{% step %}
Void the issued Invoice, or delete it if it is still a draft.
{% endstep %}

{% step %}
Mark the Purchase Order unpaid, then delete it.
{% endstep %}

{% step %}
Deactivate the Cost on the Job Costing.
{% endstep %}

{% step %}
Edit the Cost, then reactivate it.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
That is more steps than a spreadsheet would ask for, and that is the point. Once you have committed to a supplier with a PO, or billed a client for something, the number behind it should not be quietly editable. Each step in the unwind is a deliberate decision with a record attached, which is what keeps a Job's procurement history matching what actually happened.
{% endhint %}

## Documents

Attach files to a Cost with **+ Add a Document**, or drag them into the drop area. Each file shows its name, the date and time it was added, and its size, with icons to delete, preview, or download it.

They also collect on the Job's [Central](/jobs/central.md) tab, grouped under the Cost name.

{% hint style="info" %}
**Great for** keeping the paper trail on the line item it belongs to. The printer's quote on the print Cost, the photographer's rate sheet on the shoot Cost, the supplier SLA on a hosting Cost, the signed approval on a media placement. When someone queries the number months later, the evidence is right there rather than in an inbox.
{% endhint %}

## Three ways agencies use Costs

The same Cost record does three different jobs depending on how you set **Billable** and **Markup**. Deciding which one you are creating is usually the whole conversation.

### Absorbed expenses

**No markup, not billable.**

The agency carries the cost. It is recorded against the Job so it shows in profitability, but the client never sees it and is never charged for it.

This is stock imagery you bought for a pitch, a courier you are not going to invoice for, a subscription consumed on the work, or a supplier bill you have decided to eat to keep a relationship steady.

{% hint style="info" %}
Recording absorbed costs rather than leaving them off the Job is what makes profitability honest. A Job that looks 40% profitable before you count the R8,000 of print you swallowed is not a 40% Job, and you want to know that before you quote the next one the same way.
{% endhint %}

### Billed expenses

**No markup, billable.**

The cost is passed to the client at exactly what you paid. You handle the buying, the client carries the expense, and the agency takes nothing on it.

This is the pass-through category: ad spend and media buys billed at net, a domain or hosting renewal recharged as-is, travel and accommodation on a shoot, a venue deposit. Common on retainers where the client wants the agency to transact on their behalf without a handling fee on top.

### Procurement and resell

**Marked up, billable.**

The agency buys something in, adds a margin, and sells it on as part of the deliverable. This is where Costs become a revenue line rather than an administrative one.

It covers physical goods and bought-in services equally:

* **Production and print** — brochures, packaging, large-format signage, point-of-sale, vehicle branding.
* **Promotional items** — branded merchandise, event giveaways, corporate gifting.
* **Creative services bought in** — photography and video production, illustration, voiceover, translation, animation.
* **Specialist services** — outsourced copywriting, freelance development, legal and compliance review, market research.
* **Digital goods** — stock imagery, licensed fonts, plugins and licences, hosting.

The markup is not arbitrary. It pays for sourcing the supplier, briefing them, checking the work before it reaches the client, chasing it when it runs late, and carrying the cash-flow risk of paying the supplier before the client pays you. An agency that sources and quality-controls a print run is doing real work whether or not a timesheet records it, and the markup is how that work gets paid for.

{% hint style="info" %}
**Great for** understanding where a Job actually made its money. A campaign might show a thin margin on studio hours and a healthy one on production, or the reverse. Because the buy side and the sell side sit on every Cost line, [Recon](/jobs/recon.md) can tell you which, instead of giving you one blended number.
{% endhint %}

{% hint style="warning" %}
Marking a Cost non-billable is not the same as setting its markup to zero. A zero-markup billable Cost still appears on the Estimate and Invoice at cost. A non-billable Cost never reaches a client document at all.
{% 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/costs.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.
