## TL;DR

NetSuite rejects vendor bills with no lines, and imports often fail this check because expense lines were sent in the wrong file or sublist. For expense-based bills, use two files: one for the bill header (external ID, date, vendor) and one for expense lines keyed by the header external ID. For item-based bills, ensure the item sublist has at least one line with an item reference.

## Error

```text
You must enter a line item for this transaction
```

## Steps

1. Determine whether the bill is expense-based or item-based.
   Expected: The correct import shape.
2. For expense bills, split into header file and expense-line file linked by external ID.
   Expected: Two files with matching keys.
3. For item bills, include at least one line with a valid item internal ID.
   Expected: A bill NetSuite accepts.
4. Re-run the import and check the first error, not just the count.
   Expected: The real blocker surfaces first.
5. On success, verify the bill total matches the invoice total.
   Expected: No silently dropped lines.

## When to use

- CSV or API import of NetSuite vendor bills fails
- Expense-line bills imported as single file
- Migrating AP data into NetSuite

## When not to use

- Bills entered in the NetSuite UI
- QuickBooks, Xero, or SAP
- Line-item pricing errors

## Compatibility

NetSuite CSV import and SuiteTalk/REST API. Applies to vendor bill records.

## Variant phrasings

### NetSuite vendor bill line item required

### must enter a line item transaction

### vendor bill import no lines

## Root cause

NetSuite models bills as header plus sublist lines, and the API/CSV import validates the sublist presence. Expense bills need the expenses sublist populated via the two-file pattern; a single flat file leaves the sublist empty.

## Edge cases

- The expense file must use Total, not Amount, as the column name
- External IDs must be unique across the header file
- Multi-subsidiary bills need the subsidiary on the header

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_MvkdbML6eyAAtnIJJBRVXA
