How to sort an inventory csv by stock level to find low stock
- Step 1Export the inventory/stock CSV — Shopify: Products → Inventory → Export, or an inventory app. Square: Items → Export library (includes per-location stock). NetSuite / WMS: an inventory or stock-on-hand report. All export CSV or tab-delimited (the sorter auto-detects the delimiter).
- Step 2Drop the file onto the sorter above — The first row is read as the header and pinned to the top. The Sort by column dropdown lists your column names, so you pick
Quantity,On hand,Available, orStockby name. - Step 3Select the quantity column — Choose your stock field. Inventory files often have several (
On hand,Available,Committed,Incoming) — pick the one that drives reorder decisions, usuallyAvailableorOn hand. The sort uses one column per pass. - Step 4Tick the Numeric sort checkbox — required for counts — Enable Numeric sort (treat values as numbers) so quantities compare as numbers. Without it,
9sorts above100as text and your low-stock items scatter. With it,0,9,12,100order correctly. - Step 5Leave ascending selected for lowest-first — Keep A → Z (ascending) so the smallest quantity (zero/negative first) sorts to the top — your reorder priorities. For a 'most overstocked first' view (e.g. to plan a clearance), switch to Z → A (descending).
- Step 6Sort, scan the top of the list, and download — Click Sort rows. The result panel confirms
Sorted by <quantity column> · ascendingand the row count. The first 10 rows show your most-urgent SKUs — confirm, then Download Sorted CSV (<name>.sorted-asc.csv) and hand it to purchasing.
Why numeric mode is required for stock counts
Same five quantities, ascending, in both modes. Text mode scatters the urgent items; numeric mode surfaces them.
| Input quantities | Alphabetic (numeric OFF) — wrong | Numeric (numeric ON) — correct |
|---|---|---|
100, 9, 0, 25, 5 | 0, 100, 25, 5, 9 | 0, 5, 9, 25, 100 |
| Why | Text compare char-by-char: 1 < 2 < 5 < 9 | Real number compare: 0 < 5 < 9 < 25 < 100 |
| Effect on reorder review | 9 (low!) buried below 100 | Low + zero stock all at the top, in order |
Stock-value handling in numeric mode
How numeric sort reads each kind of quantity cell. Values that can't parse become 0.
| Quantity cell | Read as | Where it sorts (ascending) | Notes |
|---|---|---|---|
0 | 0 | Top group | Out of stock — top priority |
-3 (oversold) | -3 | Above 0 | Negative stock sorts first — most urgent |
12 | 12 | By value | Normal integer count |
1,250 (thousands sep) | 1250 | By value | Comma stripped automatically |
| `` (blank) | 0 (NaN→0) | Top group with zeros | Untracked SKU — verify, may not be a real stockout |
In stock (text) | 0 (strips to empty) | Top group | Text status, not a count — normalise first |
Cookbook
Real before/after snippets from inventory exports. SKUs illustrative; the parsing is exactly what the tool does.
Low and zero stock to the top
ExampleA Shopify inventory export ordered by SKU. Numeric ascending pulls the out-of-stock and low items to the top for reorder review.
Input (ordered by SKU): SKU,Product,Available SK-001,Widget A,100 SK-002,Widget B,0 SK-003,Widget C,7 SK-004,Widget D,25 Sort by: Available · A -> Z (ascending) · numeric ON Output (reorder priorities on top): SKU,Product,Available SK-002,Widget B,0 SK-003,Widget C,7 SK-004,Widget D,25 SK-001,Widget A,100
The text-sort trap on quantities
ExampleSame data sorted ascending with Numeric OFF. As text, 100 sorts before 25 before 7 — the most-stocked item appears first and a count of 7 is buried. Always tick Numeric for quantity columns.
Input: SKU,Available SK-001,100 SK-002,0 SK-003,7 SK-004,25 Sort by: Available · ascending · numeric OFF (WRONG) Output (scrambled by text order): SKU,Available SK-002,0 SK-001,100 <- fully stocked, but second SK-004,25 SK-003,7 <- low stock, buried at bottom Fix: re-run with Numeric sort ON.
Oversold (negative) stock surfaces first
ExampleShopify and Square allow overselling, producing negative on-hand counts. Numeric mode keeps the minus sign, so -2 sorts below 0 — the most urgent shortages land right at the top.
Input: SKU,On hand A-1,5 A-2,-2 A-3,0 A-4,12 Sort by: On hand · ascending · numeric ON Output (oversold first): SKU,On hand A-2,-2 A-3,0 A-1,5 A-4,12
Quantities with thousands separators
ExampleA WMS export writes large counts as 1,250. Numeric mode strips the comma so it compares as 1250, not as the string '1' then '250'.
Input: SKU,Available W-1,"1,250" W-2,9 W-3,"12,000" Sort by: Available · ascending · numeric ON Output (true numeric order): SKU,Available W-2,9 W-1,"1,250" W-3,"12,000" (comma kept in the displayed cell; ignored for comparison)
Multi-location stock: pick the column that drives reorder
ExampleSquare exports per-location columns. The sorter sorts by one column, so choose the location (or the total) you reorder against. To rank by overall stock, build a total column first with another tool, then sort it.
Input (per-location columns): SKU,Warehouse,Store,Total M-1,0,5,5 M-2,40,2,42 M-3,0,0,0 Reorder against Total -> Sort by: Total · ascending · numeric ON Output: SKU,Warehouse,Store,Total M-3,0,0,0 M-1,0,5,5 M-2,40,2,42 (No Total column? Create one with csv-column-merger / a formula in your spreadsheet first, then sort it here.)
Errors and edge cases
Real errors and silent failures sourced from each platform's own documentation. Match the wording to the row, fix what the row says to fix.
Numeric checkbox off — `9` sorts above `100`
Invalid orderWithout Numeric sort, quantities compare as text, so 100 sorts before 25 before 9 (character by character). Low-stock single-digit counts scatter through the list and true stockouts get buried. Always tick Numeric sort for quantity columns — this is the core mistake in stock-level sorting.
Blank quantity treated as zero
Verify, not a real stockoutAn empty quantity cell parses to 0 in numeric mode, so it sorts to the top alongside genuine out-of-stock items. But a blank often means 'not tracked', not 'zero on hand'. Review the top group: distinguish real zeros from untracked SKUs. The sorter never edits cells, so the blank stays blank in the output.
Text status instead of a number (`In stock`)
Grouped at zeroIf the column holds a status word like In stock / Out of stock rather than a count, numeric mode strips it to empty → 0, so all rows collapse together meaninglessly. Either sort alphabetically (numeric off — but that gives In stock, Out of stock, Sold out in label order), or map statuses to numbers with csv-find-replace first, then numeric-sort.
Negative (oversold) stock
Sorted correctlyNumeric mode keeps the minus sign, so -3 sorts below 0 — the most urgent oversold items appear at the very top of an ascending reorder list. This is the desired behaviour; no special handling needed.
Decimal quantities (units sold by weight)
Sorted correctlyFor products tracked by weight/volume, quantities like 2.5 or 0.75 keep their decimal point in numeric mode and sort as real numbers. 0.75 sorts below 2.5 correctly. No issue — the decimal is preserved by the numeric strip.
Same quantity — order within the group
By designThe sort is stable, so SKUs with the same count keep their input order. A group of zero-stock SKUs stays in the export's original sequence (often by SKU or category), which keeps the reorder list scannable. To control the order within a quantity, sort that secondary column first.
Multiple stock columns — only one is used
By designInventory files often have On hand, Available, Committed, and Incoming. The sorter sorts by exactly one. Pick the column you actually reorder against (usually Available). To rank by a combined figure, build a total column first (spreadsheet formula or csv-column-merger), then sort that.
More than 500 rows on the free tier
Rejected (limit)Free sorts up to 500 result rows; a full warehouse export is blocked after parsing with a row-count message. Pro raises the limit to 100,000 rows. On free, filter to one location or category first with csv-column-filter, or split with csv-row-splitter.
File over 2 MB on the free tier
Rejected (limit)Large inventory exports often exceed 2 MB; the free tier blocks before sorting and shows a Pro overlay. Pro lifts the cap to 100 MB. Drop unused columns with csv-column-remover to shrink the file, or upgrade.
Frequently asked questions
How do I find my low-stock items in a big inventory CSV?
Drop the file on the sorter, pick the quantity column (Available / On hand), tick Numeric sort, leave A → Z (ascending) selected, and click Sort rows. Out-of-stock and low-count SKUs sort to the top — your reorder worklist. Download as .sorted-asc.csv and send it to purchasing.
Why is a quantity of 9 sorting above 100?
Because Numeric sort is off, so counts compare as text and 9 outranks 100 at the first character. Tick Numeric sort (treat values as numbers) and re-run — it compares the real numbers, putting 0 and 9 ahead of 100 in ascending order.
Will oversold (negative) stock show up first?
Yes, in numeric ascending. The minus sign is kept, so -3 sorts below 0 and lands at the very top — the most urgent shortages first. Overselling is common in Shopify and Square, and this surfaces it immediately.
Does it handle quantities with commas like `1,250`?
Yes, with Numeric on. The comma is stripped before comparing, so 1,250 reads as 1250 and sorts correctly relative to 9 and 12,000. The comma stays in the displayed cell; it's only ignored for the comparison.
What if my stock column is text like 'In stock' / 'Out of stock'?
Numeric mode strips text to empty (→ 0), so it can't sort statuses meaningfully. Either sort alphabetically (Numeric off — gives label order), or map the statuses to numbers with csv-find-replace (Out of stock→0, Low→1, In stock→2), then numeric-sort.
My file has several stock columns — which does it sort by?
Whichever you pick in the dropdown — the sorter sorts by one column per pass. Choose the column that drives reorder, usually Available or On hand. To rank by a combined total, build a total column first (spreadsheet or csv-column-merger), then sort it.
Will sorting change my counts or SKUs?
No. The sorter only reorders rows; it never edits a cell. Quantities, SKUs, supplier codes, and location data come out byte-identical, just in a new order. Numeric mode is used only for comparison.
Are blank quantities the same as zero?
In numeric mode a blank parses to 0, so it sorts with the out-of-stock items at the top. But a blank may mean 'not tracked' rather than truly zero — review the top group and verify before reordering. The blank stays blank in the output.
Is my inventory data uploaded anywhere?
No. Parsing and sorting run entirely in your browser via PapaParse — SKUs, supplier data, and counts never reach a server. When signed in, only a usage counter is recorded (no content). Safe for confidential stock data.
How large an inventory file can I sort for free?
Free handles up to 2 MB and 500 rows per job. Pro raises that to 100 MB and 100,000 rows. On free, filter to one location/category with csv-column-filter or split with csv-row-splitter first.
Can I show the most overstocked items first instead?
Yes — keep Numeric on and switch to Z → A (descending). The largest quantities sort to the top, useful for planning clearance or rebalancing. The file downloads as .sorted-desc.csv.
Can I keep only the items below a reorder threshold?
No — sorting never removes rows. Filter first with csv-column-filter (Pro) using a less-than condition on the quantity, then sort the filtered list ascending. That gives you a tight reorder list with the lowest stock on top.
Privacy first
Processing runs locally in your browser with PapaParse. No file is uploaded — only metadata counters are saved for signed-in dashboard stats.