Bulk import contacts
Bulk import lets you load a list of contacts from an Excel (.xlsx, .xls), OpenDocument (.ods) or CSV (.csv) file, with a 4-step wizard: upload, mapping, validation, import.
Access it from the Contacts menu β Import, or via the URL
/app/contact/import.
Step 1 β File uploadβ
- 1
(Optional) Download the template
The Download the template button offers a sample Excel file with the recommended columns. Useful to prepare a file from scratch.
- 2
Drag and drop or click
Drop your file in the upload area, or click to select. Accepted formats:
.xlsx,.xls,.csv,.ods. Recommended size: up to 50,000 rows. - 3
Choose the sheet (if multiple)
If your Excel file contains multiple tabs, select the one that contains your contacts.
- 4
Confirm the header row
The wizard automatically detects if your first row is a header (short non-numeric text). Confirm or adjust: indicate Yes or No, and the header row number (or the first data row if no headers).
A raw preview of the first 10 rows is displayed. Empty rows are automatically ignored.
Step 2 β Column mappingβ
This is the key step: you indicate which contact field corresponds to each column of your file.
The wizard displays a table with, for each column:
- The column name in your file (header or Column A, B, Cβ¦).
- Up to 3 examples of non-empty values from the file.
- A Target field selector.
- (If AI mapping used) The confidence score in percentage.
Available target fieldsβ
| Standard field | Type | Notes |
|---|---|---|
| Last name, First name | Text | Basic identity |
| Primary email, Secondary email, Email (3) | Multiple columns possible to emails[] | |
| Primary phone, Secondary phone, Phone (3) | Phone | Multiple columns possible to tels[] |
| Date of birth | Date | Format detected or imposed at step 3 |
| Gender (Male yes/no) | Boolean | Accepts Male/Female, M/F, H/F, Yes/No⦠|
| Address, Postal code, City, State/Region, Country | Text | Primary address |
| Address 2 (Label, Street, Postal code, City, Country) | Text | Secondary address |
| Archived, Deceased, Head of family | Boolean | Contact states |
In addition, you can map to:
- Tag / Category β the cell becomes a category applied to the contact. If the cell contains multiple separate categories (by comma, semicolon, pipe or slash), they will be split according to the separator chosen at step 3.
- Existing custom fields β your tailor-made fields already created in your organization (Text, Number, Yes/No, Date, Date & Time).
- + Create a new custom field β to create on the fly a field that doesn't exist yet.
- β Ignore this column β β for useless columns (internal ID, header duplicatesβ¦).
Automatic AI mappingβ
The Automatic AI mapping button asks an AI model to analyze your columns (headers + examples) and propose a mapping for each. The result displays a confidence score:
- β₯ 80% (green) β reliable, can be validated as-is.
- 50β80% (yellow) β to check.
- < 50% (orange) β uncertain, to correct manually.
Hover over the score to see the reason invoked by the AI.
The AI remains a suggestion: you remain free to adjust everything manually before continuing.
Create a new custom fieldβ
If a column doesn't match any standard or existing custom field, choose + Create a new custom field. A modal asks:
- The label displayed to the user (e.g.: "Car").
- The technical key (without spaces or accents, e.g.:
car). - The type: Text, Number, Yes/No, Date, Date & Time.
The field is created on the fly and becomes available for subsequent imports.
Step 3 β Validation and optionsβ
This step checks each row and displays the individual status: valid, warning (internal duplicate in the file), error (invalid format, missing identity), ignored (manually excluded).
Import optionsβ
Three option sections to set:
Duplicate management & filtersβ
| Option | Values | Behavior |
|---|---|---|
| If the contact already exists | Update / Ignore / Create a duplicate | If an existing contact has the same email or phone: enrich (update), skip (skip), or create anyway (create). |
| Require a contact method | Yes / No | If enabled, rows without email AND without phone are rejected. Recommended. |
Data formatβ
| Option | Description |
|---|---|
| Default country (phones) | Country used to interpret numbers without area code. E.g.: France (+33) transforms 0612345670 into +33612345670. |
| Date format | Format imposed to parse dates of birth. Auto-detection tries several common formats. To force if your dates are ambiguous (12/03/2024 = March 12 or December 3?). |
| Tag separator | Character that separates categories in a Tag-type cell (comma, semicolon, pipe, slash). |
Global tagsβ
Add tags that will be applied to all imported contacts.
Ideal to trace the source (IMPORT_2026_APRIL, RACHIDESS_LIST,
PASSOVER_EVENT). Enter the tag then click on Add (or
press Enter). Click on the cross of a tag to remove it.
Verification tableβ
Below the options, the table lists all rows with their status. You can:
- Filter by status (All / Errors / Warnings / Ignored).
- Edit a cell directly in place β click on it, modify, validate with Enter. The modifications do not affect your original file; they are kept in memory until import.
- Ignore a row β click on its row number (first column) to switch it to ignored. Click again to reactivate.
The summary at the top displays: N valid, N warnings, N errors,
N ignored out of N rows in total.
Step 4 β Launch the importβ
A final confirmation displays before launch:
- Summary of the number of rows to import, with warnings and ignored.
- Reminder of the chosen duplicate strategy.
- Reminder of the contact requirement filter if it is active.
- List of applied global tags.
- "I understand that this action is irreversible" checkbox β mandatory before being able to click on Launch the import permanently.
During the importβ
The import runs in batches of 200 contacts. A progress bar indicates the current batch and percentage. Live counters display:
- +N created (green) β new contacts.
- β»N updated (blue) β enriched existing contacts.
- N ignored (gray) β skipped according to the duplicate strategy.
- N errors (red) β rejected by the server.
After the importβ
A result screen displays the final summary:
| Status | Meaning |
|---|---|
| Import successful | No errors on the server side. |
| Import completed with errors | At least one row was rejected by the server. |
Two buttons are offered:
- Return to contacts β takes you back to the contact catalog.
- Download the error report β generates a CSV with, for each rejected row, the row number in the original file, the type of error (validation or server), the reason, and all the original values. Ideal to correct and then re-import only the rows in error.
Limitations and best practicesβ
- Recommended max size: 50,000 rows per file. Beyond, split into multiple files.
- No direct import of family links from this wizard β the parent-child links are then created manually or via the API.
- Back up first your base if you import on a base containing already contacts (update = overwriting of certain values).
- Do a test on 10 rows before a big import β extract the first 10 rows in a separate file, launch the import, check the result in the catalog, then launch the real import.