CRM migration
Field-level mapping, validation, and rollback between Phreesia and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Phreesia
Source
Salesforce Sales Cloud
Destination
Compatibility
9 of 10
objects map 1:1 between Phreesia and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
48–72 hours
Overview
Phreesia is a patient intake and engagement platform used by health systems, hospitals, and specialty practices to digitize registration, capture clinical screenings, verify insurance eligibility, and collect payments at the point of care. It does not function as a CRM — it has no native Opportunity, Account hierarchy, or sales-pipeline object model. Salesforce Sales Cloud, by contrast, organizes data around the CRM paradigm: Account, Contact, Lead, Opportunity, Task, and Event objects with record types, page layouts, sharing rules, and a pick-list stage model for opportunities. Migrating from Phreesia to Salesforce Sales Cloud means translating Phreesia's patient-intake data model into Salesforce's contact-centric CRM model. Every Phreesia patient record becomes a Salesforce Contact (or Lead, depending on encounter status). Phreesia appointment records become Salesforce Tasks or Events with custom fields capturing appointment type, provider name, and location. Phreesia intake form responses — which can run to dozens of custom fields per patient — map to Salesforce custom fields on the Contact object, prefixed with Phreesia intake metadata. Insurance carrier and group-number data migrates to Account and Contact custom fields. Phreesia consent signatures migrate as Salesforce Files attached to the Contact record. Phreesia clinical screening results map to a custom object (Phreesia_Screening__c) with fields matching the screening type, result value, and collection date. Phreesia does not expose a public REST or Bulk API for customer-driven data export — FlitStack accesses Phreesia's managed data-export endpoints under the customer's authenticated session, transforms the output, and loads it into Salesforce via the Bulk API to handle high-volume patient-record sets within Salesforce's daily API allocation limits. A 24–48 hour delta-pickup window captures any appointments scheduled or intake forms completed during the cutover window so Salesforce reflects Phreesia's final state at go-live.
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 Phreesia 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.
Phreesia
Patient
Salesforce Sales Cloud
Contact
1:1Phreesia Patient maps 1:1 to Salesforce Contact. Every demographic field (name, date of birth, phone, email, address) maps to the Salesforce Contact standard fields. A custom field, Phreesia_Patient_ID__c, stores the Phreesia patient identifier for traceability and delta-run de-duplication. Patients with no email address are loaded using the Phreesia patient ID as an External ID on the Contact record.
Phreesia
Patient
Salesforce Sales Cloud
Lead
1:manyPhreesia Patient records where the patient has never had a completed appointment (encounter status = 'prospective') route to Salesforce Lead. Those with at least one completed appointment route to Contact. This split is determined by scanning the Phreesia Appointment object's status field during migration planning. The Lead Source field is set to 'Phreesia Intake' for all split records.
Phreesia
Appointment
Salesforce Sales Cloud
Task
1:1Phreesia Appointment maps to Salesforce Task with Task.Type = 'Patient Visit', Task.Status = 'Completed' (for historical) or 'Not Started' (for future appointments). Custom fields Appointment_Type__c (Visit, Follow-up, New Patient), Provider_Name__c, Location__c, and Appointment_Date_Time__c carry Phreesia's structured appointment metadata that Salesforce's standard Task fields do not cover.
Phreesia
Appointment
Salesforce Sales Cloud
Event
1:1Phreesia Appointments that have a start time and end time are alternatively mapped to Salesforce Event when the migration plan specifies scheduling data as a calendar event rather than a task. Event.Subject carries the appointment type, Event.StartDateTime and EndDateTime are set from Phreesia's appointment start and end timestamps, and Event.WhatId links to the Contact record.
Phreesia
Insurance Record
Salesforce Sales Cloud
Account + Contact (custom fields)
1:1Phreesia Insurance records store carrier name, group number, member ID, and eligibility status. The insurance carrier creates or matches a Salesforce Account record (type = 'Insurance Carrier'). The patient's group number and member ID are stored in custom fields on the Contact record: Insurance_Carrier__c (lookup to Account), Insurance_Group_Number__c, and Insurance_Member_ID__c. Eligibility status (active/inactive/pending) maps to Insurance_Eligibility_Status__c.
Phreesia
Consent Form Record
Salesforce Sales Cloud
Contact (File attachment + custom fields)
1:1Phreesia signed consent forms are exported as PDF or image files and re-uploaded as Salesforce Files attached to the Contact record. The consent form type (HIPAA, Financial Policy, Treatment Consent), signed timestamp, and patient IP address at signing are preserved in custom fields on Contact: Consent_Type__c, Consent_Signed_Date__c, and Consent_Signed_IP__c. This ensures audit-readiness without rebuilding a consent-management object.
Phreesia
Clinical Screening Record
Salesforce Sales Cloud
Custom Object: Phreesia_Screening__c
1:1Phreesia clinical screening records (PHQ-9, social determinants of health, fall risk, pain scale) have no Salesforce standard equivalent. We create a custom object, Phreesia_Screening__c, with fields: Screening_Type__c (picklist), Result_Value__c (text), Collected_Date__c (date), Provider__c (text), and a lookup to Contact (Contact__c). The custom object is marked 'Allow Reports' for compliance and outcome tracking in Salesforce reports.
Phreesia
Payment Record
Salesforce Sales Cloud
Custom Object: Phreesia_Payment__c
1:1Phreesia payment records (amount, payment method, status, card on file) map to a custom object Phreesia_Payment__c with fields Amount__c, Payment_Method__c (Cash, Card, Plan), Payment_Status__c (Collected, Pending, Refunded), Payment_Date__c, and a lookup to Contact__c. The Opportunity object does not model point-of-service payment records in a way that reflects Phreesia's payment model, so a custom object is the correct target.
Phreesia
Intake Form Field (per form)
Salesforce Sales Cloud
Contact (custom fields)
1:1Phreesia intake forms create dozens of custom fields per patient (allergy responses, medication lists, social history, emergency contact). Each Phreesia intake form field maps to a Salesforce custom field on Contact (e.g., Allergy_Penicillin__c = 'Yes', Medication_List__c = 'Metformin 500mg'). Fields with pick-list values in Phreesia are created as pick-list fields in Salesforce. Free-text fields are created as long-text-area fields up to 32,768 characters.
Phreesia
Facility / Location
Salesforce Sales Cloud
Account (type = 'Health System Site')
1:1Phreesia locations or facilities map to Salesforce Account records (RecordType = 'Health System Site' or standard Account with custom site-type field). All Contact records are associated to their facility via AccountId lookup. This enables cross-facility reporting by Account in Salesforce. Multi-site organizations receive a parent Account (the health system) with child Account records per Phreesia location.
| Phreesia | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Patient | Contact1:1 | Fully supported | |
| Patient | Lead1:many | Fully supported | |
| Appointment | Task1:1 | Fully supported | |
| Appointment | Event1:1 | Fully supported | |
| Insurance Record | Account + Contact (custom fields)1:1 | Fully supported | |
| Consent Form Record | Contact (File attachment + custom fields)1:1 | Fully supported | |
| Clinical Screening Record | Custom Object: Phreesia_Screening__c1:1 | Fully supported | |
| Payment Record | Custom Object: Phreesia_Payment__c1:1 | Fully supported | |
| Intake Form Field (per form) | Contact (custom fields)1:1 | Fully supported | |
| Facility / Location | Account (type = 'Health System Site')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.
Phreesia gotchas
PM/EHR integration configuration must be validated before patient data import
Custom intake forms lack a standard schema export
Phreesia is an intake platform, not a longitudinal patient database
Patient secure authentication links are time-limited and non-migratable
Payment plan configurations require manual reconciliation
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
Audit Phreesia environment and extract schema
FlitStack logs into the customer's Phreesia environment under the customer's own credentials and runs a discovery export covering Patient, Appointment, Insurance, Consent, and clinical screening records. We parse the export schema to identify every intake form field per form type. For organizations where Phreesia API access is restricted, we coordinate with Phreesia support to generate a managed data export file. We also capture the Phreesia facility/location list and map each to a Salesforce Account. The discovery output is a Phreesia-to-Salesforce field-mapping spreadsheet reviewed and approved by the customer's Salesforce admin before any data moves.
Set up Salesforce custom fields and custom objects
Before data loads, FlitStack creates all required Salesforce custom fields and custom objects identified during discovery: Phreesia_Patient__c checkbox, all intake-form custom fields on Contact, Appointment_Type__c and Provider_Name__c on Task, Phreesia_Screening__c custom object, and Phreesia_Payment__c custom object. We use Salesforce's Bulk API metadata operations to create fields in bulk. If the customer's org uses Salesforce Field Audit Trail or Field History Tracking on Contact, we account for historical field retention policies in the field creation plan. The Salesforce admin reviews and approves the field setup plan before FlitStack commits any schema changes.
Load accounts, then contacts/leads, then tasks/events
Salesforce requires foreign-key resolution in a specific order: Account records must exist before Contact records (for AccountId), and Contact records must exist before Task records (for WhatId or WhoId). We sequence the migration as: (1) Phreesia Facilities → Salesforce Accounts, (2) Phreesia Patients → Salesforce Contacts/Leads with Phreesia_Patient_ID__c as External ID, (3) Phreesia Insurance Carriers → Salesforce Accounts with type = 'Insurance Carrier', (4) Phreesia Appointments → Salesforce Tasks linked to Contact records, (5) Phreesia Clinical Screenings → Phreesia_Screening__c records linked to Contact. This ordering ensures that Contact.AccountId resolves correctly and that Task and custom-object records link to valid Contact IDs on first load rather than failing with a 'invalid lookup' error.
Run a sample migration with field-level reconciliation
A representative slice of 200–500 Phreesia records — covering at least 5 different intake form field combinations, 3 appointment types, 2 facilities, and 1 clinical screening record — migrates first into the customer's Salesforce sandbox or a designated pilot org. FlitStack generates a field-level diff comparing source values in Phreesia against loaded values in Salesforce, so the customer can verify that intake form fields, appointment metadata, and screening results all landed correctly. This sample run surfaces any missing pick-list values, truncated long-text fields, or incorrectly resolved AccountId lookups before the full production run commits.
Execute full migration with delta-pickup window
The full migration runs against the customer's Salesforce production org via Bulk API to maximize throughput within Salesforce's daily API allocation limits (Enterprise: 100,000 + 1,000 per user license). A delta-pickup window of 24–48 hours opens at the start of the migration run: any Phreesia patient records, appointments, or intake form submissions created or modified during the cutover window are captured and loaded as a final delta batch after the main run completes. Audit logs record every operation. If reconciliation fails — record counts do not match, or field-level spot checks reveal unexpected values — one-click rollback reverts the Salesforce org to its pre-migration state. Rollback uses Salesforce's Recycle Bin bulk-empty operation and a pre-migration snapshot.
Platform deep dives
Phreesia
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 Phreesia 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
Phreesia: Not publicly documented.
Data volume sensitivity
Phreesia 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 Phreesia to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Phreesia 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 Phreesia
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.