How to split an orders csv into one file per region
- Step 1Export the full orders CSV — Shopify: Orders → Export → Plain CSV file → All orders (or current filter). WooCommerce: use a CSV export plugin or Tools → Export. NetSuite / Linnworks / other OMS: export the orders saved-search to CSV. Keep the header row — the splitter copies it into every output. Free tier handles files up to 2 MB / 500 rows; Pro raises that to 100 MB / 100,000 rows.
- Step 2Drop the file onto the splitter above — PapaParse parses it in your browser — order PII never leaves the tab. The first row is read as headers and populates the Split by column dropdown; you don't tell the tool which platform the file came from.
- Step 3Pick the region column from the dropdown — Choose
Shipping Country,Region,Shipping Province, or a custom Zone column. The dropdown lists every header by name (orCol Nif a header is blank). Only one column is selectable — this tool partitions by a single column per run. - Step 4Decide on case-sensitive grouping — Case-sensitive grouping (default ON) keeps
USandusas two files. Untick it to fold case variants —US,us, andUsthen land in one group whose filename uses whichever spelling appeared first in the file. It does not trim whitespace, soUSwith a trailing space is still a separate group either way. - Step 5Run the split and review the group list — Click Split into groups. The result panel shows Total rows and Groups (the count of distinct values), then one row per group with its value name and row count. Scan this list before downloading — an unexpected number of groups usually means stray casing or trailing spaces in the region column.
- Step 6Download each regional file — Each group has its own Download button — files are saved one at a time (there is no bulk/ZIP download). The filename is
<source-name>.<value>.csv, where the value is sanitised to letters, digits, hyphen and underscore (other characters become_) and truncated to 50 characters — soAsia-Pacific (APAC)saves asorders.Asia-Pacific__APAC_.csv.
The two controls the splitter actually exposes
The orders splitter has exactly two inputs — a single-column selector and a case-sensitivity toggle. There is no delimiter picker, no multi-column split, and no value-rename step.
| Control | What it does for an orders file | Default |
|---|---|---|
| Split by column (dropdown) | Selects the single column to partition on — e.g. Shipping Country, Region, Shipping Zone. Lists every header by name; blank headers show as Col N. One column per run | First column (index 0) |
| Case-sensitive grouping (checkbox) | ON: US and us are separate files. OFF: case variants merge using toLowerCase() on the grouping key; the merged file is named after the first-seen spelling. Never trims whitespace | On (ticked) |
How common region-column values group
Worked examples of the grouping rule on real order-region data. Grouping compares the raw cell; only the comparison key is lowercased when case-sensitivity is off — values are never trimmed.
| Region cells in column | Case-sensitive (default) | Case-insensitive (unticked) |
|---|---|---|
US, US, CA | 2 files: US (2 rows), CA (1) | 2 files: US (2), CA (1) |
US, us, Us | 3 files: US, us, Us (1 each) | 1 file named US (first seen), 3 rows |
UK, UK (trailing space) | 2 files — the trailing space makes a distinct group | 2 files — still distinct (no trimming) |
France, ` (blank), France` | 2 files: France (2 rows), (empty) (1) | 2 files: France (2), (empty) (1) |
Free vs Pro limits for orders splits
Limits are enforced on the source file before the split runs. Output file count is not capped — a high-cardinality region column simply produces more download buttons.
| Limit | Free | Pro |
|---|---|---|
| Source file size | 2 MB | 100 MB |
| Source row count | 500 rows | 100,000 rows |
| Number of output groups / files | No cap (one per distinct value) | No cap |
Cookbook
Real before/after splits from order exports. Customer PII anonymised; only the region column and a couple of representative columns shown.
Shopify orders split by Shipping Country for 3PL hand-off
ExampleEach fulfilment partner only needs their own country's orders. Selecting Shipping Country produces one file per country, header included, ready to drop into the partner's import.
Input (orders.csv): Name,Email,Shipping Country,Total #1001,a@x.com,United States,42.00 #1002,b@x.com,Canada,18.50 #1003,c@x.com,United States,99.00 Split by column: Shipping Country Groups (2): United States — 2 rows → orders.United_States.csv Canada — 1 row → orders.Canada.csv orders.United_States.csv: Name,Email,Shipping Country,Total #1001,a@x.com,United States,42.00 #1003,c@x.com,United States,99.00
Mixed-case region codes inflating the group count
ExampleAn OMS that lets staff type the region freehand produces EU-WEST, eu-west, and Eu-West. With the default case-sensitive grouping that is three files. Untick case-sensitivity to merge them.
Input region column: EU-WEST, eu-west, Eu-West, APAC Default (case-sensitive): 4 groups EU-WEST (1), eu-west (1), Eu-West (1), APAC (1) Untick 'Case-sensitive grouping': 2 groups EU-WEST (3 rows) — named after the first spelling seen APAC (1 row) → filename: orders.EU-WEST.csv
Blank shipping country becomes the (empty) file
ExampleLocal-pickup or digital orders sometimes have no shipping country. Those rows group together under (empty) so you can route or fix them rather than losing them.
Input (Shipping Country):
United States
(blank)
United States
(blank)
Split by Shipping Country → 2 groups:
United States — 2 rows → orders.United_States.csv
(empty) — 2 rows → orders._empty_.csv
(The group is labelled (empty); the parentheses are sanitised
to underscores in the saved filename.)Special characters in region names get sanitised in the filename
ExampleThe on-screen group keeps the exact value, but the download filename strips anything outside letters/digits/hyphen/underscore to keep it filesystem-safe, and truncates at 50 characters.
Group value on screen: Asia-Pacific (APAC) / 亚太 Download filename: orders.Asia-Pacific__APAC_____.csv Rule: [^a-zA-Z0-9-_] → '_', then first 50 chars. The CSV content keeps the original value intact in the cells — only the filename is sanitised.
Two-level split: region, then status
ExampleThe tool splits by one column per run. To get region-then-status, split by region first, then re-run the splitter on each regional file using the Status column.
Pass 1 — split orders.csv by Region → orders.US.csv, orders.EU.csv, orders.APAC.csv Pass 2 — drop orders.US.csv back in, split by Status → orders.US.fulfilled.csv orders.US.unfulfilled.csv For a single 'extract one slice' need (e.g. only US + unfulfilled), use the csv-column-filter tool instead: /tool/csv-column-filter
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.
Case-variant region codes produce extra files
By designWith case-sensitive grouping on (the default), US and us are two distinct groups. Freehand-entered region columns are the usual culprit. Untick Case-sensitive grouping to fold them — the merged file is named after the first spelling encountered in the source order.
Trailing or leading spaces in the region cell
PreservedThe splitter does not trim. France and France (trailing space) are always separate groups, even with case-sensitivity off — only the comparison key is lowercased, never trimmed. If your export has padded region values, clean them first with the csv-cleaner (whitespace trim) and then split.
Blank region values
PreservedRows whose chosen column is empty (or whitespace-only that trims to empty for the label) are collected into a single group displayed as (empty). They are never dropped. This is the right place to find local-pickup or digital orders that have no shipping country.
High-cardinality region column (postcodes, cities)
ExpectedSplitting on a near-unique column — full postcode, city, or order id — yields hundreds of tiny files, each downloaded with its own button (there is no bulk/ZIP download). Pick a true categorical column (Region, Country, Zone). For extracting just one slice rather than every value, the csv-column-filter tool is a better fit.
Source file over the free 2 MB / 500-row limit
Rejected (free tier)Free tier blocks the run with an upgrade overlay if the file exceeds 2 MB or 500 rows. A full annual orders export usually trips the row limit. Pro raises the ceiling to 100 MB / 100,000 rows; alternatively chunk the file first with the csv-row-splitter, but note that splits the file by row count, not by region value.
Quoted commas inside an address column
SupportedPapaParse is RFC-4180 quote-aware, so a Shipping Address like "123 Main St, Apt 4" is parsed as one cell and won't shift the region column. The splitter operates on parsed cells, not raw text, so embedded commas in non-region columns don't affect grouping.
You wanted region-AND-status in one pass
Not supportedThe tool splits by exactly one column per run. There is no compound or multi-column split. Run it twice (region, then status on each output), or use csv-column-filter to extract a single region+status combination directly.
Output values that differ only after the 50-character mark
Filename collision riskFilenames are truncated to 50 characters after sanitisation. Two very long region labels that share their first 50 sanitised characters produce the same filename — saving the second overwrites the first if you keep the default name. The CSV contents are correct; just rename on save if your region labels are unusually long.
Frequently asked questions
How many files will I get?
One file per distinct value in the column you pick. The result panel shows the Groups count before you download anything. If a Region column has 20 unique values you get 20 files; review the group list first, because a higher-than-expected count almost always means stray casing or trailing spaces in the region column.
Can I split by Region and Status at the same time?
Not in one pass — the tool partitions by a single column. Split by Region first, then re-run the splitter on each regional file using the Status column. If you only need one specific combination (e.g. US + unfulfilled), the csv-column-filter tool extracts that slice directly with equals/contains conditions.
Does it download all the regional files in one ZIP?
No. Each group has its own Download button and saves a single CSV. There is no bulk or ZIP download — you click through each region you need. For a small number of regions this is quick; for high-cardinality columns, reconsider whether you actually want every value as a separate file.
Why are `US` and `us` ending up in separate files?
Case-sensitive grouping is on by default, so the two spellings are treated as different values. Untick Case-sensitive grouping to merge them — the combined file takes the name of whichever spelling appeared first in the source CSV. Note it still won't merge values that differ only by whitespace.
What happens to orders with a blank region?
They are grouped into a single file shown as (empty). Nothing is discarded. This is usually where local-pickup, digital, or mis-keyed orders end up — review and route them separately.
Will the customer header row be in every regional file?
Yes. Each output file begins with the original header row from your export, followed only by the rows that match that region value. The files are import-ready and open in Excel with the same column layout as the master.
Does the region value get cleaned or renamed?
No. The on-screen group name and the cell contents keep the exact value from your file. Only the download filename is sanitised (non-alphanumeric characters become underscores, truncated to 50 characters) so it is safe to save. The data itself is never altered.
Is there a limit on how many regional files it can produce?
There is no cap on the number of output groups — it is one per distinct value. The limits apply to the source file: 2 MB / 500 rows on free, 100 MB / 100,000 rows on Pro. A high-cardinality column simply produces more download buttons.
Does it handle semicolon-delimited European exports?
The underlying PapaParse parser auto-detects the delimiter from the file, so comma and semicolon exports both parse. The splitter itself exposes no delimiter control — it works on the parsed cells. If a region column looks wrong, the file may use an unusual delimiter or be malformed; clean it with the csv-cleaner first.
Are my order details uploaded anywhere?
No. Parsing and splitting run entirely in your browser via PapaParse. Customer names, addresses, emails, and order totals never reach a server. Only an anonymous run counter is recorded server-side when you are signed in, for dashboard stats.
My file is too big for the free tier — what are my options?
Upgrade to Pro for 100 MB / 100,000 rows, or pre-chunk the export with the csv-row-splitter (splits by row count). If you only need a couple of regions, filter the file down first with the csv-column-filter, which keeps the result under the free limit.
Can I automate this as part of an export pipeline?
Yes — GET /api/v1/tools/csv-column-value-splitter returns the option schema (the columnIndex and caseSensitive options the UI exposes). Pair the @jadapps/runner once and POST your file to 127.0.0.1:9789/v1/tools/csv-column-value-splitter/run. A typical pipeline: nightly Shopify orders export → runner-side split by Shipping Country → drop each file to the matching 3PL folder. Order data never reaches JAD's servers — the runner executes 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.