CRM migration
Field-level mapping, validation, and rollback between Handyman and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Handyman
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
12 of 12
objects map 1:1 between Handyman and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
48–72 hours
Overview
Handyman stores field service data around jobs, customers, technicians, line items, and assets. Dynamics 365 Sales operates on a different paradigm — accounts, contacts, opportunities, and orders built on Microsoft Dataverse. The migration must therefore reshape a job-centric data model into a CRM-centric one. We extract customers and companies as Accounts, service contacts as Contacts, and completed jobs as Opportunities with line items. Handyman's service agreements, recurring schedules, and asset registers require custom fields in Dynamics 365 since those are not native concepts — we create the custom schema before data lands. Technician assignments map to OwnerId on the Opportunity, and any custom properties Handyman stores per job migrate as Opportunity-level custom fields. We run a sample migration with field-level diff first, then execute the full transfer with a 24–48 hour delta-pickup window capturing any jobs created or updated during cutover. The approach uses the Dynamics 365 Web API for record creation and the Bulk API for high-volume operations, with owner resolution by email match against destination users before any records write.
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.
Source platform
Handyman platform overview
Scorecard, SWOT, gotchas, and pricing for Handyman.
Destination platform
Microsoft Dynamics 365 Sales platform overview
Scorecard, SWOT, gotchas, and pricing for Microsoft Dynamics 365 Sales .
Data migration guide
The complete Microsoft Dynamics 365 Sales migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
Microsoft Dynamics 365 Sales migration checklist
Pre- and post-cutover tasks for moving onto Microsoft Dynamics 365 Sales .
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Handyman object lands in Microsoft Dynamics 365 Sales , including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Handyman
Customer
Microsoft Dynamics 365 Sales
Account
1:1Handyman customers map to Dynamics 365 Accounts. Customer name becomes Account Name, address fields map to Address composite fields, and primary contact links via Account's primary contact lookup. Multi-location customers create parent-child Account hierarchies in Dynamics 365, preserving the original Handyman location structure as separate child Accounts under a parent company Account.
Handyman
Customer Contact
Microsoft Dynamics 365 Sales
Contact
1:1Contact records on each Handyman customer map to Dynamics 365 Contacts. Email, phone, mobile, job title, and address fields translate directly. Contact links to Account via AccountId lookup. Multiple contacts per customer create separate Contact records all linked to the same Account.
Handyman
Job
Microsoft Dynamics 365 Sales
Opportunity
1:1Completed and in-progress Handyman jobs map to Dynamics 365 Opportunities. Job name becomes Opportunity Name, job total amount becomes Estimated Revenue, job date becomes Close Date, and job status maps to Opportunity Stage via value mapping. Open jobs become open Opportunities with target close dates from scheduled service dates.
Handyman
Job Line Item
Microsoft Dynamics 365 Sales
Opportunity Product
1:1Each Handyman job line item (labor, materials, equipment) becomes an Opportunity Product record linked to the parent Opportunity. Product Name maps to the Opportunity Product's product lookup, quantity and unit price map directly, and description carries over. Handyman service categories may require pre-creating Products in Dynamics 365 before migration.
Handyman
Technician
Microsoft Dynamics 365 Sales
SystemUser (Owner)
1:1Handyman technicians resolve to Dynamics 365 users by email match. Each user's records (Jobs, Customers) receive the matched SystemUser as OwnerId. Unmatched technicians are flagged before migration — the account either gets invited to Dynamics 365 first or their records are assigned to a fallback owner.
Handyman
Service Agreement
Microsoft Dynamics 365 Sales
Custom Agreement__c Table
1:1Handyman recurring service agreements have no native Dynamics 365 equivalent. We create a custom Agreement__c table with fields for agreement name, customer (Account lookup), start date, end date, frequency, and included services. The table links to Account and stores the original Handyman agreement ID for traceability.
Handyman
Asset / Equipment
Microsoft Dynamics 365 Sales
Custom Asset__c Table
1:1Handyman asset records (customer equipment, serial numbers, service history) require a custom Asset__c table in Dynamics 365. Fields include Asset Name, serial number, make/model, customer (Account lookup), installation date, and last service date. Asset links to Account and inherits ownership from the customer Account.
Handyman
Job Notes / Attachments
Microsoft Dynamics 365 Sales
Annotation (Notes) / Attachment
1:1Handyman job notes, photos, and attachments migrate as Dynamics 365 Annotations (Notes) on the related Opportunity. Original file names and creation timestamps are preserved in the annotation metadata. Inline images embedded in notes are extracted, downloaded, and rehosted in Dynamics 365's SharePoint-integrated document storage, with links preserved in the annotation text.
Handyman
Job Status / Workflow
Microsoft Dynamics 365 Sales
Opportunity Stage + Custom Status Fields
1:1Handyman job statuses (Scheduled, In Progress, Completed, Cancelled) map to Dynamics 365 Opportunity Stages. We create a stage mapping table before migration: Scheduled maps to 'Qualification', In Progress maps to 'Value Proposition', Completed maps to 'Closed Won', Cancelled maps to 'Closed Lost'. Original Handyman status timestamps are preserved in custom datetime fields.
Handyman
Invoice
Microsoft Dynamics 365 Sales
Order / Invoice (via Business Central)
1:1Handyman invoices cannot map directly to Dynamics 365 Sales — Sales has Orders and Invoices but they require integration with Business Central for full accounts receivable functionality. We migrate invoice records as custom Invoice__c records preserving invoice number, amount, date, and line items. For full AR capability, a Business Central integration is required post-migration.
Handyman
Custom Customer Property
Microsoft Dynamics 365 Sales
Account Custom Column
1:1Any Handyman custom fields on the customer record map to custom columns on the Account table in Dynamics 365. Field type translation applies: text fields become Text, date fields become Date, pick-list values become Option Sets. The schema is created in Dynamics 365 before migration runs.
Handyman
Custom Job Property
Microsoft Dynamics 365 Sales
Opportunity Custom Column
1:1Handyman custom fields attached to jobs map to custom columns on the Opportunity table. Same type translation logic as customer properties applies. Handyman stores some properties as JSON — these are flattened into separate text columns with original values preserved as a reference.
| Handyman | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Customer | Account1:1 | Fully supported | |
| Customer Contact | Contact1:1 | Fully supported | |
| Job | Opportunity1:1 | Fully supported | |
| Job Line Item | Opportunity Product1:1 | Fully supported | |
| Technician | SystemUser (Owner)1:1 | Fully supported | |
| Service Agreement | Custom Agreement__c Table1:1 | Fully supported | |
| Asset / Equipment | Custom Asset__c Table1:1 | Fully supported | |
| Job Notes / Attachments | Annotation (Notes) / Attachment1:1 | Fully supported | |
| Job Status / Workflow | Opportunity Stage + Custom Status Fields1:1 | Fully supported | |
| Invoice | Order / Invoice (via Business Central)1:1 | Fully supported | |
| Custom Customer Property | Account Custom Column1:1 | Fully supported | |
| Custom Job Property | Opportunity Custom Column1: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.
Handyman gotchas
Pricing model terminology varies across destinations
Service history chunking for accounts with large job counts
Microsoft Dynamics 365 Sales gotchas
Professional tier 15-table custom table limit blocks migrations
October 2024 pricing increase applies at renewal for all customers
Custom fields must be created in the UI before API writes
Power Platform request limits apply to bulk migrations
Activity records orphaned to inactive owners fail silently
Pair-specific challenges
Migration approach
Audit Handyman data and design Dynamics 365 schema
We extract a full export of Handyman data including customers, contacts, jobs, line items, assets, service agreements, and custom field definitions. We analyze field types, pick-list values, and relationships. Then we design the Dynamics 365 custom schema — creating the Asset__c and Agreement__c tables, adding custom columns to Account and Opportunity, and defining pick-list values for status mappings. The schema design document goes to your Dynamics 365 admin for review before any records are created.
Resolve technicians to Dynamics 365 users by email
Handyman technicians are matched to Dynamics 365 SystemUser records by email address. We generate a match report showing matched users, users who exist in Dynamics 365 but don't match (different email), and technicians who have no corresponding Dynamics 365 user account. Your team resolves the unmatched set before migration — either by inviting them to Dynamics 365 or by assigning their records to a designated fallback owner. No job records migrate without a resolved owner.
Migrate accounts before contacts before opportunities
Dynamics 365 requires foreign-key resolution in a specific order: Accounts must exist before Contacts (via AccountId), and Accounts and Contacts must exist before Opportunities can link to them. We sequence the migration as: (1) Accounts from Customers, (2) Contacts from Customer Contacts, (3) Custom tables (Asset__c, Agreement__c), (4) Opportunities from Jobs with technician resolved to OwnerId, (5) Opportunity Products from Job Line Items. Each phase validates record counts and referential integrity before the next phase begins.
Run sample migration with field-level diff
A representative slice of records — typically 100–500 spanning multiple customers, jobs, line items, and assets — migrates first. We generate a field-level comparison report showing source value, destination value, mapping type applied, and any transformation notes. You verify that job totals map to EstimatedValue, status values map correctly through the value mapping table, and asset serial numbers land in the correct custom field. Sample approval gates the full run.
Execute full migration with delta-pickup window
The full dataset migrates using the Dynamics 365 Bulk API for high-volume Opportunity creation, with the Web API handling lookup relationships and custom table inserts. A 24–48 hour delta-pickup window captures any Handyman jobs created or updated during the migration run. All operations are logged to an audit table with source system ID, destination record ID, operation type, and timestamp. One-click rollback reverts the destination environment to its pre-migration state if reconciliation fails.
Platform deep dives
Handyman
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
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 Handyman and Microsoft Dynamics 365 Sales .
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
Handyman: Not publicly documented.
Data volume sensitivity
Handyman 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 Handyman to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Handyman to Microsoft Dynamics 365 Sales migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Handyman
Other ways to arrive at Microsoft Dynamics 365 Sales
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.