My CSV import did not create the records I expected
A CSV import finishes, but the result is not what you planned: fewer records than rows in the file, existing records left unchanged, unexpected duplicates, or a column from your file missing on the imported records. Almost always this comes down to one of a handful of things - a required column was missing, a column mapping in the Map columns step was wrong or skipped, the duplicate-handling choice did something other than you expected, extra columns landed as custom data (or didn’t), the same file was uploaded twice while the first run was still going, or the owner setting changed who owns the records. This page explains how to tell which one happened and how to fix it.
Symptom
Section titled “Symptom”After an import you see one or more of these in the Imports tab of the Task feed:
- The import status reads Partial instead of Completed, with a Download failed rows action on the card.
- The status reads Completed, but fewer records were created or updated than the number of rows in your file.
- Existing records were not changed even though your file had newer data for them.
- New duplicate records appeared for accounts or contacts you already had.
- Columns you did not plan for show up as extra fields on the records.
- A column that was in your file is nowhere on the imported records - not as a recognized field, not as a custom field.
- Uploading a file is refused with a message that an import of this exact file is already in progress and to wait for it to finish.
Open the View logs action on the import card to see the counts for each outcome (Created, Updated, Duplicated, Skipped, Failed) and the reason recorded against each duplicate, skipped, or failed row.
Why this happens
Section titled “Why this happens”Each row is processed on its own. A row that does not meet the rules is skipped or logged as failed - the rest of the import still runs, which is why the import can finish as Partial or as Completed with a lower count than you expected.
A required column was missing or empty.
- For accounts, every row needs an Account Name. A row with an empty name is skipped and logged as a missing required field.
- For contacts, every row needs either a Contact LinkedIn URL, or the combination of Account Name, Domain, First name, and Last name. If the whole file has neither a Contact LinkedIn URL column nor both a First name and a Last name column, the import is rejected with the message that the CSV must contain either both First Name and Last Name columns or a Contact LinkedIn URL column. A single row that is missing those fields is skipped as an invalid contact.
The duplicate-handling choice decided the outcome. The import modal asks what to do when a matching record already exists, and the default is Skip it:
- Skip it (Do not update existing account information) - matching records are left exactly as they are, so newer data in your file is ignored. This is the default, and is the usual reason an existing record “did not update.”
- Update existing account information using data from your CSV - matching records are updated with your file’s values.
- Create a new duplicate account - a new record is created for every row, even when a match already exists. This is the usual reason unexpected duplicates appear.
The wording is the same for contacts (“Skip it (Do not update existing contact information)” and so on). Accounts are matched on name plus domain; contacts are matched on the LinkedIn URL when present, otherwise on first and last name. Repeated rows inside the same file that point at the same record are logged as duplicates rather than imported twice (unless you chose to create duplicates).
A column mapping in the Map columns step was wrong, or a column was left out. After you upload, the workspace tries to auto-match each of your file’s headers to the right field, then shows the result on the Map columns step for you to review. If the automatic match picked the wrong column for a field, that field imports the wrong values (or none, if nothing matched). Separately, any column not mapped to a recognized field must be explicitly picked under Custom fields on that same step to be kept - a column that is neither mapped nor picked is dropped entirely and does not appear anywhere on the imported record, even though it was in your file.
Extra columns became custom data - or didn’t. A column you picked under Custom fields on the Map columns step is saved on the record as custom data, with the column name turned into a readable label. This is by design and not an error, but it explains “fields I did not expect.” A column you did not pick there, and that also is not mapped to a recognized field, is left out of the import instead - see the mapping cause above if a column seems to have vanished rather than landed as custom data. Blank cells in kept columns are ignored.
The same file was uploaded twice while the first run was still going. Only one import of a given file can run at a time for your workspace, so uploading the identical file again while the first is still queued, in progress, or enriching is refused up front with a message saying an import of that exact file is already in progress. This is a guard, not a failure: the first import is still running normally and will finish on its own. Wait for it, then check its result before deciding whether a second run is needed at all. A genuinely different file, or the same file once the first import has finished, uploads as normal.
The owner setting changed who owns the records. The Override existing account owners (or Override existing contact owners) switch is off by default. When you turn it on, owners of matching records are updated to the owner listed in your file’s owner-email column, or to you (the person uploading) when no owner is given in the file. Leaving it off keeps existing owners untouched.
How to fix it
Section titled “How to fix it”- Open the Imports tab of the Task feed and find your import. Use View logs to read the per-row reasons, and if the card shows Download failed rows, download that file to see exactly which rows did not import and why.
- Fix missing required columns. Make sure the account file has an Account Name value in every row. For the contact file, make sure each row has a Contact LinkedIn URL, or all of Account Name, Domain, First name, and Last name. Match the column headers to the required and optional columns shown in the import dialog. See Import accounts from a CSV and Import contacts from a CSV for the full field lists.
- Review the Map columns step before you click Import. Check that every field you care about is matched to the right column - the automatic match can pick the wrong one, especially when your header names don’t closely resemble the field labels. If a column you wanted to keep is not mapped to a field, add it under Custom fields on that same step; otherwise it will not be imported.
- Set duplicate handling deliberately. If you wanted existing records refreshed, re-run the import and choose Update existing … information using data from your CSV. If unexpected duplicates appeared because you chose Create a new duplicate account, see Manage account duplicates or Manage contact duplicates to merge them.
- Check the owner switch. If owners changed unexpectedly, the Override existing … owners switch was on; turn it off and re-import to leave current owners in place. If owners did not change but you wanted them to, turn it on and include an owner-email column.
- Decide what to do with extra columns. Columns you picked under Custom fields on the Map columns step are stored as custom data on the record. If you don’t want to keep them, deselect them there before importing (or remove those columns from the file) and re-import the affected rows. To work with custom data after import, see Custom fields.
- If the upload was refused as already in progress, do not rename the file to get around it. Open the Imports tab, find the run that is still going, and wait for it to reach a final status - the second upload would have imported the same rows twice.
- Re-run the corrected file. To update records you already imported rather than create new ones, use the update flow described in Update accounts from a CSV.
If a contact row uses only a LinkedIn URL, the rest of the account and contact details are filled in automatically from LinkedIn, which is why those imports pass through an Enriching stage before they finish.