Importing accounts, contacts and cases
Platform → Import brings in accounts, contacts and cases from a CSV file: a spreadsheet saved as CSV, or an export from another tool. You pick what the file holds, and Check the file shows what each row would do. Nothing changes until you choose Import.
Import in this order: accounts, then contacts (they join accounts by name), then cases.
The file
The first row names the columns, in any order. Columns the desk doesn't know are left out, and the check says which. Commas and semicolons both work as separators (a spreadsheet set to Norwegian or Swedish saves with semicolons). Lists in a cell, like several domains or labels, are separated by semicolons. A file has at most 5,000 rows.
Accounts
| Column | What |
|---|---|
| Name | Needed. An account with this name is updated instead of added. |
| Domains | Email domains. People who write from them join the account. |
| External id | The account's id in another system. It finds the account before the name does. |
| Notes, Labels | |
| A data property | By its label, like Customer number. See Data properties. |
| Service level | An SLA by name (or the column SLA): the account's own SLA for all its services. Needs sla.assign. |
| Service level from, Service level until | The first and last day it covers, like 2026-01-01. From is today when empty; Until is optional. |
| Service level contract | The contract's reference. |
| Region | A region by name: the one the account's cases count in. Needs sla.assign. |
Domains and labels in the file are added to those the account has; none are taken away.
An account without its own SLA that is given the organization default, with no dates or contract, keeps following the defaults. One that already has the same SLA gets the file's dates and contract. Another SLA at the same time is refused, as on the account's page: end the first one there.
Contacts
| Column | What |
|---|---|
| Needed. A contact with this email is updated instead of added. | |
| Name, Phone, Notes | |
| Account | An account's name or external id, among the accounts you can see. |
| Language | en, no, sv or da: the language of their emails and case page. |
| A data property | By its label. |
Cases
| Column | What |
|---|---|
| Subject | Needed. |
| Requester email | Needed. An address the desk doesn't know becomes a new contact. |
| Requester name | |
| Unit | The name of a unit you can see. Or pick a Unit for the rows without one. |
| Status | new, open, pending, on hold, resolved or closed. Open when empty. |
| Priority | low, normal, high or urgent. |
| Created | When it was opened: 2026-03-31, or 2026-03-31T14:05. |
| Description | The request. |
| Assignee | A staff member's email. |
| Labels |
Imported cases are history from elsewhere: nobody is emailed, and automations and webhooks don't run for them. Open ones get service levels from the date they were created. Their source is Import.
What the check shows
Each row is New, Changed (with what changes), Unchanged or Not imported (with why). Rows with a problem are left out of the import; the others go in. Accounts and contacts are matched, so importing the same file again changes nothing. Cases are always added: when a file was imported before, the check says when and by whom, and it goes in again only if you tick Import it again anyway.
Who can import
Each kind needs its permission in the organization: accounts Change accounts, contacts Change contacts, and cases Log new cases in the units they go to. The page offers only the kinds you may import. Moving a contact who already has an account to another one also needs Change accounts. Import shows under Platform to people that may import one of the kinds; agents who may log cases see Platform with Import only.
Kept for later
Earlier imports lists each import: when, who, the file's name, its SHA-256 checksum and what it did. The rows that weren't imported are kept with it, and each import is in the audit log.
From the API
POST /api/v1/imports/accounts (or contacts, cases) with orgId, the file as csv, and dryRun: false to
import; a dry run is the default. GET /api/v1/imports?orgId=… lists earlier imports. A token needs the permission
itself (account.write, contact.write or case.create). See API tokens.