A CSV import checklist that prevents silent damage

Most CSV failures are not corrupt files. They are mismatched assumptions about encoding, delimiters, headers, quoting or field types.

Last reviewed 2026-08-24 · editorial and testing policy

CSV looks simple because you can open it in a text editor. In practice, the destination has an import contract: a delimiter, character encoding, header rule, date convention, row limit and policy for formulas. A file can be valid CSV and still import the wrong data. Run this checklist before splitting or uploading a production export.

1. Write down the destination contract

  • Maximum rows and file size per import
  • Required column names and whether their order matters
  • Accepted delimiter: comma, semicolon or tab
  • Expected encoding, normally UTF-8
  • Date, decimal and boolean formats
  • Whether an external ID can make a retry idempotent instead of creating duplicates

If the importer offers a template, use its header as the contract. Do not rename columns for readability until you know the mapping is configurable.

2. Verify encoding and delimiter with evidence

Open a small copy in a plain-text editor, not only Excel. Korean names displayed as replacement characters usually indicate that UTF-8 and a legacy encoding were confused. A semicolon-delimited European export may appear as one giant column in a comma-only importer. The CSV to JSON tool reports the detected delimiter and is a quick way to inspect whether records and headers parse as expected.

For spreadsheet delivery, a UTF-8 BOM helps Excel recognize Unicode reliably. For databases and code, plain UTF-8 is often preferred. Follow the destination documentation rather than treating either choice as universal.

3. Treat records as records, not lines

A quoted field may legally contain commas, quotation marks and line breaks. That means a CSV row is not necessarily one physical line. A line-based splitter can cut an address or comment in half and shift every following column. Split CSV parses quoted fields before creating parts, repeats the header, and preserves the detected delimiter.

Input detailRisk if handled naivelySafe check
Comma inside a quoted addressExtra columnParse with RFC 4180 quoting
Line break inside notesOne record becomes twoSplit on parsed record boundaries
Leading zero in an ID00127 becomes 127Import the field as text
Long numeric identifierSpreadsheet rounds digitsTreat as text, never a measure
Cell starts with =, +, - or @Formula execution in a spreadsheetNeutralize untrusted text values

4. Decide the split size from the destination, not from the source

If a CRM accepts 10,000 records per job, use a smaller round number such as 9,000 to leave room for off-by-one header rules. Keep every part in one ZIP and number them in order. Record the total data-row count before splitting; the sum of all parts after removing repeated headers must equal that original count.

This site applies a 25 MB per-file safety limit to in-memory data tools. That is a browser-memory guard, not a paid tier. For larger exports, use a streaming desktop tool and apply the same record-boundary and row-count checks.

5. Import a canary before the full set

  1. Create a 10–20 row sample containing Unicode, an empty value, a quoted comma, a multiline note, a leading-zero ID and the longest realistic field.
  2. Import it into a test list or sandbox.
  3. Export those records back out and compare identifiers, dates and Unicode text.
  4. Only then import part 1. Check accepted, rejected and duplicate counts before continuing.
  5. Keep the original export and a log of each part so a retry is explainable.

Final reconciliation

The job is not complete when the importer says “success.” Reconcile source rows = accepted + rejected + intentionally skipped. Spot-check records from the first, middle and last part. If the destination can modify existing records, also verify that the operation did not create duplicates or erase fields that were blank in the CSV.