Uploading Contacts
Select Add Contacts on the Contacts page, then Upload File, to open the Upload Contacts wizard. It runs in three steps: Overview, Upload File and Map Columns.
The formats accepted, the file size limit and the 300,000 row limit are set out in Contact Files. That row limit applies to the file, not to the store, so an organisation with more contacts than one file can hold is built by uploading several files.
Overview
The first step sets out what the upload will do before a file is chosen: how identifiers decide which contact a row belongs to, when a row creates a contact and when it updates one, what happens when a row carries more than one identifier, and the difference between a row that is skipped and a value that is missing. Read it once, then move on.
Upload File
Choose the file to import. The wizard reads it and reports how many rows and columns it found.
Map Columns
The header of this step shows Total Contacts, the number of rows found in the file, and Columns, the number of columns found.
Below that, each column in the file gets a row with three parts:
- the source column, named as it appears in the file
- Import As, the contact field the column's values are written to, offered under the field's raw name
- a state of Mapped, Skipped or Unmapped
Reserved fields appear here as firstName, phoneNumber and the rest, rather than under the readable labels a contact page uses. Reserved Fields gives both forms of every name, which is the quickest way to confirm a column is going where it is meant to.
Columns mapped to an identifier carry a badge, so it is clear at a glance which columns decide the matching. Choosing Don't Import in the target list marks a column Skipped, and Skip all unmapped applies that to every column still unmapped in one action.
A column with no matching custom field does not have to be abandoned. The target list has a link that creates a custom field without leaving the wizard, and the new field is then available as a target. It is named in snake case rather than in the camel case the reserved raw names above use. The naming rules are in Creating a Custom Field.
The wizard checks the row and column counts only. It does not test whether a value can be messaged, and it does not flag rows with missing values. That check belongs to the campaign audience, where a file is validated against the channel it will be sent on. See Contact File Audiences.
How Rows Are Processed
Each row is matched against the store by identifier, and one of three outcomes follows.
- Created. The row carries at least one identifier that does not exist yet.
- Updated. A row identifier matches one existing contact, and the row also carries every other identifier that contact holds. Blank columns leave the existing values untouched, so a file covering a few fields can update those fields without disturbing the rest of the record.
- Skipped. The row matches an existing contact but leaves out one of that contact's other identifiers, or its identifiers point at two different contacts, or it carries no identifier at all.
Because an update has to repeat every identifier the contact holds, a file used to update contacts should carry all of the identifier columns, even where only one of them is doing the matching.
After the Upload
A large upload keeps running after the wizard is closed, so there is no need to stay on the page while it finishes.
An email summary goes to whoever started the upload once the import completes. It reports how many rows the file held and how many were imported, split into contacts created and contacts updated.
It then separates two different problems. A contact is skipped outright when no valid identifier could be read from its row, so nothing was added or updated for it. A field value is left empty on a contact that was otherwise imported when the value did not match the format of the field it was mapped to.
Where either happened, the email links to a CSV report naming them, so the source file can be corrected and uploaded again. When nothing was skipped and no values were left empty, the email carries the counts alone.