Updating item prices in bulk

A supplier sends a new price list. You have four hundred articles. Editing them one card at a time is how a catalogue quietly falls out of date — and buying at one price while your costing sheet still holds an old one is the failure that follows.

Items → Bulk price import takes the supplier's file and applies it in one pass.

What the file looks like

A CSV with these columns:

item_code, item_name, group, purchase_price, sell_price
  • item_code — the article's code. That row applies to that one article.
  • item_name — the article's name, spelled exactly as it appears in your catalogue. Use this for the articles that have no code at all — a catalogue often holds a great many of those, and before this they could not be updated by any file.
  • group — the name of an item group. That row applies to every article in it. Useful when a supplier raises a whole family by the same amount.
  • purchase_price — what you pay. Store it net, without VAT.
  • sell_price — optional, and ignored unless you tick the box (see below).

Give one of item_code, item_name or group — not several.

Two things worth knowing about matching by name:

  • If a row has a code, the code decides. Should that code match nothing, the row is reported and skipped — the name is not tried instead. A row that carries both is saying they belong together, and pricing a different article because the code was wrong is exactly the mistake you would never spot.
  • If a name matches more than one article, nothing is written for it and the row appears in the report with the number of matches. Changing the price of an article nobody named is worse than skipping a line.

Simulate first — it is the default

The Simulate button reads the file, works out exactly what would change, and writes nothing. The report names every code that matched no article, so a file whose codes are wrong tells you which ones and why, instead of reporting "0 updated" and leaving you to guess.

Only Apply writes, and it asks for confirmation. Both run the same code, so the plan cannot differ from what happens.

The sale price moves only if you ask

The tick box "Also update the sale price" is off by default and is asked per file, never saved as a setting. Some businesses derive the sale price from cost at a fixed markup; others set it by hand and would be very unhappy to find it rewritten by a supplier's cost sheet. Cost-only is the choice that cannot surprise anybody.

An article that matches no row is left alone. The import never creates an article.

"0 targeted" — which of the two problems is it?

This is the normal first outcome, and it has two opposite causes:

  1. the codes in your file do not match the ones in TSync, or
  2. your catalogue has no codes at all.

They need opposite actions, so the page tells you which one you have. Under the download button you will see either how many of your articles carry a code, or a warning that none of them do — with the name of the column your install uses.

If no article has a code, match on the group column instead, or fill the codes in first.

Download your own catalogue

"Download the catalogue (CSV)" gives you your articles in exactly the shape this import reads — code, name, purchase price, sale price, group. Edit the prices in it and hand the same file straight back.

An article whose code is empty comes out empty. The export never invents a code: a blank that looks like data is worse than a blank.

Open it in Excel and it will show your diacritics correctly — the file carries the marker that tells Excel it is UTF-8.

Who can do this

Anyone with edit rights on items. Not only administrators: the people who maintain a price list usually are not, and a feature they cannot reach is a feature nobody uses.

Every applied import is recorded in the audit log with what changed, and so is every catalogue download.