> 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. Create and rename Groups on **Job Costing**; the Group headings on the Costs tab are read-only.

{% 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 %}
Choose **Markup Method** — **Fixed price** or **Percentage** — and check **Units**, **Unit cost**, **Unit Markup** and **Unit Price**. The Cost Type supplies the starting values; you can change them for this Job Cost.
{% 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 %}

**Units** must be at least **0.01**. A zero quantity cannot be saved. If an older Cost has zero units and blocks creating an Estimate, correct its quantity before trying the Estimate again.

## 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`. For a procurement deadline, add a Milestone on the [Job Timeline](/jobs/timeline.md#adding-a-milestone-on-the-rail) and choose Cost under Link to. Choose the date explicitly; the Milestone popup does not automatically copy a PO’s delivery date.

{% 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 %}

### Create a Milestone from a Cost

{% stepper %}
{% step %}
With Manager access or higher on an open Job, hover an unfinished Cost on the **Costs** tab and click the diamond **Create Milestone** icon. You can also use the diamond beside an eligible Group heading.
{% endstep %}

{% step %}
The Milestone popup preselects that Cost or Group. Enter or accept its name, choose the intended date, then click **Create Milestone**. Check the new deadline on the Timeline. A Cost does not supply a date automatically from its Purchase Order.
{% endstep %}
{% endstepper %}

The Costs tab follows the Group and item order set in Job Costing. Use its +/− controls to open or close Groups; drag Groups into a different order on Job Costing.

## 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 Fixed price (a fixed amount 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 %}

With **Fixed price** markup, the uplift is a fixed amount per unit in the Job’s currency. The Markup / Margin toggle is available for Percentage markup.

## 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

The Cost Type supplies the default **Markup Method**. Choose either method when adding, editing or duplicating an editable Job Cost:

* **Percentage** — the uplift is a percentage of the unit cost.
* **Fixed price** — the uplift is a fixed amount per unit in the Job’s currency.

Percentage suits supplier prices that vary from Job to Job, keeping the same markup percentage. Fixed price suits a standard handling fee that should stay the same per unit.

### Changing the markup method

{% stepper %}
{% step %}
Add a Cost, or open an editable Cost and click its **pencil**. For an active Cost, first review [the activation lock](/jobs/costs.md#the-activation-lock).
{% endstep %}

{% step %}
Under **Markup Method**, choose **Fixed price** or **Percentage**.
{% endstep %}

{% step %}
Check **Unit cost**, **Unit Markup**, **Unit Price**, **Units** and the totals. Switching method expresses the current price using the new method, subject to currency rounding.
{% endstep %}

{% step %}
Click **Add Cost** for a new Cost, or **Update Cost** for an edit. Reopen the Cost to check the saved method and figures.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
For a billable Cost with unit cost 80 and unit price 100, **Fixed price** shows an uplift of 20; **Percentage** shows 25%. Three units total 300 before tax. A print producer can keep the quoted selling price while choosing the method that best fits the supplier agreement.
{% endhint %}

{% hint style="info" %}
Percentage needs a unit cost. If unit cost is zero and the price is positive, switching to Percentage resets the price and markup to zero and shows **Percentage markup needs a unit cost**. Enter a valid unit cost and check the price and totals before saving. A non-billable Cost keeps zero markup.
{% endhint %}

## 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 **Markup Method**, plus Units, Unit cost, Unit Markup and Unit Price. **Cost Type** remains fixed. Changing this Job Cost does not update the Rate Card’s Cost Type.

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 and records it against the Job for profitability. The client is not charged for it. A non-billable line can still appear on a Cost Estimate with a **Billed Amount of zero**.

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="info" %}
Non-billable differs from zero markup. A billable Cost with no markup is charged at cost. A non-billable Cost has no client charge, but can appear on a Cost Estimate with a **Billed Amount of zero**. Check the Estimate before sharing it.
{% 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
