The quick answer
Go to Setup > Import/Export > Import CSV Records and choose Import Type Transactions and Record Type Invoice, with Data Handling Add. Lay the file out with one row per item line and repeat each invoice's reference, customer and dates on every one of its rows. On Field Mapping, map that reference to External ID so NetSuite groups the rows into one invoice, map your invoice date to Date (Req) instead of the date the assistant proposes, and map item, quantity and rate into the Invoice - Items sublist. An invoice with no valid item line fails with "You must enter at least one line item for this transaction." Once the rows are grouped, the job counts invoices, not rows.
The screenshots show sample data. Person and operating-company names are fictional. Use your own records and values when following the steps.
Before you start
You need a role that can import CSV records and create invoices. The customers and items in the file have to exist already. Customer and Item start on reference type Names, so the file's values have to match the names in the format your account shows them, which can include a customer ID in front. If your file carries internal IDs instead, switch that row's reference type to Internal ID with the pencil on Field Mapping.
Each invoice needs its own reference, used on all of its rows and on no other invoice, and not already used as an External ID in NetSuite. Write dates in your account's date format; 10/01/2026 here is October 1. The invoice dates also have to fall in open accounting periods.
In this example, Northgate Rowing Club has one invoice, INV2207 for 315.40, still open. Their billing system exported billing-export-1002.csv with two new invoices in three rows. The example account has one subsidiary, US dollars, one A/R account, and no sales tax set up on these items. If your account uses OneWorld, several A/R accounts, sales tax, or required departments, classes or custom fields, those need columns or defaults too. Before you load a big file, import one two-line invoice and check it.
01. Check the customer's invoices
Go to Lists > Relationships > Customers and click View on Northgate Rowing Club. Open the Sales subtab, then Transactions. There's one invoice: INV2207, dated 09/18/2026, Amount 315.40, Status Open. That's the baseline you'll compare against after the import.
02. Review the billing export
Open billing-export-1002.csv. It has one row per item line, with the columns Invoice Ref, Customer, Invoice Date, Due Date, Item Name, Qty and Unit Price. BILL-1041 has two rows, 12 Dock Line at 18.50 and 4 Large Fender at 46.25, dated 10/01/2026 and due 10/31/2026. BILL-1042 has one row, 1 Hull Cleaning Service at 640.00, dated 10/02/2026 and due 11/01/2026. So the file holds two invoices in three rows.
Each invoice repeats its Invoice Ref, customer and dates on every one of its rows. That's what lets NetSuite put both BILL-1041 lines on the same invoice.
03. Start the import
Go to Setup > Import/Export > Import CSV Records. Choose Import Type Transactions and Record Type Invoice. Set Character Encoding to the encoding the file was saved in. This file came out of another system as UTF-8, so pick Unicode (UTF-8). Keep CSV column delimiter on Comma and One file to upload, click Select..., choose the file and click Next.
On Import Options, keep Data Handling on Add, because both invoices are new, and click Next. Update and Add or Update are for files that change invoices NetSuite already has.
04. Fix the proposed mapping
Field Mapping matched two columns by their header names: Customer to Invoice : Customer (Req) and Due Date to Invoice : Due Date. Two rows need work. Invoice : Date (Req) holds a proposed date instead of a column. If you leave it, every invoice in the job gets that date. And Invoice - Items : Item has no column yet.
Click Invoice Date under Your Fields, then Date (Req) under NetSuite Fields. The Date row now reads Invoice Date. Then click Invoice Ref and External ID. Rows that share BILL-1041 will become one invoice. NetSuite still numbers the invoices itself, and BILL-1041 and BILL-1042 stay on them as External IDs.
Map the reference to Invoice # only if your account lets you override generated transaction numbers and you really need the source number as the invoice number.
Due Date comes from the file here. Terms usually default from the customer and calculate a due date of their own, so if you also import Terms, check that the saved due date is the one you meant.
05. Map the item lines
Under NetSuite Fields, open Invoice - Items. Map Item Name to Item, Qty to Quantity and Unit Price to Rate. You don't need an Amount column, because NetSuite calculates it from quantity and rate. All seven columns are now mapped. Click Next.
If an item or customer has a price level that could reprice the line, the rate from your file may not stick. Add a Price Level column that says Custom, or give the Invoice - Items : Price Level row a default value of Custom with its pencil, then check a saved invoice.
06. Save the mapping and run it
On Save mapping & Start Import, type Billing export - invoices in Import Map Name. The next export from the same system can reuse this mapping instead of rebuilding it. Click Save & Run, which saves the mapping and starts the job.
The confirmation says the import was saved and the job is in process. Click Import Job Status. The job is Complete at 100.0% with 2 of 2 records imported successfully. Three rows, two records, because the count is invoices. If an invoice had failed, its error would be in CSV Response, and none of its lines would be saved. Don't run the whole file again with Add: the invoices that worked already have those External IDs, so those rows fail as duplicates. Fix the failed invoice and import only its rows.
07. Confirm the invoices on the customer
Go back to Northgate Rowing Club, Sales > Transactions. Three invoices are listed, newest first: INV2209 dated 10/02/2026 for 640.00, INV2208 dated 10/01/2026 for 407.00, then INV2207 for 315.40. All three are Open. INV2208 and INV2209 are numbers NetSuite generated.
Check the result
- Import Job Status reports 2 of 2 records imported successfully.
- The customer's Transactions subtab lists INV2208 for 407.00 and INV2209 for 640.00, both Open.
- INV2208 has both BILL-1041 lines, not one line each on two invoices.
- Each invoice carries the date and due date from the file, not the proposed date.
Click INV2208. It's for Northgate Rowing Club, dated 10/01/2026 and due 10/31/2026, with two lines: Dock Line 12 × 18.50 = 222.00 and Large Fender 4 × 46.25 = 185.00. Total 407.00. Both BILL-1041 rows landed on one invoice.
Unpaid, posted invoices like these count toward the customer's balance right away. In A/R aging they normally stay in Current until their due dates pass.
Common questions
Why did my import create one invoice per row?
NetSuite only puts rows on the same invoice when they share the value you mapped as the invoice's identifier, usually External ID. If that column isn't mapped, or the reference changes from row to row, each row becomes its own invoice. Repeat the same reference on every line of an invoice and map it to External ID.
Why does my invoice import say 0 of 1 records imported successfully?
The invoice failed and nothing from it was saved. Download the CSV Response from Import Job Status to see the error. A common one is "You must enter at least one line item for this transaction," which means no item column was mapped into Invoice - Items. A customer or item name that doesn't match NetSuite, or a date in a closed period, fails the same way.
Can I import my own invoice numbers?
Only if your account lets you override generated transaction numbers. You'd map the reference to Invoice #. Otherwise NetSuite numbers the invoices itself, like INV2208 and INV2209 here, and you keep the source reference in External ID.
Which fields does an invoice import need?
Customer, Date and at least one item line with Item and Quantity, plus Rate when the file carries prices. Depending on the account you may also need Subsidiary, A/R Account, Location, Department, Class, tax fields or required custom fields. The (Req) rows on Field Mapping and your custom form tell you which.
How do I reuse the saved import mapping?
Saving the Import Map Name on the last page stores the mapping as a saved CSV import. Next time, open it from Setup > Import/Export > Saved CSV Imports, pick the new file and run it. The new file needs the same column names, or the mapping won't line up.
Why are the rates on my imported invoices different from the file?
A price level on the item or customer can reprice the line. Add a Price Level column with Custom, or give the Price Level row a default value of Custom, so NetSuite keeps the rate from your file. Check one saved invoice before you import the rest.
Should I pick Windows 1252 or UTF-8?
Pick the encoding the file was actually saved in. Files exported by other systems are usually UTF-8, and UTF-8 handles accented and non-Latin characters. If names come through with garbled characters, the encoding was wrong.