NetSuite Purchase Order Import: Supplier PO PDFs to CSV Import Assistant Templates, Excel, and the REST API

NetSuite loads purchase orders through the CSV Import Assistant, and the assistant expects columns: an External ID repeated on every row, a Vendor that already exists in NetSuite, and at least one item line. PurchaseOrders handles the part the assistant cannot do. It reads the supplier purchase order in whatever layout it arrived in and returns the order number, vendor, dates, item codes, quantities and rates as clean CSV or Excel you can map into the import. Upload a real purchase order below.

PDF, JPG, PNG, BMP, HEIC, TIFF

Submit your purchase orders

PDF, scan, or photo
Header and line items
CSV and Excel output
Any supplier layout

Why a NetSuite Purchase Order Import Fails More Often Than It Should

The CSV Import Assistant is not difficult once the file is right. Getting the file right is where the time goes, because NetSuite enforces rules that are not obvious from the mapping screen.

The External ID Has to Repeat on Every Row

NetSuite needs one unique ID per record, and in a single-file import that value has to appear on every line of the order, not just the first. Leave it blank on the continuation rows and the assistant reads each line as a separate purchase order.

External ID and PO Number Are Different Columns

The External ID is the key the import uses to identify and re-identify the record. The PO Number your buyer quotes is a separate field. Teams routinely map the supplier order number into the External ID, then cannot re-run the load without creating duplicates.

Items Plus Expenses Forces a Multi-File Import

A purchase order that carries only item lines can go in as one file. As soon as the order also has expense lines, NetSuite requires the multiple-file format: a primary file for the header and separate sublist files, all joined by the External ID.

Suppliers Send PDFs

None of that matters until the data is in columns. The order arrives as a PDF attachment or a scan, and the columns the assistant wants have to come from somewhere. That is the step that is still done by hand in most AP and purchasing teams.

What PurchaseOrders Does, and What It Does Not Do

PurchaseOrders is a document data capture layer. It reads a purchase order and returns structured fields you can map into a CSV Import Assistant template or a REST payload. It does not connect to NetSuite, does not run the import, and does not write to any NetSuite record. The load stays yours to run.

Reads the Header the Assistant Asks For

The AI pulls the order number, vendor, order date, expected receipt date, currency and memo, which covers the mainline columns a purchase order import needs before the sublist is mapped.

Captures Every Item Line

Each line comes back with the item code, description, quantity, rate and amount, so the items sublist can be built from one extraction instead of a line-by-line retype into the record.

Keeps the Vendor Part Number

Supplier documents print the vendor part number, not your internal item name. That value is what you reconcile against the NetSuite item record before the import, and it is the most common reason an otherwise clean file fails on the Item column.

Outputs CSV, Excel, JSON or API

The Import Assistant takes CSV. SuiteTalk REST takes JSON. The same extraction feeds either route, so a one-time migration and a scripted daily feed start from the same data.

What a NetSuite Purchase Order Import File Has to Contain

These are the columns that decide whether the import posts or errors. The first four are effectively mandatory for a new purchase order record.

Column What it does Key notes
External ID Unique key for the record Must appear on every row of the order in a single-file import
Vendor Links the order to a vendor record Has to match an existing vendor by name, internal ID or external ID
Item The item on each sublist line Must already exist in NetSuite, full hierarchy path included
Quantity and Rate Line quantity and unit price Amount can be derived, but supplying it avoids rounding surprises
Date Transaction date Has to match the date format on the importing user profile
PO Number The visible order number A separate field from External ID, not a substitute for it
Exchange Rate Currency conversion rate Required when the Multiple Currencies feature is enabled
Subsidiary Owning subsidiary Required on OneWorld accounts, ignored on single-entity accounts

From Supplier PDF to a NetSuite Import File in 3 Steps

The extraction removes the typing. The import stays yours to run inside NetSuite, with your own roles and your own audit trail.

1

Upload the Purchase Order

Drag in the PDF, scan or photo exactly as it arrived. There is no template to configure first and no supplier layout to teach the system in advance.

Tip: Multi-page orders and mixed vendors in one batch are fine.

2

Review the Header and Lines On Screen

Check the order number, vendor, dates and the line table before you export. Fixing a quantity here takes seconds. Finding it in a NetSuite import job log after a partial load takes far longer.

Tip: Check units of measure, because a case-versus-each mismatch posts a valid but wrong order.

3

Export and Map It Into the Import

Download CSV or Excel, add the External ID column, then run Import CSV Records with Transactions as the import type and Purchase Order as the record type. Save the field mapping so the next load is a two-click job.

Tip: Run the first pass on a handful of orders before loading the full batch.

Why NetSuite Teams Extract the PO First

PDF
Any source document
CSV
Import-ready output
Any
Supplier layout

Security & Privacy

  • Bank-grade TLS encryption in transit
  • Files auto-deleted after processing
  • Your PO data is never sold or shared
  • US-based cloud infrastructure

NetSuite Purchase Order Import: Common Questions

Go to Setup, then Import/Export, then Import Tasks, then Import CSV Records. Choose Transactions as the import type and Purchase Order as the record type, upload the CSV, map the columns to NetSuite fields, and run the job. Save the mapping so later loads reuse it instead of being remapped by hand.

A unique External ID or Internal ID, a Vendor that already exists in NetSuite, and at least one item line. NetSuite will not create a new purchase order record with no lines. Exchange Rate becomes required when the Multiple Currencies feature is on, and Subsidiary is required on OneWorld accounts.

Because the External ID is missing from the continuation rows. In the single-file format the unique ID has to appear on every line belonging to the order, not only the first. NetSuite groups rows into one record by that repeated value, so a blank cell reads as a brand new order.

Yes, as long as the order carries item lines only. Write one row per line and repeat the header columns and the External ID on each row. The moment the order also needs expense lines, NetSuite requires the multiple-file format instead, with the header and each sublist in its own file.

A single file repeats the header data on every sublist row. A multiple-file import splits the load into a primary file holding the mainline data and separate files for the items and expenses sublists, joined by the External ID present in all of them. Items plus expenses on the same order requires the multiple-file route.

No. External ID is the unique key the import uses to identify the record and to update it on a later run. PO Number is the order number people quote to the vendor. Mapping the supplier order number into External ID works once, then blocks any clean re-import because the key is no longer under your control.

Match on a sublist key field. NetSuite uses Line or Order Line, or the Item itself, to decide whether an incoming row updates an existing line or appends a new one. Without a stable key on the row the import appends, which is how duplicate lines appear on an order that was only meant to be corrected.

Yes. SuiteTalk REST exposes purchase orders as a record endpoint at /services/rest/record/v1/purchaseOrder on your account-specific domain, which takes the form of your account ID followed by suitetalk.api.netsuite.com. That route suits a continuous feed, while the CSV Import Assistant suits a one-time or periodic bulk load.

No. PurchaseOrders reads purchase order documents and returns the data as CSV, Excel, JSON or API output. It does not connect to NetSuite, does not run the CSV Import Assistant, and does not write records. You run the import yourself, which keeps your roles, permissions and audit trail intact.