> For the complete documentation index, see [llms.txt](https://learn.withessential.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.withessential.com/revenue/quotes/custom-fields-and-po-numbers-on-quotes-and-invoices.md).

# Custom fields and PO numbers on quotes and invoices

Quotes and invoices can carry your own custom fields (a job reference, a contract number, a service tier) and, when enabled, a customer **PO Number**. Both are set up on the **Custom Fields** tab of the Quotes and Invoicing settings pages — quote fields under **Settings → Quotes**, invoice fields under **Settings → Invoicing**. The Purchase Order toggle appears on both tabs (it is one setting covering both documents).

> **Where to find it:** Settings → Quotes → Custom Fields (quote fields) and Settings → Invoicing → Custom Fields (invoice fields); on the quote or invoice form, the fields appear below the date and payment details

## Purchase Order numbers

Turn on the **Purchase Order** toggle (and click Save) to capture a customer PO number on every quote and invoice:

* A **PO Number** field appears on the quote form. Invoices show a **Purchase order** dropdown instead (None, a saved purchase order, or Custom — which reveals its own **PO number** field to type into).
* The PO prints near the top of the customer-facing document (PDF, signing page, and payment page).
* When you create an invoice from a signed quote, the quote's PO carries over automatically.

To prefill the PO for a customer with a standing (blanket) PO, set a **Default PO Number** on the customer's billing settings — or on a property's billing settings to override it for that property. New quotes and invoices for them start with that PO filled in; you can still change it per document.

Turning the toggle off hides the PO field and stops printing it; already-saved PO numbers are kept and come back if you re-enable it.

For customers who send repeat work against the same PO, you can save that PO on the customer (or one of its properties) and pick it on an invoice instead of retyping it — Essential then tracks what has been billed against it, with an optional spend limit and expiration date. See [Put a customer purchase order on an invoice](/revenue/invoices/put-a-customer-purchase-order-on-an-invoice.md).

## Job numbers on invoices

In **Settings → Invoicing → Custom Fields**, turn on **Job Number** and click **Save**. The field name starts as **Job #**; edit **Field name** to use your business's preferred label.

On an invoice, the field fills from its linked jobs using your business's job number format and updates as you link or unlink jobs. Multiple jobs appear as a comma-separated list. You can type a different value, which stays as you entered it, or clear the field to leave the number off that invoice. On a new or Draft invoice, a cleared field fills in again the next time you link a job in **Related Records** (near the invoice title) and choose **Save links**; save the invoice to keep the filled-in number. If you type exactly the linked job numbers, the field goes back to filling automatically.

A typed value can be up to 1,000 characters; the filled-in numbers can be longer. If an edit leaves the field over the limit, a message under it shows the count and **Save** stays unavailable until you shorten it.

Default invoice templates print the label and number near PO Number. Turning the setting off hides the field and its printed value while preserving saved overrides. A customized template can include it using **Job number (when enabled)** in the template editor's variable inserter.

## Technicians on invoices

In **Settings → Invoicing → Custom Fields**, turn on **Technicians** and click **Save**. The field name starts as **Technicians**; edit **Field name** to use your business's preferred label, such as **Serviced by**.

On an invoice, the field lists the technicians assigned to the visits of its linked jobs plus any technicians you select directly under **Technicians** in **Related Records** (near the invoice title), the same two sources [Revenue by technician](/reporting-and-integrations/reporting/revenue-by-technician.md) combines. Each person appears once, in alphabetical order, separated by commas, so a technician who is both selected and on a linked job's visit is listed a single time. Cancelled visits don't count, and a technician who has since been deactivated still appears. The names update when you choose **Save links** in **Related Records** after linking or unlinking jobs or changing the selected technicians. On a new invoice, the links are kept when you save the invoice.

You can type a different value, which stays as you entered it even when the related records change, or clear the field to leave technicians off that invoice. On a new or Draft invoice, a cleared field fills in again the next time you link a job or select a technician in **Related Records** and choose **Save links**; save the invoice to keep the filled-in names. Removing a job or technician alone keeps the field cleared. If you type exactly the names the field would fill in, it goes back to filling automatically. As with Job #, a typed value can be up to 1,000 characters; if an edit leaves the field over the limit, a message under it shows the count and **Save** stays unavailable until you shorten it.

[Duplicating an invoice](/revenue/invoices/create-an-invoice.md#duplicate-an-existing-invoice) keeps its selected technicians, so the copy fills the same way.

Default invoice templates print the label and names under Job #, near PO Number. Turning the setting off hides the field and its printed value while preserving typed values. A customized template can include it using **Technicians (when enabled)** in the template editor's variable inserter.

## Custom fields on quotes and invoices

Add fields from each page's Custom Fields tab with **Add custom field** — quote fields on the Quotes page, invoice fields on the Invoicing page. Short text, Long text, Yes/No, Date, and Choice types are available, plus the usual Required and Unique rules.

* Values are entered on the quote or invoice form and save with the document. Technicians can also view and fill them while creating or editing a quote or invoice from a visit in the mobile app. Mobile drafts retain the values while offline, and required fields must be completed before the document can be sent or finalized.
* **Date** fields use the same picker and entry format as the quote and invoice date. Saved values display as **Aug 2, 2026** on customer documents. The selected day stays the same across time zones. Optional dates can be cleared.
* Fields are **internal by default**. Turn on **Show on customer document** to print the field (name and value) on the customer-facing PDF and preview.
* If you customized your document template's code, add the **Custom fields** block to it once (from the variable inserter in the template editor) so the fields have a place to print. Built-in templates already include it.
* To carry a value from a quote to the invoice made from it, create an invoice field with the **same name and type** as the quote field — the value copies over automatically when you start the invoice from a signed quote.

Quote and invoice fields live only here. Your customer, property, asset, and job fields are managed separately under **Settings → Custom Fields** (in the Data & Integrations group) — see [Create and manage custom fields](/administration/settings/create-and-manage-custom-fields.md).

## Spot patterns with the custom fields report

The [custom fields report](/reporting-and-integrations/reporting/custom-fields-report.md) breaks down how values are distributed across your quotes and invoices — for example, how many quotes chose each service tier — and lets you click through to the matching documents.

## Related guides

* [Put a customer purchase order on an invoice](/revenue/invoices/put-a-customer-purchase-order-on-an-invoice.md)
* [Create and manage custom fields](/administration/settings/create-and-manage-custom-fields.md)
* [Set customer billing (payment terms, tax exempt, autopay)](/customers-and-work/customers/set-a-customers-billing-profile-payment-terms-tax-exempt-autopay.md)
* [Create a quote](/revenue/quotes/create-a-quote.md)
* [Create an invoice](/revenue/invoices/create-an-invoice.md)
* [Choose and customize your quote document template](/administration/settings/choose-and-customize-your-quote-document-template.md)


---

# 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://learn.withessential.com/revenue/quotes/custom-fields-and-po-numbers-on-quotes-and-invoices.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.
