Fulfillment Operations
How to Update Shopify Inventory With CSV Files
By Anata Inc. ·

The short answer.
Use Shopify's inventory CSV as a controlled bulk adjustment, not as an unreviewed replacement for the current inventory ledger. Export the exact products, locations, and inventory-state format you intend to update, preserve that file as the baseline, and edit only the allowed quantity fields. Shopify's all-states format includes location-level rows and an on-hand comparison that can protect against accidental overwrites. Test a small set first, review the import result, and then reconcile on-hand, available, committed, unavailable, and incoming quantities against warehouse evidence. Keep the file, operator, timestamp, reason, affected variants, errors, and post-import export together. Stop when location names, identifiers, or current values no longer match the baseline, because that indicates the inventory changed while the file was being prepared.
Section 01
Define the bulk inventory change
Write the reason, warehouse evidence, products, variants, locations, quantity state, owner, approval, and intended import window before exporting. Separate a cycle-count correction from a receipt, transfer, damage hold, or catalog setup change. Those events affect the inventory ledger differently and should not be hidden inside one spreadsheet. If the physical source or location ownership is unclear, resolve it before preparing the file rather than using the import as a way to force the system to match an assumption.
Choose the smallest set that produces a useful canary. A bulk file can update many rows quickly, which makes a mapping error equally quick. Start with variants that have stable identifiers and no active receiving, transfer, or fulfillment exception. Record the current operational state so a reviewer can tell whether an import difference came from the planned edit or from legitimate inventory activity that occurred after export.
Section 02
Export the right inventory view
Shopify provides exports for one location or all locations and for selected, filtered, current-page, or all variants. Match those controls to the written scope. The all-states format includes a separate row for each location and exposes inventory states, while the available-only format is a simpler quantity view. Prefer the format that preserves the evidence needed for the change, not the smallest-looking file. Save the untouched export with its exact timestamp.
Inspect handles, variant identifiers, SKUs, location names, bin values, and quantity columns before editing. Confirm that location names match the active fulfillment model and that every intended variant appears once for each relevant location. Flag blank or duplicate identifiers for manual review. Do not add a guessed row for an item or location that the export did not contain. Investigate why it is absent and use the correct Shopify inventory setup path first.
Section 03
Edit only controlled fields
Shopify's all-states export distinguishes informational states from the field used for a new on-hand quantity. Keep incoming, committed, unavailable, available, and current on-hand values as evidence unless the documented format explicitly allows an edit. Enter whole quantities in the intended update field, leave unaffected rows blank where the format permits, and avoid spreadsheet formulas that remain unresolved in the saved CSV. Keep a separate change note for every edited row or batch.
Understand the relationship before entering a number. Shopify defines on hand as inventory physically held at a location and describes it as the combination of committed, unavailable, and available units. Incoming inventory is not available until received. A count correction should be reconciled against those states, not compared only with available inventory. If the warehouse count includes units on hold, damaged stock, or committed orders, document how those units were classified before setting the new value.
Section 04
Detect stale exports before import
Inventory can change while a file is being reviewed. Re-export the canary set or compare current Shopify values immediately before import. Shopify's all-states format includes current and new on-hand fields designed to protect against accidental overwrites when the current value no longer matches the export. Treat a mismatch as a stop signal. Reconcile the intervening orders, receipts, transfers, holds, or adjustments and prepare a fresh baseline rather than deleting the comparison.
Validate file encoding, headers, location spelling, row count, identifiers, and allowed numeric values. Keep location names exactly aligned with Shopify because the inventory import uses them to map quantities. Remove rows outside the approved scope rather than leaving speculative values in place. Have a second reviewer compare the edit list with the warehouse evidence and confirm that the canary does not include high-risk or rapidly moving inventory.
Section 05
Import a canary and read every result
Import the small approved file first. Capture Shopify's preview, warnings, rejected rows, and success result. Do not assume a completed upload means every intended row changed. Re-export the canary inventory and compare each location and variant with the approved new value. Review on-hand and available behavior together, and inspect adjustment history when the result is surprising. A partial success should remain a failed batch until every row is classified.
If the canary passes, expand in bounded groups that share a location, event type, and reviewer. Do not combine unrelated warehouse counts merely to reduce the number of uploads. Preserve each input file and output evidence with a unique batch ID. When an error is deterministic, correct the mapping or format and retry only the affected rows. Never weaken identifiers or remove stale-value protection to make a file import.
Section 06
Reconcile the operational inventory ledger
After the final batch, export the same scope again and compare it with the approved change list, physical evidence, open orders, receipts, transfers, and holds. Classify every difference as planned, intervening activity, rejected import, mapping error, or unresolved exception. Assign the unresolved rows to an owner before closing the batch. Update downstream warehouse or planning systems only through their normal integration or reconciliation process, not by copying a total without context.
Review recurring CSV work for patterns such as missing SKUs, inconsistent location names, repeated stale exports, or the same warehouse correction. Those are process signals, not proof that Shopify is wrong. Route each pattern to the responsible catalog, receiving, fulfillment, or integration owner. The finished job should leave a recoverable before file, an approved edit file, platform results, an after file, and a complete exception ledger.


