Adjustment history CSV
One row per stock change. Adjustment is required, as a whole number such
as -2 or 5. Every other column can be left out of the file, or left blank.
Download the adjustment history template, or press Download template in Shelfcast with Adjustment history chosen. It has two made-up changes for you to replace.
Imported adjustments are a record only. They show in History with the source Imported history, and stock in Shopify isn’t changed.
Columns
Section titled “Columns”| Column | What to write | Also accepted |
|---|---|---|
| Date | When the change happened, with or without a time, in your store’s timezone. Blank means the time you import it. Example: 2026-01-20 09:30 |
Created at, Created, Adjusted at, Time, Timestamp, Date adjusted |
| SKU | The product’s SKU in Shopify, in any capitals. Example: EXAMPLE-MUG-BLUE |
Variant SKU, Product SKU |
| Barcode | Any of the product’s barcodes in Shopify, exactly, leading zeros included. | UPC, EAN, GTIN |
| Product | The product’s name. Used only when Shelfcast can’t find the product. Example: Example mug |
Product title, Title, Item, Product name |
| Variant | The variant’s name. Used only when Shelfcast can’t find the product. Example: Blue |
Variant title, Option |
| Location | The name of the Shopify location, in any capitals. A name that doesn’t match is kept as written. Example: Main warehouse |
Warehouse, Store |
| Adjustment (required) | How much stock changed: a whole number other than 0. Negative for stock that went out. A + is optional. Example: -2 |
Quantity change, Change, Delta, Adjusted by, Quantity, Qty |
| Quantity after | How many there were after the change: a whole number. Example: 22 |
New quantity, On hand after, After, New |
| Reason | Why it changed. See reasons below. Example: Damaged |
Adjustment reason, Type |
| User | Who made the change. It’s shown under By in History. Example: Sam Rivera |
Staff, Staff member, Adjusted by user, By, Employee |
| Note | Any text. | Notes, Comment |
Reasons
Section titled “Reasons”Shelfcast reads the reason by what it contains, in any capitals, and keeps your original wording in the entry’s note:
| The reason contains | Imported as |
|---|---|
| “receiv” | Received |
| “count” or “stocktake” | Stock count |
| “damage” | Damaged |
| “shrink”, “theft” or “loss” | Shrinkage |
| “restock” or “return” | Restock |
| “correct” | Correction |
| anything else, or nothing | Other |
Shopify’s own reason codes, as Shelfcast’s export writes them, are read as they are.
If there’s a note too, the entry’s note reads as the reason and the note together, such as “Damaged – Dropped in the stockroom”.
How rows are imported
Section titled “How rows are imported”- Products and locations are matched where possible. Rows that don’t match are still imported, with the product, variant, SKU and location names from the file, so history for products you no longer sell is kept.
- Products are found by SKU, whatever the capital letters, then by barcode.
- Every row is a new entry. There’s no duplicate check, so importing the same rows twice puts them in History twice.
Why a row is skipped
Section titled “Why a row is skipped”Nothing in a skipped row is imported. Each reason says what to fix. Press Download skipped rows for a file of just those rows, with the reason in an Error column, then fix them and import that file. Don’t import the whole file again: the rows that came in the first time would show up twice. → When rows are skipped
| Message | What to do |
|---|---|
| “Adjustment must be a whole number other than 0, like -2 or 5.” | Write how much stock changed. A change of 0 isn’t imported, so delete those rows. |
| “Quantity after must be a whole number, like 22.” | Write a whole number, or leave it blank. |
| “Date must be a date, written like 2026-01-20 or 2026-01-20 09:30.” | Write the date as year-month-day, or leave it blank. See how dates are read. |
→ Import a CSV explains how numbers and dates are read, and how to save a CSV from your spreadsheet.