Create a Custom Segment in NetSuite and Report Revenue by It

Create a GL-impacting Fulfillment Channel custom segment, apply it to sales orders and invoices, and split the NetSuite Income Statement into one column per channel.

The quick answer

Go to Customization > Lists, Records, & Fields > Custom Segments > New. Enter a Label, check GL Impact under Accounting, add the values on the Values subtab, and on Application & Sourcing > Transactions check Sales Transactions. Save. The segment shows up as a dropdown on sales orders and invoices, unless a custom form or your role hides it. Once invoices carry a value, open the Income Statement, set Column to the segment, for example Fulfillment Channel (Custom), and click Refresh. Revenue splits into one column per value, plus an - Unassigned - column for posting lines with no value. Decide GL Impact before you save. It can't be changed afterward, and without it the segment isn't available as a Column on financial statements.

The screenshots show sample data. Person and company names are fictional. Use your own segment, values and transactions when you follow the steps.

Before you start

Class, Department and Location are NetSuite's built-in classifications. A custom segment adds another one, with its own list of values, as a dropdown on the records you apply it to. This example adds Fulfillment Channel so finance can see how much revenue ships from the warehouse, ships directly from a vendor, or gets picked up by the customer.

You need the Custom Segments feature turned on under Setup > Company > Enable Features > SuiteCloud, in the SuiteGL section, and a role that can create custom segments, enter sales orders and invoices, and run the Income Statement. The example uses an Administrator. In the screenshots, Alex Morgan is signed in to Example Supply Co. Document numbers such as SO-3318 and INV-2231 come from the example account, so yours will differ.

Fulfillment Channel here is a value someone picks on the transaction. NetSuite doesn't work it out from the actual fulfillment or check it against a drop ship purchase order. It's also different from the standard Sales Channel field that some sales forms show under Classification. Sales Channel is for sales and order analysis and generally isn't an Income Statement column. A GL-impacting segment can be one, once posting lines carry its values.

This guide covers creating a segment and reporting by it. If you already have a GL-impacting segment and need each value to balance its own debits and credits, that's a different job: see balancing segments in NetSuite.

01. Check the starting report

Go to Reports > Financial > Income Statement and set the period to Sep 2026. With Column set to Total, 4000 Sales shows $1,200.00.

Before the segment exists, Sep 2026 sales are one number: $1,200.00.

Click the amount to see what's behind it. The detail lists one invoice, INV-2207 for Oakline Builders, dated 09/08/2026, for $1,200.00. It was entered before any fulfillment channel existed, which matters in step 06.

The $1,200.00 is one invoice, INV-2207, entered before the segment.

Go back to the summary and open the Column dropdown in the report footer. It starts with Total, then the standard classifications, each with a (Hierarchy) version: Class, Department, Location and, further down, Subsidiary. There's nothing for fulfillment channel.

The Column list only has the standard classifications so far.

02. Create the segment

Go to Customization > Lists, Records, & Fields > Custom Segments > New. Enter Fulfillment Channel in Label. Leave ID blank and NetSuite generates one that starts with cseg. The number after it depends on your account.

Label filled in, ID left blank. GL Impact is next.

Under Accounting, check GL Impact. This is the setting to get right. It lets the segment value carry onto general ledger lines, and only a GL-impacting segment can be a column on a financial report like the Income Statement or Balance Sheet. It can't be switched on or off after the first save. A segment without GL Impact still works on transactions and in saved searches.

On the Values subtab, type Warehouse Ship and click Add, then do the same for Vendor Direct and Customer Pickup. Leave Inactive unchecked so all three can be picked on transactions.

GL Impact checked, and the third value, Customer Pickup, going in on the Values subtab.

03. Apply it to sales transactions

Open Application & Sourcing, then its Transactions subtab. Under Application, check Sales Transactions. That puts the field on the header (body) of sales transactions, including sales orders and invoices. Leave the Applied list of other record types and the Transaction Columns subtab alone for this header-level setup.

Sales Transactions is the only box checked under Application.

Open Validation & Defaulting. Leave Mandatory unchecked and Default Selection blank. That lets someone save a transaction without a channel, and those show up as unassigned on the report. Click Save.

Not mandatory, no default. Then Save.

In the example, the saved segment gets the ID cseg1. The Record ID, customrecord_cseg1, is the custom record type that holds its values. GL Impact is checked, and the Values subtab lists the three values in the order you entered them.

The saved segment: GL Impact checked and three values.

04. Tag a sales order and bill it

Go to Transactions > Sales > Enter Sales Orders. Select customer Pinecrest Hardware and date 09/15/2026. On this form, the new Fulfillment Channel field sits under Classification, below the standard Sales Channel field. Yours may be elsewhere if your form is customized. Select Warehouse Ship.

Fulfillment Channel is its own field, separate from Sales Channel above it.

Add 40 Cedar Planter Box at a rate of 120.00, for an amount of 4,800.00, and save. The order is SO-3318, Pending Fulfillment, with Fulfillment Channel Warehouse Ship. Approve it first if your approval routing requires it. A sales order doesn't post to the general ledger, so nothing reaches the Income Statement yet.

SO-3318 saved with Warehouse Ship. The Bill button is in the row under the title.

Click Bill on SO-3318. The new invoice already shows Fulfillment Channel Warehouse Ship, carried over from the order. That's the normal behavior with the segment applied to both, but check the field before you save. If it's empty, pick the value. Save it. It's INV-2231 for 4,800.00, and this is the posting that reaches the Income Statement.

Billing the order carries Warehouse Ship onto the invoice.

Whether Bill is there depends on Advanced Shipping, the order's status, your billing settings and your role. You may have to fulfill the order first, or bill it through Invoice Sales Orders instead.

05. Enter a vendor-direct invoice

Go to Transactions > Sales > Create Invoices. Select customer Dana Whitfield, date 09/16/2026, and Vendor Direct in Fulfillment Channel. Add 5 Cedar Planter Box at a rate of 130.00, for an amount of 650.00, and save. It's INV-2232.

INV-2232: 650.00, tagged Vendor Direct.

06. Report sales by channel

Go back to the Income Statement for Sep 2026. Total is now $6,650.00. Open the Column dropdown. Fulfillment Channel (Custom) is listed after Subsidiary (Hierarchy), with a (Hierarchy) version below it. It's there because the segment has GL Impact. Select Fulfillment Channel (Custom) and click Refresh.

Fulfillment Channel (Custom) is now a Column choice.

4000 Sales splits into Warehouse Ship $4,800.00, which is SO-3318 billed as INV-2231, Vendor Direct $650.00, which is INV-2232, and $1,200.00 under - Unassigned -. That's INV-2207, entered before the segment existed. Customer Pickup had no activity in Sep 2026, so it gets no column. The Total column still shows $6,650.00: $1,200.00 + $4,800.00 + $650.00. The channel columns divide the same revenue. They don't add to it.

Unassigned $1,200.00, Vendor Direct $650.00, Warehouse Ship $4,800.00, Total $6,650.00.

Check the result

  1. The Column dropdown lists Fulfillment Channel (Custom) and Fulfillment Channel (Custom) (Hierarchy).
  2. Warehouse Ship shows $4,800.00, the invoice billed from SO-3318.
  3. Vendor Direct shows $650.00, INV-2232.
  4. - Unassigned - shows $1,200.00, INV-2207, which has no channel.
  5. Total still shows $6,650.00, the same revenue as before the split.

The report groups by the value on each posting line, not by what the header says. To see what landed where, open an invoice's GL Impact and check the revenue and receivables lines. Tax, discount and line-level values can follow different rules. Here, - Unassigned - appears because one posting line in the period has no channel. In OneWorld accounts, confirm the subsidiary context, and with Multi-Book, the accounting book, before comparing channel columns with Total.

07. Check what is locked

Go back to Customization > Lists, Records, & Fields > Custom Segments and open Fulfillment Channel in Edit. GL Impact is greyed out. It's fixed from the first save.

In Edit, GL Impact can't be changed anymore.

Applying the segment didn't touch INV-2207. It stays - Unassigned - until someone edits it, imports a correction or reclassifies it. Closed periods, approvals and permissions decide which of those you can use. You can add record types to the segment later, but removing one that already has tagged transactions is restricted. If your transaction forms hide the field, show it through Customize Form, or ask someone with access to form customization.

Common questions

What does GL Impact do on a custom segment, and can I turn it on later?

GL Impact lets the segment value carry onto general ledger lines, which is what makes it usable as a column on the Income Statement and other financial reports. You set it when you create the segment. After the first save it's locked, which is why it's greyed out in Edit. If you saved without it, you need a new segment with GL Impact checked, and a plan for moving values onto it.

Why doesn't my custom segment show up in the Income Statement Column dropdown?

Check that the segment has GL Impact and is applied to the transactions that post, such as Sales Transactions. Your role also needs access to the segment. Once that's right, the report lists it with a (Custom) suffix, like Fulfillment Channel (Custom).

What's the difference between a custom segment and a custom transaction body field?

A body field stores extra information on the transaction header. It doesn't classify the GL lines, so it can't split a financial statement. A GL-impacting custom segment works like Class or Department, so reports such as the Income Statement can group amounts by its values. Use a body field for operational notes and a segment when the value needs to be a reporting dimension.

What's the difference between a custom segment and the standard Sales Channel field?

Sales Channel is a standard field for sales and order analysis. A custom segment is a classification you define, with your own values like Warehouse Ship, Vendor Direct and Customer Pickup, and with GL Impact it can split financial reports. If Sales Channel already means what you need, use it. If you need a separate dimension on the financials, create a segment.

Does the sales order's segment value carry to the invoice?

Normally, yes, when the segment is applied to both at the header level. In this example, Warehouse Ship on the $4,800 sales order showed up on the invoice created with Bill. Still check the invoice, especially if you have workflows, scripts, custom forms or a line-level segment.

Why do older transactions show as - Unassigned - on my report by segment?

Creating a segment doesn't go back and tag anything. Transactions saved before it existed, or saved without a value, stay unassigned. Here the $1,200 invoice sat under - Unassigned - while the total stayed $6,650. Fix them by editing the transactions, a controlled CSV import, or leave them unassigned if nobody knows the right value.

Should I make a custom segment mandatory?

Only when every transaction it applies to has a real value and the person entering it knows what it is. Mandatory gets you complete data, but it can break imports, integrations and workflows that don't supply the value. Optional is safer when some transactions don't belong to any channel.

Should the segment go on the transaction header or on the lines?

Header works when one value covers the whole transaction, which is what this guide sets up. If one invoice can contain several channels, apply the segment to transaction lines on the Transaction Columns subtab instead, so each line carries its own value.

How many custom segments should I create?

One per business question that an existing classification can't answer. Put the choices in its values: one Fulfillment Channel segment with three values, not three segments. Every segment is another field someone has to fill in, so skip the ones nobody will report on.