# ContactManager Import Types — Consultant Guide
This guide describes every import type available in the ContactManager import tool, written for technical and functional consultants who prepare import files and run imports. For each import type you will find what it does, which columns to put in your file, the options that affect it, the status messages you may see, and the things to watch out for.
You do not need any programming knowledge to use this guide. Everything here is expressed in terms of the import screen, the option checkboxes, and the column headers in your spreadsheet.
# Contents
- How an import works
- Shared concepts
- Import type index
- Import type reference (grouped):
- Things to watch out for
# How an import works
- You open the import screen, choose a file (
.xlsor.xlsx) and the sheet to read. - You pick an import type from the dropdown. The import type decides what each row in your file will do — create a contact, assign a tag, set permissions, remove a link, and so on.
- The first row of the sheet holds the column headers. Every column is read by its header name (case is ignored). The names this guide shows in
code fontare the exact header names to use. - You tick the option checkboxes you need (see The option checkboxes) and start the import. It runs as a background job.
- Each row is processed independently. When the job finishes, your file is saved back with extra result columns (see Reading the results).
A few things happen automatically for the whole run:
- Full-text indexing is paused during the import and resumes when it finishes.
- Synchronisation to external applications is governed by the Mark as changed checkbox (see below).
- Each row runs in its own transaction. If one row fails, only that row is rolled back; its error text appears in that row's
Resultcolumn and the import continues with the next row.
# Shared concepts
These mechanisms are reused by most import types. They are explained once here and referenced from each import type.
# Identifying the record (CM_ID and external keys)
Most import types must first locate the ContactManager record the row applies to. They look for it in this order:
| Column | Meaning |
|---|---|
CM_ID | The internal ContactManager ID of the record. If present and valid, it is used directly — the fastest and most reliable key. |
ExternalApplication + ExternalApplicationID | The name of an external application and the record's ID in that application. Used to find the record by its external link when CM_ID is not given. |
ExternalType | Tells the import which kind of record to look for (e.g. a contact, a company, a matter, a lookup item) when resolving by external key. |
CM_CODE | A code key used by some import types (matter code, client code, lookup code). |
Special ExternalType values you can use:
- Leave
ExternalTypeempty and the import assumes a contact. PersonCompany,CompanyPersonorClient→ "find a company or a person" by the external key.- For an employee, an
ExternalApplicationIDwritten ascompanyId@@personIdlocates the employee from both halves.
Note on spelling: both
CM_CODEandCM_Codeare accepted (column names are matched case-insensitively). Use whichever your template already uses.
Standard "not found" status messages produced here include No Record found, No contact found, Company not found, No Matter found and Record not found.
# The option checkboxes
| Option | What it does |
|---|---|
| Mark as changed | Controls whether the imported records are flagged for synchronisation to external applications. Leaving it unchecked switches synchronisation tracking off for the whole import run — useful for bulk loads you do not want pushed out. Tick it when the import should propagate to connected systems. |
| Clear collections | For import types that fill a collection (tags, categories, attendees, …), empties the target collection before adding. The reset happens once per record per run — if several rows target the same record, the collection is cleared on the first of those rows and the later rows add to it. See Assigning lookup collections. |
| Always update | Intended to mean "overwrite existing values, not only fill empty ones". Important: for plain text/number/date fields the value is overwritten on every import regardless of this setting. The option only makes a difference for lookup references, user references and translated text, which are otherwise filled only when empty. See Things to watch out for. |
| Disable address validation | Skips address validation when importing addresses. |
# Reading the results
Each row gets a Result value written back into the saved file:
- Empty
Result→ the row succeeded. - Any text in
Result→ a status or error message for that row (also collected into a summary log).
When the import finishes, the original file is replaced by an .xlsx copy containing your original columns plus:
- the
Resultcolumn, - any IDs the import resolved and wrote back (for example
CM_ID,Result_CM_ID,PersonCM_ID,CompanyCM_ID,EmployeeCM_ID), - for matching imports, extra columns prefixed with
_.
If you imported an .xls file, the saved copy will be .xlsx. A summary log file is written next to it.
# Assigning lookup collections
Several import types add lookup values (tags, categories, segments, …) to a record's collection. They all work the same way:
- Locate the record (see Identifying the record).
- If Clear collections is on, empty the target collection once for this record.
- Read the value column, split it into multiple values where supported, and add each value that is not already present.
A lookup value can usually be given either as a plain code, or as an external reference using companion columns <Column>ExternalApplication and <Column>ExternalApplicationID.
# External-application links
An external-application link records that a ContactManager record corresponds to a record in an external system. Each link has an application name (e.g. a CRM or finance system), an external ID and an optional external code. A record can carry several links, one per application. Some import types create these links, one removes a single link, and the Mark as changed option decides whether changes are pushed back to those applications.
# Import type index
Pick the import type from the dropdown that matches your goal.
# Contacts, people & companies
| Import type | What it does |
|---|---|
Contact | Create/update a person, company, employee, department, user and shortcuts from one row |
MatchContact | Find existing contacts for each row and write their IDs back (creates nothing) |
CompanyDepartment | Create/update a department of a company |
Address | Add/update an address for a contact (plus company location / employee department) |
ContactRelation | Create a relationship between two contacts |
ContactInfoInternal | Update internal contact info (phone, fax, secretary, spouse, …) |
Identification | Create/update a person's identity document, optionally attaching a file |
CommunicationItem | Add/update a communication item (e.g. phone, e-mail) on a contact |
Owner | Set the owner of a contact or matter |
OwnerSub | Set the sub-owner of a contact or matter |
Photo | Import a person photo or company logo from a file |
User | Create/update a login user and optionally link it to a contact |
# Classification & lookup values
| Import type | What it does |
|---|---|
Category | Assign categories to a contact |
Interest | Assign interests to a contact |
Tag | Assign tags to a contact |
Tag2 | Assign secondary tags (semicolon-separated) |
MatterType | Assign matter types to a contact (semicolon-separated) |
Segment | Assign segments to a contact (semicolon-separated) |
Referral | Assign referrals to a contact |
Responsibility | Assign responsibilities to an employee |
StockExchange | Assign stock exchanges to a company |
SubscriptionStatusPermission | Assign subscription-status permissions to a contact |
Industry | Assign industries to a company |
IndustryCode | Assign industry codes (SBI/SIC) to a company |
LookupFieldValue | Assign values to a custom lookup field |
EntityType | Set a company's entity type |
EmployeeSize | Set a company's employee-size band |
ChamberOfCommerce | Set a company's Chamber-of-Commerce number |
DUNS | Set a company's DUNS number |
ContactType | Set a contact's contact type |
EmployeeJobInformation | Update an employee's job title / function |
CompanyUltimateMember | Set a company's parent / ultimate parent |
LookupRegion | Create regions and region postal-code ranges |
LookupIndustryCodeIndustry | Link an industry code to an industry |
LookupItem | Create/update any kind of lookup item |
RemoveLinkedLookupItem | Remove lookup values from a record's collections |
# Matters, activities & subscriptions
| Import type | What it does |
|---|---|
Matter | Create/update a matter |
Activity | Create/update an activity for a contact |
Attendee | Create/update an activity attendee |
MatterPayor | Create/update a matter payor |
Shortcut | Place a contact (or subscription item) into a folder |
# External-application links & synchronisation
| Import type | What it does |
|---|---|
SynchronizableRecord | Create, rename/re-point or flag an external-application link |
RemoveSynchronizableRecord | Remove one external-application link, keeping the record |
# Enrichment & external services
| Import type | What it does |
|---|---|
DnB | Dun & Bradstreet enrichment of companies |
ChamberOfCommerceUpdateService | Drive an external Chamber-of-Commerce service for a company |
# Security & permissions
| Import type | What it does |
|---|---|
Permissions | Set or reset permissions on a record/folder |
ReassignSecurity | Re-apply default permissions to a record |
RoleMembers | Add a user or role as a member of a role |
# Maintenance, review & removal
| Import type | What it does |
|---|---|
Update | Generic updater — every column is treated as a field to set |
ReviewUpdate | Record proposed changes for later human review (does not apply them) |
DeDuplication | Merge duplicate records into a master |
RemoveObjects | Delete the whole record |
OutlookFolderSync | Add or remove an Outlook sync folder for a user |
# Contacts, people & companies
# Contact
Purpose. The all-in-one contact importer. From a single row it can create or update a person and/or a company, an employee that links them, optionally a company department, a login user, folder shortcuts, a "contact-of" relationship, and all the lookup-value collections.
Columns to provide. Use the prefixed column families for each entity you want to load:
| Area | Example columns |
|---|---|
| Person | PersonLastName, PersonFirstName, PersonLastNamePrefixLastName, PersonLanguage, PersonExternalApplication/PersonExternalApplicationID, … |
| Company | CompanyName, CompanyLanguage, CompanyExternalApplication/CompanyExternalApplicationID, … |
| Employee | EmployeeExternalApplication/EmployeeExternalApplicationID, job columns, … |
| Department | EmployeeDepartment… |
| Location | CompanyLocation… |
| User | UserName, Password |
| Folders | FolderPath, FolderType, FolderOwner, and numbered FolderPath0 … FolderPath99 |
| Contact-of | ContactOf… |
| Lookups | collection columns prefixed Person, Company, Employee, CompanyDepartment |
What it does. Detects which entities the row contains (based on a name, a …CM_ID, or an external application + id), then creates/updates company → person → employee → department, followed by the user, shortcuts, the contact-of relationship and lookup values. Resolved IDs are written back to PersonCM_ID, CompanyCM_ID, EmployeeCM_ID, CompanyDepartmentCM_ID.
Options. Honours Always update and Mark as changed.
Status messages. No person, company and employee found. Skipping row when the row contained none of the three.
Watch out for.
- The row's language column drives language-specific parsing/validation while the record is created.
- Anti cross-link guard: if an existing person/company/employee already carries a link for the row's
ExternalApplication, that match is discarded and a new record is created instead — this prevents two different external records from being merged onto one ContactManager record. - Dutch surname prefixes are split out of
PersonLastNamePrefixLastNameonly for Dutch-language rows. - Creating a new employee requires both a company and a person, otherwise the row fails.
- Creating a user switches the contact's contact type to the configured internal-employee type.
- Folder shortcuts are read from
FolderPath0throughFolderPath99.
# MatchContact
Purpose. Read-only matching. Finds the existing contact(s) for each row and writes their IDs and names back. It creates nothing — use it to enrich a file with ContactManager IDs or to detect duplicates before a real import.
Columns to provide. Name, e-mail and phone columns (person/employee/company variants are accepted), plus CompanyName/Company.
What it does (writes back). _CM_ID, _Name, _EmailAddress, _PersonCM_ID, _CompanyCM_ID, _CompanyName, _EmployeeCM_ID, _CompanyDepartmentCM_ID.
Status messages. Empty for a single match; Duplicate when several contacts share the e-mail address.
Watch out for.
- When an e-mail matches several contacts, the row is duplicated in the output — one extra row per match — and each is marked
Duplicate. - If any matched contact is active, inactive matches are dropped.
- A Dutch surname prefix is split out of
LastNamewhen the system is configured to show prefixes and no explicit prefix column is present.
# CompanyDepartment
Purpose. Create or update a department of a company.
Columns to provide. Identify the company with CompanyCM_ID or CompanyExternalApplication/CompanyExternalApplicationID; department fields via Department… columns; a CompanyDepartment flag wraps the department.
Status messages. Company not found; otherwise empty.
# Address
Purpose. Add or update an address for a contact (plus a location for companies and a department address for employees).
Columns to provide. Identify the contact with CM_ID or Contact… external columns; CompanyDepartment; EmployeeAddressLine; the Address… field family.
Options. Disable address validation skips validation.
Status messages. Contact not found; otherwise empty.
Watch out for.
- A combined street line is split into street / number / extension according to the country's format and the system's street-number convention.
- The row fails if a matching address already belongs to a different contact.
# ContactRelation
Purpose. Create a relationship from one contact to another.
Columns to provide. From side: FromCM_ID or ContactFrom…. To side: ContactToCM_ID or ContactTo…. Plus ContactRelationType and Comments.
Status messages. Detailed messages naming the missing side when an endpoint cannot be found; otherwise empty.
Watch out for. The relationship is only created when the configured rules allow it. Comments is always updated.
# ContactInfoInternal
Purpose. Update a contact's internal contact information (phone, fax, secretary, "works for", spouse).
Status messages. No Contact found, or No ContactInfoInternal found when the contact has none.
# Identification
Purpose. Create or update a person's identity document, optionally attaching a scanned file.
Columns to provide. Identify the contact with CM_ID or Contact…; then IdentificationType, Nationality, Number, FileName, Date, DateExpire/ExpireDate, City, CitizensServiceNumber.
Status messages. No Contact found; the row fails if FileName points to a missing file.
Watch out for. Employees are routed to their underlying person record. A supplied file is read in and stored with a versioned file name.
# CommunicationItem
Purpose. Add or update a communication item on a contact.
Columns to provide. Identify the contact with CM_ID or Contact…; CommunicationItemType; Value.
Options. Clear collections empties existing communication items first.
Status messages. CommunicationItemType not found, No contact found; otherwise empty.
Watch out for. For single-valued types the existing item is updated; otherwise a new one is added.
# Owner / OwnerSub
Purpose. Set the owner (Owner) or sub-owner (OwnerSub) of a contact, a matter or any owned record.
Columns to provide. If a ContactExternalApplication column is present the target is resolved as a contact via Contact… columns; otherwise any record is resolved via ExternalType/ExternalApplication/ExternalApplicationID. The owner is read from the Owner / OwnerSub column (a user reference — see Always update).
Status messages. No record (contact/matter) found; otherwise empty.
# Photo
Purpose. Load an image file into a person's photo or a company's logo.
Columns to provide. Identify the record with CM_ID or Contact… (when resolving by external key the type defaults to a person); Photo holds the file path.
Status messages. No Person found; File not found when the path is missing; otherwise empty.
Watch out for. An empty Photo path combined with Always update clears the existing photo/logo. The image type is taken from the file extension. Employees are routed to their person record.
# User
Purpose. Create or update a login user, optionally linking it to a contact.
Columns to provide. ID, Name/UserName, Password, LastName/FirstName/LastNamePrefix, EMail/EmailAddress, IsDisabled/InActive, CultureName/Culture, TimeZone, ResetPassword; identify a linked contact with CM_ID or Contact….
Status messages. Empty username; otherwise empty. The user's ID is written back.
Watch out for. The authentication mode defaults to Windows; a Forms-authentication user is assumed when a password is given or the user name has no domain (\). ResetPassword applies only to Forms-authentication users.
# Classification & lookup values
# Collection-assignment import types
These import types all assign lookup values to a collection following the same pattern (see Assigning lookup collections). For each, identify the record, optionally clear the collection (Clear collections), then add each value from the value column.
| Import type | Adds to | Value column (with fallbacks) | Multiple values separated by | Applies to | "Not found" message |
|---|---|---|---|---|---|
Category | Categories | CategoryType → Category | comma | any contact | No contact found |
Interest | Interests | InterestType → Interest | comma | any contact | No contact found |
Tag | Tags | TagType → Tag | comma | any contact | No contact found |
Tag2 | Secondary tags | Tag2Type → Tag2 | semicolon | any contact | No contact found |
MatterType | Matter types | MatterType | semicolon | any contact | No contact found |
Segment | Segments | SegmentType → Segment | semicolon | any contact | No contact found |
Referral | Referrals | ReferralType → Referral | comma | any contact | No contact found |
Responsibility | Responsibilities | ResponsibilityType | comma | employee | No contact found |
StockExchange | Stock exchanges | StockExchange → StockExchangeType | comma | company | No company found |
SubscriptionStatusPermission | Subscription-status permissions | SubscriptionStatusPermissionType → SubscriptionStatusPermission | comma | any contact | No contact found |
Extra for SubscriptionStatusPermission: a truthy Subscribe column sets the contact's subscription status to Subscribed.
# Industry / IndustryCode
Purpose. Assign industries (Industry) or industry codes (IndustryCode) to a company.
Columns to provide. Identify the company with CM_ID or Contact…; value column IndustryType→Industry, or IndustryCode→SBI→SIC.
Status messages. No contact found / Company not found.
# LookupFieldValue
Purpose. Assign values to a custom lookup field on a contact, matter or other record.
Columns to provide. CM_ID; ContactExternalType→ExternalType (defaults to a contact when both type and CM_ID are empty); external columns; value column LookupFieldValue→LookupValue→Value→Code; MatterCode.
Status messages. No <type> found.
Watch out for.
- A
MatterCodecolumn forces the target to be a matter and resolves it directly. - When the target field allows only one value and the record is a matter, the single value is replaced (older value removed) even without Clear collections.
# Single-field company / contact setters
Each of these sets one field on a company or contact.
| Import type | Sets | Applies to | "Not found" message |
|---|---|---|---|
ChamberOfCommerce | Chamber-of-Commerce number | company | No Company found |
DUNS | DUNS number (column DUNS) | company | No Company found |
EntityType | Entity type | company | No contact found |
EmployeeSize | Employee-size band (column EmployeeSize) | company | No contact found |
ContactType | Contact type | any contact | No Contact found |
# EmployeeJobInformation
Purpose. Update an employee's job title and job function.
Status messages. No Employee found. Uses the employee's language while updating.
# CompanyUltimateMember
Purpose. Set a company's parent / ultimate-parent ("member of") and the related lock fields.
Columns to provide. Identify the company with CM_ID/Contact…; the parent with MemberOfCM_ID, MemberOfExternalApplication/MemberOfExternalApplicationID, or MemberOfDUNS; lock fields MemberOfLocked, MemberOfLockedUser/MemberLockedUser, MemberOfLockedComments.
Status messages. Parent / Member Of member not found, Parent / Member Of company has been cleared, or Company with ID … not found; otherwise empty.
Watch out for.
MemberOfDUNSresolves the parent by DUNS and fails if several companies share that number.- With Always update and no parent given, the existing parent is cleared.
- With Always update (and when the system is configured for a single member-of level), the company's existing affiliates are re-pointed to the new ultimate parent.
MemberOfLockedaccepts many truthy/falsy spellings (y/yes/j/ja/true/t/1,n/nee/no/0) or a lock date.
# LookupRegion
Purpose. Find or create a region and add a postal-code range for a country.
Columns to provide. Code, Name, Country, PostalCodeStart, PostalCodeEnd.
Options. Clear collections resets the region's postal-code ranges first.
Status messages. region or country not found/created; otherwise empty.
# LookupIndustryCodeIndustry
Purpose. Link an industry to an industry code.
Columns to provide. IndustryCode, Industry.
Status messages. IndustryCode not found, Industry not found (unless Clear collections is on); otherwise empty.
# LookupItem
Purpose. Create or update any kind of lookup item.
Columns to provide. CM_ID, Type/ExternalType, external columns, Code/CM_Code, Name, InActive, Parent…, plus columns specific to the lookup type.
What it does. Resolves by ID, then external key, then code; creates the lookup item if it still does not exist. Handles many specialised lookup types (links to companies/persons/departments/employees, matter and subscription links, activity roles, person titles, contact types, subscription-item statuses, custom field values, industry codes, job functions). The resolved CM_ID is written back.
Watch out for. A Parent… reference that is supplied but cannot be found makes the row fail.
# RemoveLinkedLookupItem
Purpose. Remove lookup values from a record's collections — the inverse of the assignment import types.
Columns to provide. Identify the record with CM_ID or Contact…. Then add a column named after each collection you want to prune — for example Interest(s), Segment(s), Category/Categories, Tag(s), Tag2(s), MatterType(s), Referral(s), IndustryCode(s)/SBI/SIC, Industry/Industries, LookupField[Value][s]. Each cell lists the values to remove.
Status messages. No contact found; otherwise empty.
Watch out for. The columns you include decide which collections are touched; the record must actually support that collection.
# Matters, activities & subscriptions
# Matter
Purpose. Create or update a matter.
Columns to provide. ID, external columns, Code/MatterCode, Name/LongName, Contact…, office/department external columns, originator/referral contact columns, dates and text fields, owner columns.
Resolution order. ID → external application + id → MatterCode.
Watch out for.
- If you do not supply explicit
Owner/OwnerSubcolumns, the owner is taken from a column namedRTKand the sub-owner fromBTK(Dutch role codes). AddRTK/BTKcolumns, orOwner/OwnerSub, accordingly. - A
CloseDatecolumn is stored as the matter's follow-up date (matters have no close date). - Office and department are matched first by external id, then by code against the internal companies list.
- Supports
Originator,OriginatorSub/Originator2,ReferralContact,ReferralContactSub. The resolvedCM_IDis written back.
# Activity
Purpose. Create or update an activity for a contact.
Columns to provide. ID, external columns; Name or Description (used as the name — HTML is stripped and it is truncated to 200 characters); Contact… for the owning contact; Owner, ActivityType, dates and flags.
Status messages. No Activity found. The row fails if the owning contact cannot be resolved when creating. The ID is written back.
# Attendee / MatterPayor
Purpose. Link a contact to an activity (Attendee) or to a matter as a payor (MatterPayor).
Columns to provide. ID, external columns; to resolve the activity/matter: ActivityID/MatterID/MatterCode/Activity…/Matter…; Contact… for the attendee; ActivityRole, ContactPercentage/Percentage, AttendeeReference/Reference, AdditionalInformation. MatterPayor additionally accepts Address…, Department…, Currency, Percentage, BillReference, BillEmailAddress, DunningEmailAddress, distribution/dunning contact columns.
Options. Clear collections empties the activity's attendees first.
Watch out for.
- The activity can be resolved by several keys, including a matter (this is how
MatterPayorreuses the attendee logic). - When no external id is given, an existing attendee is matched on activity + contact + role + type.
MatterPayorfails if a supplied address or department belongs to a different contact than the payor.
# Shortcut
Purpose. Place a contact (or a subscription item) into a folder, creating folders along the path if needed.
Columns to provide. ID; CM_ID or Contact… external columns; FolderPath, FolderType, FolderOwner. For subscription items: SubscriptionItemStatus, PaymentStatus, SubscriptionStatus, SubscriptionItemOwner/SubscriptionItemOwnerUserName, NumberOfPersons, PartnerNames.
Options. Clear collections resets the subscription-item owners.
Status messages. No Contact found with CM_ID:… when a key was given but resolved nothing; otherwise empty.
Watch out for.
- A numeric
FolderPathis treated as a folder ID; otherwise the folder tree is walked/created under the Workspace root. A non-emptyFolderType(other than0) creates a subscription folder of that type. NumberOfPersonsoverwrites the default of 1 only when it differs (or with Always update).- Owners may be a
;/,-separated list.
# External-application links & synchronisation
See External-application links for the concept.
# SynchronizableRecord
Purpose. Create, rename/re-point, or flag-for-sync an external-application link on a record.
Columns to provide. Identification: CM_ID, CM_CODE, ExternalType, ExternalApplication, ExternalApplicationID. Optional rename columns: NewExternalApplication, NewExternalApplicationID, NewExternalApplicationCode.
Options. Mark as changed flags the link (see below).
Status messages. No Record found; otherwise empty.
Watch out for.
- The resolved record's ID is written into a
Result_CM_IDcolumn (empty when not found). - Supplying
NewExternalApplicationfinds/creates the link under the new name and updates its external id/code — effectively renaming or re-keying a link. - With Mark as changed on: the matching link is flagged for synchronisation; if there is no matching link, every sync-enabled link on the record is flagged.
# RemoveSynchronizableRecord
Purpose. Remove a single external-application link from a record without deleting the record (contrast with RemoveObjects).
Columns to provide.
| Column | Role |
|---|---|
CM_ID, CM_CODE, ExternalType, ExternalApplication, ExternalApplicationID | Identify the record (same as SynchronizableRecord). |
Application | The link to remove. Names which external-application link to drop. If left empty, falls back to ExternalApplication. |
Status messages. Application is required (when neither Application nor ExternalApplication is set), ExternalType is required when CM ID is not specified, No Record found, No link found (the record exists but has no link for that application); otherwise empty.
Watch out for. Identification is deliberately separate from the removal target: you can find a record by one application's external id and remove a different application's link. Only that one link is removed — the record and its other links stay.
# Enrichment & external services
# DnB
Purpose. Dun & Bradstreet enrichment — find or create a company, then fill DUNS, Chamber-of-Commerce, tax number, owner, ultimate parent, and SIC codes.
Columns to provide. CM_ID/Contact…; DUNS, Name, OfficialName, ChamberOfCommerce, TaxNumber, Owner, Language, address columns, MemberOf…, and SIC1 … SIC10.
Status messages. Company with ID … not found; otherwise empty.
Watch out for. The company's industry codes are always cleared and reloaded (this is not controlled by Clear collections). Up to ten SIC# columns are imported, the parent information is always refreshed, and the company is re-verified at the end.
# ChamberOfCommerceUpdateService
Purpose. Drive an external Chamber-of-Commerce service for a company.
Columns to provide. Identify the company with CM_ID/Contact… or ChamberOfCommerce; Action (remove/1, update/2, addandupdate/3, default → add); AutomaticSyncForFields.
Status messages. No UpdateService found, Company not found; resolving by Chamber-of-Commerce number fails if several companies match; otherwise empty.
Watch out for. For the Dutch Chamber of Commerce (KvK), a missing establishment number is filled in before the company is added.
# Security & permissions
# Permissions
Purpose. Set or reset permissions on a record or folder.
Columns to provide. Identify the target with CM_ID/ExternalType/ExternalApplication/ExternalApplicationID, or with FolderPath/FolderType. Then PermissionType (reset, resetchilds, deny/denied, remove/removed, allow/allowed, default allow); Inherited; UserRole; Permission (a comma/semicolon list).
Status messages. Record not found; on any other error the message is returned as <action>:<message>; otherwise empty.
Watch out for. Errors are reported in the row's Result and the import continues. remove deletes the matching permission entries. Clear collections resets the target to inherited permissions first.
# Permission names for the Permission column
These are the permission names the Permission column accepts. Some are granted automatically by another permission — the Implied by column says which, so you do not need to list them separately.
Record permissions — apply to an individual record:
| Permission | Required to | Implied by |
|---|---|---|
AdministrationPermission | Do anything — every permission demand succeeds when this is allowed. | — |
OwnerPermission | Marks the user or group as owner of the record. | — |
ChangePermission | Change any property of the record. | OwnerPermission |
ChangePermissionsPermission | Change the record's Permissions property. | OwnerPermission |
ReadPermission | Read any property of the record. | OwnerPermission |
ReadPermissionsPermission | Read the record's Permissions property. | OwnerPermission |
RemovePermission | Remove the record. | OwnerPermission |
ChangePasswordPermission | Use SetPassword on a particular User. | — |
ChangeFullTextDataPermission | Change full-text indexing data (IFtObject, FtRecord). Used by the system — you do not need to assign it. | — |
SerializationPermission | Serialize the record. Not required in practice. | OwnerPermission |
ChildrenDeserializationPermission | Deserialize the record's child objects. Not required in practice. | OwnerPermission |
ChildrenPermissionsDeserializationPermission | Deserialize the child objects' permissions. Not required in practice. | OwnerPermission |
OwnerPermission implicitly grants ChangePermission, ChangePermissionsPermission, ReadPermission, ReadPermissionsPermission, RemovePermission, ChildrenDeserializationPermission, ChildrenPermissionsDeserializationPermission and SerializationPermission.
Node and folder permissions — apply to a record's position in the tree, and to folders:
| Permission | Required to | Implied by |
|---|---|---|
CreateChildNodesPermission | Create a new child within a node. | OwnerPermission |
EnumerateChildNodesPermission | Read the child nodes of a node. | OwnerPermission, ChangePermission, ReadPermission |
ReadSummaryInfoPermission | Read the main properties of a node. | OwnerPermission, ChangePermission, ReadPermission |
CreateFolderPermission | Create a new folder. | OwnerPermission |
RemoveChildNodesPermission | Remove items from a folder. | OwnerPermission, RemovePermission |
RemoveFolderPermission | Remove a contact folder, subscription folder or contact search folder. | — |
ContactManager-specific permissions:
| Permission | Required to | Implied by |
|---|---|---|
ChangeCompanyNamePermission | Change specific company properties: Name, OfficialName, MemberOf, DUNSNumber, ChamberOfCommerce, Owner. | OwnerPermission |
ChangeMarketingInformationPermission | Change specific contact properties: Jobfunction, Categories, Interests, Industries, Responsibilities, StockExchanges, Segments, ContactType. | OwnerPermission |
VerifyPermission | Verify a contact. | OwnerPermission |
Which permission for which task:
| Task | Permission |
|---|---|
| Create new items | CreateChildNodesPermission |
| Create a new folder | CreateFolderPermission |
| Change important information | ChangeCompanyNamePermission |
| List items | EnumerateChildNodesPermission |
| Remove items from a folder | RemoveChildNodesPermission |
| Verify | VerifyPermission |
| Remove a folder | RemoveFolderPermission |
# ReassignSecurity
Purpose. Re-apply the default permissions to a record.
Columns to provide. CM_ID/ExternalType/ExternalApplication/ExternalApplicationID.
Options. Clear collections resets to inherited permissions first.
Status messages. Record not found; otherwise empty.
# RoleMembers
Purpose. Add a user or role as a member of a role.
Columns to provide. The member: UserID/Contact…/UserName. The role: RoleID/RoleName.
Status messages. User not found; otherwise empty.
Watch out for. The role is created if RoleName does not exist. Clear collections empties the role's members first.
# Maintenance, review & removal
# Update
Purpose. A generic updater: every column in the file is treated as a field name to set on the resolved record. Use it when there is no dedicated import type for the field you need.
Columns to provide. Identification: CM_ID/ID, CM_Code, ExternalType/Type, ExternalApplication/ExternalApplicationID. Every other column is treated as a field to update.
What it does. Resolves the record by ID, then by external link, then by type-specific key (client code, matter code, lookup code) — and may update several matching records, joining their IDs back into CM_ID.
Columns that are never treated as fields: ID, CM_ID, CM_Code, ExternalType, Type, Result, ExternalApplicationID, ExternalApplication, any column ending in ExternalApplication, and any column whose name starts with Column or __.
Watch out for.
- A column ending in
…ExternalApplicationIDmeans "resolve this reference field by its external id" (the suffix is stripped to get the field name). - Special handling:
CloseDate→ follow-up date for matters;Note/Notes/Comment/Commentsappend a note rather than setting a field; aUsercolumn sets the contact's login user;Passwordsets a login password; reference fields are resolved by ID, lookup or user; collection fields support Clear collections; aField-<culture>column writes a translation. - A column that maps to no field on the resolved record makes the row fail.
# ReviewUpdate
Purpose. Record proposed field changes for later human review, instead of applying them immediately.
Columns to provide. CM_ID, CM_Code, ExternalType, ExternalApplication/ExternalApplicationID; ReviewUpdateType, CreateDate, Field, Value.
Status messages. Record not found; otherwise empty.
Watch out for. Consecutive rows for the same record are grouped into a single review entry, so keep a record's rows together in the file.
# DeDuplication
Purpose. Merge one or more duplicate records into a master record.
Columns to provide. The master: MasterCM_ID or Master… external columns. The duplicates: DuplicateCM_ID (a comma-separated list of IDs) or Duplicate… external columns. Action chooses how duplicates are handled (default: remove).
Status messages. master, ExternalType is required when CM ID is not specified, Duplicate, ExternalType is required …, No Record found, or type not supported for record types that cannot be de-duplicated; otherwise empty.
Watch out for. Only contacts, addresses and subscription items can be de-duplicated; other types report type not supported.
# RemoveObjects
Purpose. Delete the entire record.
Columns to provide. CM_ID, ExternalType, ExternalApplication, ExternalApplicationID.
Status messages. No Record found; the row fails with ExternalType is required when CM ID is not specified when neither a CM_ID nor a resolvable type is given; otherwise empty.
Watch out for. This deletes the whole record. To remove only an external-application link and keep the record, use RemoveSynchronizableRecord.
# OutlookFolderSync
Purpose. Add or remove an Outlook synchronisation folder for a user.
Columns to provide. UserName/User; FolderPath/Folder; Remove/RemoveFolder (a flag).
Status messages. User … not found, Folder … not found; otherwise empty.
Watch out for. Idempotent: the folder is added if absent (and Remove is not set), or removed if present and Remove is set.
# Things to watch out for
The behaviours most likely to surprise you, collected in one place:
- "Always update" does not protect plain text fields. Text, number and date fields are overwritten on every import, whether or not Always update is ticked. The option only affects lookup references, user references and translated text, which are otherwise filled only when empty. Re-running an import can therefore clobber manually-edited plain fields.
- "Mark as changed" controls synchronisation for the whole run. Unchecked ⇒ no changes are pushed to external applications. Tick it when the import should propagate.
- Your source file is replaced by an
.xlsxcopy with result columns added (Result, resolved IDs,_-prefixed match columns) and, for matching imports, duplicated rows. Keep a backup of the original. - One bad row does not stop the import. The failing row is rolled back, its error appears in its
Result, and processing continues. - Special
ExternalTypevalues:PersonCompany/CompanyPerson/Clientmean "company or person"; an employee external idcompanyId@@personIdresolves the employee; an empty type means "contact". RemoveObjectsdeletes the whole record;RemoveSynchronizableRecordremoves only one link. Choose deliberately.RemoveSynchronizableRecordseparates identification from the removal target:ExternalApplicationfinds the record, while the separateApplicationcolumn says which link to drop (falling back toExternalApplication).DeDuplicationonly supports contacts, addresses and subscription items — other types reporttype not supported.DuplicateCM_IDaccepts a comma-separated list.Matterdefaults its owner columns to the Dutch role codesRTK(owner) andBTK(sub-owner) unless you supply explicitOwner/OwnerSubcolumns, and storesCloseDateas the follow-up date.Clear collectionsclears once per record per run. If several rows target the same record, the collection is reset on the first row and later rows add to it.Contactwill create a new record instead of updating a match when the matched record already carries a link for the row's external application (the anti cross-link guard).DnBalways clears and reloads industry codes, ignoring the Clear collections option.- Status messages vary in wording and casing (e.g.
No contact foundvsNo Contact found) and are shown exactly as written. - Column names are matched case-insensitively, so both
CM_CODEandCM_Codework; different templates use different conventions.