Skip to main content

Importing & Exporting Purchase Orders

You can export purchase orders from Endless for reporting and review, and you can also import purchase orders in bulk with a CSV file.

Importing Purchase Orders

To import purchase orders, open the purchase orders list and use the import action to upload a CSV file.

How It Works

Purchase order import is an upsert workflow keyed on PO Number, and it groups rows with the same PO Number into a single purchase order with multiple line items.

  • If the PO Number does not already exist, Endless creates a new purchase order.
  • If the PO Number matches an active purchase order, Endless updates that purchase order.
  • If the PO Number matches an archived purchase order, the import fails.

Newly created purchase orders start in Draft status and the Pre-Production milestone, regardless of any dates you set on that row.

When a row updates an existing purchase order, blank cells are treated as no change and will not replace existing values.

The entire file is validated before any purchase order is created or updated. If any row is invalid, the whole import fails and nothing is changed. After a successful import, Endless reports how many purchase orders were created and how many were updated.

Before You Begin

Use PO Number and Item SKU values consistently, and decide whether each row should create or update a purchase order. Because the whole file must be valid before anything imports, review every reported error before re-uploading rather than fixing them one at a time.

Columns

Required Columns

  • PO Number - Main identifier used to match an existing purchase order for updates. Required on the first row for each purchase order. Up to 50 characters, using only letters, numbers, underscores, hyphens, and periods.

Item Fields (Optional)

  • Item SKU - Must match an existing product SKU in your company. Leave blank for a header-only row that only sets purchase order fields. Up to 40 characters.
  • Item Qty Ordered - Quantity ordered for that line item. Defaults to 1 when Item SKU is present and this is left blank. Must be zero or greater.
  • Item Unit Cost - Cost per unit for that line item. Must be zero or greater.
  • Item Lead Time - Lead time in days for that line item. Must be zero or greater.

Purchase Order Details (Optional)

  • Supplier Name - Must exactly match the name of an active supplier in your company.
  • Incoterms - Use an Incoterms abbreviation such as FOB, EXW, or DDP.
  • Payment Terms - Free text, such as Net 30.
  • Special Instructions - Free text notes for the purchase order.
  • Financial Status - Options are unpaid, partially_paid, paid.
  • Cost Allocation Status - Options are incomplete, complete.

Date Fields (Optional)

  • Issue Date
  • Confirmed Date
  • Expected Date
  • Expected Complete Date
  • Ship Date - Can be set even when creating a new purchase order, which is useful for backfilling a historical purchase order that has already shipped. Setting Ship Date does not change the purchase order's status or milestone.

Date fields accept YYYY-MM-DD (for example 2026-07-15), MM/DD/YYYY or M/D/YYYY (for example 7/15/2026), and written-out dates like July 15, 2026. Dates are read month first, so day-first formats such as 15/07/2026 are not supported and may be rejected or read as a different date.

Other exported columns, such as Status, Milestone, Line Count, Unit Count, totals, contact fields, and supplier contact details are not editable through import.

Updating Existing Purchase Orders

When a row updates an existing active purchase order, blank cells are ignored and do not clear existing values.

For line items, Endless matches imported rows to existing purchase order lines by Item SKU within the purchase order:

  • If the SKU already exists on that purchase order, Endless updates the supported line fields: Item Qty Ordered, Item Unit Cost, and Item Lead Time.
  • If the SKU is new to that purchase order, Endless adds a new line item.
  • If an existing line item is not included in the CSV, it is left unchanged.
  • If the same Item SKU appears more than once for the same PO Number in one file, the import fails.

For header fields, Endless uses the first non-blank value for that PO Number. If the same header field has conflicting non-blank values across rows for the same PO Number, the import fails.

You can create or update only header fields by importing a row with PO Number and the header fields you want to set, leaving Item SKU and the other item fields blank.

Import Rules

  • The uploaded file must be a CSV file
  • Rows where both PO Number and Item SKU are blank are skipped
  • Item rows with a blank PO Number are treated as part of the previous purchase order
  • Any row that includes item quantities, costs, or lead times must include Item SKU
  • Existing archived purchase orders cannot be updated by import
  • Unsupported columns are ignored and listed in the import result

CSV Examples

This is the smallest valid file:

PO Number,Item SKU,Item Qty Ordered
PO-1001,SKU-RED-S,10

This example creates one purchase order with two line items and sets several header fields:

PO Number,Supplier Name,Incoterms,Payment Terms,Expected Date,Financial Status,Item SKU,Item Qty Ordered,Item Unit Cost,Item Lead Time
PO-1001,Acme Manufacturing,FOB,Net 30,2026-07-15,unpaid,SKU-RED-S,10,12.50,14
,,,,,,SKU-BLUE-M,5,14.00,14

This example sets only header fields, with no line items:

PO Number,Supplier Name,Expected Date
PO-1002,Acme Manufacturing,2026-08-01

This example backfills a historical purchase order that has already shipped:

PO Number,Ship Date,Item SKU,Item Qty Ordered
PO-2001,6/1/2026,SKU-RED-S,25

PO-2001 is created with its Ship Date set, even though it is a new purchase order. Its status and milestone are still Draft and Pre-Production.

Troubleshooting

If a row created a new purchase order when you expected an update, the PO Number most likely did not exactly match an existing purchase order — check for typos, extra spaces, or a different format than what's in Endless.

If the entire import failed, remember that one invalid row fails the whole file — nothing is created or updated until every row is valid. The failure notification lists the reasons and the affected PO Number values, so check each reason against the columns above.

If a date was rejected or imported as an unexpected date, check that it is written month first — day-first formats such as 15/07/2026 are not supported.

If Ship Date does not seem to affect a purchase order's status, that is expected. Status and milestone are managed separately from the dates you import.

The safest workflow is to export purchase orders from Endless, keep the rows you want to update, edit supported import columns, and import the file back into Endless. Starting from an export helps preserve valid PO Number and Item SKU values.

Before importing, remove or leave any export-only columns you do not intend to edit. Unsupported columns are ignored and listed in the import result.

Exporting Purchase Orders

Purchase orders export gives you purchase order data in CSV format. It is useful for reporting, reconciliation, operational review, and sharing purchase order details outside Endless.

Included Data

The default purchase order export is designed for export, edit, and reimport workflows. It includes purchase order header fields plus the supported item fields: Item SKU, Item Qty Ordered, Item Unit Cost, and Item Lead Time.

The first row for each purchase order includes purchase order-level data. Additional item rows for the same purchase order leave the purchase order header columns blank. If a purchase order has no active line items, it still appears in the export, with the item columns left blank.

The complete purchase order export is the verbose reporting version. It includes additional supplier details, contact details, derived totals and counts, audit person fields, and product reference fields that are not intended for reimport.