Skip to main content

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​

AspectBehavior
File typeComma-separated .csv, one file per kind of record, with a header row.
File namesExactly the names below (products.csv, stock.csv, …). Every file is optional — leave one out and that step has nothing to load.
Header matchingHeaders 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 orderDoesn't matter. Columns the migration doesn't know are ignored.
Missing required columnThe 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 values1, true, yes, y and active mean yes; 0, false, no, n and inactive mean no. A blank uses the default given below.
ListsSeveral values in one cell are separated by ,, ; or `
DatesAny 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.
TextLeading and trailing spaces are trimmed.

products.csv​

One row per product, bundle or virtual product.

FieldRequiredHeader names acceptedFormatNotes
SKUYesmasterSku, sku, productSkuTextBecomes the product's SKU. Two SKUs that differ only in case or spacing are a duplicate.
NameYesname, productName, titleText
TypeNotype, productTypeCORE_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.
BarcodeNoupc, barcode, ean, gtinTextTwo products sharing a barcode are a possible duplicate.
MPNNompnText
BrandNobrandTextA brand that doesn't exist in SKU.io yet is created.
DescriptionNodescriptionText
CostNovendorCost, cost, defaultCost, unitCostNumberThe product's unit cost. Also the last fallback cost for opening stock with no cost of its own.
Cost currencyNovendorCostCurrency, costCurrency, currencyCurrency code, e.g. USDA cost in a currency other than your account's is dropped, with a warning.
WeightNoweight, weightOz, weightOuncesNumber, in ounces
Pounds, OuncesNopounds (weightLb, weightLbs), ouncesNumberUsed when there's no weight column, the way Order Manager's screens split weight. Pounds × 16 + ounces.
Length, Width, HeightNolength, width, heightNumber, in inches
ActiveNoactive, statusYes/noDefault yes. An inactive product loads only when stock, an open PO or an active bundle needs it.
LabelsNolabels, label, tagsListEach label becomes a tag on the product.
CategoriesNocategories, categoryListThe first category that already exists in SKU.io becomes the product's primary category. The rest become tags. No new categories are created.
Custom fieldsNoCustom: <name>, Custom Field: <name>, cf_<name>TextOne column per field. Each becomes a product attribute named <name>, created if needed. Blank values are skipped.
Order Manager IDNoproductIdTextKept for reference only.

bundles.csv​

One row per component of a bundle. A bundle with three components has three rows.

FieldRequiredHeader names acceptedFormatNotes
Bundle SKUYesbundleSku, bundleMasterSku, kitSku, parentSku, masterSkuTextMust also be in products.csv as a bundle.
Component SKUYescomponentSku, bundledProductSku, bundledProductMasterSku, bundledItemSku, childSku, componentTextMust be in products.csv. Can't contain ,, -> or →.
QuantityYesquantity, bundledProductQuantity, qtyPositive numberHow 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.

FieldRequiredHeader names acceptedFormatNotes
NameYesname, vendorName, vendorTextMatched to an existing supplier by name, so loading twice doesn't create a second one.
EmailNocontactEmail, emailEmail
PO emailNopurchaseOrderEmail, poEmailEmailWhere purchase orders are sent.
PhoneNocontactPhone1, contactPhone, phoneText
WebsiteNowebsiteText
AddressNoaddress1 (address), address2, city, state (province), zipCode (zip, postalCode), countryTextThree-letter country codes (USA) are converted.
ActiveNoactiveYes/noDefault yes.
Order Manager IDNovendorIdTextReference only.

vendor_products.csv​

One row per vendor and product pair. These become the product's suppliers.

FieldRequiredHeader names acceptedFormatNotes
VendorYesvendor, vendorNameTextMust match a name in vendors.csv.
SKUYesmasterSku, sku, vendorProductMasterSkuText
Vendor SKUNovendorSku, supplierSku, vendorProductVendorSkuTextThe supplier's own code for the product.
CostNocost, vendorCost, unitCost, priceNumberWhere Order Manager has price tiers, use the lowest. Second fallback cost for opening stock.
Lead timeNoleadTime, leadTimeDaysWhole days
Minimum orderNominOrderQuantity, moqNumber
DefaultNodefaultProduct, default, isDefault, primaryVendorYes/noDefault no. Marks the product's default supplier.
CurrencyNocurrency, costCurrencyCurrency codeA cost in another currency is dropped, with a warning.

warehouses.csv​

FieldRequiredHeader names acceptedFormatNotes
NameYesname, warehouseName, warehouseTextMatched by name and type. Names that differ only in case are one warehouse.
TypeNotype, warehouseTypeSee below
Email, PhoneNocontactEmail (email), contactPhone (phone)Text
AddressNoaddress1 (address), address2, city, state (province), zipCode (zip, postalCode), countryText
ActiveNoactiveYes/noDefault yes.
Order Manager IDNowarehouseIdTextReference only.
Order Manager typeResult in SKU.io
DIRECT_FULFILLMENTYour own warehouse.
RETAIL_STOREYour own warehouse, with a warning to check it.
THIRD_PARTY_LOGISTICSA 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_VENDORNot 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.

FieldRequiredHeader names acceptedFormatNotes
SKUYesmasterSku, skuText
WarehouseYeswarehouse, warehouseNameTextThe header is required; a blank cell means the stock is in no warehouse, which is an error.
QuantityYesonHand, onHandQuantity, availableQuantity, quantity, qtyNumber, 0 or moreNegative stock is an error: fix it in Order Manager and export again.
Unit costNounitCost, unitPrice, costNumber, at least 0.01, up to 4 decimalsBlank uses the default supplier's cost, then the product's cost, with a warning. With none of them the row is an error.
Received dateNoreceivedDate, dateDate and timeSets 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 IDNolayerId, layer, inventoryValueIdTextOrder Manager's ID for the layer. Keeps two layers with the same date and cost apart.
CurrencyNocurrency, unitPriceCurrencyCode, costCurrencyCurrency codeA 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.

FieldRequiredHeader names acceptedFormatNotes
PO numberYespoNumber, number, purchaseOrderNumber, customPurchaseOrderNumberTextKept as the PO number in SKU.io.
VendorYesvendor, vendorNameText
StatusYesstatus, poStatus, purchaseOrderStatusOrder Manager PO statusAWAITING_…, PENDING_DELIVERY and PARTIALLY_DELIVERED load. Fully received and closed POs are skipped.
SKUYesmasterSku, sku, vendorProductMasterSkuText
Quantity orderedYesquantity, quantityOrdered, orderedQuantity, qtyOrderedNumber, 0 or more
Quantity receivedNoquantityReceived, receivedQuantity, received, qtyReceivedNumber, 0 or moreRequired on every line of a PARTIALLY_DELIVERED PO. The line loads ordered minus received.
DestinationNodestinationWarehouse, warehouse, warehouseNameText
Unit costNounitCost, originalUnitCost, costNumber
CurrencyNocurrencyCurrency codeBlank uses your account's currency.
PO dateNodateCreated, dateIssued, poDate, createdDateDate
Expected dateNoestimatedDeliveryDate, expectedDate, deliveryDateDate
Line statusNoitemStatus, lineStatusText

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​

FieldRequiredHeader names acceptedFormatNotes
NameYesname, customerNameText
EmailNoemail, emailAddress, emailAddressesEmailCustomers are matched by email, then by name, so none is created twice.
CompanyNocompany, companyNameText
PhoneNophoneText
AddressNoaddress1 (address), address2, city, state (province), zipCode (zip, postalCode), countryText

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.

FieldRequiredHeader names acceptedFormatNotes
Sales channelYessalesChannel, channel, salesChannelNameText
Listing SKUYeslistingSkuText
SKUYesmasterSku, skuTextA 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.

FieldRequiredHeader names acceptedFormatNotes
Order numberYesorderNumberTextRows with the same order number and channel are one order.
SKUYesmasterSku, sku, listingSkuTextA SKU that isn't a product in SKU.io is kept as a non-product line, with a warning.
QuantityYesquantityOrdered, quantity, qtyNumber, 0 or more
Order dateNoorderDateDateNeeded in practice: an order with no readable date is refused.
Sales channelNosalesChannel, channelText
StatusNoorderStatus, statusOrder Manager order statusNeeded in practice: only SHIPPED and PROCESSED_OUTSIDE_OF_SKUBANA import.
Unit priceNounitPrice, priceNumber, 0 or more
CurrencyNocurrencyCurrency codeMust be set up in SKU.io. Blank uses your account's currency.
Line IDNoorderItemId, lineIdTextOrder Manager's ID for the line, kept on the line.
Ship dateNoshipDate, shippedDateDateBecomes the order's fulfilled date.
Fulfilled fromNofulfillmentSource, warehouse, warehouseNameTextThe warehouse the line shipped from.
DiscountNodiscount, lineDiscountNumber, 0 or moreThe line's total discount. The line's price is stored net of it.
TaxNotax, lineTaxNumber, 0 or moreThe line's total tax. The order's tax is the sum of its lines.
ShippingNoshippingCost, shippingNumber, 0 or moreOrder-level. Becomes a "Shipping (Order Manager)" line.
Quantity cancelledNoquantityCancelled, cancelledQuantityNumber, 0 or moreTaken off the line's quantity.
Customer nameNocustomerName, shipNameText
Customer emailNocustomerEmail, shipEmail, emailEmail
Company, phoneNocompanyName (shipCompany), shipPhone (phone)Text
Ship-to addressNoshipAddress1, shipAddress2, shipCity, shipState, shipZipCode, shipCountryText

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.

ColumnRequiredNotes
skuYesThe SKU exactly as it appears in your export, spaces included.
survivor_skuYesThe 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_handNoFilled 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.

Last verified: