CRM migration
Field-level mapping, validation, and rollback between Agillic and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Agillic
Source
Salesforce Sales Cloud
Destination
Compatibility
12 of 14
objects map 1:1 between Agillic and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from Agillic to Salesforce is a cross-category migration: Agillic is a Nordic omnichannel marketing automation platform built around a fully customisable Recipient schema and channel-agnostic Activity tracking, while Salesforce is a CRM whose standard objects (Contact, Lead, Account, Opportunity, Task, Event) follow a relational account-contact-opportunity model. There is no native Lead-versus-Contact split in Agillic — every Recipient is a person record regardless of lifecycle stage — so we map all Recipients to Salesforce Contacts with the original Recipient ID and any lifecycle-equivalent custom property preserved in a custom field for segmentation and reporting. Activity history (sends, opens, clicks, bounces, SMS delivery, and events) migrates as Task and Event records via the Salesforce Bulk API 2.0 with Flow Execution IDs carried as custom fields to allow post-migration journey reconstruction. Agillic Flows are internal execution configurations with no export endpoint; we deliver a written inventory of every Flow, its trigger logic, and the recommended Salesforce Flow equivalent for the customer's admin to rebuild. Global Data Tables migrate as Salesforce custom objects with lookup relationships recreated in the destination org before data import begins.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Agillic object lands in Salesforce Sales Cloud, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Agillic
Recipient
Salesforce Sales Cloud
Contact
1:1All Agillic Recipients map to Salesforce Contact (not Lead, because Agillic has no concept of an unqualified prospect — every Recipient is a person record regardless of engagement stage). We preserve the original Agillic Recipient ID in a custom field agillic_recipient_id__c and any lifecycle-equivalent custom property (e.g., subscription_status, customer_type) in a custom field agillic_lifecycle__c for segmentation and reporting. AccountId is resolved via the Company-to-Account mapping before Contact insert.
Agillic
Company (on Recipient)
Salesforce Sales Cloud
Account
1:1Agillic Recipients may carry a company association as a custom property or via a Global Data Table relationship. We map this to Salesforce Account with the company name mapped to Account.Name and the company domain (if present) mapped to Account.Website for deduplication. Account is created before Contact import so the AccountId Lookup is satisfied at insert time.
Agillic
Activity Log (sends, opens, clicks, bounces)
Salesforce Sales Cloud
Task
1:1Agillic Activity records of type send, open, click, and bounce map to Salesforce Task records. The Activity type becomes a custom Task field activity_type__c (picklist: SEND, OPEN, CLICK, BOUNCE, DELIVERED, UNSUBSCRIBED). The original Agillic Activity timestamp migrates as ActivityDate for timeline ordering. Flow Execution ID migrates to a custom field flow_execution_id__c on Task.
Agillic
Activity Log (SMS delivery, SMS reply)
Salesforce Sales Cloud
Task (TaskSubtype = Call or custom)
1:1SMS events migrate as Task records with a custom field sms_direction__c (SENT, DELIVERED, REPLIED) and sms_content__c carrying the message body. If Salesforce Service Cloud SMS integration is active, we map to the native MessagingSession object; otherwise, Tasks with custom SMS fields serve as the archive.
Agillic
Activity Log (event triggers)
Salesforce Sales Cloud
Event
1:1Agillic event-triggered activities (e.g., webinar registrations, abandoned cart triggers, custom event types) map to Salesforce Event records. The event name maps to Event.Subject, the event timestamp maps to Event.StartDateTime, and event metadata migrates to custom Event fields. We preserve the Flow Execution ID on Event as flow_execution_id__c.
Agillic
Flow Execution ID
Salesforce Sales Cloud
Task / Event (flow_execution_id__c)
1:1The Flow Execution ID uniquely identifies each campaign run in Agillic. We carry it as a custom field on every migrated Activity record (Task and Event) so that analysts can group records back to specific campaign executions post-migration. This requires the Flow Execution ID to be enabled in Agillic Settings > System Settings > Export > Activity Exports before we pull historical data.
Agillic
Flow
Salesforce Sales Cloud
Salesforce Flow (rebuild required)
lossyAgillic Flows are automation logic stored as internal execution configurations with no documented export endpoint. We export Flow names, associated trigger events, and the count of executions per Flow during migration. We deliver a written Flow inventory document that lists every active Flow with its trigger type, conditions, actions, and a recommended Salesforce Flow equivalent (record-triggered, scheduled, or screen flow). The customer's admin or a Salesforce partner rebuilds them post-migration.
Agillic
Global Data Table
Salesforce Sales Cloud
Custom Object (__c)
1:1Agillic Global Data Tables are custom relational structures referenced within Flows. We export the table schema (column names, data types) and all row data. In Salesforce, we create a custom object with an API name matching the Global Data Table name plus a __c suffix, and custom fields matching each column. Lookup relationships between Global Data Tables are recreated as Lookup or Master-Detail relationships on the destination custom objects.
Agillic
Global Data Table Row
Salesforce Sales Cloud
Custom Object Record
1:1Each row in an Agillic Global Data Table becomes a Salesforce custom object record. We resolve any lookup references to Recipients (via Recipient ID to Contact mapping), other Global Data Tables (via the destination custom object IDs), and carry the original row identifier in a custom field original_row_id__c for audit.
Agillic
Template
Salesforce Sales Cloud
EmailTemplate / ContentAsset
1:1Agillic email, SMS, and push templates carry dynamic field mappings and HTML content. We export template content, subject line placeholders, and dynamic field references. HTML templates require conversion to Salesforce EmailTemplate format (with merge field syntax updated from Agillic to Salesforce merge field format). We do not perform the HTML conversion as a code task; we deliver a template migration document and the customer refactors with their email developer or an implementation partner.
Agillic
Content Block
Salesforce Sales Cloud
ContentAsset or Apex Page
1:1Agillic Reusable Content Blocks (modular HTML/text fragments) export with their content and metadata. In Salesforce, these map to ContentAsset records (for reusable assets) or are documented as ContentBlockKey references for use within Salesforce Marketing Cloud Email Studio. Recombination in the destination CMS or email platform requires content refactoring outside migration scope.
Agillic
Audience (Google/Meta segments)
Salesforce Sales Cloud
Campaign + CampaignMember or Data Studio Audience
lossyAgillic audience segments synced to Google and Meta are documented as segment definitions with membership criteria. We deliver an audience migration document that specifies each segment's logic (criteria, operators, values) and recommend recreating equivalent segments in Salesforce Data Studio, Account Engagement (Pardot) Dynamic Lists, or Salesforce Campaign Audiences depending on the customer's destination stack.
Agillic
Owner
Salesforce Sales Cloud
User
1:1Agillic Owner references on Recipient, Activity, and Flow Execution records map to Salesforce User by email match. Any Owner without a matching User in the destination org is held in a reconciliation queue for the customer's admin to provision before record import resumes.
Agillic
Recipient Export (bulk snapshot)
Salesforce Sales Cloud
Contact (Data Loader bulk insert)
1:1The Agillic Recipients Export feature generates a full snapshot file of all recipient records with current field values. We use this as the primary baseline for Contact migration and reconcile against API-fetched records to catch any updates between API polling cycles.
| Agillic | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Recipient | Contact1:1 | Fully supported | |
| Company (on Recipient) | Account1:1 | Fully supported | |
| Activity Log (sends, opens, clicks, bounces) | Task1:1 | Fully supported | |
| Activity Log (SMS delivery, SMS reply) | Task (TaskSubtype = Call or custom)1:1 | Fully supported | |
| Activity Log (event triggers) | Event1:1 | Fully supported | |
| Flow Execution ID | Task / Event (flow_execution_id__c)1:1 | Fully supported | |
| Flow | Salesforce Flow (rebuild required)lossy | Fully supported | |
| Global Data Table | Custom Object (__c)1:1 | Fully supported | |
| Global Data Table Row | Custom Object Record1:1 | Fully supported | |
| Template | EmailTemplate / ContentAsset1:1 | Fully supported | |
| Content Block | ContentAsset or Apex Page1:1 | Fully supported | |
| Audience (Google/Meta segments) | Campaign + CampaignMember or Data Studio Audiencelossy | Fully supported | |
| Owner | User1:1 | Fully supported | |
| Recipient Export (bulk snapshot) | Contact (Data Loader bulk insert)1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
Agillic gotchas
Undocumented API rate limits complicate bulk migration planning
Fully custom schema requires mandatory field enumeration during discovery
Flows are not exportable as portable workflow definitions
Activity Export requires explicit Flow Execution ID enablement
Salesforce Sales Cloud gotchas
Workflow Rules and Process Builder are retired
Bulk API batch quota exhaustion during large imports
Storage overage billing is non-obvious
Account-Contact many-to-many relationship mapping
Territory and team member import ordering dependencies
Pair-specific challenges
Migration approach
Discovery and custom schema enumeration
We audit the Agillic instance across all active Recipients properties via the Recipient API and a full Recipients Export. We enumerate every custom recipient field (standard and custom), confirm the Flow Execution ID export setting, list all Global Data Tables with their schemas and row counts, export all Flow names and trigger types, and pull Activity history volume estimates per channel (email, SMS, push, events) for the full history window. We pair this with a Salesforce destination org review (edition, custom object limits, field limits, validation rules, field-level security). The discovery output is a written migration scope with a complete Agillic-to-Salesforce field inventory and the recommended Salesforce edition for the destination org.
Schema design and Salesforce custom object creation
We design the destination schema in Salesforce. This includes creating all custom fields on Contact (agillic_recipient_id__c, agillic_lifecycle__c, activity_type__c, flow_execution_id__c, and any custom fields derived from Agillic custom recipient properties), creating Salesforce custom objects for Global Data Tables (with __c API names matching the source table names), defining Lookup and Master-Detail relationships between custom objects, configuring Record Types and Sales Processes if the destination is Sales Cloud with Opportunity management, and setting up Activity custom fields (sms_direction__c, sms_content__c) if SMS history is in scope. Schema is deployed via Salesforce Metadata API into a Sandbox first for validation before any data moves.
Sandbox migration and reconciliation
We run a full migration into a Salesforce Sandbox (Full Copy or Partial Copy) using a representative data sample — typically the most recent 90 days of Activity history and all Recipient records. The customer's RevOps lead reconciles record counts (Contacts in, Accounts in, Tasks in, Events in, custom object records in), spot-checks 25-50 random records against the Agillic source data, and reviews the Flow inventory document. Any mapping corrections, missing fields, or schema adjustments happen here before production migration begins.
Owner reconciliation and User provisioning
We extract every distinct Agillic Owner referenced on Recipient and Activity records and match by email against the Salesforce destination org's User table. Owners without a matching User go to a reconciliation queue. The customer's Salesforce admin provisions any missing Users (active or inactive depending on whether the original Agillic owner is still active). Migration cannot proceed past this step because OwnerId references are required on standard objects and custom objects with Owner fields.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from linked companies), Contacts (with AccountId resolved, custom fields created, and OwnerId resolved), Activity history via Bulk API 2.0 (Tasks and Events with WhoId resolved, ActivityDate preserved, and Flow Execution ID carried in custom fields), Global Data Table custom objects (with lookup relationships resolved to Contact and between custom objects), Templates (documented for manual refactoring with merge field conversion notes), and Audience segments (documented for recreation in Salesforce Data Studio or Account Engagement). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and Flow rebuild handoff
We freeze Agillic writes during cutover, run a final delta migration of any records modified during the migration window, then enable Salesforce as the system of record. We deliver the Flow inventory document to the customer's admin team listing every active Flow with its trigger, conditions, actions, and recommended Salesforce Flow equivalent. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team. We do not rebuild Agillic Flows as Salesforce Flow inside the migration scope; that is a separate engagement or an internal admin task. Post-migration reporting and dashboard rebuilds are outside standard scope unless separately scoped.
Platform deep dives
Agillic
Source
Strengths
Weaknesses
Salesforce Sales Cloud
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Agillic and Salesforce Sales Cloud.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Agillic: Not publicly documented — limited per production instance per day.
Data volume sensitivity
Agillic doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Agillic to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Agillic to Salesforce Sales Cloud migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Agillic
Other ways to arrive at Salesforce Sales Cloud
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.