Importing and exporting customers and companies (CSV)
With the CSV import you bring contact lists from Excel, Outlook, HubSpot or another CRM into 5sDesk. With the CSV export you download your customers or companies including custom fields and tags. Both use the same columns: an exported file can be imported again unchanged.
Where to find it
Section titled “Where to find it”- Customers: Main menu › Customers › Customers, button “Import/Export” at the top right. This opens the page “Import & export customers”.
- Companies: Main menu › Customers › Companies, button “Import/Export”. This opens the page “Import & export companies”.
Only these people see the button:
- admins,
- leads of a department that itself has the “CRM (customers & companies)” area.
Someone who leads a department without CRM and is only a member in the CRM can neither import nor export. Opening the page directly then shows “Import and export are available to admins and to leads of a department with CRM access.” More on leads and areas under Roles and permissions.
The page at a glance
Section titled “The page at a glance”| Area | Content |
|---|---|
| “Import” | Download the sample file, upload a CSV file |
| “Export” | Choose scope, columns and format, download the file |
| “Recent imports” | The last 20 started imports with “File”, “Status”, “Result”, “By” and “Date”. Clicking the file name opens the import. |
| “Field reference” | Expandable. Every column with “Format / allowed values” and “Group”, required columns marked “Required”. |
Sample file
Section titled “Sample file”The sample file contains every column the import understands, including your active custom fields, plus two sample rows. Below the buttons you see how many custom fields it contains: “The template contains … custom fields of your system.”
| Button | File |
|---|---|
| “Sample file (Excel)” | Semicolon as separator. German Excel opens it with a double click with the columns in the right place. |
| “as comma CSV” | Comma as separator. For Google Sheets, Numbers and most other programs. |
Fill in the file with Excel or any other program. Your own lists with different column names work too: you map the columns after uploading.
Export
Section titled “Export”| Field | Meaning |
|---|---|
| “Scope” | “All customers (…)” or “All companies (…)”. If you come from the list via its “Import/Export” button with an active search or filter, there is also “Filtered list (…)”, and this option is preselected. In addition, one entry “Saved view “…”” per saved filter template. |
| “Columns” | Column groups: “Basic data”, “Contact fields”, “Company” (customers only), “Custom fields” (only if there are any) and “System fields (ID, timestamps)”. All groups except the system fields are preselected. |
| “Separator” | “Semicolon (;) – Excel” (default), “Comma (,)”, “Tab” or “Vertical bar (|)”. Numbers use a decimal comma with semicolon, otherwise a decimal point. |
| “Text qualifier” | “Double quote (")” (default) or “Apostrophe (’)”. |
| “Protect against formulas” | On by default. Adds an apostrophe (’) in front of values starting with =, +, - or @ so Excel and Google Sheets do not run them as formulas. Untick it if the file goes into another system. There the character would become part of the value, for example in +49 phone numbers. |
“Export CSV” downloads the file. If no column group is selected, “Please select at least one column group.” appears. The file is UTF-8 encoded and is named, for example, customers-<organisation>-<date>.csv or companies-<organisation>-<date>.csv.
Columns
Section titled “Columns”| Group | Customers | Companies |
|---|---|---|
| “Basic data” | “Email”, “Salutation”, “First name”, “Last name”, “Position”, “Language”, “VIP”, “Tags”, “Marketing consent”, “Note” | “Name”, “Domain”, “Further domains”, “Customer number”, “VIP”, “Tags”, “Note” |
| “Contact fields” | “Title”, “Form of address”, “Department”, “Phone”, “Mobile”, “LinkedIn”, “XING” | |
| “Company” | “Company”, “Company domain”, “Customer number” | |
| “Custom fields” | All active custom fields for customers | All active custom fields for companies |
| “System fields (ID, timestamps)” | “ID”, “Created at”, “Last contact” | “ID”, “Number of customers”, “Created at”, “Last contact” |
Values are written the way the import reads them back: “Yes” or “No”, the labels of select options, several values in one cell separated by a vertical bar (|), reference custom fields as the customer’s email address or the company’s name, notes as plain text.
If a custom field has the same label as a fixed column or another custom field, 5sDesk appends the field key in square brackets, for example “Phone [phone_private]”. This keeps the header unambiguous when the file is imported again.
Import
Section titled “Import”The import takes you through four steps: “Upload”, “Map”, “Preview” and “Import”. Nothing is written until you start it.
Step 1: Upload
Section titled “Step 1: Upload”Pick the file under “Choose a CSV file” and click “Upload & map columns”.
- Files ending in .csv, .txt or .tsv are allowed.
- At most 20 MB, 50,000 records and 200 columns per file. Split larger lists into several files.
- 5sDesk detects the separator and encoding itself. It reads UTF-8 (with and without BOM), UTF-16 with BOM and the Excel encoding windows-1252, which German Excel uses for “CSV (comma delimited)”.
| Message | Cause |
|---|---|
| “Please choose a CSV file.” | No file selected. |
| “Excel files (.xlsx) cannot be read directly. In Excel, choose “Save as” → “CSV UTF-8” and upload that file.” | An .xlsx or .xls file was selected. |
| “This is not a CSV file. Please upload a .csv file.” | Another file extension or a binary file. |
| “The file is empty.” | The file contains nothing. |
| “The file only contains a header row but no records.” | Only the header row is there. |
| “The file is larger than 20 MB. Please split it into several files.” | Size limit exceeded. |
| “The file has more than 50000 rows. Please split it into several files.” | Row limit exceeded. |
| “The file has more than 200 columns. Is the separator correct?” | Column limit exceeded, often because of a wrongly detected separator. |
Step 2: Map columns
Section titled “Step 2: Map columns”The page “Map columns” shows every column of your file with three sample values and the “CRM field”. 5sDesk maps them automatically using:
- the column names in English and German,
- common column names from other programs such as Outlook or HubSpot (for example “Mobile Phone”, “Company Name” or “Newsletter”),
- the mapping of the last import with exactly the same header row. So you only map a foreign list by hand once.
If the file has the layout of the sample file or of an export, you see “Format recognised – the columns match the template and were mapped automatically. You can go straight to the preview.” Otherwise the page says how many columns were mapped. Columns set to “– ignore –” are not imported.
Required fields are marked with *:
| Import | Required column |
|---|---|
| Customers | “Email” |
| Companies | “Name” or “ID” |
Each field may only be mapped to one column, otherwise ““…” is mapped to more than one column. Each field may only be used once.” appears.
Options
Section titled “Options”| Option | Choice | Default |
|---|---|---|
| “What should happen?” | “Create new records and update existing ones”, “Only create new records, skip existing ones” or “Only update existing records, create nothing new” | Create new records and update existing ones |
| “Empty cells” | “change nothing – existing values stay” or “clear the existing value” | change nothing |
| “Create missing companies” (customers only) | A company in the file that does not exist yet is created. | off |
| “Assign the company via the email domain” (customers only) | Assigns the customer to the company with the domain of their email address. Only if no company column is mapped and the customer has no company yet. Free email addresses don’t count. | on |
| “Marketing consent” (customers only) | Checkbox “Verifiable consent exists for every contact marked “Yes””, see below | off |
| “Unknown tags” | “Create” or “Ignore”, see below | Create |
| “Separator” | semicolon, comma, tab or vertical bar | detected automatically |
| “Text qualifier” | “Double quote (")”, “Apostrophe (’)” or “None” | double quote |
Under “File format” you see the detected encoding: “Separator detected automatically, encoding: …”. If you change the separator or text qualifier, 5sDesk reads the file again and maps the columns again.
“Continue to preview” checks the mapping. “Discard import” deletes the draft including the file. If you don’t start a draft, 5sDesk deletes it after 24 hours with the next upload.
Marketing consent
Section titled “Marketing consent”- A “Yes” in the “Marketing consent” column is only applied if you tick “Verifiable consent exists for every contact marked “Yes””. Without the tick, the preview shows “Marketing consent: “Yes” ignored because consent was not confirmed”.
- A “No” (opt-out) always applies.
- Both take effect immediately, without a confirmation email, even if double opt-in is switched on.
- Every change appears in the marketing consent history with the source “CSV import” (see CRM).
- An empty cell never changes consent.
The “Tags” column contains names from the “Customers & companies” tag list, several separated by a vertical bar (|), for example Partner | Newsletter.
- The cell replaces the record’s tags. Tags that are not in the cell are removed.
- Upper and lower case don’t matter when comparing. Existing tags keep the spelling from the list.
- An empty cell follows the “Empty cells” option: it changes nothing or removes all tags.
- Tags longer than 50 characters are dropped, with the note “Tags longer than 50 characters ignored.”
| “Unknown tags” | Effect |
|---|---|
| “Create” | Tags that are not in the list yet are created during the import. The preview reports “… tags will be created.” and marks them with “new tag: …”. Undo does not delete them. |
| “Ignore” | Only existing tags are assigned. Unknown ones show up as the note “Unknown tags ignored: …” in the preview and in the check report. |
You maintain the tag list under Tags.
Step 3: Preview
Section titled “Step 3: Preview”The preview plans every row of the file against your current data and writes nothing.
| Tile | Meaning |
|---|---|
| “New” | The record will be created. |
| “Update” | An existing record changes. The details show each changed value as old → new. |
| “Unchanged” | The record exists and the file changes nothing. |
| “Skipped” | Excluded by the option under “What should happen?”: “Already exists – skipped (create only)” or “Does not exist yet – skipped (update only)”. |
| “Error” | The row will not be imported. |
| “With notes” | Rows where individual values are ignored. |
Clicking a tile or a filter (“All”, “New”, “Update”, “Unchanged”, “Skipped”, “Errors”, “Notes”) shows the matching rows. At most 25 rows appear per filter. The “Check report (CSV)” contains all rows: your original columns plus “Import status” and “Import notes”, in the format of the uploaded file. You can correct the check report and upload it again straight away.
New companies are marked “new company”, and above the table you see “… companies will be created.”
“Change mapping” takes you back to step 2. “Start import (… records)” starts the import for all new and updated rows. If there are none, the button is disabled: “There is nothing to import – every row is unchanged, skipped or has errors.”
Step 4: Import in the background
Section titled “Step 4: Import in the background”The import keeps running in the background, even if you leave the page. The page shows progress as “… of … rows processed” and the status “Waiting” or “Running”.
- When it starts, 5sDesk plans all rows again against the data as it is at that moment.
- Each row is saved on its own. If one row fails, the others are not affected.
- Only one CSV import runs per organisation at a time, for customers and companies together. A second one ends with “Another import is already running. Please wait until it has finished.”
- During the import, new and changed records do not trigger webhooks.
- “Cancel” stops the import. Rows processed so far are saved, and the status is “Cancelled”.
- If an import reports no progress for 10 minutes, it counts as “Failed”: “The import stopped responding and was aborted. Rows processed so far are saved.” After a server restart, the message is “The import was interrupted by a server restart. Rows processed so far are saved.”
At the end the page shows the result with the same tiles as the preview, for customers also “… companies were created along the way.” Rows that were not imported are listed under “… rows not imported” with the reason. The “Error list (CSV)” contains the original rows and the reason, at most 5,000. Fix them and upload the file again. “New import” takes you back to the upload.
After the import, the content of the file is deleted. Only the error rows are kept for the error list.
Step 5: Undo
Section titled “Step 5: Undo”If a completed import created customers or companies, its page shows “Undo”. There is no time limit. You open older imports from “Recent imports”.
- Click “Undo”. The page “Undo import” shows how many created customers and companies will be deleted and how many are kept.
- Click “Delete permanently”. Deletion runs in the background.
- The import then shows “Undone” with the message “Undone: … customers and … companies deleted.”
What undo does and doesn’t do:
| Deleted | Kept |
|---|---|
| Customers and companies this import created and that nobody has touched since | Customers that were edited since the import, had new contact or now have notes, cards, deals or appointments |
| Companies this import created, if all their customers are deleted too | Companies that were edited since, have notes or cards, or have customers that don’t come from this import |
| All changes to existing records, including changes to marketing consent | |
| Tags the import created |
Undo is only available for imports with the status “Completed”. A cancelled or failed import can’t be undone.
Matching existing records
Section titled “Matching existing records”| Record | Matched by | Note |
|---|---|---|
| Customer | Email address, primary or additional, regardless of case | The import never changes the email address. If the file contains an additional address, the customer it belongs to is updated and keeps their primary address. |
| Company | “ID” from an earlier export, then “Customer number”, then “Domain” or “Further domains”, then a unique “Name” | An unknown ID produces the note “no company with ID … – matching by the other fields”. If several companies have the same name, the row is an error. |
| A customer’s company | “Customer number”, then “Company domain”, then a unique company name | Several companies with this name: note “several companies are called “…” – please add a customer number or domain”. No company found: it is created with “Create missing companies”, otherwise note “no company “…” found – company unchanged”. |
| Reference custom field | ID; for customers the email address, for companies the domain or the unique name | Not found: note ““…” not found – value ignored”. |
Missing columns leave existing values unchanged.
Errors and notes
Section titled “Errors and notes”An error discards the whole row. A note discards only that one value; the rest of the row is imported.
| Errors (row is not imported) | Notes (value is ignored) |
|---|---|
| “Email address missing”, ““…” is not a valid email address” | Invalid phone number, date or number, unknown salutation, “please use Yes or No” |
| “Already in row … of the file” | “unknown option – ignored” for select lists |
| Required custom field empty on a new record (“required field is empty”) | “longer than … characters – value ignored” |
| “Name missing” (companies) | “link must point to … – value ignored” for LinkedIn and XING |
| “Customer number “…” already belongs to company “…”” | “not a valid domain – ignored”, “freemail domains are not stored as a company domain” |
| Several companies with the same name (company import) | “a required field is not cleared” for existing records |
Allowed values
Section titled “Allowed values”| Field | Allowed |
|---|---|
| Yes/No (“VIP”, “Marketing consent”, checkbox custom fields) | “Yes” or “No”, also for example y/n, true/false, 1/0 and x, as well as the German ja/nein |
| “Salutation” | Mr, Ms, Diverse or Not specified |
| “Form of address” | Du or Sie (German informal/formal address) |
| “Language” | for example English or en |
| Date | YYYY-MM-DD or DD.MM.YYYY |
| Number | with a point or comma, for example 1234.5 or 1234,5 |
| Select list | The label of an option; for multiple selection several separated by a vertical bar (|) |
| “Further domains”, “Tags” | several values separated by a vertical bar (|). The cell replaces the existing values. |
| “Note” | Text, multiple lines allowed. If the text is the same, the formatting of the existing note is kept. |
The import always removes an apostrophe in front of =, +, - or @, whether it comes from the export’s formula protection or from Excel.
See also
Section titled “See also”- CRM and customer data: customers, companies, additional email addresses, tags and marketing consent.
- Import/Export: JSON backup of an organisation’s master data.
- Tags: maintain the “Customers & companies” tag list.
- Custom fields: your own fields, which appear as columns in import and export.
- Roles and permissions: department leads and areas.