Order Manager export columns reference
This page lists every file and column the Extensiv Order Manager migration reads. Use it while you prepare your exports, or when the plan report says a column is missing. For the steps of the whole move, see Move from Extensiv Order Manager to SKU.io.
How the files are read
| Aspect | Behavior |
|---|---|
| File type | Comma-separated .csv, one file per kind of record, with a header row. |
| File names | Exactly the names below (products.csv, stock.csv, …). Every file is optional — leave one out and that step has nothing to load. |
| Header matching | Headers are compared after lower-casing and dropping spaces and punctuation, so Master SKU, master_sku and masterSku are the same column. Each field accepts several header names, so Order Manager's own export headers work as they are. |
| Column order | Doesn't matter. Columns the migration doesn't know are ignored. |
| Missing required column | The whole file is refused. The plan report shows a Blocking issue that names the missing column and lists the headers it found. |
| Numbers | $, thousands separators and spaces are stripped, so $1,250.00 reads as 1250. |
| Yes/no values | 1, true, yes, y and active mean yes; 0, false, no, n and inactive mean no. A blank uses the default given below. |
| Lists | Several values in one cell are separated by ,, ; or ` |
| Dates | Any common format (2026-03-01, 03/01/2026, 2026-03-01 14:30). A date with no time zone is read as your account's own time zone. |
| Text | Leading and trailing spaces are trimmed. |
products.csv
One row per product, bundle or virtual product.
| Field | Required | Header names accepted | Format | Notes |
|---|---|---|---|---|
| SKU | Yes | masterSku, sku, productSku | Text | Becomes the product's SKU. Two SKUs that differ only in case or spacing are a duplicate. |
| Name | Yes | name, productName, title | Text | |
| Type | No | type, productType | CORE_PRODUCT, BUNDLE_KIT (also bundle, kit), VIRTUAL_PRODUCT (also virtual) | Blank or anything else is a standard product. A virtual product becomes a one-component bundle. |
| Barcode | No | upc, barcode, ean, gtin | Text | Two products sharing a barcode are a possible duplicate. |
| MPN | No | mpn | Text | |
| Brand | No | brand | Text | A brand that doesn't exist in SKU.io yet is created. |
| Description | No | description | Text | |
| Cost | No | vendorCost, cost, defaultCost, unitCost | Number | The product's unit cost. Also the last fallback cost for opening stock with no cost of its own. |
| Cost currency | No | vendorCostCurrency, costCurrency, currency | Currency code, e.g. USD | A cost in a currency other than your account's is dropped, with a warning. |
| Weight | No | weight, weightOz, weightOunces | Number, in ounces | |
| Pounds, Ounces | No | pounds (weightLb, weightLbs), ounces | Number | Used when there's no weight column, the way Order Manager's screens split weight. Pounds × 16 + ounces. |
| Length, Width, Height | No | length, width, height | Number, in inches | |
| Active | No | active, status | Yes/no | Default yes. An inactive product loads only when stock, an open PO or an active bundle needs it. |
| Labels | No | labels, label, tags | List | Each label becomes a tag on the product. |
| Categories | No | categories, category | List | The first category that already exists in SKU.io becomes the product's primary category. The rest become tags. No new categories are created. |
| Custom fields | No | Custom: <name>, Custom Field: <name>, cf_<name> | Text | One column per field. Each becomes a product attribute named <name>, created if needed. Blank values are skipped. |
| Order Manager ID | No | productId | Text | Kept for reference only. |
bundles.csv
One row per component of a bundle. A bundle with three components has three rows.
| Field | Required | Header names accepted | Format | Notes |
|---|---|---|---|---|
| Bundle SKU | Yes | bundleSku, bundleMasterSku, kitSku, parentSku, masterSku | Text | Must also be in products.csv as a bundle. |
| Component SKU | Yes | componentSku, bundledProductSku, bundledProductMasterSku, bundledItemSku, childSku, component | Text | Must be in products.csv. Can't contain ,, -> or →. |
| Quantity | Yes | quantity, bundledProductQuantity, qty | Positive number | How many of the component one bundle holds. |
A bundle is skipped as a whole — never loaded with part of its recipe — when any of its rows is bad,
a component is missing from products.csv, a component is itself a bundle, or it has no rows at
all. Each case is an error in the plan report.
vendors.csv
One row per vendor. Vendors become suppliers.
| Field | Required | Header names accepted | Format | Notes |
|---|---|---|---|---|
| Name | Yes | name, vendorName, vendor | Text | Matched to an existing supplier by name, so loading twice doesn't create a second one. |
| No | contactEmail, email | |||
| PO email | No | purchaseOrderEmail, poEmail | Where purchase orders are sent. | |
| Phone | No | contactPhone1, contactPhone, phone | Text | |
| Website | No | website | Text | |
| Address | No | address1 (address), address2, city, state (province), zipCode (zip, postalCode), country | Text | Three-letter country codes (USA) are converted. |
| Active | No | active | Yes/no | Default yes. |
| Order Manager ID | No | vendorId | Text | Reference only. |
vendor_products.csv
One row per vendor and product pair. These become the product's suppliers.
| Field | Required | Header names accepted | Format | Notes |
|---|---|---|---|---|
| Vendor | Yes | vendor, vendorName | Text | Must match a name in vendors.csv. |
| SKU | Yes | masterSku, sku, vendorProductMasterSku | Text | |
| Vendor SKU | No | vendorSku, supplierSku, vendorProductVendorSku | Text | The supplier's own code for the product. |
| Cost | No | cost, vendorCost, unitCost, price | Number | Where Order Manager has price tiers, use the lowest. Second fallback cost for opening stock. |
| Lead time | No | leadTime, leadTimeDays | Whole days | |
| Minimum order | No | minOrderQuantity, moq | Number | |
| Default | No | defaultProduct, default, isDefault, primaryVendor | Yes/no | Default no. Marks the product's default supplier. |
| Currency | No | currency, costCurrency | Currency code | A cost in another currency is dropped, with a warning. |
warehouses.csv
| Field | Required | Header names accepted | Format | Notes |
|---|---|---|---|---|
| Name | Yes | name, warehouseName, warehouse | Text | Matched by name and type. Names that differ only in case are one warehouse. |
| Type | No | type, warehouseType | See below | |
| Email, Phone | No | contactEmail (email), contactPhone (phone) | Text | |
| Address | No | address1 (address), address2, city, state (province), zipCode (zip, postalCode), country | Text | |
| Active | No | active | Yes/no | Default yes. |
| Order Manager ID | No | warehouseId | Text | Reference only. |
| Order Manager type | Result in SKU.io |
|---|---|
DIRECT_FULFILLMENT | Your own warehouse. |
RETAIL_STORE | Your own warehouse, with a warning to check it. |
THIRD_PARTY_LOGISTICS | A 3PL warehouse. |
SALES_CHANNEL (for example FBA) | Not created. SKU.io creates it when you connect that channel, and its stock comes from the channel. |
DROPSHIP_VENDOR | Not created. Every supplier has its own warehouse in SKU.io. |
stock.csv
One row per cost layer: the units still on hand from one receipt, at that receipt's cost. Opening stock is loaded as one initial stock take per warehouse, with one line per row here, oldest first. See How opening stock keeps its FIFO cost.
| Field | Required | Header names accepted | Format | Notes |
|---|---|---|---|---|
| SKU | Yes | masterSku, sku | Text | |
| Warehouse | Yes | warehouse, warehouseName | Text | The header is required; a blank cell means the stock is in no warehouse, which is an error. |
| Quantity | Yes | onHand, onHandQuantity, availableQuantity, quantity, qty | Number, 0 or more | Negative stock is an error: fix it in Order Manager and export again. |
| Unit cost | No | unitCost, unitPrice, cost | Number, at least 0.01, up to 4 decimals | Blank uses the default supplier's cost, then the product's cost, with a warning. With none of them the row is an error. |
| Received date | No | receivedDate, date | Date and time | Sets the order layers load in, oldest first, so the oldest cost is used up first. In SKU.io every opening layer is dated to your inventory start date. |
| Layer ID | No | layerId, layer, inventoryValueId | Text | Order Manager's ID for the layer. Keeps two layers with the same date and cost apart. |
| Currency | No | currency, unitPriceCurrencyCode, costCurrency | Currency code | A layer in another currency is refused, never loaded unconverted. |
Opening stock is all-or-nothing per warehouse: one bad row holds back that whole warehouse, so its value can't load short. Stock on a bundle is ignored, with a warning, because SKU.io works a bundle's stock out from its components. Stock in a marketplace or dropship warehouse isn't loaded.
purchase_orders.csv
One row per PO line. Only open POs load, as draft purchase orders holding what's still to arrive. See Open purchase orders.
| Field | Required | Header names accepted | Format | Notes |
|---|---|---|---|---|
| PO number | Yes | poNumber, number, purchaseOrderNumber, customPurchaseOrderNumber | Text | Kept as the PO number in SKU.io. |
| Vendor | Yes | vendor, vendorName | Text | |
| Status | Yes | status, poStatus, purchaseOrderStatus | Order Manager PO status | AWAITING_…, PENDING_DELIVERY and PARTIALLY_DELIVERED load. Fully received and closed POs are skipped. |
| SKU | Yes | masterSku, sku, vendorProductMasterSku | Text | |
| Quantity ordered | Yes | quantity, quantityOrdered, orderedQuantity, qtyOrdered | Number, 0 or more | |
| Quantity received | No | quantityReceived, receivedQuantity, received, qtyReceived | Number, 0 or more | Required on every line of a PARTIALLY_DELIVERED PO. The line loads ordered minus received. |
| Destination | No | destinationWarehouse, warehouse, warehouseName | Text | |
| Unit cost | No | unitCost, originalUnitCost, cost | Number | |
| Currency | No | currency | Currency code | Blank uses your account's currency. |
| PO date | No | dateCreated, dateIssued, poDate, createdDate | Date | |
| Expected date | No | estimatedDeliveryDate, expectedDate, deliveryDate | Date | |
| Line status | No | itemStatus, lineStatus | Text |
Every row of one PO must agree on vendor, destination, currency and status, or the PO is refused. A PO with any bad line is skipped whole, and a remainder that isn't a whole number is refused. Two lines for the same SKU are combined at their weighted cost.
customers.csv
| Field | Required | Header names accepted | Format | Notes |
|---|---|---|---|---|
| Name | Yes | name, customerName | Text | |
| No | email, emailAddress, emailAddresses | Customers are matched by email, then by name, so none is created twice. | ||
| Company | No | company, companyName | Text | |
| Phone | No | phone | Text | |
| Address | No | address1 (address), address2, city, state (province), zipCode (zip, postalCode), country | Text |
Customers can also come from the ship-to details in orders.csv, for orders from a date you choose.
listings.csv
Listings aren't created — they come from each sales channel when you connect it. The file is only checked, so the plan report can warn you before cutover.
| Field | Required | Header names accepted | Format | Notes |
|---|---|---|---|---|
| Sales channel | Yes | salesChannel, channel, salesChannelName | Text | |
| Listing SKU | Yes | listingSku | Text | |
| SKU | Yes | masterSku, sku | Text | A listing pointing at a SKU that isn't in products.csv, or one listing SKU pointing at two products, is reported. |
orders.csv
One row per order line. Used for the order history import. See How Order Manager order history imports.
| Field | Required | Header names accepted | Format | Notes |
|---|---|---|---|---|
| Order number | Yes | orderNumber | Text | Rows with the same order number and channel are one order. |
| SKU | Yes | masterSku, sku, listingSku | Text | A SKU that isn't a product in SKU.io is kept as a non-product line, with a warning. |
| Quantity | Yes | quantityOrdered, quantity, qty | Number, 0 or more | |
| Order date | No | orderDate | Date | Needed in practice: an order with no readable date is refused. |
| Sales channel | No | salesChannel, channel | Text | |
| Status | No | orderStatus, status | Order Manager order status | Needed in practice: only SHIPPED and PROCESSED_OUTSIDE_OF_SKUBANA import. |
| Unit price | No | unitPrice, price | Number, 0 or more | |
| Currency | No | currency | Currency code | Must be set up in SKU.io. Blank uses your account's currency. |
| Line ID | No | orderItemId, lineId | Text | Order Manager's ID for the line, kept on the line. |
| Ship date | No | shipDate, shippedDate | Date | Becomes the order's fulfilled date. |
| Fulfilled from | No | fulfillmentSource, warehouse, warehouseName | Text | The warehouse the line shipped from. |
| Discount | No | discount, lineDiscount | Number, 0 or more | The line's total discount. The line's price is stored net of it. |
| Tax | No | tax, lineTax | Number, 0 or more | The line's total tax. The order's tax is the sum of its lines. |
| Shipping | No | shippingCost, shipping | Number, 0 or more | Order-level. Becomes a "Shipping (Order Manager)" line. |
| Quantity cancelled | No | quantityCancelled, cancelledQuantity | Number, 0 or more | Taken off the line's quantity. |
| Customer name | No | customerName, shipName | Text | |
| Customer email | No | customerEmail, shipEmail, email | ||
| Company, phone | No | companyName (shipCompany), shipPhone (phone) | Text | |
| Ship-to address | No | shipAddress1, shipAddress2, shipCity, shipState, shipZipCode, shipCountry | Text |
An order is refused when its rows disagree on the date, status or currency, or when any value is malformed — a quantity, price, discount, tax, shipping or cancelled value that isn't a number, or is negative.
resolutions.csv
Your answer to the duplicate SKUs the plan report found. You get this file pre-filled with every SKU in every duplicate group; fill in one column.
| Column | Required | Notes |
|---|---|---|
sku | Yes | The SKU exactly as it appears in your export, spaces included. |
survivor_sku | Yes | The SKU to keep. Every duplicate mapped to it is merged into it. Put the SKU itself to keep it separate, which isn't allowed for SKUs that differ only in case. |
group, kind, match, name, units_on_hand | No | Filled in for you, to help you decide. Ignored when the file is read. |
A SKU given two different survivors, or a survivor that is itself merged into another SKU, blocks the run until you fix the file.