How to trim a csv to only the columns your import needs
- Step 1Open your target system's import template — Note the exact columns the importer requires — QuickBooks, Salesforce Data Loader, or your custom DB. Write down which source columns map to them and which are surplus.
- Step 2Export the source CSV — Pull the full file from wherever the data lives. Keep the original; the tool produces a new trimmed copy and never edits in place.
- Step 3Drop the file onto the remover above — Every header appears as a checkbox. The file is parsed in your browser — nothing uploads. Free handles up to 2 MB and 500 data rows.
- Step 4Tick every surplus column — Select all columns NOT in the import template. Remember the model is remove-what-you-tick: to keep 8 of 40, you tick the other 32. Blank-header columns show as
Col N. - Step 5Run and verify the remaining count — Click
Remove N columns. Confirm 'columns remaining' equals the number your import template expects, and scan the preview to be sure the right fields survived. - Step 6Reorder if your importer is order-sensitive, then import — Download
<yourfile>.columns-removed.csv. If the target maps columns by position rather than header name, run csv-column-reorder first, then upload to the import wizard.
Common import targets and how they map columns
Whether trimming is enough — or you also need to reorder/rename — depends on how the target matches columns. General guidance; confirm against your specific importer version.
| Target system | Maps columns by | Trim helps because | Also consider |
|---|---|---|---|
| QuickBooks (CSV import) | Manual field mapping in the wizard | Fewer columns = a shorter, less error-prone mapping screen | Header names don't have to match exactly |
| Salesforce Data Loader | Header name → field mapping | Removes columns that fuzzy-match to the wrong field | csv-header-rename if headers must match API names |
| Generic SQL bulk import (COPY / LOAD DATA) | Column position | Trimming to the exact set the table expects | csv-column-reorder to match column order |
| Mailchimp / CRM audience import | Header name → audience field | Fewer audience fields created from junk columns | Dedup/clean first with csv-cleaner |
| Custom app with a fixed template | Position and/or header | Matches the template's exact column count | Reorder + rename as needed |
Trim behaviour vs. what you might also need
This tool only removes columns. The adjacent operations live in sibling tools. Verified against the column-remover client and lib/csv-utils.ts.
| Need | This tool? | Right tool |
|---|---|---|
| Delete surplus columns | Yes | csv-column-remover (this tool) |
| Reorder remaining columns to match template | No | csv-column-reorder |
| Rename headers to the target's field names | No | csv-header-rename |
| Cap rows to the importer's per-file limit | No | csv-row-limiter |
| Remove duplicate rows before import | No | csv-deduplicator |
| Validate structure before uploading | No | csv-validator |
Cookbook
Trimming a real export down to an import template. The 'keep' set is whatever survives after you tick everything else.
Trim a 7-column export to a 3-column QuickBooks template
ExampleQuickBooks customer import needs Name, Email, Phone. The export has four extra columns. Tick the four to remove them.
Import template needs: Name, Email, Phone Input (export): Name,Email,Phone,InternalID,LastLogin,Plan,Notes Acme,ap@acme.com,555-0100,9931,2026-05-01,Pro,VIP Ticked to remove: InternalID, LastLogin, Plan, Notes Output (<file>.columns-removed.csv): Name,Email,Phone Acme,ap@acme.com,555-0100
Trim then reorder for a position-based SQL load
ExampleA SQL bulk load matches by position, and the table expects (sku, name, price). The export has them in a different order with extras. Trim first, then reorder.
Export:
name,category,price,sku,supplier
Desk Lamp,Lighting,39.99,B001,Acme
Step 1 — csv-column-remover, tick: category, supplier
→ name,price,sku
Desk Lamp,39.99,B001
Step 2 — csv-column-reorder to (sku,name,price)
→ sku,name,price
B001,Desk Lamp,39.99Drop a stray blank-header column the importer chokes on
ExampleA trailing comma in the source created an unnamed column. The wizard sees an empty field it can't map. Remove the Col N entry.
Input (note trailing comma → empty 4th column): Name,Email,Phone, Acme,ap@acme.com,555-0100, Picker shows: Name, Email, Phone, Col 4 Ticked to remove: Col 4 Output: Name,Email,Phone Acme,ap@acme.com,555-0100
Semicolon-delimited European export trimmed cleanly
ExampleA European accounting export uses semicolons. The input delimiter is auto-detected; the output is comma-delimited (often what the importer wants anyway).
Input (semicolon-delimited): Name;Email;Steuernummer;Plan Acme;ap@acme.com;DE123456789;Pro Ticked to remove: Steuernummer, Plan Output (comma-delimited): Name,Email Acme,ap@acme.com
Export longer than 500 rows on the free tier
ExampleAn import file with 5,000 contacts exceeds the free row cap. Cap or split first.
Export: 5,000 rows → over 500-row free limit Option A (Pro): trim the whole file directly. Option B (free): csv-row-splitter → 10 files of 500 → csv-column-remover on each → import each chunk, OR csv-merger back into one before the import wizard.
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.
You tick the columns to remove, not the ones to keep
By designThere is no 'keep only these' mode. To trim a 40-column export to the 8 your template needs, you tick the other 32. It feels backwards when most columns are junk, but it means the UI always shows exactly what is being deleted. The 'columns remaining' stat confirms you landed on the right count.
Importer maps by column position, not header
Reorder afterwardsTrimming changes which columns exist but keeps their relative order. If your target (e.g. a SQL bulk load) maps by position, the surviving order must match the table. Run csv-column-reorder after trimming to put them in the expected sequence.
Headers must match the target's field names exactly
Rename afterwardsThis tool removes columns but never renames the survivors. If Salesforce or your importer matches Email Address but your column is Email, trimming alone won't fix the mapping — follow with csv-header-rename.
Two columns share the same header
SupportedRemoval is positional, so duplicate headers (Address, Address) are unambiguous to the tool — each checkbox is a distinct column position. In the preview they look identical, so rely on column order to pick the right one. Importers, by contrast, often reject duplicate headers — removing one may be exactly the fix.
Trailing-comma blank column the wizard can't map
RemovableA trailing delimiter in the source produces an unnamed column that shows as Col N. Many import wizards surface it as an empty unmappable field. Tick the Col N entry to drop it; the kept columns stay aligned.
Output is comma-delimited even if input wasn't
ExpectedThe input delimiter is auto-detected (comma, tab, semicolon, pipe) but the download is always comma-delimited. Most import wizards expect commas, so this is usually helpful — but if your target specifically requires tabs or semicolons, convert after trimming.
File over 2 MB or 500 rows on free tier
Blocked (free limit)Free caps at 2 MB and 500 data rows. Big import files exceed both. Upgrade to Pro, or split with csv-row-splitter / cap with csv-row-limiter, trim each part, and import in batches.
Accidentally removed a required column
RecoverableThe source file is never modified, and the output is always a new <name>.columns-removed.csv. If you remove a column the import needs, re-drop the original and re-run with the right selection — no harm done.
Frequently asked questions
Do I select the columns to keep or the columns to remove?
You tick the columns to remove. There is no 'keep only these' inverse mode. To trim a wide export to the few columns your import template needs, tick everything except those. The 'columns remaining' stat after the run confirms you ended up with the right number.
Will trimming shift my data into the wrong import fields?
No. Removal is positional and applied to every row uniformly, so the columns you keep retain their exact values and stay aligned. That alignment is the whole point — it's a cleaner file for the field mapper than the bloated original.
Does the tool reorder columns to match my import template?
No — it only removes columns; the survivors keep their relative order. If your importer maps by position, run csv-column-reorder after trimming to match the expected sequence.
Does it rename headers to my target system's field names?
No. Headers are untouched apart from removed columns. If your importer matches on exact field names (e.g. Salesforce API names), follow up with csv-header-rename.
Can I save the trim selection as a preset for repeat imports?
Not in the UI — there's no preset or saved-selection feature, so you tick fresh each run. For a repeatable monthly import, script the API/runner instead: it takes a fixed columns list of names or indices to drop.
My export uses semicolons — will the import file still work?
Yes. The input delimiter is auto-detected, so a semicolon export is parsed correctly. The output is always comma-delimited, which most import wizards expect. If your target specifically requires semicolons or tabs, convert the trimmed file afterwards.
What if there's a blank/unnamed column from a trailing comma?
It appears in the picker as Col N (1-based). Many import wizards surface it as an empty unmappable field, so ticking it to remove it often fixes the import. The kept columns stay aligned.
How many rows can I trim for free?
Free handles files up to 2 MB and up to 500 data rows; either over the cap blocks the run. Import files often exceed both. Pro removes the limits, or split with csv-row-splitter and import in batches.
What does the downloaded file get named?
<your-original-name>.columns-removed.csv. The original is never modified, so you always have it to re-run if you trim the wrong columns.
Does trimming reduce duplicate rows or empty rows too?
No. It only removes columns. Empty rows and duplicate rows are left as-is. Use csv-empty-row-remover and csv-deduplicator as separate steps if your importer rejects those.
Two of my columns have the same header — which one gets removed?
The one whose checkbox you tick. Removal is by column position, not header text, so duplicate headers are unambiguous to the tool. They look identical in the preview, so use column order to pick the correct one — and note that removing a duplicate header is often exactly what the importer needs.
Can I run trimming automatically before a scheduled import?
Yes. Pair the @jadapps/runner once and POST the source CSV to 127.0.0.1:9789/v1/tools/csv-column-remover/run with options.columns listing the columns to drop by name (case-insensitive) or index. It returns the trimmed CSV, ready to feed into your import job — all on-device.
Privacy first
Processing runs locally in your browser with PapaParse. No file is uploaded — only metadata counters are saved for signed-in dashboard stats.