CRM migration
Field-level mapping, validation, and rollback between Practice by Numbers and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Practice by Numbers
Source
Salesforce Sales Cloud
Destination
Compatibility
11 of 12
objects map 1:1 between Practice by Numbers and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
48–72 hours
Overview
Practice by Numbers is a dental-practice management platform built around patient records, production tracking, and practice-level KPIs like treatment acceptance rate and production-per-hour. Salesforce Sales Cloud is a general-purpose CRM centered on Account-Contact-Opportunity relationships with pipeline management, forecasting, and workflow automation. The migration carries everything Practice by Numbers stores natively — patients, providers, appointments, treatments, claims, payments, and custom KPI fields — into Salesforce's object model. The harder translation problems are dental-specific: PbN's treatment-acceptance-rate metric requires a custom formula field in Salesforce, its goal-management module has no direct equivalent and must be rebuilt as custom objects with targets and milestones, and appointment data maps to Events with custom fields for procedure codes rather than native Salesforce scheduling. We also map PbN's production tracking (ADHA procedure codes, fee schedules, actual vs. planned production) to a combination of Opportunities, custom fields, and a Production__c custom object that mirrors the source metric hierarchy. Workflows, automations, and goal alerts do not migrate — they require Salesforce Flow rebuilds using PbN's exported definitions as reference. We preserve all timestamps, provider IDs, and patient IDs so Salesforce reports maintain continuity with historical PbN data.
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 Practice by Numbers 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.
Practice by Numbers
Patient
Salesforce Sales Cloud
Contact
1:1PbN patients map directly to Salesforce Contacts. The patient's primary provider becomes the Contact's OwnerId (resolved by email match against Salesforce users). PbN patient IDs are preserved as Source_System_ID__c custom field for traceability and delta-run de-duplication. Each Contact also retains the original PbN created date in Original_Create_Date__c to maintain historical reporting continuity.
Practice by Numbers
Provider / Dentist
Salesforce Sales Cloud
User + Contact (provider-as-contact)
1:1PbN providers who are also Salesforce users map by email match to User records. Providers without Salesforce user licenses become Contacts with a Provider__c custom checkbox set to true, allowing reporting on provider performance without consuming paid user licenses. This hybrid approach ensures all provider data is accessible in Salesforce while optimizing license costs for organizations with many part-time or referring providers.
Practice by Numbers
Practice / Office
Salesforce Sales Cloud
Account
1:1PbN offices map to Salesforce Accounts. For multi-location dental groups, the PbN practice hierarchy maps to Salesforce Account hierarchy via ParentId. Each office's location address becomes the Account's billing/shipping address. Office-level production totals roll up to the parent Account via custom rollup fields.
Practice by Numbers
Appointment
Salesforce Sales Cloud
Event
1:1PbN appointments map to Salesforce Events with custom fields: Procedure_Code__c (ADHA CDT code), Treatment_Type__c, Provider__c (lookup to User/Contact), and Appointment_Status__c. Original start/end times and patient-provider relationships (WhoId) are preserved. Note that Salesforce Events do not support procedure-code validation — this is enforced via custom validation rules post-migration.
Practice by Numbers
Treatment / Procedure
Salesforce Sales Cloud
Opportunity + Custom Object (Treatment__c)
many:1PbN treatment records merge into Salesforce Opportunities for financial tracking and a custom Treatment__c object for clinical detail. Opportunity.Amount captures the fee; Treatment__c stores ADHA procedure code, surface/tooth designation, insurance payment, and patient payment. The Opportunity links to the patient Contact and the provider User.
Practice by Numbers
Claim
Salesforce Sales Cloud
Custom Object (Insurance_Claim__c)
1:1PbN insurance claims have no Salesforce standard equivalent. We create an Insurance_Claim__c custom object linked to the Contact (patient) and the Treatment__c record, with fields for Claim_Status__c, Payer_Name__c, Submitted_Amount__c, Paid_Amount__c, and Adjustment_Reason__c. Claim history and status-change timestamps are preserved as custom audit fields.
Practice by Numbers
Payment
Salesforce Sales Cloud
Custom Object (Payment__c)
1:1Patient payments map to a Payment__c custom object linked to the Contact and Treatment__c. Fields include Payment_Date__c, Amount__c, Payment_Method__c, and Payment_Type__c (patient payment vs. insurance payment). This preserves the complete payment history that PbN tracks separately from the treatment record.
Practice by Numbers
Production Metric (calculated)
Salesforce Sales Cloud
Custom Object (Production__c)
1:1PbN's production-per-hour and production-vs-goal metrics are calculated fields in the source. We create a Production__c custom object keyed by Provider__c and Period__c (month/year), storing Actual_Production__c, Goal_Production__c, and Variance__c. These values are extracted from PbN's report exports and loaded as records, not as live formulas, to preserve historical accuracy.
Practice by Numbers
Goal / Target
Salesforce Sales Cloud
Custom Object (Goal__c)
1:1PbN's goal-management module has no Salesforce equivalent. We create a Goal__c custom object with Goal_Type__c (production, acceptance rate, new patients), Target_Value__c, Start_Date__c, End_Date__c, and Status__c (green/yellow/red from PbN). This preserves the goal hierarchy (office > provider > team member) as parent-child relationships via Goal__c lookup fields.
Practice by Numbers
Treatment Acceptance Rate
Salesforce Sales Cloud
Custom Field on Contact (Treatment_Acceptance_Rate__c)
1:1PbN calculates treatment acceptance rate as accepted procedures divided by presented procedures per patient. We extract this as a percentage value from PbN reports and store it on the Contact record as Treatment_Acceptance_Rate__c. Ongoing tracking in Salesforce requires a flow to recalculate from Treatment__c records; the migrated value provides historical baseline.
Practice by Numbers
Custom KPI Fields
Salesforce Sales Cloud
Custom Fields on appropriate objects
1:1PbN allows practices to create custom KPI fields for specialty tracking (e.g., orthodontic starts, implant case value). Each custom field is analyzed: numeric metrics map to custom Number fields on the relevant object; yes/no flags map to custom Checkbox fields. Custom field metadata (label, data type, pick-list values) is preserved in the field name and help text for the Salesforce admin to finalize labeling.
Practice by Numbers
Attachment / Document
Salesforce Sales Cloud
ContentDocument / Salesforce Files
1:1PbN attachments on patient records (e.g., treatment plan PDFs, X-rays referenced via URL) are re-uploaded as Salesforce Files linked to the patient Contact record. File size limits apply (Salesforce default 25MB per file). Inline images are downloaded and re-hosted; external URLs are preserved as custom URL fields if the target system does not permit download.
| Practice by Numbers | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Patient | Contact1:1 | Fully supported | |
| Provider / Dentist | User + Contact (provider-as-contact)1:1 | Fully supported | |
| Practice / Office | Account1:1 | Fully supported | |
| Appointment | Event1:1 | Fully supported | |
| Treatment / Procedure | Opportunity + Custom Object (Treatment__c)many:1 | Fully supported | |
| Claim | Custom Object (Insurance_Claim__c)1:1 | Fully supported | |
| Payment | Custom Object (Payment__c)1:1 | Fully supported | |
| Production Metric (calculated) | Custom Object (Production__c)1:1 | Fully supported | |
| Goal / Target | Custom Object (Goal__c)1:1 | Fully supported | |
| Treatment Acceptance Rate | Custom Field on Contact (Treatment_Acceptance_Rate__c)1:1 | Fully supported | |
| Custom KPI Fields | Custom Fields on appropriate objects1:1 | Fully supported | |
| Attachment / Document | ContentDocument / Salesforce Files1: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.
Practice by Numbers gotchas
No publicly documented API for automated migration
Dental EHR data is inherently messy during extraction
Goal management metrics require explicit field mapping
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 PbN data model and extract schema inventory
We connect to PbN via its export interface (CSV/Excel reports) and inventory all active objects: patients, providers, appointments, treatments, claims, payments, production metrics, and custom KPI fields. We assess data quality (duplicate patients, missing provider emails, null procedure codes) and produce a schema map showing each PbN field's data type, sample values, and target Salesforce object/field. This audit also surfaces the goal-management configuration and appointment-procedure-code taxonomy so we can size the custom-object build accurately.
Design Salesforce schema: custom objects, fields, and hierarchy
Before data moves, your Salesforce admin (or our team) creates the custom objects (Treatment__c, Insurance_Claim__c, Payment__c, Production__c, Goal__c) and custom fields needed for dental-specific metrics. We deliver a Salesforce schema setup plan based on the PbN audit — including Account hierarchy for multi-location setups, Contact field additions, Event custom fields for procedure codes, and Opportunity stage mapping for treatment statuses. This ensures the Salesforce side is ready before validation runs.
Resolve providers and patients by email and ID match
Provider records are matched to Salesforce Users by email for those receiving licenses; remaining providers become Contacts with Provider__c = true. Patient records are matched to Contacts by email address (and fallback by firstname + lastname + date of birth). PbN internal IDs are preserved as Source_System_ID__c on every record for traceability and delta-run de-duplication. Unmatched records are flagged before migration so your team can resolve (e.g., invite providers to Salesforce, merge duplicate patient contacts) before data lands.
Run sample migration with field-level diff
A representative slice migrates first — typically 100–500 records spanning patients, providers, appointments, treatments, and production metrics across multiple offices. We generate a field-level diff between PbN source values and Salesforce destination values so you can verify dental KPI mapping, provider-owner resolution, Account hierarchy assignment, and goal-record completeness before the full run commits. Sample results are reviewed by your team and any mapping adjustments are made before the final migration.
Execute full migration with delta-pickup window
Full migration runs against Salesforce using Bulk API 2.0 for high-volume patient and treatment records. A delta-pickup window (typically 24–48 hours) captures any PbN records created or modified during the cutover so Salesforce reflects PbN's final state at go-live. Audit logs capture every operation, and one-click rollback is available if reconciliation identifies data integrity issues. Post-migration, we deliver a field-level reconciliation report showing record counts per object, error rates, and unmatched records for manual resolution.
Platform deep dives
Practice by Numbers
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 Practice by Numbers 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
Practice by Numbers: Not publicly documented.
Data volume sensitivity
Practice by Numbers 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 Practice by Numbers to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Practice by Numbers 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 Practice by Numbers
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.