Skip to main content

Creating a purchase order from a CSV file

Upload a CSV of items to create a draft purchase order - rows match your Shopify catalog automatically, and anything else imports as a custom line.

If your supplier sends an order sheet, or you build orders in a spreadsheet, you can create a purchase order straight from a CSV file - no retyping. Stockroom matches each row to your Shopify catalog and builds a draft purchase order, ready to review and send.

Import a CSV

  • Open the Purchase orders page and click Import CSV.

  • Choose the Supplier the order is for - the whole file imports into one purchase order for that supplier.

  • Upload your CSV file (or drag it in).

If every row imports cleanly, you land straight on the new draft. If any rows were skipped or any columns ignored, the dialog shows a summary first - review it, then click View purchase order to open the draft.

What the file needs

Two columns are enough:

  • An item identifier - a SKU, barcode, supplier SKU, or Shopify variant ID column (any one of them works).

  • Quantity - how many units to order.

Optional columns: Unit cost, Discount %, and Product / Variant names (used to title rows that don't match your catalog). Header spellings are flexible - "qty", "cost", "upc", and similar variations are all recognized (a bare code,quantity file with no header row works too; so does a semicolon- or tab-separated one) - and Download a template in the dialog gives you a starting file with every column in place.

If your supplier prices by the case, give the row a pack_cost and a pack_size instead of a unit cost - a case of 12 at 18.00 imports at 1.50 each. Leave pack_size out and the pack size saved on the item is used. Quantities always stay in single units.

Purchase order files exported from Stockroom re-import as-is: export a purchase order's lines, adjust quantities in your spreadsheet, and import the result as a new order.

Shipping, fees and discounts

Supplier invoices rarely stop at line items. Stockroom reads the extras straight out of the file, so there is nothing to add afterwards:

  • shipping - or freight, delivery, carriage, postage. Imports as a shipping charge.

  • discount_amount - or order_discount, invoice_discount. Imports as money off the whole order, whether your file writes it as 15.00 or -15.00.

  • charge plus charge_amount - a named extra for anything else on the invoice: a fuel surcharge, a pallet fee, a rebate. The label from your file is kept.

Both invoice shapes work. Freight can sit on its own row with no item code and no quantity, or repeat on every item row - when the same total appears on every line, it is counted once and the summary says so. Amounts written the way accounting software writes them parse fine: $1,200.00, and (15.00) for a negative.

Imported extras arrive as ordinary charges in the purchase order's Cost summary, spread across items by value, and you can edit or remove any of them. You can also add them by hand at any time with Add cost in that same card.

How rows match your products

Each row is looked up in your Shopify catalog - by variant ID, then SKU, then barcode, then supplier SKU (the vendor product codes saved on your products; codes assigned to the chosen supplier take priority).

  • Matched rows become normal product lines. If the file has no cost for a row, the product's cost from your catalog is used - the same default as picking the product in the editor.

  • Unmatched rows import as custom lines, so items you don't stock in Shopify still make it onto the purchase order. The product name column (or the code itself) becomes the line's title.

  • Ambiguous rows - a SKU shared by more than one product - are skipped with a row error rather than guessed. Add those items by hand instead - type the product name into the Add products field and pick the variant you meant.

  • Repeated rows for the same item combine into one line - quantities add together, and the first cost in the file wins.

Importing into an order you're editing

You don't have to start from the list - every purchase order you're editing can take the same file. In the Items header, press the import icon (beside the browse and custom-line icons) to open Import lines from CSV. The same columns and matching rules apply, with a few editor extras:

  • Paste instead of uploading - copy rows in your spreadsheet, then just paste with the dialog open. No need to save a file first.

  • Nothing lands until you confirm - the dialog resolves the rows first, and the button tells you exactly what you'll get ("Add 12 lines"), with skipped rows listed by line number.

  • Re-importing updates, never doubles - rows for items already on the order are set to the file's quantity, so importing a corrected file converges.

  • Costs come from the file when present, otherwise from your catalog - in the purchase order's currency. Supplier SKUs resolve against the order's supplier.

Good to know

  • The import always creates a draft - review it, edit lines, or delete it freely. Nothing touches your Shopify inventory until you mark the purchase order as ordered.

  • One file creates one purchase order, for the supplier you pick in the dialog - a supplier column inside the file is ignored.

  • Files can hold up to 5,000 rows (5 MB). Split larger orders and import them as separate purchase orders.

  • On a brand-new store the option also appears in the empty state - Import from CSV, right next to Create purchase order.

  • The same import (file or paste) is available while building a transfer or a stock adjustment - look for Import CSV next to Add products.

  • Buying the same item from several distributors? Each of them can have their own part number and case size saved against your products, and imports resolve against the supplier you picked - see Buy the same item from more than one supplier.

  • Does one code on their invoice stand for a box or an assorted pack? Teach it to that supplier once as a pack recipe, and imports expand the row into its component products at the right cost - see Pack recipes: turn one supplier code into several products.

  • Migrating from another PO app? This import creates one new draft at a time - to recreate your full purchase order history from Stocky, Horse, or any other app, with statuses, dates, and receiving history included, see Import purchase order history from CSV files.

Did this answer your question?