How to split an inventory csv into one file per supplier
- Step 1Export the consolidated inventory CSV — Pull the full stock list from your WMS (e.g. ShipBob, Linnworks), ERP (NetSuite, SAP B1, Dynamics), or an inventory spreadsheet, with the Supplier / Vendor column populated. Keep the header. Free tier: 2 MB / 500 rows; Pro: 100 MB / 100,000 rows.
- Step 2Drop the file onto the splitter above — PapaParse parses it locally — stock and cost data never leave the tab. The first row becomes the headers and fills the Split by column dropdown.
- Step 3Select the Supplier column — Choose
Supplier,Vendor,Supplier Code, or whichever column carries the supplier value. The dropdown lists every header by name (blank headers show asCol N). One column per run. - Step 4Decide on case-sensitive grouping — Case-sensitive grouping (default ON) keeps
ACME LtdandAcme Ltdseparate so you can spot duplicate-supplier spellings. Untick to merge case variants into one file named after the first spelling seen. It never trims whitespace, soAcme Ltdstays its own group. - Step 5Run the split and review the supplier list — Click Split into groups. The result panel shows Total rows and Groups (the distinct supplier count), then each supplier with its line count. Reconcile against your approved-vendor list — extra groups usually mean casing, whitespace, or code-format variants to clean up.
- Step 6Download each supplier's file — Each supplier has its own Download button — files save individually (no ZIP/bulk download). The filename is
<inventory-name>.<supplier>.csv, with the supplier value sanitised to letters/digits/hyphen/underscore (other characters become_) and truncated to 50 characters.
The two controls the splitter exposes
Two inputs only — a single-column selector and a case toggle. No supplier-code normalisation, no merge, no multi-column split, no delimiter picker.
| Control | What it does for an inventory file | Default |
|---|---|---|
| Split by column (dropdown) | Selects the single supplier column — Supplier, Vendor, Supplier Code. Lists every header by name; blank headers show Col N | First column (index 0) |
| Case-sensitive grouping (checkbox) | ON: ACME Ltd and Acme Ltd are separate files. OFF: case variants merge (key lowercased); merged file named after the first-seen spelling. Never trims whitespace | On (ticked) |
How supplier values group
The split groups on the raw supplier cell. Receiving-session casing and whitespace artefacts create separate groups unless folded.
| Supplier cells | Case-sensitive (default) | Case-insensitive (unticked) |
|---|---|---|
Acme, Acme, Globex | 2 files: Acme (2), Globex (1) | Same: 2 files |
ACME Ltd, Acme Ltd | 2 files | 1 file named ACME Ltd (first seen) |
SUP-001, SUP-001 (trailing space) | 2 files — space makes a distinct group | 2 files — still distinct (no trim) |
Globex, `` (blank) | 2 files: Globex (1), (empty) (1) | 2 files: Globex (1), (empty) (1) |
Free vs Pro limits for inventory splits
Limits apply to the source inventory file before the split. Output file count is uncapped — one per distinct supplier.
| Limit | Free | Pro |
|---|---|---|
| Source file size | 2 MB | 100 MB |
| Source row count | 500 rows | 100,000 rows |
| Output supplier files | No cap | No cap |
Cookbook
Before/after splits from inventory exports. Costs anonymised; representative columns shown.
WMS inventory split by Supplier for RTV
ExampleEach return-to-vendor batch needs only that supplier's stock lines. Selecting Supplier gives one file per supplier, header included.
Input (inventory.csv): SKU,Description,Supplier,QtyOnHand A-100,Widget,Acme,40 B-200,Gadget,Globex,12 A-101,Widget XL,Acme,5 Split by column: Supplier Groups (2): Acme — 2 rows → inventory.Acme.csv Globex — 1 row → inventory.Globex.csv inventory.Acme.csv: SKU,Description,Supplier,QtyOnHand A-100,Widget,Acme,40 A-101,Widget XL,Acme,5
Duplicate supplier spellings fragmenting a PO
ExampleThree receiving sessions wrote ACME Ltd, Acme Ltd, and ACME LTD. Default grouping makes three POs for one supplier. Untick case-sensitivity to merge.
Supplier cells: ACME Ltd, Acme Ltd, ACME LTD, Globex Default (case-sensitive): 4 groups Untick 'Case-sensitive grouping': 2 groups ACME Ltd (3 rows) — named after first spelling Globex (1 row) → inventory.ACME_Ltd.csv
Unsourced stock lines land in the (empty) file
ExampleSKUs with no supplier group together under (empty) so procurement can assign a vendor before raising POs.
Supplier cells: Acme, (blank), Globex, (blank) Split by Supplier → 3 groups: Acme — 1 row → inventory.Acme.csv Globex — 1 row → inventory.Globex.csv (empty) — 2 rows → inventory._empty_.csv ← unsourced
Supplier code with a slash sanitises in the filename
ExampleThe on-screen group keeps the exact code; the filename sanitises characters like / and &.
Group value on screen: ACME/EU & Co. Download filename: inventory.ACME_EU___Co_.csv Rule: [^a-zA-Z0-9-_] → '_', first 50 chars. The CSV cells keep the real supplier value; only the filename is sanitised.
Supplier then warehouse: a two-pass split
ExampleThe tool splits by one column per run. For supplier-then-warehouse, split by supplier first, then re-run on each supplier file using the Warehouse column.
Pass 1 — split inventory.csv by Supplier → inventory.Acme.csv, inventory.Globex.csv Pass 2 — drop inventory.Acme.csv back in, split by Warehouse → inventory.Acme.WH-North.csv inventory.Acme.WH-South.csv To pull just one supplier's stock, the csv-column-filter tool (/tool/csv-column-filter) does it in one step.
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.
Unsourced stock (blank supplier)
PreservedRows with an empty supplier cell are grouped into one file shown as (empty). They are never dropped — use it as the procurement backlog of SKUs that need a vendor assigned before POs are raised.
Same supplier under multiple spellings
By designACME Ltd and Acme Ltd are two groups with the default case-sensitive setting, so one supplier can fragment into several POs. Untick Case-sensitive grouping to merge case variants (named after the first spelling). Spelling differences beyond casing (Acme vs Acme Limited) won't merge — normalise the column first with csv-find-replace.
Trailing spaces on supplier codes
PreservedThe splitter never trims. SUP-001 and SUP-001 (trailing space, common from barcode-scanner or copy-paste receiving) are always separate groups, even with case-sensitivity off. Trim the supplier column first with the csv-cleaner to keep one supplier in one file.
Leading-zero supplier codes preserved
PreservedThe splitter is text-only — it never coerces values to numbers, so a supplier code like 00042 keeps its leading zeros in the grouping and in the output cells. (If your source CSV already lost the zeros to Excel auto-formatting, that happened upstream of this tool.)
File over the free 2 MB / 500-row limit
Rejected (free tier)A full consolidated inventory export usually exceeds 500 rows, blocking the run on free with an upgrade overlay. Pro raises the ceiling to 100 MB / 100,000 rows. The check is on the source file, not the per-supplier outputs.
Hundreds of distinct suppliers
ExpectedA long-tail supplier base produces many files, each with its own download button — there is no bulk/ZIP download, so this is a lot of clicks. Consider filtering to the suppliers you actually need this round with csv-column-filter before splitting.
Quoted commas in a description column
SupportedPapaParse is quote-aware, so a Description like "Bolt, M6, 20mm" is one cell and won't shift the supplier column. Grouping is on parsed cells, so embedded commas elsewhere don't affect the split.
Supplier codes sharing their first 50 characters
Filename collision riskFilenames truncate to 50 sanitised characters. Standard supplier codes are well within that, but if a value is an unusually long supplier description, two that share a 50-character prefix produce the same filename — rename on save. The CSV contents remain correct.
Frequently asked questions
What if some rows have no supplier assigned?
Rows with a blank supplier cell are grouped into a single file shown as (empty). Nothing is dropped — treat it as the unsourced-stock backlog for procurement. Assign vendors in the source and re-run, or hand the (empty) file to the buyer responsible for sourcing.
Can I split by supplier and then by category?
Yes, in two passes — the tool splits by one column per run. Split by supplier first, then re-run the splitter on each supplier file using the Category (or Warehouse) column. If you only need one supplier's stock, the csv-column-filter tool extracts that slice in one step.
Does this work for files with hundreds of unique suppliers?
Yes — there is no cap on the number of output groups; it is one per distinct supplier value. But each file downloads via its own button (no ZIP), so hundreds of suppliers means a lot of clicks. The free tier handles source files up to 2 MB / 500 rows; large inventories need Pro (100 MB / 100,000 rows).
Why is one supplier appearing in several files?
Almost always inconsistent spelling — ACME Ltd vs Acme Ltd, or a trailing space from a receiving session. Casing merges if you untick Case-sensitive grouping; whitespace and beyond-casing differences need cleaning first with the csv-cleaner (trim) or csv-find-replace (normalise names).
Are leading zeros in supplier codes kept?
Yes. The splitter is text-only and never converts values to numbers, so 00042 keeps its zeros in both the grouping and the output cells. If your source CSV already lost the zeros, that happened upstream (typically Excel auto-formatting) — re-export the source as text.
Does each supplier file include the header?
Yes. Every output begins with the inventory file's original header row, then only that supplier's stock lines. The file maps straight onto an RTV form or a PO import template.
Does it download all supplier files in one ZIP?
No. Each supplier has its own Download button and saves a single CSV. There is no bulk or ZIP download — fine for a handful of suppliers, click-heavy for a long-tail base. Filter down first if you only need a few.
Does the tool change or normalise supplier names?
No. The on-screen group name and the cell contents keep the exact source value. Only the download filename is sanitised (non-alphanumerics become underscores, truncated to 50 characters). There is no supplier-code normalisation feature.
Is my stock and cost data uploaded?
No. PapaParse runs in your browser; SKUs, quantities, unit costs, and supplier terms never reach a server. Only an anonymous run counter is recorded server-side when you are signed in.
How big an inventory file can it handle?
Free tier: 2 MB / 500 rows. Pro: 100 MB / 100,000 rows. The limit is on the source file. A large consolidated inventory needs Pro, or pre-chunk it with the csv-row-splitter (which splits by row count, not supplier).
Can I sort each supplier file before sending it?
The splitter preserves the original row order within each group — it doesn't sort. Run each supplier file through the csv-sorter afterwards if you need it ordered by SKU or quantity before the RTV or PO hand-off.
Can I automate the supplier split for weekly RTV runs?
Yes — GET /api/v1/tools/csv-column-value-splitter returns the option schema (columnIndex, caseSensitive). Pair the @jadapps/runner once and POST your inventory file to 127.0.0.1:9789/v1/tools/csv-column-value-splitter/run. A typical pipeline: weekly WMS export → runner-side split by Supplier → drop each file to the matching vendor folder. Stock data never reaches JAD's servers — the runner runs locally.
Privacy first
Processing runs locally in your browser with PapaParse. No file is uploaded — only metadata counters are saved for signed-in dashboard stats.