CRM migration
Field-level mapping, validation, and rollback between Tofu and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Tofu
Source
Salesforce Sales Cloud
Destination
Compatibility
10 of 14
objects map 1:1 between Tofu and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
5-8 weeks
Overview
Moving from Tofu to Salesforce Sales Cloud is an ABM-layer-to-CRM migration: Tofu structures its data around Accounts, Campaigns, Playbooks, Personas, and Audiences, while Salesforce models the same business through Accounts, Contacts, Opportunities, and Campaigns. Tofu has not published a public REST API, so we rely on its native export formats and, where available, webhook payloads. We map Tofu Accounts directly to Salesforce Accounts, Campaigns to Campaigns, Personas to Contacts with persona attributes stored in custom fields, and Audiences to Account Lists and Campaign Member criteria. Playbooks — Tofu's multi-step, multi-channel outreach sequences with conditional branching — cannot migrate as automation code; we decompose each Playbook into individual Task records preserving channel, timing, and condition logic, and we deliver a written handoff document mapping each Playbook to a recommended Salesforce Flow or Sales Engagement cadence. Content Asset binaries (landing pages, PDFs, ad creative) are platform-hosted on Tofu's CDN; we export metadata and re-download assets at export time, then attach them to Salesforce Files linked to the relevant Account or Campaign. We do not migrate Tofu Playbooks, conditional branching logic, or persona scoring models as executable automation — these require rebuild by the customer's admin or a Salesforce partner post-migration.
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 Tofu 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.
Tofu
Account
Salesforce Sales Cloud
Account
1:1Tofu Accounts (target companies in the ABM model) map directly to Salesforce Account. We export Account Name, Industry, Account Tier (Target, Priority, Tier 1/2/3), Owner email, Website, and any custom enrichment fields as standard and custom Account fields. The Account's Tofu tier designation migrates to a custom picklist field tofu_account_tier__c for segmentation post-migration. Account is the first object imported so that all subsequent object imports have a resolved AccountId for lookup relationships.
Tofu
Campaign
Salesforce Sales Cloud
Campaign
1:1Tofu Campaigns (top-level containers for landing pages, email sequences, ads, and collateral) map to Salesforce Campaign. We export campaign name, status (Draft, Active, Paused, Completed), start and end dates, budget, owner, and associated Audience references. Campaign Type maps to Salesforce Campaign Type picklist values; if Tofu uses channel-specific type labels not in the Salesforce standard picklist, we create custom values during schema design.
Tofu
Persona
Salesforce Sales Cloud
Contact (custom persona fields)
1:manyTofu Personas define ICP profiles (industry, role, seniority, pain points, messaging tone) used to personalize content. There is no native Persona object in Salesforce; we map each Persona to a Contact with custom fields capturing persona attributes: Persona_Name__c, Target_Industry__c, Target_Role__c, Target_Seniority__c, Pain_Points__c (long text area), and Messaging_Tone__c. If multiple Personas share the same Contact email (indicating the same person appears in multiple ICP profiles), we merge into a single Contact and store all Persona associations in a junction object or multi-select picklist. Persona-to-Account affinity (which personas are most relevant to which target accounts) migrates to Account custom fields or a Campaign Member segmentation approach.
Tofu
Audience
Salesforce Sales Cloud
Campaign or Account List
1:1Tofu Audiences are filtered subsets of Accounts or Contacts used to trigger Playbook activation. We export audience membership as a list of Account IDs (for Account-based audiences) and Contact IDs (for Contact-based audiences) along with the filter criteria that defined the audience. Account-based audiences migrate to Salesforce Campaign with the Account IDs as CampaignAccount relations; Contact-based audiences migrate to Campaign with Contact IDs as CampaignMember records. The original filter criteria (industry equals X, employee count greater than Y, etc.) are stored in a custom text field audience_filter_criteria__c on the Campaign for documentation.
Tofu
Playbook
Salesforce Sales Cloud
Task (decomposed step sequence)
1:manyTofu Playbooks encode multi-step outreach sequences with conditional branching, channel rules (email, web, ads, social, documents, events), and timing delays. Salesforce has no native Playbook or cadence object; we decompose each Playbook into individual Salesforce Task records, one per step, linked to the parent Account or Contact. Step order, channel type, delay duration, and conditional trigger migrate to custom fields: step_order__c (number), channel__c (picklist: Email, Web, Ads, Social, Document, Event, Call), delay_days__c (number), and trigger_condition__c (text). Any branching logic that cannot be represented in a linear Task sequence is stored in a custom text field playbook_branching_logic__c on the first Task of the branch for manual configuration in Salesforce Flow post-migration.
Tofu
Content Asset
Salesforce Sales Cloud
ContentDocument (Salesforce Files)
1:1Tofu Content Assets (landing pages, PDFs, ad creative, one-pagers, sales collateral) are stored on Tofu's CDN. We export asset metadata (name, type, version, created date, associated Campaign and Account IDs) and re-download binary files from Tofu's asset URLs at export time. Each binary uploads to Salesforce as a ContentDocument with a corresponding ContentVersion. We link each ContentDocument to the relevant Account or Campaign via ContentDocumentLink. If Tofu rotates asset URLs after export, inaccessible binaries are flagged in the pre-flight URL validation step before the final sync run.
Tofu
Campaign Engagement (historical activity)
Salesforce Sales Cloud
Task and Event
1:1Tofu records historical engagement signals — opens, clicks, page visits, ad interactions, form submissions — associated with a Campaign and an Account or Contact. These migrate to Salesforce Task and Event records linked to the relevant Account and Contact. Engagement type (Email Open, Email Click, Landing Page Visit, Ad Interaction, Form Submit) maps to a custom picklist engagement_type__c on Task; timestamp, source channel, and asset reference map to corresponding fields. This data is used to populate Salesforce Campaign Influence reports and the Contact activity timeline.
Tofu
Custom Property (on Account)
Salesforce Sales Cloud
Account custom field
1:1Tofu supports custom fields on Accounts. During pre-migration schema scan, we detect all non-standard Account properties and map them to equivalent Salesforce custom fields on Account. Field type mapping: text to Text(255), long text to Long Text Area, number to Number, date to Date, picklist to Picklist. If Tofu's custom field uses a value set not present in Salesforce, we create a matching custom picklist with those values before migration.
Tofu
Custom Property (on Campaign)
Salesforce Sales Cloud
Campaign custom field
1:1Tofu supports custom fields on Campaigns as well. Any non-standard Campaign properties detected during schema scan map to Salesforce Campaign custom fields. These include campaign-specific KPIs, UTM parameters, and targeting criteria that Tofu tracks outside the standard Campaign object fields.
Tofu
User / Owner
Salesforce Sales Cloud
User
1:1Tofu Users are assigned as Campaign owners and Playbook creators. We export user email addresses, names, and role assignments and map them to Salesforce User records by email match. Any Tofu User without a matching Salesforce User is placed in a reconciliation queue for the customer's admin to provision before record import resumes. Inactive Tofu users map to inactive Salesforce Users to preserve historical assignment data without creating active seat licenses.
Tofu
Account-Campaign association
Salesforce Sales Cloud
CampaignAccount
1:1Tofu's targeting model links Accounts to Campaigns directly. This many-to-many association migrates to the Salesforce CampaignAccount junction object, which associates an Account with a Campaign and stores a CampaignAccountStatus value (Responded, Sent, Total Conversions, etc.). We use the Account ID and Campaign ID as the join key.
Tofu
Playbook Audience trigger
Salesforce Sales Cloud
Campaign Member Status
lossyIn Tofu, an Audience triggers a Playbook. When migrating to Salesforce, the Campaign that represents the Audience becomes the triggering entity for sales outreach. We document the mapping between each Playbook and its target Campaign in the Playbook handoff document, and recommend that the customer's admin use Salesforce Flow or Sales Engagement (High Velocity Sales) to create Campaign-based outreach triggers. This is a configuration handoff item, not an automated data migration.
Tofu
Firmographic enrichment data
Salesforce Sales Cloud
Account custom fields
1:1Tofu enriches Accounts with firmographic and technographic data (company size, revenue, tech stack, intent signals from 75+ sources). If this enrichment data is stored in Tofu custom fields on the Account object, we migrate it to Salesforce Account custom fields. If enrichment is sourced from Tofu's internal intelligence layer rather than stored fields, we flag the enrichment gap in the handoff document and recommend a Salesforce Data Cloud enrichment or third-party intent data integration (6sense, Bombora) as the post-migration replacement.
Tofu
Persona scoring model
Salesforce Sales Cloud
Contact custom field (documentation only)
lossyTofu may apply persona-based scoring to Accounts or Contacts to rank engagement fit. Salesforce does not have a native persona scoring model; we export any scoring values as custom numeric fields on Contact (persona_score__c, engagement_score__c) and store the scoring methodology as a documented note in the handoff document. The customer's admin or a Salesforce partner rebuilds scoring logic using Salesforce Flow, Assignment Rules, or a dedicated scoring tool post-migration.
| Tofu | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Account | Account1:1 | Fully supported | |
| Campaign | Campaign1:1 | Fully supported | |
| Persona | Contact (custom persona fields)1:many | Fully supported | |
| Audience | Campaign or Account List1:1 | Fully supported | |
| Playbook | Task (decomposed step sequence)1:many | Fully supported | |
| Content Asset | ContentDocument (Salesforce Files)1:1 | Fully supported | |
| Campaign Engagement (historical activity) | Task and Event1:1 | Fully supported | |
| Custom Property (on Account) | Account custom field1:1 | Fully supported | |
| Custom Property (on Campaign) | Campaign custom field1:1 | Fully supported | |
| User / Owner | User1:1 | Fully supported | |
| Account-Campaign association | CampaignAccount1:1 | Fully supported | |
| Playbook Audience trigger | Campaign Member Statuslossy | Fully supported | |
| Firmographic enrichment data | Account custom fields1:1 | Fully supported | |
| Persona scoring model | Contact custom field (documentation only)lossy | 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.
Tofu gotchas
No public API documentation or published rate limits
Content Assets are platform-hosted binaries not separately exported
Playbook branching logic maps imperfectly to most destination CRMs
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 Tofu export feasibility assessment
We audit the Tofu instance across Accounts, Campaigns, Playbooks, Personas, Audiences, and Content Assets. We confirm the available export formats (CSV bundle, JSON export, webhook event log) and test export capability directly in the customer's Tofu instance during the discovery call. We assess data volumes for each object, identify any large binary asset collections requiring CDN re-download, and document the Tofu user roles and permissions needed to generate exports. We pair this with a Salesforce edition evaluation (Professional $80/user for standard CRM migrations; Enterprise $165/user if custom objects, record-triggered Flow, or advanced reporting types are required) and produce a written scope document with confirmed export capabilities.
Schema design and ABM-to-CRM model mapping
We design the Salesforce destination schema based on the Tofu-to-Salesforce object mapping: we provision custom fields on Account for firmographic enrichment and Tofu account tier; we provision custom fields on Contact for persona attributes; we configure Campaign Record Types to match Tofu's campaign channel classifications; we create custom fields on Task for Playbook step decomposition (step_order__c, channel__c, delay_days__c, trigger_condition__c, playbook_branching_logic__c); and we create custom fields on Campaign for audience filter criteria (audience_filter_criteria__c). All schema is deployed to a Salesforce Sandbox via metadata API before any data loads begin.
Sandbox migration and reconciliation
We run a full migration into a Salesforce Sandbox using production-like data volume from Tofu's export bundles. The customer's RevOps lead reconciles record counts (Accounts in, Contacts in, Campaigns in, Playbook Tasks in, ContentDocuments in), spot-checks 25-50 records against the Tofu source for field-level accuracy, and validates that Account-to-Contact lookup relationships resolved correctly. Any mapping corrections and field type adjustments happen in this sandbox phase. We do not proceed to production migration until the sandbox migration is signed off.
Tofu export execution and asset snapshot
We execute the Tofu export with the customer's platform access, generating CSV or JSON bundles for Accounts, Campaigns, Playbooks, Personas, Audiences, and Content Asset metadata. For Content Assets, we run a bulk URL re-download against Tofu's CDN, validating each URL returns a 200 response before including the binary in the migration payload. Any URLs that fail validation are flagged and escalated to the customer for resolution (re-upload to a shared drive, manual re-export from Tofu, or exclusion from scope). We package all export files and asset binaries into the migration staging environment.
Production migration in dependency order
We run production migration in record-dependency order: Salesforce Users (provisioned, validated), Accounts (from Tofu Accounts with firmographic custom fields), Contacts (from Tofu Personas with persona custom fields, AccountId resolved), Campaigns (from Tofu Campaigns), CampaignAccount junction records (Account-to-Campaign associations), Campaign Members (from Tofu Audiences), Playbook Tasks (decomposed step sequences), ContentDocuments (from re-downloaded Tofu asset binaries), and Engagement history Tasks (from Tofu engagement signals). We use the Salesforce Bulk API 2.0 for high-volume loads with batch chunking, parent-record lookup resolution (WhoId, WhatId, AccountId), and exponential backoff on API limit responses. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and Playbook rebuild handoff
We freeze Tofu as the system of record during cutover, run a final delta migration of any records modified during the migration window, then enable Salesforce as the live system. We deliver the Playbook handoff document: for each Playbook, it lists the decomposed Task records, the preserved branching logic in playbook_branching_logic__c, and a recommended Salesforce Flow or Sales Engagement cadence replacement. We support a one-week hypercare window for reconciliation issues. We do not rebuild Playbooks, conditional flows, or persona scoring models as Salesforce Flow or Sales Engagement sequences inside the migration scope; that work is a separate engagement for the customer's admin or a Salesforce partner.
Platform deep dives
Tofu
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 Tofu 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
Tofu: Not publicly documented — typical SaaS limits assumed and confirmed during scoping.
Data volume sensitivity
Tofu 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 Tofu to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Tofu 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 Tofu
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.