Skip to main content

Bulk import contacts

Pour :Administrateur
Open in Unisoft
View of the 'bulk import' page

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. 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. 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. 3

    Choose the sheet (if multiple)

    If your Excel file contains multiple tabs, select the one that contains your contacts.

  4. 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 fieldTypeNotes
Last name, First nameTextBasic identity
Primary email, Secondary email, Email (3)EmailMultiple columns possible to emails[]
Primary phone, Secondary phone, Phone (3)PhoneMultiple columns possible to tels[]
Date of birthDateFormat detected or imposed at step 3
Gender (Male yes/no)BooleanAccepts Male/Female, M/F, H/F, Yes/No…
Address, Postal code, City, State/Region, CountryTextPrimary address
Address 2 (Label, Street, Postal code, City, Country)TextSecondary address
Archived, Deceased, Head of familyBooleanContact 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​

OptionValuesBehavior
If the contact already existsUpdate / Ignore / Create a duplicateIf an existing contact has the same email or phone: enrich (update), skip (skip), or create anyway (create).
Require a contact methodYes / NoIf enabled, rows without email AND without phone are rejected. Recommended.

Data format​

OptionDescription
Default country (phones)Country used to interpret numbers without area code. E.g.: France (+33) transforms 0612345670 into +33612345670.
Date formatFormat 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 separatorCharacter 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:

StatusMeaning
Import successfulNo errors on the server side.
Import completed with errorsAt 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.