Skip to content

Import a CSV

Import and export brings in suppliers, supplier products, purchase orders and adjustment history from a CSV file — exported from Stocky, another app, or a spreadsheet. Importing is included on every plan.

Your products and stock levels always come from Shopify, so there’s no product import.

  1. Go to Import and export.
  2. Under What are you importing?, choose Suppliers, Supplier products, Purchase orders or Adjustment history.
  3. Drop your file on CSV file, or click to choose it.
  4. Press Import. You’ll see “Import started”.

The import runs in the background. Recent imports shows its progress — Queued, Importing, then Imported or Failed — with how many rows came in, such as “480 of 500 rows imported”, and who started it.

If any rows were skipped, press rows skipped to see why, row by row. Row numbers match your spreadsheet, with the header as row 1. The first 50 reasons are kept.

Moving a whole store over? Import in this order: suppliers, then supplier products, then purchase orders and adjustments. → Moving from Stocky

  • A .csv or .txt file, up to 20 MB. Long files are fine; Shelfcast works through them in batches.
  • The first row is the header, naming each column.
  • Commas, semicolons or tabs can separate the columns. Shelfcast checks the header row and uses whichever appears most.
  • Column names are matched loosely. Capital letters don’t matter, and underscores, hyphens, dots, #, brackets and slashes count as spaces. So PO # reads as “PO”, and Lead_Time as “lead time”. If a file has two columns that could fill the same field, the name listed first in the tables below wins. Columns Shelfcast doesn’t recognize are ignored.
  • Numbers can use a comma or a dot as the decimal point: the last one in the number is taken as the decimal point. Whole numbers, such as quantities, are rounded.
  • Dates can be written most common ways, and are read in your store’s timezone.
  • The uploaded file is deleted once the import finishes.

A file missing a required column fails before anything is imported, with “The file has no column for: …” and the missing column names.

One row per supplier. Required column: Name.

Field Column names recognized
Name name, supplier, supplier name, company, company name, vendor name
Contact name contact name, contact, contact person
Email email, supplier email, email address, e-mail
CC emails cc emails, cc
Phone phone, phone number, telephone
Website website, url, web
Address address, address1, street, street address
Address line 2 address2, address 2
City city, town
State or province province, state, region
ZIP or postal code zip, postcode, postal code, zip code
Country country
Currency currency, currency code
Lead time (days) lead time days, lead time, lead time (days)
Minimum order value minimum order value, minimum order, min order value
Payment terms payment terms, terms
Notes notes, note, description
  • A supplier with the same name is updated (capital letters don’t matter), but only from cells that have something in them. Otherwise a new supplier is added.
  • The address parts are joined into one address, a line each.
  • Email addresses that aren’t valid are left out. Currency is cut to three letters and capitalized.

One row per product and supplier. Required column: Supplier.

Field Column names recognized
Supplier supplier, supplier name, vendor
SKU sku, variant sku, product sku
Barcode barcode, upc, ean, gtin
Supplier SKU supplier sku, supplier code, supplier product code, vendor sku, mpn
Cost unit cost, cost, cost price, supplier cost, price
Minimum order quantity minimum order quantity, moq, min order qty, minimum
Pack size pack size, case size, case pack, units per case
Preferred preferred, primary, is preferred
  • Products are found by SKU (capital letters don’t matter), then by exact barcode. A product that’s still in your catalog wins over one deleted in Shopify.
  • A supplier that isn’t in Shelfcast yet is added.
  • Only cells with something in them change an existing link’s terms.
  • Preferred is on for 1, yes, true, y or preferred, and off for anything else. A blank cell leaves it as it is.
  • Forecasts refresh when the import finishes.

Importing a preferred flag doesn’t untick another supplier that’s already preferred for the same product, so a product can end up with two. Suggestions then use the supplier it was linked to first. To fix it, open Edit terms on the right supplier and tick Reorder this product from this supplier — that unticks the others.

One row per order line. Required columns: PO number, Supplier and Quantity.

Field Column names recognized
PO number po number, purchase order number, purchase order, po, order number, number, po id
Supplier supplier, supplier name, vendor
Status status, state
Destination location, destination, ship to, warehouse, receiving location
Ordered date ordered at, order date, ordered on, date ordered, created at, created, date
Expected date expected on, expected date, expected, due date, eta, expected at
Supplier reference supplier reference, supplier invoice, invoice number, invoice, reference
Notes notes, note
SKU sku, variant sku, product sku
Barcode barcode, upc, ean, gtin
Product product, product title, title, item, product name, description
Variant variant, variant title, option
Supplier SKU supplier sku, supplier code, vendor sku, mpn
Quantity ordered quantity ordered, qty ordered, ordered, quantity, qty, order quantity
Quantity received quantity received, qty received, received
Cost unit cost, cost, cost price, price
  • Rows with the same PO number become one order. The supplier, status, dates and other order details come from the order’s first row.

  • A PO number that’s already in Shelfcast is skipped, so importing the same file twice doesn’t duplicate anything.

  • Suppliers are matched by name, or added if they’re new.

  • The destination is matched by location name, otherwise your first active location.

  • Status is read loosely:

    The file’s status contains Imported as
    nothing (blank), “draft” or “pending” Draft
    “partial” Partially received
    “cancel”, “archiv” or “void” Cancelled
    “receiv”, “closed” or “complete” Received
    anything else, such as “ordered” or “open” Ordered

    A file with no status column imports every order as a draft.

  • The ordered date becomes the order’s date. Orders with no date are dated the day you import them.

  • Lines for products Shelfcast can’t find are kept, with the product name, variant and SKU from the file, but they aren’t linked to a product.

  • Received quantities and costs are kept. A blank cost becomes 0.

  • Additional costs aren’t imported. The order’s Details show it as “Imported”.

  • Forecasts refresh when the import finishes.

Imported orders don’t change stock in Shopify, and nothing is marked as incoming there. Open ones (Ordered or Partially received) still count as incoming in suggestions, and receiving them later adds stock straight to what’s available.

One row per adjustment. Required column: Adjustment — a whole number that isn’t zero, such as -3 or 12.

Field Column names recognized
Date date, created at, created, adjusted at, time, timestamp, date adjusted
SKU sku, variant sku, product sku
Barcode barcode, upc, ean, gtin
Product product, product title, title, item, product name
Variant variant, variant title, option
Location location, warehouse, store
Adjustment adjustment, quantity change, change, delta, adjusted by, quantity, qty
Quantity after quantity after, new quantity, on hand after, after, new
Reason reason, adjustment reason, type
User user, staff, staff member, adjusted by user, by, employee
Note note, notes, comment
  • Products and locations are matched where possible. Rows that don’t match are still imported, with the names from the file.
  • Reasons are mapped by what they contain: “receiv” → Received; “count” or “stocktake” → Stock count; “damage” → Damaged; “shrink”, “theft” or “loss” → Shrinkage; “restock” or “return” → Restock; “correct” → Correction; anything else → Other. The original reason and note are kept together as the entry’s note.
  • User appears under By in History.
  • Rows with no date are dated when you import them.

Adjustments become entries in History with the source Imported history. They’re a record only: stock in Shopify isn’t changed. → Read your inventory history

Message Import What to do
“Missing Name” Suppliers The row has no supplier name. Fill it in.
“Missing Supplier” Supplier products, purchase orders The row has no supplier (for purchase orders, the order’s first row). Fill it in.
“No product has the SKU or barcode …” Supplier products No product in Shelfcast has that SKU or barcode. Check it matches Shopify exactly, or that the product has synced.
“Missing PO number” Purchase orders The row has no PO number.
“Purchase order … is already in Shelfcast” Purchase orders An order with that number exists. Nothing to do if it’s the same order.
“Sync your catalog before importing purchase orders.” Purchase orders Shelfcast hasn’t read your locations yet. Wait for the first sync, then import again.
“Missing Adjustment” Adjustment history The adjustment is blank, zero or not a number.

Fix the rows in your spreadsheet and import the file again. Rows that came in the first time are updated (suppliers and supplier products) or skipped as duplicates (purchase orders). Adjustment history has no duplicate check, so import only the rows that were skipped.

Stuck on a file? Email support@portsidelabs.io with the file attached — a person reads it.