CRM migration
Field-level mapping, validation, and rollback between Phreesia and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
Phreesia
Source
Freshsales
Destination
Compatibility
11 of 12
objects map 1:1 between Phreesia and Freshsales.
Complexity
BStandard
Timeline
5–10 business days
Overview
Phreesia is a patient-intake and engagement platform used by healthcare practices for registration, insurance verification, consent collection, and payments. It is not a CRM — it does not natively store leads, pipelines, or deal records. Freshsales is a sales CRM with a fixed object model: Leads, Contacts, Accounts, Deals, Tasks, and Events. There is no direct object-to-object correspondence between the two platforms, so the migration scope is narrower than a typical CRM-to-CRM project. We extract patient demographic records, appointment data, insurance fields, and consent records from Phreesia, then map them into Freshsales Contact and custom fields. Intake forms, clinical screenings, and logic-driven questionnaires cannot map to any native Freshsales object — they require manual rebuild using Freshsales web forms or a third-party forms tool. Workflows, payment automation, and EHR integrations built in Phreesia do not transfer. Freshsales imposes plan-level restrictions on custom fields: the Growth plan ($9/user/mo) supports basic text, number, and date fields; advanced field types and custom objects require Pro ($39) or Enterprise ($59). We use the Freshsales CRM API for record ingestion, respecting their rate limits of 700 API requests per minute, and run a delta-pickup window to capture any Phreesia records modified during cutover.
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 Freshsales, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Phreesia
Patient Record (Demographics)
Freshsales
Contact
1:1Patient first name, last name, email, phone, address, and date of birth map directly to Freshsales Contact standard fields. Email serves as the unique identifier for de-duplication across the migration. Phone number maps to Freshsales Contact.phone, and mobile phone maps to Contact.mobile. The composite address object on Contact receives the street, city, state, zip, and country fields from Phreesia. Date of birth maps to Contact.date_of_birth. This direct field mapping preserves all core demographic data without transformation.
Phreesia
Patient Demographics (unconverted)
Freshsales
Lead
1:manyPhreesia patient records are undifferentiated — every record is a patient regardless of appointment status. We apply a lifecycle routing rule: patients with at least one completed appointment in Phreesia migrate to Freshsales Contact; those with only scheduled but not-yet-completed appointments route to Freshsales Lead. This split is determined by querying Phreesia appointment records for each patient during migration and applying the routing rule consistently.
Phreesia
Insurance Record (Payer + Policy)
Freshsales
Custom Fields on Contact
1:1Freshsales has no native insurance object. Payer name, policy number, group ID, and coverage status migrate to custom text fields on Contact. Insurance type (commercial, Medicare, Medicaid) maps to a custom dropdown. These fields require Freshsales Pro or Enterprise for advanced dropdown types.
Phreesia
Appointment / Visit Record
Freshsales
Deal
1:1Each completed appointment becomes a Freshsales Deal. The Deal name uses the appointment date plus provider name. If the appointment generated a billing amount, that value maps to Deal.amount. Otherwise, amount is set to zero and a custom Appointment_Type__c field records the visit type. Pipeline and stage are set to default values unless the organization defines custom pipelines.
Phreesia
Appointment / Visit Record
Freshsales
Task
1:1Each completed appointment in Phreesia generates a Freshsales Task record for follow-up tracking purposes. The Task captures appointment date, provider name, and appointment status. Tasks are linked to the corresponding Contact via the foreign key relationship, preserving a complete appointment history within Freshsales even for visits that generated no billing amount and therefore have no associated Deal record.
Phreesia
Patient Consent Record
Freshsales
Note on Contact
1:1Consent form completion records including form name, signed date, and consent type are written as Freshsales Notes attached to the Contact record. The consent form name becomes the Note title, the signed date maps to Note.created_at, and the full consent text content is stored in the Note body field. This approach preserves the complete consent audit trail without requiring custom objects or advanced field types on any Freshsales plan tier.
Phreesia
Intake Form Configuration
Freshsales
No equivalent
1:1Phreesia's logic-driven intake questionnaires (conditional questions, clinical screening logic, custom response validation) have no Freshsales equivalent. These must be rebuilt manually using Freshsales web forms, Typeform, or a similar tool. We document the Phreesia form structure for the rebuild team.
Phreesia
Payment / Card-on-File Record
Freshsales
No equivalent
1:1Phreesia stores card-on-file tokens and payment history for time-of-service collection. Freshsales has no native payment or billing object. Payment tokens do not migrate. We document the payment method on file as a Note for reference; actual payment processing stays in Phreesia or moves to a dedicated payment platform.
Phreesia
Clinical Screening Result
Freshsales
Custom Fields on Contact
1:1Patient-reported screening results (PHQ-9, tobacco use, social determinants) collected during Phreesia intake migrate to custom fields on Contact. Field types depend on the result format: numeric scores use Number fields; yes/no outcomes use Checkbox; categorical results use Dropdown. Growth plan users may need to upgrade to Pro for advanced field types.
Phreesia
Provider / Staff Record
Freshsales
User (Freshsales Owner)
1:1Phreesia provider and staff records resolve by email match to Freshsales User accounts. Unmatched providers are flagged before migration — the team either provisions Freshsales users first or assigns records to a fallback owner. Provider specialty maps to a custom User field.
Phreesia
EHR Integration Settings
Freshsales
No equivalent
1:1Phreesia's bidirectional EHR and PM integrations including eClinicalWorks, Epic, and athenahealth are destination-specific configurations stored within Phreesia that do not export via API. These integrations must be rebuilt in Freshsales through the Freshworks Marketplace or using middleware such as Zapier or a custom API integration. We document the current Phreesia integration flow in detail for the rebuild team to reference during reconstruction.
Phreesia
Phreesia Internal ID
Freshsales
Custom Field on Contact
1:1The original Phreesia patient record identifier is preserved as a custom text field (Phreesia_Patient_ID__c) on the Freshsales Contact during migration. This custom field enables delta-run de-duplication checks, prevents duplicate record creation on subsequent migration runs, and provides traceability back to the source Phreesia system for reconciliation and audit purposes after migration completion.
| Phreesia | Freshsales | Compatibility | |
|---|---|---|---|
| Patient Record (Demographics) | Contact1:1 | Fully supported | |
| Patient Demographics (unconverted) | Lead1:many | Fully supported | |
| Insurance Record (Payer + Policy) | Custom Fields on Contact1:1 | Fully supported | |
| Appointment / Visit Record | Deal1:1 | Fully supported | |
| Appointment / Visit Record | Task1:1 | Fully supported | |
| Patient Consent Record | Note on Contact1:1 | Fully supported | |
| Intake Form Configuration | No equivalent1:1 | Fully supported | |
| Payment / Card-on-File Record | No equivalent1:1 | Fully supported | |
| Clinical Screening Result | Custom Fields on Contact1:1 | Fully supported | |
| Provider / Staff Record | User (Freshsales Owner)1:1 | Fully supported | |
| EHR Integration Settings | No equivalent1:1 | Fully supported | |
| Phreesia Internal ID | Custom Field on Contact1: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
Freshsales gotchas
Freddy AI is Pro-tier only despite heavy marketing
Post-migration emails and sequences are disabled
Bot session credits are a one-time 500-session allocation
Phone credits charged per minute with no cap
File storage limits scale with plan tier
Pair-specific challenges
Migration approach
Audit Phreesia data exports and confirm Freshsales plan tier
We begin every Phreesia migration with a data audit. Phreesia pushes records to integrated EHR/PM systems rather than exposing a public bulk-export API, so the primary export path is the EHR integration or Phreesia's CSV export function. We identify all available record types — patient demographics, insurance records, appointment history, consent forms, and screening results — and confirm the export format. In parallel, we verify the target Freshsales plan. If the migration requires custom dropdowns for insurance type or clinical screening outcomes, the organization must be on Freshsales Pro or Enterprise before custom field creation begins. This step produces a Data Availability Report and a Freshsales Plan Requirements Summary.
Map patient records to Freshsales Lead and Contact objects with lifecycle routing rule
Phreesia patient records are not leads or contacts — they are undifferentiated patient records. We apply a routing rule: patients with at least one completed appointment in Phreesia become Freshsales Contacts; patients with only scheduled appointments become Leads. This rule is documented in the mapping spec and reviewed with the client before execution. We map all standard contact fields (name, email, phone, address) directly, and we store the Phreesia patient ID as Phreesia_Patient_ID__c on every record for traceability.
Create custom fields and configure Freshsales pipeline before data ingestion
Before any records move, we create the custom fields required for insurance data, clinical screening results, and appointment metadata in Freshsales. This includes Insurance_Payer__c, Insurance_Policy_Number__c, Insurance_Type__c, Coverage_Status__c, Screening_Type__c, Screening_Result__c, and Visit_Type__c. We also create at least one Freshsales pipeline with a Closed Won and Closed Lost stage so Deal records can be inserted. If the Growth plan is in use, we flag any advanced field type requirements and recommend a plan upgrade. This step is sequenced before record migration so foreign-key dependencies resolve correctly.
Run sample migration with field-level diff and mapping validation
A representative slice of records — typically 100–500 covering contacts, appointments, insurance records, and consent forms — migrates first. We generate a field-level diff comparing the Phreesia source values against the Freshsales destination fields for every mapped column. The client reviews the diff to confirm routing rules, custom field values, and Deal naming conventions before the full run commits. This is the validation gate: no full migration runs until the sample diff is signed off. Common corrections at this stage include adjusting Deal name templates, correcting insurance type value mappings, and verifying owner assignment for provider records.
Execute full migration with delta-pickup window and post-migration note on payment limitations
The full migration ingests all patient records, insurance fields, appointment Deal records, and consent Notes into Freshsales. A delta-pickup window (typically 24–48 hours) captures any Phreesia records created or modified during the cutover window. We run de-duplication checks against Phreesia_Patient_ID__c to prevent duplicate imports. After migration, we deliver a Post-Migration Report documenting the record counts by object, any records that failed to migrate with error reasons, and the list of Phreesia data that has no Freshsales equivalent (payment tokens, intake form logic, EHR integrations) with recommended rebuild paths for each.
Platform deep dives
Phreesia
Source
Strengths
Weaknesses
Freshsales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Freshsales.
Object compatibility
2 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 Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your Phreesia to Freshsales 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 Freshsales
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.