Troubleshooting: CSV Import Issues
CSV import failing or producing unexpected results? Common causes and fixes for Shelf's asset import and bulk-update workflows.

If your CSV import fails, partially imports, or creates unexpected records, check these common causes.
"Found N problems in your file. Nothing was imported."
This is the Import flow checking your file before it writes anything. The table under the message lists the problems at once, by spreadsheet row number, so fix them all and upload the same file again. Nothing from the rejected attempt was saved, so there is nothing to clean up and no risk of duplicates. If the table says it is showing the first 100 problems, fix those and upload again to see the rest. QR codes, barcodes and kit custody are checked after the table's checks and report one problem at a time, so a file with problems there can also take another upload.
The problems it most often reports:
- Quantity-tracked rows. A
quantityabove 1 needstypeset toQUANTITY_TRACKED, and a quantity-tracked row needs bothquantity(at least 1) andconsumptionType(ONE_WAYorTWO_WAY). The message names every column the row needs, not just the first one missing. - An asset model on a quantity-tracked row. Asset models group individually tracked assets only. Clear the
assetModelcell or settypetoINDIVIDUAL. - Custom field columns. An unknown type in a
cf:header, a type that differs from a field of the same name already in your workspace, two columns naming the same field with different types, or a value the field's type cannot accept. - Too many rows. More than 1,000 assets in one file.
Partial import or unexpected records
- Some rows were created, then the import failed: a file that fails the checks creates nothing. Once the checks pass, rows are written one by one, so a failure at that stage (a lost connection or a server timeout on a very large file) can leave the rows before it in place. Before you retry, check your Asset Index for what was created, then re-import only the remaining rows. Uploading the whole file again creates duplicates of the rows already imported. See Partial imports on failure.
- Missing title: every row needs a
titlevalue. The importer does not reject blank titles — those rows still create asset records, just with no name, which you'd then have to clean up by hand. Validate that every row'stitlecolumn is populated before uploading. - Encoding: save your CSV as UTF-8. Excel sometimes saves as ANSI or Windows-1252, which corrupts special characters (accents, non-Latin scripts). In Excel: File → Save As → choose "CSV UTF-8". A file you exported from Shelf already carries a UTF-8 byte order mark, so it opens with the right alphabet and re-saving it keeps the encoding. Shelf's importer strips the mark on the way back in, so it never lands in your data. See How the file is encoded.
- Extra commas or line breaks inside a cell: if a description field contains commas, the cell must be wrapped in double quotes. Most spreadsheet apps handle this automatically — but copy-pasted data from websites sometimes breaks the quoting.
Columns not mapping correctly
- Column headers must match Shelf's expected names exactly (case-sensitive). Unknown headers abort the entire import with "Invalid header provided." Check the CSV import guide for the full column reference.
- Custom fields: headers must use the form
cf:FieldName,type:TypeName— for examplecf:Purchase Date,type:date. A barePurchase Dateheader is not valid and will be rejected as an unknown header. In a comma-delimited file, the whole header must be wrapped in double quotes because it contains a comma:"cf:Purchase Date,type:date". In a semicolon-delimited file no quoting is needed.
"Duplicate" assets created instead of updates
This happens when you use the Import flow (which creates new assets) instead of the Update Existing Assets flow (which matches by ID and updates in place).
- To update existing assets: go to Assets → Import → Update existing (not the plain Import flow)
- The update flow matches rows to existing assets by their ID column
- Full walkthrough: Bulk Updating Assets via CSV
Import succeeds but data looks wrong
- Date custom fields (
cf:…,type:date): values must be inYYYY-MM-DDformat (e.g.2026-04-17). Any other format —04/17/2026,17-04-2026,17 Apr 2026— and impossible calendar dates like2026-02-31now stop the import with a clear error so you can fix the value, rather than being accepted. (Previously a day-first dash format such as03-04-2026could be silently stored as a wrong date like1908-10-16; that no longer happens.) Reformat the column toYYYY-MM-DDand re-import. - Number fields: remove currency symbols and thousands separators.
12359.00works;$12,359.00does not. - Boolean fields: custom-field booleans accept only
yesorno(case-insensitive).true,false,1,0are silently skipped — the value will not be saved. For thebookablecolumn, only the exact stringnomakes an asset non-bookable —false, blank, andyesall leave it bookable.
Update flow: a column didn't apply
In Update Existing Assets, an unrecognized or inapplicable column never stops the file. It is listed in the preview and skipped, so the usual symptom is that everything else updated and one column did nothing. The common causes:
- The header isn't one Shelf writes. Both header styles are accepted, the Standard export's labels (
Value,Asset model) and the Import-ready export's keys (valuation,assetModel), and capitalization doesn't matter. What does matter is spelling: a header that is neither is listed under unrecognized columns and ignored. - A custom field column names a field that doesn't exist here. The update flow writes to existing custom fields, it does not create them. The preview lists the field by name, so create that field under Settings → Custom fields and re-analyze.
- The quantity cell still has its unit in it. A Standard export writes
10 boxesfor a pooled asset. The update workflow needs10. A cell it can't read as a whole number is flagged in the preview with a warning and skipped, while the row's other changes still apply. An Import-ready export writes a plain number, so it doesn't hit this. - The quantity columns aren't in the export.
Min quantity,Unit of measure, andConsumption typeare not in a Standard export. Add the columns yourself with exactly those names, or export Import-ready, which already includes them. - The asset has stock in more than one location. A
Locationcell can't say which placement you meant, so the location change is flagged with a warning and skipped while the rest of the row applies. Move those units from the asset's location panel. Asset modelwas set on a quantity-tracked asset. Models group individually tracked assets only. The preview shows a warning on that cell, the model is not linked, and the rest of the row updates as normal.- A quantity column was set on an individually tracked asset. Those cells are ignored without a warning, since they ride along in every export.
- You tried to change
Tracking method. Asset type is fixed at creation, so the cell is ignored whatever it says. - A blank cell didn't clear the value.
Asset model,Quantity,Min quantity,Unit of measure, andConsumption typekeep their current value when the cell is empty. Clear them on the asset itself.
Full column reference: Bulk Updating Assets via CSV.
Update flow: the file is rejected before the preview
Several checks run before Shelf builds a preview, each with its own message:
- An unbalanced quote. A double quote that is opened and never closed runs every row after it together, so the file Shelf receives is not the file you meant to send. The usual source is an inches mark typed into a cell, as in
24" Monitor. This one is caught as soon as the file is picked, and Analyze file stays disabled until it is fixed. Wrap the cell in quotes and double the inner one,"24"" Monitor", or save the file from a spreadsheet application, which escapes it for you. - No identifier column. The file needs
id,ID, orAsset ID. An Import-ready export always has one, in either column scope. A Standard export only carriesIDwhen that column is visible in your index or you pick the All columns scope. - Nothing updatable in the file. The identifier matched, but every other column is either unrecognized or one this flow never writes (Status, Kit, Custody). This usually means the wrong file. Export Import-ready and use that.
- It's a workspace backup export. The backup from Workspace settings → General stores category, tags, and asset model as raw data rather than names, so it can't be matched to real entities. Export from the Asset Index instead.
- Too many rows. The limit is 1,000 assets per file. Split larger files into batches.
The row count looks far too high
The panel under the upload area counts assets, not lines. A description typed with paragraph breaks lives in one quoted cell, and those breaks are part of the value.
If a file of a few hundred assets once reported several times that many rows, re-open the screen and check again: the count now reads the whole file and honours quoted fields, so it matches the number of assets. The update itself was never affected, because the server has always parsed the file properly. Only the number in front of you was wrong.
The 1,000 assets per file limit is counted the same way, so a file with multi-line descriptions is measured by its assets rather than by its lines.
File too large
Both flows take up to 1,000 assets per file. Import refuses a larger file before anything is created, with a message giving its row count; Update existing stops at the same number. Split a larger file into parts of 1,000 or fewer and upload them one at a time. All parts land in the same workspace.
Still stuck?
Contact support with:
- The CSV file (or a sample with the problematic rows)
- The error message or screenshot of the import result
- Whether you were using Import (new assets) or Update Existing Assets
Related Articles
- Importing Assets to Shelf: CSV Guide — full column reference and preparation steps
- Bulk Updating Assets via CSV — the update workflow (not import)
Ready to try Shelf?
Put what you're learning into practice. Free plan available — no credit card required.