Importing contacts
What this page is — how to load contacts from a file.
What it is for — bringing an existing contact list into Pulse in bulk.
The problem it solves — getting a database in without typing it. This import is the better-behaved of the two in Pulse: rows are validated and duplicate-checked exactly as if you had typed each contact in yourself, and email matching ignores case.
Route: /org/marketing/contacts → Import
Permission: Import Contacts
1. The permission you need
The control appears for anyone holding Import Contacts.
2. How it differs from the lead import
| Contact import | Lead import | |
|---|---|---|
| Validated the same way as creating one by hand | Yes | No — checks less |
| De-duplicates | Yes, on email within the project | No |
| Case-sensitive duplicate check | Yes — the weakness | — |
| Columns read | The contact field set | Four only |
| Permission | Import Contacts | Create New Leads |
A row is validated and duplicate-checked exactly as if you had typed the contact in yourself. The lead import does neither.
3. The duplicate check
Each row is checked against existing contacts by email within the project, ignoring case and surrounding spaces. A row matching an existing contact is reported as a duplicate rather than creating a second record — so re-importing a file you have already loaded does not double your database.
The import summary lists rows that were skipped and why. If more were skipped than you expected, the file probably overlaps an earlier import.
4. Step by step
- Lower-case the email column in your file.
- Contacts → Import, choose the file.
- Map the columns.
- Review the result — rows imported, rows failed, and why.
- Spot-check for duplicates by sorting on email.
5. The admin contract
| Needs | Or |
|---|---|
| Import Contacts | The Import control is hidden |
| A selected project | Rows have nowhere to go |
| Custom field definitions matching the keys you send | Requests naming an unknown key are rejected |
6. Downstream
Imported contacts appear in the list immediately, can be added to
groups, and carry an import_source recording where they came from.
7. Don't confuse this with…
| This | Not this |
|---|---|
| Import Contacts | Import Leads — a different screen in a different module |
| Contact import | Lead import |
| Import source — recorded by the importer | Source — free text on the record |
8. Troubleshooting
| Symptom | Cause |
|---|---|
| No Import control | The role lacks Import Contacts. Section 1 |
| Duplicates after one import | Case-sensitive check. Section 3 |
| Rows rejected as existing | The duplicate check working correctly |
| Custom fields not visible | Stored as a JSON string rather than an object |