The short answer: if you must produce a CSV, do these four things before you
save. Format your ID, ZIP and phone columns as Text (not General) so Excel
stops treating them as numbers. Rewrite every date as yyyy-MM-dd. Use
File → Save As → CSV UTF-8 (Comma delimited), not plain
CSV (Comma delimited). Then open the saved file in a text editor and look at
it — that is the file Salesforce will read, and it is the only way to see what Excel actually
wrote.
Why the conversion step exists at all
Because Salesforce's own tools do not read Excel. Data Loader "reads, extracts, and loads data from comma-separated values (CSV) files or from a database connection", and Salesforce's help documentation states plainly that Microsoft Excel files (XLS or XLSX) are not directly supported by its import tools. The Data Import Wizard takes a CSV too. So the guides are not wrong — with those tools, you have no choice.
The problem is that Excel's CSV export is not a neutral dump of your data. It writes what the cells display, in your machine's locale, in your machine's default encoding. Four of those defaults are actively hostile to a Salesforce load.
What the conversion breaks
| What you see | Why it happens | How to avoid it |
|---|---|---|
A long numeric key exports as 1.23457E+17 |
Excel stores numbers as IEEE-754 doubles and keeps only 15 significant digits; anything longer is displayed in scientific notation, and the CSV gets the displayed text. | Format the column as Text before the values are entered or pasted. |
An 18-digit external key comes back ending in 000 |
Same 15-digit ceiling. Digits past the fifteenth are replaced with zeros — silently, with no warning and no error. | Text-formatted column, or re-export the key from the source system as a string. (Salesforce's own record Ids are alphanumeric, so they usually survive this; numeric ERP keys, order numbers and SKUs do not.) |
02134 becomes 2134 |
Excel reads it as a number, and numbers have no leading zeros. Salesforce's own docs note that "both Excel and Google Spreadsheet will remove leading zeros after saving the file" unless the column is formatted first. | Text-formatted column. Affects ZIP codes, phone numbers, account numbers, cost centres. |
03/04/2026 loads as the wrong month |
Excel writes the date in the display format, which follows the machine locale — day-first in the UK, month-first in the US. The file is ambiguous, and something downstream has to guess. |
Write dates as yyyy-MM-dd. That is the format the Bulk API expects for a
date field, and it cannot be misread.
|
Ambrosetti arrives as AmbrosettiÂ, Müller as Müller |
Salesforce's docs are explicit: "When using Microsoft Excel to save a CSV file, its encoding is automatically set using machine-specific ANSI encoding and not UTF-8." The Bulk API requires UTF-8. | Save as CSV UTF-8, or re-encode the saved file in a text editor. |
| Semicolons instead of commas between fields | Excel's CSV delimiter follows the Windows list separator, which is a semicolon in most European locales. The file is a CSV in name only. | Change the list separator in regional settings, or find-and-replace the delimiter after saving. |
| A description field shunts every later column one to the right | The value contains a comma or a line break. Correct CSV requires it to be wrapped in double quotes, and an embedded double quote must itself be doubled. Not every writer and reader agrees. | Strip line breaks from free-text columns, and check the saved file, not the spreadsheet. |
| Hundreds of empty records get created | Rows that only ever held formatting are still inside the sheet's used range. They export as empty lines, and an insert obligingly creates a record for each one. | Select and delete the rows below your data — delete the rows, not just their contents. |
| Only one sheet made it into the file | Every CSV save option in Excel "saves only the active sheet". Your lookup tab is not in the export. | Export each sheet separately, or use a tool that reads the workbook. |
Surviving the CSV route
If Data Loader or the Data Import Wizard is what you have, this is the order that works. Do it once, properly, and keep the cleaned file as your template.
- Fix the column types first. Select the ID, ZIP, phone and reference columns and set
them to Text. Re-paste the values afterwards. Reformatting a column that already
shows
1.23457E+17does not bring the lost digits back — the truncation happened when the value went in. - Rewrite dates as
yyyy-MM-dd. The Bulk API documentsyyyy-MM-ddfor adatefield andyyyy-MM-ddTHH:mm:ss.SSSZ(or with a+/-HH:mmoffset) for adateTime. If your dates are landing a day early or late, that is usually a timezone problem rather than a format one — see dates shifting by one day. - Delete the empty rows and columns below and to the right of your data.
- Save as CSV UTF-8 (Comma delimited), not plain CSV. This is the only save option that reliably preserves accents and non-Latin characters.
- Watch out for the byte order mark. CSV UTF-8 writes a BOM, and Salesforce documents
that Data Loader (v28 and later) rejects BOM-prefixed files with
Invalid CSV file format. Please select a different file. Error getting header row from the CSV file. If you hit that, re-save the file as UTF-8 without a BOM in a text editor such as Notepad++. - Open the .csv in a text editor before you load it. Not in Excel — Excel will re-parse it and hide the very damage you are looking for. Check one long ID, one ZIP code, one date, one accented name.
That checklist works with no tooling beyond Excel and Notepad. It is also six manual steps that have to be repeated correctly on every file, by every person, forever, and step one is unrecoverable if you get it wrong.
The better route: never convert at all
Most of that table has one root cause — an intermediate text format that throws away the types your
spreadsheet already knew. An .xlsx file stores a date as a date and a number as a number.
Nothing forces you to flatten that into ambiguous text before Salesforce sees it, except the tools.
The 15-digit truncation is the exception, and it is worth being clear about: that damage happens
inside Excel, the moment a long number lands in a General column. It is already in the
.xlsx. No reader — ours or anyone's — can put the digits back. That one you fix at the
source, with a Text-formatted column. Everything else in the table disappears when the conversion does.
INQUA reads
.xlsx, .xlsm, .csv and .txt natively, so the
conversion never happens. Cells are read as the values the workbook actually stores — a date cell
arrives as a date rather than as whatever your locale would have printed, a text-formatted key keeps
every character, and a formula cell arrives as its cached result. For CSVs it detects the encoding
(UTF-8, UTF-16 with either byte order, and Windows-1252 for the BOM-less ANSI files Excel's plain
CSV save produces) instead of assuming one. All-blank rows are dropped so they cannot become phantom
records. Legacy .xls is the one exception: re-save it as .xlsx once, and
you are done.
From there you map columns, apply per-column transformations if the source values need translating, and
preview every row with its Salesforce type applied — so a value that will not convert is flagged as a
type-conversion error in the preview grid,
not in a Salesforce failure log an hour later. The output is either a typed .xlsx workbook
written onto your own load template — which needs no
Salesforce connection at all — or a Bulk API 2.0 insert or External-Id upsert, confirmed twice. It never
deletes and never updates by record Id.
What this does not fix
Being honest about the boundary: reading the file correctly removes a whole class of self-inflicted errors, and none of the others. No client-side tool can know that your org has a validation rule requiring a close date in the future, a required field enforced by page layout, a duplicate rule, or a trigger that rejects the record. Those are decided by your org's automation at write time, and the only way to find them is to write. Nor can any reader recover a number Excel already truncated before you uploaded the file. What you can do is make sure the rows that reach the org are not carrying shifted dates, stripped zeros, or mojibake in the company name — damage the file format added, rather than damage your data ever had.
If you are choosing between tools rather than fixing one file, the Data Import Wizard's limits are the usual reason people end up here, and the import error reference covers what Salesforce tells you when a row is rejected.