Skip to main content
Add a custom field to transaction lines when the value changes from line to line, such as a project code, a receipt date, or an external tracking ID on each expense line of a bill. A line-level field is the same kind of custom field you already use on record headers, turned on for the Details level instead of, or as well as, the Header level. Each line then holds its own value, separate from the header value and from every other line. After you complete these steps, the record’s line table has a Custom Fields column, and each line’s value appears on that line in the app, in reports, and in the public API.

Prerequisites

Before you add a line-level custom field, check the following:
  • Your organization subscribes to custom fields, and your role lets you create and edit them. Custom fields live under Configuration → Accounting Setup → Custom Fields.
  • The record type you want supports line-level fields. Bills, invoices, journal entries, and 11 other record types do; see Header and line levels for the full list and which lines on each record accept a value.
  • If custom field changes are under an approval workflow, a new or edited field can stay inactive until the change is approved.

Turn on a custom field for transaction lines

You choose the level for each record type on the field’s Access tab. A field can be shown at the Header level, the Details level, or both, and each level has its own Required setting.
  1. Navigate to Configuration → Accounting Setup → Custom Fields. Select New field to create a field, or open an existing field and edit it.
  2. On the Field tab, set the Field Type and Label. The label is what appears in the line drawer and in report columns, so use a name that reads well on its own, such as Project code. You can’t change the type after the field is created.
  3. Open the Access tab. The Availability table lists each record type once, with a Header group and a Details group of columns. Header applies to the record as a whole; Details applies to individual line items.
  4. For each record type that needs the field on its lines, turn on Show Field under Details. Turn on Show Field under Header as well if the record also needs one value for the whole transaction.
  5. Select Required under Details only if every line must have a value. You can mark a level required only where the field is shown.
  6. Optionally, under Company Access, select Edit access and choose the companies that can use the field. With no companies selected, every company can use it.
  7. Save the field.
The first row of the Availability table, All records, turns Show Field and Required on or off for every record type in that group at once. Record types with no line-level support, such as customers, vendors, contracts, and fixed assets, have no Details controls. Purchase orders, quotes, and intercompany journal entries work the other way: they accept custom fields only on their lines, so they have no Header controls.

Enter custom field values on a line

Once a field is shown at the Details level, the record’s line table gets one Custom Fields column, placed right after Classifications. The column appears only when at least one active line field is available to the record’s company, and each line’s values are edited in a drawer.
  1. Open or create the record, and select its company first. The column lists only fields available to that company.
  2. On the line you want to fill in, select + in the Custom Fields column. A line that already has values shows the number of filled fields instead; select it to edit them.
  3. Check Line Details at the top of the Custom Fields drawer to confirm which line you are editing. It shows the line number and, where the line has them, its account, item, amount (or debit and credit on a journal entry), and description.
  4. Enter values under Custom Fields. When a record type has more than 10 line fields, use the search box to find a field by name. If any line field is required, a Complete or Incomplete badge shows whether this line’s required fields are filled.
  5. Select Save to apply the values to that line only, or Cancel to discard them.
  6. Repeat for the other lines, then save the record.
On a saved record that you are viewing rather than editing, the drawer opens read-only and lists only the fields that have a value.

How line values behave when you save, copy, or change a record

Line values follow the line, not the record, so a few everyday actions treat them differently from header values.
  • Required fields: the Custom Fields column header shows a required marker when at least one line field is required. If you save the record with a required line field empty, that line’s cell turns red and the drawer marks the field, for example Project code is required. An empty multi select counts as missing.
  • Default values: if a field has a default value, new lines start with it filled in.
  • Duplicating a record: line values copy to the new record’s lines. Values for fields that are no longer active on that record type are left out.
  • Changing the company: when you change the record’s company, values for fields not available to the new company are cleared from every line.
  • Lines with their own company: when a line belongs to a different company than the record, such as a line on an intercompany journal entry, the field’s company list is checked against the line’s company.
  • Payment lines: on customer payments, deposits, and refunds, only account lines on the Other tab accept line fields. On a customer refund, a line that stops being an account line loses its line values.
Line values never post to the general ledger. Correcting one on a posted record changes no balance and needs no reversing entry.

Troubleshooting

The table below lists common problems with line-level custom fields and how to fix them: For the API fields, bulk import columns, and reporting coverage behind these steps, see the custom fields reference. To compare line-level custom fields with classifications, see Classifications.
Last modified on November 3, 2026