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, or unexpected duplicates. Almost always this comes down to one of four things - a required column was missing, the duplicate-handling choice did something other than you expected, extra columns landed as custom data, 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.
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).
Extra columns became custom data. Any column that is not one of the recognized fields 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.” Blank cells in those columns are ignored.
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.
- 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 did not intend to keep are stored as custom data on the record. Remove those columns from the file and re-import the affected rows if you do not want them. To work with custom data after import, see Custom fields.
- 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.