Install

Import product costs by CSV, with a preview before anything is saved

Upload a CSV keyed by SKU. Cogsy checks every row, shows the cost each SKU has now beside the cost it would get, lists the rows it cannot use and why, and saves nothing until you confirm.

Updated

The file

One row per SKU and cost. The header is:

sku,kind,amount,percent,source,effective_from
Column Required If left out
sku Yes
amount or percent One of them
kind No Unit cost
source No csv
effective_from No The moment of import

A file can be as small as two columns:

sku,amount
LT-OAT,21.40
LT-SAGE,21.40
CN-FIG,4.10

Or carry a supplier’s price list with a start date and an extra cost:

sku,kind,amount,percent,source,effective_from
LT-OAT,unit_cost,21.40,,Supplier A,2026-07-01
LT-OAT,packaging,1.20,,,2026-08-14
LT-OAT,payment_processing,,2.9,,

The preview

After the upload, and before anything is saved, you see for every row:

  • the SKU, and how many variants share it if more than one does;
  • the kind of cost and its source;
  • the cost that SKU has now;
  • the cost it would have after the import.

Rows that cannot be imported are listed separately with their line number and the reason: an unknown SKU, an unknown kind, an amount that is not a number, a percent outside 0 to 100, a date that cannot be read, or both amount and percent filled in.

Confirm or discard

Confirming adds every valid row to the cost history. Discarding leaves no trace. Because rows are added and never overwrite, an import that turns out to be wrong can be corrected with a second import or by voiding rows, and the earlier figures are still there.

Good uses

  • First setup. Export your products from Shopify, fill in the costs you know, import.
  • A new price list. Upload it with effective_from set to the day it takes effect, even if that is next month.
  • A second supplier. Upload their prices with their name in source to keep them beside your main supplier’s.

Questions

Which columns are required?
A sku column, and either amount or percent. The other columns (kind, source, effective_from) are optional.
What if some rows have errors?
Each one is listed with its line number and what is wrong. You can fix the file and upload it again, or import the rows that are ready and leave the rest out.
Does an import overwrite existing costs?
No. Each row is added to the history from its date. Costs already recorded stay there.
What if two variants share a SKU?
Both get the cost, and the preview tells you how many variants share that SKU.
Does the import update Shopify straight away?
No. The import records costs in Cogsy. Writing them to Shopify's cost per item is a separate step you run from the Costs page.

Related

  • Guide

    How to bulk update cost per item in Shopify

    Three ways to update cost per item for many Shopify variants at once: the bulk editor, a product CSV import, or an app. Steps and pitfalls for each.

  • Feature

    Dated cost history

    Every cost has a date it applies from. A change is a new row, never an overwrite.

  • Feature

    More than one supplier

    Keep a cost from each supplier, from Shopify and from your imports side by side, and choose which one is active.

  • Glossary

    SKU (stock keeping unit)

    A SKU is your own code for one sellable variant of a product. What makes a good SKU, how it differs from a barcode, and why costs are matched by SKU.

Start with the costs Shopify already has.

Install the app, sync your catalog and see which variants are missing a cost.