| Contact (individual)Name, DOB, contact details |
Person AccountFirstName / LastName / PersonBirthdate req |
direct |
Confirm Person Accounts are enabled before loading. Some firms use Contact plus Household instead. |
| ContactPhones, emails and addresses (multiple) |
Person AccountPrimary fields + Contact Point records |
split |
Primary values go to standard fields. Extras go to Contact Point records or custom fields. |
| Household / familyHousehold name |
Account (Household record type)Name req |
direct |
|
| Family member + roleRelationship |
Account Contact RelationshipRoles / Primary Group flag req |
association |
Head of household, spouse, dependent and so on become ACR roles. |
| Contact (business)Organization record |
Account (Business)Name, address, phone |
direct |
|
| ContactType / Category / Status |
Person AccountClient category and status fields |
picklist map |
Clean up the value lists before mapping. They are often inconsistent. |
| ContactServicing advisor / writing advisor |
Person AccountOwnerId / primary advisor field req |
lookup |
Match advisors to Salesforce users by email. |
| ContactTags |
Person AccountMulti-select picklist or Topics |
picklist map |
|
| ContactUser-defined fields |
Person AccountCustom fields |
manual review |
Keep only the fields someone still uses. |
| ContactTax ID / SSN |
—— |
drop |
Not migrated by default. Bring it only with an approved security design. |
| Financial accountAccount number, type, balance |
Financial AccountAccount number, type, balance |
manual review |
If a custodian feed will run, it becomes the source of truth. Redtail accounts are reference only. |
| Financial accountHistorical balances and posted transactions |
Financial Account / Financial Account TransactionBalance and transaction records |
direct |
Load balances and posted transactions as of the extract date instead of recalculating them. Fees and adjustments may have been edited or waived in the source. |
| ActivitiesActivities (calls, meetings, tasks) |
Task / EventSubject, dates, WhoId / WhatId |
association |
|
| Activities (events)Activity date and start date |
EventActivityDate / StartDateTime |
derive |
Salesforce rejects an event whose activity date differs from its start date. Set both from the source start date; a completion date cannot be used for events. Tasks do not have this constraint. |
| Activities (tasks)Completed by |
Task— |
drop |
Salesforce Task has no completed-by field, only OwnerId (assigned to). Drop it from the mapping, or keep the name in the description if the history matters. |
| ActivitiesCreated by (no last-modified-by in the source) |
Task / EventCreatedById / LastModifiedById |
lookup |
The source has no last-modified-by, so reuse the created-by user for both. Needs the "Set Audit Fields upon Record Creation" permission; check after the load that LastModifiedById did not fall back to the load user. |
| ActivitiesCategory |
Task / EventSubject |
concat |
Prefix the category to the subject (for example "Client review: …") so it stays visible in list views and search without a custom field. |
| Activities / tasksAssigned user (former or inactive employee) |
Task / EventOwnerId |
lookup |
Users who will not exist in Salesforce map to an agreed placeholder user. Keep the original name in a text field if it matters for history. |
| NotesNotes |
ContentNoteContent |
direct |
Preserve note dates and authors. |
| Notes / activitiesRich-text body (HTML, line breaks) |
ContentNote / TaskContent / Description |
derive |
CSV-based pipelines often strip HTML and line breaks. Swap line breaks for a placeholder before export and restore them after load. |
| NotesNotes that only record a completed activity or workflow |
—— |
drop |
System-generated completion notes duplicate the activity or workflow record. Filter them out instead of migrating them as separate notes. |
| NotesComments on excluded workflow-generated notes |
CaseDescription |
concat |
Dropping completion notes also drops any comments on them. Join comment → note → note association → workflow and append the comments to the matching Case. If the join is impractical, add the few that remain by hand after the load. |
| WorkflowsWorkflow templates |
Action Plan templates / FlowTemplate steps |
rebuild |
|
| Workflow stepStep comments and notes |
Action Plan item / TaskDescription |
concat |
Notes tied to a workflow step go inside that step, not as standalone notes. |
| WorkflowCompleted by |
Action Plan / TaskCompleted-by field or description |
derive |
There is no single completed-by value. Decide whether it comes from the workflow owner, the user on the last completed step, or a completion note, and record the rule in the mapping. |
| Workflow (completed instance)Workflow template |
CaseRecordTypeId / Type |
lookup |
Historical workflows can load as closed Cases. Keep a template-to-record-type table so each workflow lands on the right record type, and drive Type and other template-dependent picklists from the same table. |
| Workflow (completed instance)Name, description, category and completed steps |
CaseSubject / Description |
concat |
Put the category in the body as well as any field, since it shows when a workflow was cancelled. Roll completed steps into one dated block per Case: step, assignee, due date, completed date, comments. |
| Workflow (completed instance)Created, due and completion dates |
CaseCreatedDate / ClosedDate / due date field |
derive |
Setting CreatedDate and the created-by user on insert needs the "Set Audit Fields upon Record Creation" permission for the load user. Confirm the closed date can be set on insert, or keep the source completion date in its own field. |
| ImagingDocuments |
FilesContentVersion |
manual review |
Check document volume. Large archives often stay in a document system with links. |
| ImagingDocument-to-record link |
ContentVersionFirstPublishLocationId |
association |
Set FirstPublishLocationId when creating the ContentVersion so the file links to its record in the same API call. Plan batches by total file size, not record count. |
| Notes and documents (repeat loads)Source note / file ID |
ContentNote / ContentVersionLoad tracking |
manual review |
Notes and files cannot be upserted by external ID. A full reload means delete and reinsert. For deltas, track loaded source IDs in a staging table and insert only new items. Load the most recent years first. |
| ContactRedtail Contact ID |
Person AccountRedtail_ID__c (external ID) req |
direct |
|
| All migrated recordsAccount, owner and created-by references |
All target objectsAccountId / OwnerId / CreatedById |
lookup |
Resolve lookups through external ID fields at load time (legacy contact ID on Account, legacy user ID on User). Salesforce record IDs copied from a sandbox do not exist in production. |
| ContactMerged or duplicate contacts |
Person AccountRedtail_ID__c (external ID) |
manual review |
When source contacts were merged, decide which original ID becomes the external ID before loading; record order changes the result. |