ERP migration
Field-level mapping, validation, and rollback between KeyedIn and Microsoft Dynamics 365 Business Central. We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Business Central.
KeyedIn
Source
Microsoft Dynamics 365 Business Central
Destination
Compatibility
9 of 15
objects map 1:1 between KeyedIn and Microsoft Dynamics 365 Business Central.
Complexity
BStandard
Timeline
5-8 weeks
Overview
Moving from KeyedIn to Microsoft Dynamics 365 is an ERP-adjacent migration that requires careful extraction planning because KeyedIn does not publish a public REST API or bulk export endpoint. Data extraction typically depends on a managed in-app export, a Jitterbit connector for integration customers, or direct database access for on-premise Enterprise deployments — each with different timelines and tooling requirements. We treat KeyedIn's Project and Task data as the primary migration plane and Financial Budgets as a separate plane that must reconcile to the parent Project totals at the destination. The Deliverables versus Task Plan Milestone duplication — a known structural gap in KeyedIn — requires a deduping decision before any record writes to Dynamics 365. We do not migrate KeyedIn Workflows, automations, or reports as code; we deliver a written inventory of these for your admin to rebuild in Dynamics 365's Power Automate or Project Service Automation workflows post-migration.
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
KeyedIn platform overview
Scorecard, SWOT, gotchas, and pricing for KeyedIn.
Destination platform
Microsoft Dynamics 365 Business Central platform overview
Scorecard, SWOT, gotchas, and pricing for Microsoft Dynamics 365 Business Central.
Data migration guide
The complete Dynamics 365 Business Central migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
Dynamics 365 Business Central migration checklist
Pre- and post-cutover tasks for moving onto Microsoft Dynamics 365 Business Central.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a KeyedIn object lands in Microsoft Dynamics 365 Business Central, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
KeyedIn
Project
Microsoft Dynamics 365 Business Central
msdyn_project (PSA) or Job (Business Central)
1:1KeyedIn Projects map to Dynamics 365 Project Service Automation msdyn_project or Business Central Job entities depending on the destination module. We preserve Project name, status, start and end dates, project manager (Owner), and budget summary. The KeyedIn project hierarchy — where sub-projects exist under a parent — maps to a parent Project lookup in PSA or a Job Connection in Business Central. Standard fields (Project Stage, Team, Contract) are configured before migration. The dedupe key is a composite of Project name plus KeyedIn internal ID stored in a custom field keyedin_id__c for audit traceability.
KeyedIn
Task
Microsoft Dynamics 365 Business Central
msdyn_projecttask (PSA) or Job Task Line (Business Central)
1:1KeyedIn Tasks map to PSA Project Tasks or Business Central Job Task Lines with the parent-child hierarchy preserved via the Parent Task lookup. We write parent tasks first in topological order to satisfy the lookup reference, then child tasks. Start and due dates, percent complete, scheduled hours, and assignee all transfer directly. Task-level cost rates migrate as part of the pricing dimension setup in PSA before the resource plan phase begins.
KeyedIn
Subtask
Microsoft Dynamics 365 Business Central
msdyn_projecttask (flattened, PSA)
1:manyKeyedIn Subtasks (the third level of Project > Task > Subtask) cannot be natively represented as a three-level hierarchy in Dynamics 365 PSA, which supports two levels by default. We flatten Subtasks as child tasks under the parent Task in PSA, adding a custom field keyedin_level__c set to 'subtask' to preserve the original nesting level in the source. The customer decides during scoping whether to keep this flattened structure or consolidate Subtasks into task notes for cleaner project views.
KeyedIn
Resource (People)
Microsoft Dynamics 365 Business Central
bookableresource (PSA) or Employee (Business Central)
1:1KeyedIn Resources that are People entities map to PSA Bookable Resources or Business Central Employees. We resolve Resources by their KeyedIn email address as the dedupe key, creating the Bookable Resource with the bookableresourcecategory matching the KeyedIn Resource role or pool. Inactive Resources in KeyedIn are created as inactive Bookable Resources to preserve allocation history. Resource type (Individual vs Generic Pool) maps to BookableResourceType in PSA.
KeyedIn
Resource Allocation
Microsoft Dynamics 365 Business Central
bookableresourcebooking (PSA)
1:1KeyedIn Resource-to-Project allocation assignments migrate as PSA Bookable Resource Bookings. Each booking captures the resource, project, start and end date, and hours or percentage allocation. Because KeyedIn stores allocation as a separate plane from tasks, we sequence resource allocations after both the Project and Resource records exist in PSA to avoid orphan bookings. Allocation conflicts (same resource overbooked on overlapping projects) are flagged for the customer to resolve before migration.
KeyedIn
Portfolio
Microsoft Dynamics 365 Business Central
msdyn_projectteam (PSA) or Business Unit + custom field
1:manyKeyedIn Portfolios group related Projects for executive visibility. We migrate Portfolio-to-Project associations as a junction lookup table or a multi-select custom field on each Project record, depending on the Dynamics 365 target entity. The Portfolio name is preserved as a tag or label. In Business Central, Portfolios map to a combination of Business Unit and a custom Portfolio field on the Job record. The customer chooses the display strategy during scoping.
KeyedIn
Task Plan
Microsoft Dynamics 365 Business Central
msdyn_projecttask (grouping entity, PSA)
lossyKeyedIn Task Plans are structured schedules attached to Projects containing Tasks, Subtasks, and Milestones. We treat the Task Plan as a grouping container and migrate the contained Tasks and Milestones directly into the target Project's task list, tagging each record with a custom field keyedin_taskplan_id__c to preserve the original grouping for audit. If the customer uses Task Plan as a template construct (reusable schedules applied across multiple projects), we document the template pattern for rebuild in Dynamics 365 Project Templates.
KeyedIn
Milestone (Deliverable)
Microsoft Dynamics 365 Business Central
msdyn_projectmilestone (PSA)
1:1KeyedIn standalone Deliverables map to PSA Project Milestones. Each milestone carries the milestone name, due date, status, and a lookup to the parent Project. We apply the deduplication decision (see Gotchas) before writing — only the resolved canonical milestone per conceptual project milestone migrates. Milestones embedded within Task Plans are mapped separately (see Task Plan entry) and the two sets are cross-referenced during deduplication. Milestone status from KeyedIn (On Track, At Risk, Complete) maps to the PSA Milestone status picklist.
KeyedIn
Time Entry
Microsoft Dynamics 365 Business Central
msdyn_timeentry (PSA) or Time Sheet (Business Central)
1:1KeyedIn Time Entries (hours logged against Tasks or Resources) migrate as PSA Time Entries or Business Central Time Sheet Lines. Each Time Entry carries the resource reference, project, task, date, hours, and billable flag. We resolve the KeyedIn Resource reference to the PSA Bookable Resource or BC Employee. If the destination uses approval workflows on time entries, we migrate with a default Approved status flag and document the approval routing for rebuild in Power Automate.
KeyedIn
Financial Budget
Microsoft Dynamics 365 Business Central
msdyn_projectbudget (PSA) or Budget (Business Central)
1:1KeyedIn Enterprise financial budgets migrate as PSA Project Budgets or Business Central Budget entries. Budget amounts, cost codes, and period breakdowns transfer as line items under the budget header, with the KeyedIn Project Budget linked to the corresponding PSA Project. Currency mismatches between KeyedIn and Dynamics 365 are flagged before migration, and the customer specifies the target currency. We validate that the sum of migrated budget line items reconciles to the parent Project budget total reported in KeyedIn, flagging any unreconciled discrepancy.
KeyedIn
Risk and Issue
Microsoft Dynamics 365 Business Central
msdyn_projectrisk (PSA) or custom entity
1:1KeyedIn Risks and Issues (logged at the Project level with severity, status, owner, and description) map to PSA Project Risks or a custom entity. We preserve the parent Project lookup, risk category, probability, impact, owner, and description. In Business Central, which lacks a native risk entity, we use a custom Project Risk table or document the mapping to the Job risk notes. Issue status (Open, Mitigated, Closed) maps to the Dynamics 365 status field with the KeyedIn severity preserved as a custom picklist.
KeyedIn
Document and Attachment
Microsoft Dynamics 365 Business Central
sharepointdocumentlocation or notes (PSA)
1:1KeyedIn documents and attachments linked to Projects or Tasks are migrated as SharePoint document locations attached to the PSA Project record (via the SharePoint document management integration) or as Notes with the original file name and URL preserved. Actual file blobs are not transferred unless the customer requests a separate blob migration. The document URL from KeyedIn is stored in a custom field keyedin_doc_url__c on the SharePoint document record for reference. Document folder structure is mapped to the PSA SharePoint document library hierarchy.
KeyedIn
Custom Field (Project level)
Microsoft Dynamics 365 Business Central
Custom fields on msdyn_project (PSA)
lossyKeyedIn custom fields on Projects (which vary per tenant) require a discovery scan during scoping to enumerate every unique custom field, its data type, and its picklist values. We create matching custom fields on the PSA Project entity (typed to the source data type — text, number, date, picklist, checkbox) and configure field-level security before migration. Unmapped custom fields are held in a decision log for the customer to specify disposition.
KeyedIn
Custom Field (Task level)
Microsoft Dynamics 365 Business Central
Custom fields on msdyn_projecttask (PSA)
lossyKeyedIn custom fields on Tasks (which vary per tenant) are migrated as custom fields on the PSA Project Task entity. Task-level custom field schemas tend to be smaller than project-level but still require explicit mapping. We validate field type compatibility — KeyedIn numeric custom fields must map to PSA decimal or integer fields, and KeyedIn date fields must not map to text fields.
KeyedIn
Pipeline Stage (Status Workflow)
Microsoft Dynamics 365 Business Central
msdyn_projectstageresult or status picklist (PSA)
lossyKeyedIn status values (e.g. Draft, Active, On Hold, Complete, Cancelled) are enumerated values that map to the PSA Project status field or a custom stage field on the Project entity. We create a status mapping table during scoping, validate that all source status values have a destination equivalent, and flag any orphaned statuses that exist in the data but not in the current KeyedIn configuration. Status values that have no direct equivalent in Dynamics 365 PSA are mapped to the nearest status and flagged for customer review.
| KeyedIn | Microsoft Dynamics 365 Business Central | Compatibility | |
|---|---|---|---|
| Project | msdyn_project (PSA) or Job (Business Central)1:1 | Fully supported | |
| Task | msdyn_projecttask (PSA) or Job Task Line (Business Central)1:1 | Fully supported | |
| Subtask | msdyn_projecttask (flattened, PSA)1:many | Fully supported | |
| Resource (People) | bookableresource (PSA) or Employee (Business Central)1:1 | Fully supported | |
| Resource Allocation | bookableresourcebooking (PSA)1:1 | Fully supported | |
| Portfolio | msdyn_projectteam (PSA) or Business Unit + custom field1:many | Fully supported | |
| Task Plan | msdyn_projecttask (grouping entity, PSA)lossy | Fully supported | |
| Milestone (Deliverable) | msdyn_projectmilestone (PSA)1:1 | Fully supported | |
| Time Entry | msdyn_timeentry (PSA) or Time Sheet (Business Central)1:1 | Fully supported | |
| Financial Budget | msdyn_projectbudget (PSA) or Budget (Business Central)1:1 | Fully supported | |
| Risk and Issue | msdyn_projectrisk (PSA) or custom entity1:1 | Fully supported | |
| Document and Attachment | sharepointdocumentlocation or notes (PSA)1:1 | Fully supported | |
| Custom Field (Project level) | Custom fields on msdyn_project (PSA)lossy | Fully supported | |
| Custom Field (Task level) | Custom fields on msdyn_projecttask (PSA)lossy | Fully supported | |
| Pipeline Stage (Status Workflow) | msdyn_projectstageresult or status picklist (PSA)lossy | 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.
KeyedIn gotchas
Deliverables vs Task Plan Milestone duplication
Financial data stored separately from tasks
Custom field schema varies per tenant
No publicly documented bulk export or API
Microsoft Dynamics 365 Business Central gotchas
Named-user licensing has no concurrent-use relief
API rate limits throttle large-volume migrations
Historical posted transactions require selective migration scoping
NAV-to-Business Central cloud migration requires partner coordination
Custom fields and AL extensions require separate migration handling
Pair-specific challenges
Migration approach
Extraction method scoping and discovery
We audit the source KeyedIn environment to identify the available extraction path: managed in-app export for cloud tenants, Jitterbit connector access for integration customers, or direct database access for on-premise Enterprise deployments. We enumerate every custom field, every distinct status value, the Project and Task record count, the Resource count, the financial budget volume (for Enterprise tier), and the document reference count. This discovery phase produces a written extraction plan, a data volume estimate, and a migration scope document that both parties sign before tooling begins.
Deliverable and Milestone deduplication
Before any data moves, we run a deduplication pass across the Deliverables and Task Plan Milestones extracted from KeyedIn. We match on milestone name, parent project ID, and due date window (within 7 days) to identify records in both systems that represent the same conceptual milestone. We present the deduplication set to the customer's PMO lead for a manual resolution decision and document the chosen record per milestone. Only the resolved canonical record is written to Dynamics 365 PSA as a Project Milestone.
Destination schema deployment
We deploy the target Dynamics 365 schema — PSA Project entity with custom fields, Bookable Resources, Project Tasks, Project Milestones, Time Entries, Project Budgets, and any custom entities — into a Sandbox environment first. Custom fields are typed to match the source data types discovered in scoping. Resource capacity profiles, cost price lists, and project stage picklist values are configured before data migration begins. The customer's Dynamics 365 admin reviews and validates the schema in Sandbox and signs off before production migration is scheduled.
Financial plane reconciliation
We extract KeyedIn Enterprise financial data (budgets, cost codes, financial line items) as a separate data plane and validate that the sum of line items reconciles to the parent Project budget total. Any unreconciled amounts, missing cost codes, or currency mismatches are flagged for the customer's finance team to remediate before the financial plane migrates. This step prevents budget totals in Dynamics 365 that do not tie back to the source KeyedIn figures, which would undermine financial reporting continuity.
Production migration in dependency order
We run production migration in record-dependency order: Bookable Resources (PSA) first, then Projects, then Resource Bookings, then Project Tasks (parent tasks before child tasks), then Task Plan Milestones (after Task Plan grouping is resolved), then Deliverables (after deduplication), then Time Entries, then Financial Budgets (last, because they reference Projects), then Risks and Issues. Document and attachment metadata migrates last. Each phase emits a row-count reconciliation report before the next phase begins. The KeyedIn keyedin_id__c custom field on each record maintains the link back to the source for audit.
Cutover, validation, and automation rebuild handoff
We freeze KeyedIn writes during the cutover window, run a final delta migration of any records modified during the migration window, then designate Dynamics 365 as the system of record. We deliver a written inventory of all KeyedIn Workflows, conditional automations, and custom reports that require rebuild in Dynamics 365 Power Automate or PSA project management settings. We do not rebuild these as code inside the migration scope. We support a one-week hypercare window to resolve reconciliation issues raised by the PMO team.
Platform deep dives
KeyedIn
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Business Central
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP migration. All 8 core objects map 1:1 between KeyedIn and Microsoft Dynamics 365 Business Central.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across KeyedIn and Microsoft Dynamics 365 Business Central.
Object compatibility
All 8 core objects map 1:1 between KeyedIn and Microsoft Dynamics 365 Business Central.
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
KeyedIn: Not publicly documented.
Data volume sensitivity
KeyedIn 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 KeyedIn to Microsoft Dynamics 365 Business Central migration scoping. Not seeing yours? Book a call.
Walk through your KeyedIn to Microsoft Dynamics 365 Business Central migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave KeyedIn
Other ways to arrive at Microsoft Dynamics 365 Business Central
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.