CRM migration

Migrate from Phreesia to Salesforce Sales Cloud

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 logo

Phreesia

Source

Salesforce Sales Cloud

Destination

Salesforce Sales Cloud logo

Compatibility

90%

9 of 10

objects map 1:1 between Phreesia and Salesforce Sales Cloud.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Phreesia logo

Phreesia

What's pushing teams away

  • Workflow automation beyond intake is limited; recall campaigns, treatment plan follow-ups, and marketing sequences require separate tools, frustrating practices seeking a unified patient engagement platform.
  • Integration promises sometimes do not match actual capability; organizations report that promised data write-back to their PM/EHR did not function as sold during implementation.
  • Frequent user interface updates disrupt staff workflows and require retraining, with some reviewers describing the platform as difficult to navigate after changes.
  • Patient-facing complexity creates friction for older or less technical patients, who struggle with self-service check-in and require staff assistance that partially negates efficiency gains.
  • Pricing is opaque and requires sales consultation, making budget planning difficult and leading some organizations to seek alternatives with published pricing tiers.

Choosing

Salesforce Sales Cloud logo

Salesforce Sales Cloud

What's pulling them in

  • The AppExchange marketplace with 5,000+ prebuilt apps gives enterprises integrations for nearly every business workflow without custom development.
  • Native Einstein AI for lead scoring, opportunity insights, and predictive forecasting adds intelligence without a separate platform purchase.
  • Territory management, multi-currency support, and advanced forecasting satisfy the needs of complex B2B sales organizations with structured revenue teams.
  • Slack, Tableau, and CPQ are deeply integrated into the core platform, keeping the sales stack unified for teams already in the Salesforce ecosystem.
  • Organizations with a large, established Salesforce implementation choose it because switching costs — integrations, custom code, trained admins — are prohibitive.

Object mapping

How Phreesia objects map to Salesforce Sales Cloud

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

maps to

Salesforce Sales Cloud

Contact

1:1
Fully supported

Phreesia 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

maps to

Salesforce Sales Cloud

Lead

1:many
Fully supported

Phreesia 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

maps to

Salesforce Sales Cloud

Task

1:1
Fully supported

Phreesia 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

maps to

Salesforce Sales Cloud

Event

1:1
Fully supported

Phreesia 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

maps to

Salesforce Sales Cloud

Account + Contact (custom fields)

1:1
Fully supported

Phreesia 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

maps to

Salesforce Sales Cloud

Contact (File attachment + custom fields)

1:1
Fully supported

Phreesia 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

maps to

Salesforce Sales Cloud

Custom Object: Phreesia_Screening__c

1:1
Fully supported

Phreesia 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

maps to

Salesforce Sales Cloud

Custom Object: Phreesia_Payment__c

1:1
Fully supported

Phreesia 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)

maps to

Salesforce Sales Cloud

Contact (custom fields)

1:1
Fully supported

Phreesia 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

maps to

Salesforce Sales Cloud

Account (type = 'Health System Site')

1:1
Fully supported

Phreesia 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.

Gotchas + challenges

What specifically takes care here

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 logo

Phreesia gotchas

High

PM/EHR integration configuration must be validated before patient data import

High

Custom intake forms lack a standard schema export

Medium

Phreesia is an intake platform, not a longitudinal patient database

Low

Patient secure authentication links are time-limited and non-migratable

Medium

Payment plan configurations require manual reconciliation

Salesforce Sales Cloud logo

Salesforce Sales Cloud gotchas

High

Workflow Rules and Process Builder are retired

High

Bulk API batch quota exhaustion during large imports

Medium

Storage overage billing is non-obvious

Medium

Account-Contact many-to-many relationship mapping

Low

Territory and team member import ordering dependencies

Pair-specific challenges

  • Phreesia has no public REST or Bulk API — data export depends on managed export endpoints scoped to the customer's own Phreesia environment

    Phreesia does not expose a documented public API for customer-driven data extraction. FlitStack accesses Phreesia's authenticated data-export endpoints under the customer's own Phreesia session credentials. Export speed is constrained by Phreesia's internal export job processing — large patient-record sets (200,000+) require staged export runs rather than a single bulk pull. If Phreesia has restricted API access for the customer's tier or contract, migration planning must account for manual export preparation or Phreesia-assisted export requests before the migration run. We surface any API access constraints during the discovery phase before committing to a timeline.

  • Phreesia intake form fields are not exposed as named API fields — each organization's form field schema must be extracted and mapped individually

    Phreesia intake forms are configured per organization, and form field definitions are not available via a standard API field listing. FlitStack extracts the intake form field schema by parsing Phreesia's export output headers and cross-referencing them against the organization's intake form configuration documentation. If the organization cannot provide intake form documentation, we extract a representative patient record with all form fields populated and infer the schema from the populated field names. This manual schema-introspection step adds planning time — organizations with more than 50 intake form fields across multiple form types should plan for an additional 1–2 days of schema mapping before the migration run.

  • Salesforce Contact does not have a native patient-type flag — patients and non-patient contacts share the same object

    Salesforce's standard Contact object does not have a native 'patient' versus 'business contact' distinction. Healthcare organizations migrating from Phreesia use the Contact object for all patient records, which means Salesforce reports and list views cannot filter 'patients' without a custom flag. We create a Phreesia_Patient__c checkbox field on Contact set to true for every Phreesia patient record. This flag enables report filters, list views, and Flow triggers that need to act only on patient contacts. Organizations that also use Salesforce for non-patient business contacts (vendor contacts, referring physician contacts) should plan for data governance rules around the patient flag to avoid accidental marketing touches to patient contacts.

  • Phreesia appointment history must be loaded as Salesforce Tasks or Events — but Salesforce Tasks cap at 50 custom fields per object

    Salesforce Task objects support a maximum of 100 custom fields total, but the effective limit in most orgs is lower depending on storage and field-type mix. Phreesia appointment records can carry 10–15 metadata fields (type, provider, location, status, duration, chart number, referring provider, visit cost, copay amount, insurance claim status). If your Phreesia appointment schema has more than 12 metadata fields, some lower-priority fields must be consolidated into a single long-text-area field (e.g., Appointment_Metadata__c) storing JSON-serialized remaining fields rather than individual custom fields. We audit the appointment field count during discovery and flag this consolidation requirement before the migration run.

  • Clinical screening data stored as Phreesia structured records requires a custom object — standard Salesforce objects cannot model PHQ-9 or SDOH results

    Phreesia's clinical screening records (PHQ-9 depression screening, social determinants of health surveys, fall-risk assessments) are structured data records with typed result fields. Salesforce's standard Case, Task, and Event objects cannot model these screening results in a way that preserves the screening type, result score, and clinical thresholds. We create a Phreesia_Screening__c custom object with a Contact__c lookup, Screening_Type__c pick-list, Result_Value__c, and Collected_Date__c. However, Salesforce's custom-object creation requires the organization's Salesforce admin to approve the custom object in Setup or grant FlitStack an Integration User license with custom-object create permissions. If your Salesforce org has a locked-down Setup profile policy, custom-object creation must be pre-approved before the migration run begins.

Migration approach

Six steps for a successful Phreesia to Salesforce Sales Cloud data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

Context on both ends of the pair

Phreesia logo

Phreesia

Source

Strengths

  • Automated insurance eligibility and benefits verification before the patient arrives reduces claim denials and front-desk work.
  • Bidirectional integrations with major PM and EHR systems keep demographics, consents, and payments synchronized automatically.
  • Patient self-service check-in saves clinical staff over five minutes per visit on average across Phreesia's network.
  • Electronic consent capture with logic-driven prompting reaches 99% automatic signature or re-signature completion rates.
  • In-house merchant processing with flat-rate pricing consolidates payment infrastructure within the same platform.

Weaknesses

  • Workflow automation is limited to intake; recall campaigns, treatment follow-up, and marketing sequences require separate systems, frustrating practices seeking unified engagement tooling.
  • API documentation is not publicly accessible, making programmatic data extraction a coordination effort with Phreesia's implementation team rather than a self-service export.
  • Integration capabilities and actual data write-back behavior vary between PM/EHR systems, with some organizations reporting promised functionality did not work as described.
  • Custom intake forms and screening logic are organization-specific, making pre-migration field mapping a manual, per-customer effort with no standardized schema export.
Salesforce Sales Cloud logo

Salesforce Sales Cloud

Destination

Strengths

  • Largest enterprise app ecosystem in CRM with 5,000+ AppExchange integrations covering nearly every vertical workflow.
  • Native Einstein AI delivers lead scoring, opportunity insights, and predictive forecasting without a third-party layer.
  • Advanced territory management, multi-currency, and flexible forecasting satisfy complex B2B revenue structures.
  • Deep platform extensibility: Custom Objects, Apex, Flow, and the Metadata API allow full schema customization.
  • Well-documented REST API, Bulk API, and Composite API with published rate limits for programmatic migration.

Weaknesses

  • Pricing model is layered and opaque in practice: per-seat fees plus storage overages, add-on subscriptions, and annual uplifts compound to 30–40% above sticker price.
  • Workflow Rules and Process Builder are deprecated, forcing all orgs onto Salesforce Flow — a migration task that catches many teams by surprise.
  • Steep administrative complexity: meaningful configuration requires a dedicated Salesforce admin or consultant.
  • API rate limits are edition-gated (100k/day base for Enterprise) and easily exhausted by large historical imports without throttling.
  • Data export is exportable via Data Loader but preserving relationship integrity across 30+ objects requires careful ETL sequencing.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Phreesia and Salesforce Sales Cloud.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Phreesia: Not publicly documented.

  • Data volume sensitivity

    B

    Phreesia doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Phreesia to Salesforce Sales Cloud migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Phreesia to Salesforce Sales Cloud data migrations

Answers to the questions buyers ask most during Phreesia to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most Phreesia-to-Salesforce migrations complete in 48–72 hours for environments with fewer than 50,000 patient records. Larger setups with 200,000+ patient records, 50+ intake form fields, and multi-facility Account hierarchies extend to 5–10 days. The longest planning step is intake form schema extraction and Salesforce custom field creation — these must complete before the first data load runs. Phreesia API export constraints, if present for the customer's tier, add 1–3 days to the discovery phase.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Phreesia.
Land in Salesforce Sales Cloud, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day