Migration Playbook

Salesforce Attio

Salesforce to Attio: The Complete Migration Playbook

A 43-step runbook across six phases — track your progress, and open the right tool at every step.

0 / 43 steps complete 0%
TL;DR

Salesforce to Attio migration requires schema translation, not lift-and-shift. Use Bulk API 2.0 for extraction, Attio's assert endpoint for upsert, and strict dependency ordering to preserve relationships.

There is no native one-click migration path from Salesforce to Attio. Salesforce's rigid schema—built on record types, formula fields, roll-up summaries, Apex triggers, and junction objects—has no direct structural equivalent in Attio's graph-based model of objects, relationship attributes, and lists. Every object, field, and relationship must be deliberately remapped, and computed field values (formula fields, roll-ups) must be flattened to static data or recreated using Attio workflows. Custom engineering work is required for any migration involving more than basic flat data, particularly for relationship chain preservation, activity history, and custom objects.

Read this first

Pair-specific gotchas that catch teams out. Each one has cost somebody a weekend.

Attio has no equivalent for Salesforce formula fields, roll-up summaries, or Apex triggers

Any computed field values must be flattened to static values during migration or recreated using Attio workflows and AI attributes.

If Activities and Cases matter, do not scope the migration around CSV alone

Attio's CSV importer does not import notes, and the Import2 Salesforce path does not migrate Cases.

Take a full Salesforce backup first

The native Data Export Service produces org-wide CSV backups and can include attachments and Files. (help.salesforce.com)

Salesforce picklist values must be normalized to match exact Attio select option labels

Salesforce picklist values must be normalized to match exact Attio select option labels before import. Attio will not auto-create unknown select or status values — it rejects them. Multi-select values use commas as delimiters, meaning picklist values containing commas will break the CSV importer. Create all target select options and deal statuses before the first load. (docs.attio.com)

Disable Attio email sync for all workspace members before starting migration

If connected, Attio auto-creates People and Company records from incoming emails, and your migration script will create duplicates. Re-enable sync only after migration validation is complete.

The runbook

Work top to bottom. Tick steps as you go — your progress is saved in this browser.

01 Discovery Agree scope, pipeline design and success criteria before touching data. 0/6

Objective A scope covering every object in the revenue model, with sales leadership signed up to the pipeline design.

  1. Inventory every object in Salesforce

    RevOps 1-2 days

    Count accounts, contacts, leads, deals or opportunities, activities, notes, emails, files, products and quotes. Activity and email history is usually the largest object by an order of magnitude and the one people forget to size.

    Data Profiler Get real record counts instead of estimating from memory
  2. Map the current pipeline and agree the target model

    Sales leadership 3-5 days

    Document every pipeline, stage, probability and required field, then agree the Attio model with sales leadership. Migrating a broken pipeline faithfully is a wasted opportunity; redesigning it mid-migration is a wasted migration.

    Stage changes alter historical conversion rates. Agree how you will restate reporting before you change the model.

  3. Catalogue integrations and automation

    RevOps 2-3 days

    List every system touching Salesforce: marketing automation, quoting, billing, ERP, data enrichment, dialler, BI. Each is a separate cutover task with its own owner, and each can silently write bad data into your new CRM.

  4. Capture the reporting that must survive

    RevOps 2 days

    Interview the people who actually live in the dashboards — forecast, pipeline coverage, rep activity, cohort conversion. Every one of these needs the underlying fields to migrate, which frequently expands the scope.

  5. Build the business case and pick the go-live date

    Project sponsor 2 days

    Model licence delta, implementation effort and productivity dip. Then choose the date deliberately: mid-quarter is disruptive, quarter-end is worse. Most teams land on the first week of a new quarter.

    COI & ROI Calculator Build the 36-month business case you will need for sign-off
  6. Record count comparison

    Per object, per Salesforce Record Type. Every number must match.

Salesforce → Attio specifics

Over-engineered orgs
Years of Apex triggers, validation rules, Process Builder flows, and custom objects create a Salesforce org that's expensive to maintain and terrifying to change. Attio's schema is code-free and reconfigurable in minutes.
Relationship intelligence
Attio automatically ingests email and calendar data from connected inboxes and enriches People and Company records without manual entry. Salesforce requires third-party tools or custom Apex to replicate this.
Data model flexibility
Attio lets you create custom objects, define many-to-many relationships natively, and build lists that separate workflow context from record-level truth — all without writing code.
Scope definition
Decide what not to migrate. Orphaned records, stale leads from five years ago, deprecated custom objects, and unused picklist values should be archived, not moved.

Don't move on until

  • Object counts confirmed for accounts, contacts, deals and activities
  • Target pipeline and stage model agreed with sales leadership
  • Reporting requirements captured from the people who use the reports
02 Data Audit CRM data is usually dirtier than anyone expects. Find out how dirty. 0/7

Objective A profiled export with duplicates, ownership gaps and relationship integrity all quantified and triaged.

  1. Export and profile every object

    Data engineer 2 days

    Profile null rates, distinct values and type consistency across all objects. Pay attention to fields sales reps were supposed to fill in: an 80% null rate on a field your forecast depends on is a business finding, not a data one.

    Data Profiler Profile the Salesforce export for nulls, outliers and type drift
  2. Quantify duplicates and agree the merge policy

    RevOps 2-4 days

    Measure duplicate accounts (same company, different spellings and suffixes) and contacts (same email, or same person at a renamed company). Agree survivorship rules before merging: which record wins, which fields, and what happens to the activity history on the loser.

    Merging before you have agreed survivorship rules destroys history irreversibly. Decide first, merge second.

    Data Cleaner Strip empty rows, stray whitespace and dead columns
  3. Verify relationship integrity

    Data engineer 1-2 days

    Check every deal has a valid account, every contact a valid account, every activity a valid parent. Referential breaks are the defect that turns a clean-looking load into a CRM where the pipeline report does not tie to the account list.

  4. Resolve ownership and the user map

    RevOps 1-2 days

    Build the Salesforce user → Attio user map, including leavers. Every record needs a valid owner: records assigned to deactivated users either fail to load or land unassigned, and unassigned pipeline is pipeline nobody works.

    Records owned by deactivated users are a top cause of load failures. Decide the reassignment target before you start.

  5. Scan for PII and regional compliance

    Compliance / DPO 1-2 days

    CRMs hold marketing consent, lawful basis and unsubscribe state. Confirm these fields migrate intact and that consent provenance survives — losing consent records is a regulatory problem, not a data-quality one.

    PII & Compliance Scanner Find regulated fields before they land in a new system
  6. Clean, normalise and archive the pre-state

    Data engineer 2 days

    Normalise country and state values, phone formats, currencies and casing, and standardise all timestamps to UTC. Keep an untouched copy of the raw export — it is your only reference if a mapping decision turns out wrong.

  7. Audit triggers and related classes

    Identify every active Apex trigger on Cases, Accounts, Contacts, and any target custom objects. Document their execution contexts (before insert, after insert).

Salesforce → Attio specifics

Data inventory
Quantify Accounts, Contacts, Leads, Opportunities, Cases, Tasks, Events, Campaigns, Attachments/Files, and every custom object that still matters.
Complexity assessment
Identify Apex triggers, validation rules, record types, and Process Builder/Flow automations. These often populate fields automatically in Salesforce — in Attio, you must migrate the computed values directly. (help.salesforce.com)

Don't move on until

  • Duplicate rate quantified per object with a merge policy agreed
  • Every record has a valid owner mapped to a target user
  • Relationship integrity verified — no orphaned deals or contacts
03 Field Mapping Map objects, relationships and picklists — in that order. 0/6

Objective A signed mapping spec that covers objects, relationships, picklist values and currency handling.

  1. Map objects and their relationships first

    Solution architect 2-3 days

    Establish how Salesforce objects correspond to Attio objects before any field work. Leads-versus-contacts, accounts-versus-organisations and deal hierarchies differ structurally between CRMs, and a field map built on the wrong object model has to be redone.

    Schema Mapper Opens pre-loaded with the Salesforce → Attio field pair
  2. Generate and then hand-review the field map

    Solution architect 2-3 days

    Auto-match both schemas, then review every row. Look hardest at anything named "type", "source", "stage" or "status", where names match and meanings do not.

  3. Map every picklist value, including retired ones

    RevOps 2 days

    Enumerate all values on both sides — deal stages, lead sources, industries, statuses — and map each explicitly, including values no longer offered but still present on old records. Unmapped values either fail the row or land as blanks that quietly break segmentation.

    Historical records often carry picklist values that were retired years ago and no longer appear in the UI.

  4. Decide currency, amount and date handling

    Finance / RevOps 1-2 days

    If you sell in multiple currencies, confirm how Attio stores amounts, exchange rates and dated conversion rates. Recalculating historical deal values at today's rate silently rewrites your revenue history.

    Multi-currency deals re-converted at current rates will not tie to your historical reporting or your finance system.

  5. Determine the load order

    Data engineer 1 day

    Sequence the load so parents exist before children: users, then accounts, then contacts, then deals, then activities and notes. Keep source IDs in custom fields so relationships can be rebuilt by lookup rather than guesswork.

  6. Freeze the spec and sign off

    Project manager 1 day

    Version-control the mapping, walk RevOps and sales leadership through the decisions that change reporting, and get written sign-off before the pilot.

Salesforce → Attio specifics

Accounts → Companies
Map Account.Name to Company name, Account.Website to Company domain (Attio uses domain as the unique identifier and enrichment key). Attio natively enriches Companies based on domain names. Account Record Types have no Attio equivalent — use list membership or a custom select attribute to preserve the distinction. Attio documents domains as unique and says Companies cannot have new custom unique attributes. (docs.attio.com)
Contacts → People
Map Contact.Email to People email (unique identifier). Contact.AccountId resolves to a relationship attribute linking People → Companies. Attio documents email_addresses as the unique attribute for People upserts, so contacts without reliable email need a separate merge policy. (docs.attio.com)
Leads → People
Attio has no Lead object. Import Leads as People with a status attribute or list membership that preserves lead stage context. Deduplicate against existing Contacts by email before migration to prevent duplicates.
Opportunities → Deals
Attio's Deals object requires deal_name, deal_owner, and deal_stage for every record. Map Opportunity.StageName to Attio deal stages — define these in your pipeline list before migration. Opportunity.Amount maps to a currency attribute. Deals have no unique attribute by default, so add your own if you want upsert behavior via the assert endpoint. (docs.attio.com)
Activities (Tasks, Events) → Notes / Tasks
Attio notes link to a single parent record. If a Salesforce Task relates to both a Contact and an Opportunity, you must choose one parent or create two copies. Closed history usually fits Notes better than Tasks — use Tasks only for open work. (docs.attio.com)

Don't move on until

  • Object and relationship model mapped and reviewed
  • Every picklist value explicitly mapped, including dead values
  • Load order determined so parents always exist before children
04 Test Migration Pilot with related records, not a flat sample. 0/8

Objective A pilot load whose relationships, ownership and roll-up reporting all verify against source.

  1. Configure the Attio sandbox to match the agreed model

    Solution architect 3-5 days

    Build the pipelines, stages, custom fields, record types and user roles first. Load into a default configuration and you will only discover the configuration defects at full scale.

  2. Select a connected pilot slice

    Data engineer 0.5 day

    Take complete account trees — 50-100 accounts with all their contacts, deals, activities and files — rather than a flat random sample. Relationship defects are the whole point of a CRM pilot and a flat sample cannot expose them.

  3. Run the load in dependency order with full logging

    Data engineer 1-2 days

    Load users, accounts, contacts, deals, then activities, logging every request against its source ID. Note which failures are transient (rate limits, timeouts) and which are structural (validation, missing parent).

  4. Verify relationships and roll-ups

    RevOps 1-2 days

    Confirm every deal sits on the right account with the right owner and stage, and that pipeline totals per account and per rep match Salesforce exactly. Roll-up mismatches almost always mean a relationship or currency defect upstream.

    Migration Validation Tool Diff the pilot batch against source before scaling up
  5. Measure throughput and project the full load

    Data engineer 1 day

    Record actual records-per-hour under Attio's API limits and extrapolate, remembering activity history usually dominates volume. If the projection exceeds your window, split the load or trim activity scope now.

  6. Let reps work the pilot data

    Sales leadership 2-3 days

    Put two or three reps in the sandbox against their own accounts. They spot missing context, wrong owners and unusable notes far faster than any reconciliation script, and their buy-in is what makes adoption work.

  7. Create a sandbox deployment plan

    Document the exact order of metadata deployment: Custom Objects → Fields → Record Types → Profiles → Permission Sets.

    Data Profiler Compare the loaded shape against the source profile
  8. Schedule sandbox validation runs

    Use a Full Copy sandbox to simulate the exact production load.

Salesforce → Attio specifics

Relationship integrity
Verify all People link to correct Companies. Confirm Deals associate to the right Companies and pipeline stages.
Edge case sampling
Check merged leads, Person Accounts, missing domains, archived owners.
Collect current test coverage
Run all local tests in Salesforce to capture current test coverage. Bulk data loads can sometimes trigger cascading failures in poorly written Apex; you need to know the org's baseline health before introducing millions of historical Zendesk records.
Execute test scripts
Have support managers log in and verify page layouts, data visibility, and list views.

Don't move on until

  • Relationships intact across the whole pilot slice
  • Pipeline roll-ups match source for the pilot accounts
  • Reps have worked pilot records and confirmed they are usable
05 Cutover Switch the revenue system with the pipeline intact. 0/7

Objective All in-scope CRM data live in Attio, integrations repointed, and reps selling on day one.

  1. Pre-load history ahead of the freeze

    Data engineer 5-10 days

    Load closed deals, historical activities and inactive accounts while Salesforce stays live. Only open pipeline and the final delta need to move inside the window.

  2. Publish the cutover runbook

    Project manager 1 day

    A timed sequence with owners and abort criteria: freeze, final export, delta load, integration switch, smoke test, go/no-go, rep enablement. Pick a window that avoids quarter-end and month-end close.

  3. Freeze Salesforce and take the final delta

    RevOps 2-4 hours

    Set Salesforce read-only and export everything changed since the pre-load. Reps updating deals during an unenforced freeze is the classic way to lose the most recent — and most valuable — pipeline changes.

    A rep who updates a deal in the old CRM during the freeze will lose that update permanently.

  4. Load the delta and reconcile the pipeline

    RevOps 2-6 hours

    Run the delta, then verify open pipeline value and count per rep against Salesforce before anything else. If the pipeline number is wrong on day one, reps stop trusting the system and never fully come back.

    Migration Validation Tool Confirm the final delta landed before you reopen
  5. Repoint every integration and verify with real records

    IT / integrations 4-8 hours

    Switch marketing automation, quoting, billing, enrichment, dialler and BI connections, then push a live record through each path. An unrepointed integration writing into the old CRM causes divergence that gets harder to reconcile every day.

    Two-way integrations left pointing at the old CRM will keep writing there. Disable them before you switch, not after.

    Cron Expression Builder Schedule the delta syncs that run through the freeze
  6. Go/no-go, then enable the reps

    Project sponsor 1-2 days

    Call the decision explicitly against the exit criteria. Run enablement on real data with their own accounts on screen, and keep Salesforce read-only rather than cancelled until validation closes.

  7. Map custom-object relationships

    Define exactly how Zendesk custom fields, SLA policies, and brand data map to Salesforce custom objects.

Salesforce → Attio specifics

Cutover model
Determine whether you need a big-bang migration, phased approach, or incremental sync.
Rollback assets
Plan source backups, rerunnable loaders, a source-to-target ID ledger, and a target delete strategy.
Rollback plan
Keep Salesforce org read-only for 2–4 weeks post-migration. If issues surface, the original data is untouched. Maintain source backups, rerunnable loaders, and a cutover ledger.
Deploy dependencies
Ensure all required picklist values and lookup relationships are active in the target org before the first data load.

Don't move on until

  • Historical load complete and reconciled before the freeze
  • All integrations repointed and verified end to end
  • Reps logged in with pipeline visible and correct
06 Validation Prove the revenue numbers tie out, then close the project. 0/9

Objective Reconciled data, forecast parity with pre-migration reporting, and signed acceptance.

  1. Reconcile every object

    Data engineer 2 days

    Compare counts and values across accounts, contacts, deals, activities and files, plus field-level spot checks on a random sample. Produce a single report suitable for audit and for finance.

    Migration Validation Tool Reconcile Salesforce and Attio record-for-record
  2. Tie the pipeline and forecast to baseline

    RevOps 2-3 days

    Rebuild forecast, pipeline coverage and win-rate reporting and compare to pre-migration figures. Every variance needs an explanation — most trace back to stage or currency mapping decisions made in Field Mapping.

    Stage-model changes will legitimately shift historical conversion rates. Restate the baseline rather than chasing the difference as a defect.

  3. Verify ownership, visibility and permissions

    RevOps 1-2 days

    Confirm every record has the right owner and that sharing rules, territories and role hierarchy give each rep exactly the visibility intended. Over-broad visibility in a CRM is a data-protection issue as much as a config one.

  4. Re-profile for field completeness

    Data engineer 1 day

    Compare loaded null rates against the source profile per field. A field that arrived empty while counts matched is the failure counts alone cannot detect.

    Data Profiler Prove field completeness held up through the load
  5. Test automation and integration write-back

    RevOps 2 days

    Fire every workflow, assignment rule, sequence and notification, and confirm each integration writes correctly in both directions. Automation is rebuilt rather than migrated, so it is unproven until observed.

  6. Sign off and schedule decommission

    Project sponsor 1 day

    Get written acceptance against the Discovery criteria, keep Salesforce read-only for 30-90 days with a final archive export taken, then diarise cancellation so the contract does not auto-renew.

  7. Rebuild automations

    Salesforce Flows and Process Builder rules don't transfer. Recreate critical automations as Attio workflows.

  8. Monitor for at least one full sales cycle

    Watch for data inconsistencies, missing relationships, and user-reported gaps.

  9. Verify relationships

    Run SOQL queries to validate that custom-object relationships (like Zendesk ticket metrics linked to Salesforce Cases) resolved correctly.

Salesforce → Attio specifics

Field-level validation
Spot-check critical fields — currency values, dates, picklist integrity. Test high-value fields, not random trivia.
Recreate reports
Start with the 5–10 reports your team actually uses, not every Salesforce dashboard.
Re-enable email sync
Configure sync settings to match against existing records only — don't let Attio auto-create new People from every email.
Train users
Salesforce power users need to unlearn Record Types, Page Layouts, and the Lead-to-Contact conversion model. Attio's paradigm is different; invest in training on the object/list split.
Decommission Salesforce
After parallel run validation, archive the Salesforce org. Don't delete it — keep it read-only for compliance and reference.

Don't move on until

  • Full reconciliation report complete across all objects
  • Forecast and pipeline reports tie to pre-migration baselines
  • Acceptance signed and Salesforce decommission scheduled

Risk matrix

Per-object risk for this pair. Plan extra validation around anything marked high.

ObjectRiskNotes
Accounts / Companies low Salesforce Accounts map directly to Attio Companies with straightforward field mapping, though Record Type distinctions must be converted to list memberships or status attributes.
Contacts / People low Contacts map to Attio People with email as the natural unique identifier, making deduplication and relationship linking relatively straightforward.
Leads medium Salesforce Leads have no separate equivalent in Attio and must be imported as People or Contacts, requiring decisions about converted vs. unconverted lead handling and potential duplicate creation.
Opportunities / Deals medium Opportunities map to Attio Deals but require three mandatory fields (deal name, owner, stage) and any missing value blocks the entire row during import, plus stage mappings must be manually configured.
Cases high Cases are not supported by Import2's Salesforce migration path and have no standard Attio object equivalent, requiring a custom object to be created and populated via API.
Activities (Tasks, Events, Emails) high Tasks can be imported via Import2 but Emails and Meetings are not supported, and Attio's CSV importer cannot import notes, making comprehensive activity history migration dependent on API-based custom work.
Notes and Attachments medium Notes and Attachments are supported by Import2, but Calls are converted to Notes, and file attachments require careful handling of size limits and association to the correct parent records.
Custom Objects high Salesforce custom objects must be recreated as Attio custom objects with manually mapped attributes, and neither CSV import nor Import2 handles custom object migration, requiring API-based loading.
Formula and Roll-Up Fields high Attio has no formula field or roll-up summary capability, so all computed values must be extracted as static snapshots from Salesforce and stored as plain attributes, losing their dynamic nature.
Campaigns medium Salesforce Campaigns and Campaign Members have no direct Attio equivalent and must be restructured as Attio lists or custom objects with relationship attributes linking to People and Company records.

The hard parts

What makes this specific migration difficult, beyond the mechanics.

No Direct Schema Equivalents

Salesforce formula fields, roll-up summaries, Person Accounts, and Apex triggers have no native counterpart in Attio, requiring computed values to be flattened to static data or rebuilt with Attio workflows and AI attributes.

Relationship Chain Preservation

Salesforce's lookup and master-detail relationships (Account → Contact → Opportunity) must be remapped to Attio's relationship attributes with correct dependency ordering, or the relational context that gives CRM data its value is severed.

Record Type Consolidation

Salesforce Accounts with multiple Record Types and Page Layouts must be collapsed into single Attio Company records differentiated by list memberships and status attributes, requiring non-trivial mapping decisions.

Activity and Case Gaps

Attio's CSV importer does not support notes, and the Import2 migration path does not migrate Cases, Emails, or Meetings, leaving significant activity history at risk of being lost.

Duplicate Record Risk

Import2 creates new records without upsert capability, so if Attio's email sync has already populated People and Company records, the migration will produce duplicates that must be manually reconciled.

API Rate Limit Management

An API-based migration must manage rate limits on both the Salesforce Bulk API 2.0 extraction side and the Attio REST API loading side, requiring robust error handling, retry logic, and pagination management.

What breaks

Known failure modes. Have a recovery plan for each before you cut over.

Person Accounts

Salesforce Person Accounts merge Account and Contact fields into a hybrid object. Attio has no equivalent. Split them: create a People record for the individual and optionally a Company record if business context exists. Map Person Account fields across both objects. Define explicit B2B vs. B2C rules — do not let the mapper guess. (help.salesforce.com)

Duplicate records

Salesforce orgs accumulate years of duplicate Leads and Contacts. Deduplicate before migration. Attio uses email (People) and domain (Companies) as unique identifiers — duplicates in these fields will silently merge or fail. Shared inboxes and alias emails need explicit merge rules. (docs.attio.com)

Multi-level relationships

A Task in Salesforce might be linked to an Opportunity, which is linked to a Contact, which is linked to an Account. Your script must resolve all three foreign keys and import in strict dependency order. The Attio API will reject a People record with a Company relationship reference if that Company doesn't yet exist.

Company matching surprises

Attio can auto-generate or match a Company from a Person's email domain. This is helpful for greenfield CRM use, but risky during migration when subsidiaries, agencies, or personal email domains are in the data. Control this behavior during import. (docs.attio.com)

Formula fields and roll-up summaries

These are computed server-side in Salesforce and have no Attio equivalent. Export the computed values as static data during extraction. Document what's lost. (help.salesforce.com)

File attachments

Attio's file upload endpoint is in beta with a 50 MB max file size. Very large binaries or complex version history need separate planning — consider exporting files to cloud storage (Google Drive, S3) and linking via URL attributes or Notes. (docs.attio.com)

Sandbox vs. Production

Always run test migrations against a Salesforce sandbox first. Salesforce's Data Export Service is not supported in sandboxes — use Data Loader or APIs for test runs. Sandbox API limits can differ from production. (help.salesforce.com)

Tools used in this playbook

All free, all run entirely in your browser — nothing is uploaded.

FAQ

Can I migrate Salesforce data to Attio using CSV?

Yes, but with major limitations. Attio's CSV importer is capped at 100,000 rows, 100 columns, and 100 MB per file, does not support importing notes, and handles one object type per import. It works for small, flat datasets under 5,000 records but breaks down for enterprise orgs with custom objects, multi-level relationships, or activity history.

What Salesforce objects does Import2 support for Attio migration?

Import2 supports importing Companies, Contacts (Leads imported as Contacts), Deals, Notes, Tasks, Attachments, and Calls (as Notes) into Attio. It does not support Cases, Emails, or Meetings. Import2 also cannot update existing records or import into Attio lists — it only creates new records.

What are Attio's API rate limits for migration?

Attio allows 100 read requests per second and 25 write requests per second, measured on a 10-second sliding window. There is no Bulk API — every record requires a single API call. At 25 writes/sec, importing 50,000 records takes a minimum of ~33 minutes. Exceeding limits returns HTTP 429 with a Retry-After header.

How do Salesforce Leads map to Attio?

Attio has no Lead object. Salesforce Leads should be imported as People records, with lead stage context preserved via a status attribute or list membership. Deduplicate Leads against existing Contacts by email before migration to prevent duplicates.

What Salesforce features have no Attio equivalent?

Attio has no equivalent for formula fields, roll-up summaries, Record Types, Page Layouts, Apex triggers, CPQ, complex approval chains, or field history tracking. Formula field values must be flattened to static data during extraction. Record Types can be approximated with select attributes or list membership.

Or skip all of this and let us handle it

Book a 30-minute call and we'll scope your migration in a single session.