Section 01
Why teams migrate to Microsoft Project
The four shapes a Microsoft Project migration takes, and why edition choice — not source platform — is the first decision that matters.
Microsoft Project is a project management product developed and sold by Microsoft since 1984 — the company's third Windows-based application and the long-running default for Gantt-driven scheduling in the enterprise 1. Its proprietary file format is .mpp, and from 2015 to 2020 it was the most popular project management application according to Project Management Zone 1.
The typical customer profile splits across three editions whose migration mechanics diverge sharply: Microsoft Project Desktop (Standard or Professional, MPP files, single-planner or local workgroup); Project Online (SharePoint-backed Project Web App, on a retirement trajectory after Project for the Web took over the modern roadmap); and Project for the Web / Microsoft Planner (Dataverse-backed, integrated with Power Apps, Power Automate and Teams) 1.
Licensing is tier-based — Project Plan 1 at $10/user/month for the lightweight web experience, Plan 3 at $30 including the desktop client, and Plan 5 at $55 for portfolio management and resource pools. Project for the Web was set to retire on August 1, 2025, folding into the new Microsoft Planner 1.
The shapes of migration that land on Microsoft Project fall into four patterns. First, edition modernisation — teams moving from Project Online or Project Server PWAs onto Project for the Web / new Planner. Second, on-prem-to-cloud moves from Project Server installations onto Project Online or Project for the Web, typically driven by SharePoint version end-of-life 11.
Third, consolidation onto Project from Asana, Smartsheet, Wrike, Jira or Monday, where teams want stronger critical-path scheduling and resource levelling than work-management tools provide148. Fourth, desktop-to-server moves where a team standardises a collection of .mpp files into a single PWA or Project for the Web tenant for resource pool sharing and Power BI reporting.
What makes migrating *to* Microsoft Project easier than the category average is the maturity of the file ecosystem — desktop reads MPP, MPT, MPX, XML, XLSX, CSV and ASCII text, and the Import Wizard can map columns by hand or by saved map 5357.
What makes it harder is the edition fragmentation: Project for the Web caps custom fields at ten, has no formula support and no cross-project field reuse 4344, while Project Online's programmatic surface area is narrow and undocumented for many fields practitioners actually need 26.
Schedules, baselines, dependencies and resource assignments do not move cleanly between editions without a tool that understands the underlying object model. Teams that pick the right edition first finish on time; teams that pick the import tool first do not.
Pick the right edition first and the right import path second. Teams that do this in reverse finish late.
Section 02
The Microsoft Project data model you need to map into
Tasks, Resources, Assignments, Calendars, and Baselines — the destination schema decoded across the three editions you might be landing on.
Microsoft Project's object model is documented in the VBA reference — the Application sits at the root, Projects under it, and within each Project sit Tasks, Resources, Assignments, Calendars, WorkWeeks and Subprojects 36. Project for the Web reshapes the same concepts onto Dataverse tables, while Project Online exposes them through the Project Server Interface (PSI) and CSOM 2226.
Before you can map a field on the source side, you need to know exactly which destination object the row belongs on, what fields it requires, and which value will serve as its upsert key. The table below summarises the objects you will touch in a Microsoft Project migration.
| Object | Stores | Required on import | Tier |
|---|---|---|---|
| Project | The container — schedule, calendar, baseline, settings | Name, start or finish date | All editions |
| Task | Work items in a hierarchical outline (summary + leaf) | Name, duration; outline level for hierarchy | All editions |
| Summary Task | Rolled-up parent tasks; computed from children | Outline structure (level/indent); auto-calculated | All editions |
| Subproject | Linked external Project inserted into the master | Source file path or inserted Project reference | Desktop + Project Server |
| Resource | Work, Material, Cost — people, equipment, expenses | Name, Type (Work/Material/Cost) | All editions |
| Assignment | Task ↔ Resource link with Work and Units | Task ID, Resource ID, Units, Work | All editions |
| Task Dependency | FS / SS / FF / SF links with lag | Predecessor, Successor, Type, Lag | All editions |
| Calendar | Project calendar + Resource calendars; working/non-working time | Name, base calendar; WorkWeek and exception days | All editions |
| Baseline | Snapshot of dates/work/cost at a point in time | Set after schedule build; up to 11 baselines (Baseline + Baseline1-10) | Desktop, Project Online |
| Custom Field | Text1-30, Number1-20, Date1-10, Flag1-20, Cost1-10, Outline Code1-10 on desktop; max 10 fields on Project for the Web | Type fixed at creation; cannot be changed later | Desktop / PWA: ~100 fields; Project for the Web: 10 |
Tasks use a numeric Unique ID (UID, stable for the life of the project) and a positional ID that renumbers when rows shift; Resources use the same scheme. There is no platform-wide GUID across projects on the desktop — Project.GUID is per-file. On Project for the Web / Dataverse, every record gets a Dataverse id (GUID) that is the canonical primary key 27.
When you import on the desktop, the Import Wizard does not upsert against a stable key — it appends to the active project or creates a new one 57. For upsert semantics, use the PSI/CSOM (Project Online) or the Dataverse layer (Project for the Web), upserting against the Dataverse id or an Alternate Key defined in advance 1827.
Custom field types determine validation and storage. On Project Desktop you get a fixed catalogue of typed slots (Text1-30, Number1-20, Date1-10, etc.) renamed via Project → Custom Fields, with optional lookup tables and formulas 4450. On Project for the Web you can create at most 10 custom fields per project, only the types listed below, and you cannot change a field's type after creation 4344.
| Field type | Limits | Notes |
|---|---|---|
| Text (desktop) / Text (P4W) | Text1-30 on desktop; up to 255 chars; 10 fields max P4W | Custom lookup tables supported on desktop, not on P4W |
| Number | Number1-20 on desktop; rollups: Max/Min/Sum/Average | Type immutable after creation 44 |
| Date | Date1-10 on desktop; Start1-10 / Finish1-10 | Time-of-day stored; respect Project calendar |
| Duration | Duration1-10 | Stored in minutes internally; display unit configurable |
| Cost | Cost1-10 | Currency-formatted; uses project currency setting |
| Flag (Yes/No) | Flag1-20 | Boolean; rollups: AND/OR/Count |
| Outline Code | Outline Code1-10 | Hierarchical lookup; not supported in P4W |
| Formula | Available on desktop / Project Online only | Not supported in Project for the Web 44 |
| Custom field count (Project for the Web) | 10 hard cap per project | Cross-project field reuse is not currently supported 43 |
Relationships in Project are modelled as Task Dependencies — Finish-to-Start (FS, the default), Start-to-Start (SS), Finish-to-Finish (FF) and Start-to-Finish (SF) — with positive or negative lag expressed in time units or as a percentage of predecessor duration 135. Resources attach to tasks via Assignments carrying Units, Work, Actual Work and Remaining Work 26.
Project Online imposes a 25 GB quota per Project Web App site, separate from SharePoint Online limits 34. Subprojects (master/insert) allow nested project hierarchies on desktop and Project Server but are not supported in Project for the Web 11.
The single most-important detail for any practitioner mapping into Project: task type (Fixed Units / Fixed Duration / Fixed Work) drives how Work, Duration and Units recalculate during import — get the project default wrong and your durations will silently drift after the load.
Section 03
Pre-migration prep — the work before you touch Microsoft Project
What must be true on the source, the destination, and across the team before the first MPP, XML or CSV hits the Import Wizard.
The single best predictor of a clean Microsoft Project migration is how much work you do on the source side before the first file is opened. Most teams discover this on day two when a 1,200-task plan imports with the wrong calendar, no baseline and resource assignments that arrived as plain text — every one of which traces to a missing pre-flight step.
Most Microsoft Project migration failures trace to three pre-flight gaps: wrong calendar, wrong task type default, and no resource pool plan.
Treat the source export as raw material that needs to be shaped to Project's expected formats — durations in consistent units (hours, days or weeks; pick one), dates rewritten to a culture-stable format, resource names resolved against the target Resource sheet, and outline levels expressed as integers your WBS column can read.
Source-side prep
- Audit and dedup the source project list before export — duplicate task names will not collide (Project allows them), but duplicate resource names across the Resource sheet break Assignment rollups and Cost calculations.
- Standardise duration units — pick hours or days for the entire dataset and convert. Project stores duration in minutes internally and infers display units from the import; mixed units in one file produce silent errors 60.
- Re-encode CSV files as UTF-16 LE with BOM or legacy ANSI — recent Project updates broke parsing of UTF-8 and ANSI CSV, and the workaround is to save as Unicode in Excel before importing 71.
- Normalise dependency notation — Project accepts
5FS+2d,5SS,5FF-1detc., but rejects free-form text. If the source exportsTask 5, FS, 2 daysyou must transform before import. - Decide what is in scope for historical data — actual work, actual start, actual finish, % complete and baselines must be imported on a separate pass after the schedule shape lands, or auto-scheduling will overwrite them.
Destination-side prep
- Pick the edition and tier first — Project for the Web caps custom fields at 10 and lacks formulas 4344; Project Online has a 25 GB PWA quota 34; desktop has no shared resource pool unless you wire Project Server. Get this wrong and you re-do the migration.
- Create the Project calendar and Resource calendars before importing — set working hours, exceptions, and base calendar (Standard / 24 Hours / Night Shift). Imports use the project calendar to translate Duration into Start/Finish, and getting this wrong moves every date.
- Pre-create every custom field on Project Desktop or Project for the Web with the right type — type is immutable after creation 44; the only fix is delete-and-recreate, which loses any data already loaded.
- Provision the Resource sheet or Resource Pool before importing assignments — assignments to unresolved resources are silently dropped or, worse, create new resources with the source's text representation as the name.
- Set Auto-Schedule vs Manually Scheduled as the project default before import — Manually Scheduled tasks honour the dates you load; Auto-Scheduled tasks recalculate from constraints and dependencies, which can reshuffle imported dates.
People prep
Cutover only works if humans cooperate. Lock a source-system freeze window — typically 24 to 72 hours — and communicate it to every project manager who owns a plan. Train PMs on the destination's scheduling defaults (Auto-Schedule behaviour, baseline workflow, time tracking entry) before go-live, not after.
A pilot migration of two or three representative plans — one simple, one complex with dependencies, one with significant financial tracking — surfaces 80% of the rollout's edge cases in week one. A full rollout typically takes four to eight weeks depending on the number of active projects, plan complexity, and reporting standardisation.
Section 04
Import mechanisms: UI wizard, file formats, and programmatic loads
Multiple paths in — the desktop Import Wizard, the Project for the Web migrator on Dataverse, and the Project Online PSI/CSOM. Picking the wrong one is how migrations stall.
Microsoft Project exposes several load paths and the right one depends on edition, dataset shape, and whether you need re-runnable upserts. The desktop Import Wizard covers file-based loads (MPP, MPT, MPX, XML, XLSX, CSV, TXT). The Project for the Web Dataverse stack handles modern, web-native loads via Power Apps / Power Automate or direct Dataverse writes. The Project Online PSI/CSOM surface handles programmatic loads against PWA sites.
Desktop Import Wizard (Project Standard / Professional)
On the desktop, the Import Wizard runs from File → Open → [file type] or File → New → New from Excel workbook 75. Supported source formats are Project Plan (.mpp), Project Template (.mpt), Project Exchange (.mpx, read-only in modern versions), Project XML (.xml), Excel Workbook (.xls, .xlsx, not .xlsm), tab-delimited text (.txt), comma-separated values (.csv) and XPS 535797.
The wizard walks Task Mapping, Resource Mapping and Assignment Mapping pages where each source column is mapped to a Project field by hand or via a saved map 57. You choose New project, Append the data to the active project, or Merge the data into the active project.
There is no documented row-count cap — practitioner reports describe successfully importing schedules of 5,000+ tasks — but plans above roughly 1,000 tasks tax the default cache and undo limits, both of which should be raised before the load (cache to 100+ MB, undo to 99).
The right call: desktop Import Wizard for any file-format source under a few thousand tasks, single-planner migrations, or when you are consolidating a folder of MPP files into a master via Insert Subproject.
Project for the Web — Dataverse
Project for the Web stores everything in Dataverse — the same backend used by Dynamics 365 — and is loaded via the Dataverse layer with the CreateMultiple / UpdateMultiple / UpsertMultiple bulk actions 18. Bulk operations are throttled by Dataverse service-protection limits — honour the Retry-After response when throttling kicks in rather than calculating rates yourself 19.
Tables you write into include msdyn_project, msdyn_projecttask, msdyn_projectteam (resources), msdyn_resourceassignment and msdyn_projecttaskdependency. Power Automate, Power Apps and FluentPro Project Migrator all sit on this same Dataverse layer and are commonly used in the migration corner of the ecosystem151.
Project Online — PSI and CSOM
Project Online exposes the Project Server Interface (PSI) and the CSOM against the PWA site 2226. Practitioners commonly report needing the AssignmentTimephasedDataSet to pull resource hours per day, which requires CSOM or OData against /_api/Projectdata 26.
Throughput patterns from the Dynamics 365 service-protection guidance carry over: use multiple threads with Retry-After backoff, distribute load across multiple service principals if a single one hits per-user limits, and prefer batch operations over per-record calls 19.
Third-party migration tools
FluentPro Project Migrator and FluentBooks, Relokia Migration Wizard, Birdview PSA's migration service and PPM Express all run on top of the load paths above. Project Migrator specifically lists Asana, Smartsheet, Planner, Project Online and Project for the Web as supported routes151.
MPP / Excel / CSV file source → desktop Import Wizard. Programmatic load into Project for the Web → Dataverse bulk actions (CreateMultiple/UpsertMultiple). Programmatic load into Project Online → PSI/CSOM. Cross-platform PM-to-PM moves → FluentPro Project Migrator or equivalent.
Section 05
Mapping your data into Microsoft Project
The longest section — because schedule shape, dependencies, baselines and resource assignments are where almost every PM migration that fails actually breaks.
Mapping is where every PM migration earns its scars. The decisions you make in the field-mapping spreadsheet determine whether the critical path matches the source on day two, whether time-tracking entries reconcile on day five, and whether PMs trust the schedule on day thirty.
Work object by object, top to bottom of the import order: Calendar first (so dates translate correctly), then Resources (so assignments can land), then Tasks with outline structure, then Dependencies, then Assignments, then Baselines, then Actuals.
Project hierarchy and task dependencies
Project hierarchy in Microsoft Project is expressed as an outline — summary tasks at outline level 1, sub-tasks at level 2, sub-sub-tasks at level 3, with no formal cap on depth. When importing from a flat source like Excel or CSV, include an explicit Outline Level column with integer values, or include a numeric WBS column (1, 1.1, 1.1.1) that the Import Wizard can use to generate the outline structure 69.
Without one of these columns the wizard imports everything as siblings at level 1 and Summary Tasks are not generated. Add Outline_Level to your CSV as the first preprocessing step.
Source → Microsoft Project Task mapping
- task_name / title→Name
Required; no uniqueness constraint
- outline_level / wbs→Outline Level / WBS
Drives summary task generation — required for hierarchy 69
- duration→Duration
Stored in minutes; pick consistent unit (e.g. days) and let display format infer
- start_date / planned_start→Start
Auto-Schedule will recompute unless task is Manually Scheduled
- finish_date / planned_end→Finish
Set Manually Scheduled if you need imported finish to stick
- predecessor task IDs→Predecessors
Notation:
5FS+2d,5SS,5FF-1d; reject free-form text - milestone flag→Milestone (Yes/No)
Tasks with Duration=0 auto-flag; otherwise explicit field
- constraint type + date→Constraint Type / Constraint Date
ASAP, ALAP, MSO, MFO, SNET, SNLT, FNET, FNLT — pick deliberately
- task notes / description→Notes
RTF on desktop; plain text on Project for the Web 84
Task dependencies on import require the predecessor task to already exist in the same project — a common failure mode for streaming imports where dependencies arrive before their predecessor row 3. Two strategies: (1) sort the source by Outline Level and within-level by ID so predecessors load first, or (2) make a second pass after all tasks are loaded that only writes the Predecessors column.
Resources and assignments
Source → Microsoft Project Resource mapping
- resource_name / assignee→Name
Must be unique; mismatches create duplicates silently
- resource_type→Type
Work (people, hourly), Material (consumables), Cost (one-time)
- email / upn→Email Address
Used for Outlook task assignment and Project for the Web user resolution
- calendar_id→Base Calendar
Per-resource calendar overlays the project calendar
- max_units / capacity→Max Units
1 = full-time; 0.5 = half-time; affects levelling
- standard_rate→Std. Rate
Currency/time; e.g. $75/hr
Assignments require Task ID and Resource ID to both resolve. Source files that carry the resource as a free-text string (e.g. "Jane Doe") need a lookup-and-rewrite pass against the destination Resource sheet before assignment rows are imported, or assignments will create duplicate resources or fail silently.
Time tracking — Work, Actual Work, Remaining Work
Microsoft Project models time tracking on assignments via three core fields: Work (planned), Actual Work (logged), and Remaining Work (computed or entered). On the desktop, Actual Work can be imported via the wizard, but only if the import target field is mapped explicitly — practitioners frequently report imports where Outline and Tasks land but Actual Work shows 0 hours because the column was not in the import map 60115.
Project Online and Project for the Web add timesheet entries (AssignmentTimephasedDataSet for the per-day breakdown) — these require CSOM or the OData _api/Projectdata path to read or write 26. If you need per-day time history (not just totals), plan to either re-key in the destination or use a third-party tool that wraps the timesheet load.
Comments and attachments threading
Microsoft Project Desktop does not have native comment threads — it has the Notes field per task and per resource, accepting RTF on desktop and plain text everywhere else 84. Project Online layers PWA discussion threads via SharePoint, and Project for the Web / new Planner uses Task chat (the modern replacement for legacy task comments) for threaded conversation 133.
If you are migrating from a tool with rich comment threads (Asana, Monday, ClickUp), the practical mapping is: collapse the source comment thread into the destination Notes field as a chronological text blob, optionally with a SharePoint or Teams deep link to the original. Microsoft retired legacy Planner task comments in mid-January 2026 — migrations into Planner / Project for the Web must use Task chat going forward 8.
Attachments do not move inline through the Import Wizard. The supported path is to upload the file to the SharePoint document library backing the PWA (Project Online) or to the Dataverse msdyn_projectattachment table / Teams files (Project for the Web), then add a link in the task's Notes or Hyperlink field 93102.
Custom workflow status and recurring tasks
Microsoft Project does not have a true Kanban-style workflow engine — the closest equivalents are: (1) the Status field, which is computed by Project from %Complete and Status Date and cannot be customised 45; (2) a Text field (Text1 through Text30 on desktop) renamed to *Status* and populated with a lookup table of custom values 45; and (3) the Project for the Web Bucket field for board-style grouping 44.
If your source has a state machine like To Do → In Progress → Blocked → Done, the cleanest mapping is to import the state into a renamed Text field with a lookup table, then either drive %Complete from it via a formula (desktop only) or leave the two parallel as a manual reporting field.
Recurring tasks are created on the desktop via Project tab → Insert Recurring Task and stored as a single parent task with auto-generated children for each occurrence. There is no bulk-import path for recurrence rules — you import the parent and let Project generate the instances, or pre-expand the recurrence in the source CSV and import every instance individually.
Baselines and snapshots
Microsoft Project Desktop and Project Online support up to 11 baselines (Baseline plus Baseline1 through Baseline10), each storing a frozen snapshot of Start, Finish, Duration, Work and Cost for every task and assignment at the moment the baseline was set 134. Baselines do not auto-import — once the schedule lands, run Project → Set Baseline to capture the current state, then any later actuals work shows as variance from the imported plan.
If you need to preserve baselines from the source, the only supported path is to write to the Baseline Start, Baseline Finish, Baseline Duration, Baseline Work and Baseline Cost columns explicitly during import — these are all individually mappable in the Import Wizard but absent from default import maps.
Audit trail, ownership and original timestamps
Standard Created, Created By, Modified and Modified By are platform-managed on Dataverse and SharePoint backends — they cannot be overwritten during a normal bulk import. Dataverse does expose overriddencreatedon for the create timestamp on a per-record basis when the calling user has the right privileges, but modifiedon and modifiedby always reflect the import job's identity 113.
If you need to preserve the original audit trail, the pattern is to create two custom fields per object — *Legacy Created Date* (Date1) and *Legacy Created By* (Text1) — and populate them from the source export. Owner/Assignee mapping during import only succeeds if the destination user exists in the tenant at the moment of import; assignments to unresolved users either fail silently or land against the import job's principal.
PM-specific: Power BI, Roadmap, Teams integration
Power BI reporting against Project data is configured *after* the data lands — the OData feed for Project Online is /_api/Projectdata; for Project for the Web it is the Dataverse connector. Roadmap and the Project / To Do / Planner shared task list inside Teams both refresh automatically once the underlying projects exist, but they are read-mostly surfaces — task-level edits there do not propagate back into Project 148.
Section 06
The pitfalls that derail Microsoft Project migrations
Nine specific failure modes — ranked by impact, each tied to the exact Microsoft Project mechanism that breaks.
High impact
Picking Project for the Web when you need formulas or 11 custom fields
Project for the Web caps custom fields at 10 per project, does not support formulas, and does not allow cross-project field reuse — confirmed as a hard limit by the Microsoft Project Tech Community 4344. Teams that load schemas with 25 custom Number/Text fields into Project for the Web hit the ceiling mid-migration and discover the only fix is to re-platform to Project Online or Project Desktop. Decide on the destination edition before you write the field map. 43
High impact
Custom field type cannot be changed after creation
Every Microsoft Project custom field — desktop, Online or Project for the Web — has a type fixed at creation: Text, Number, Date, Duration, Cost, Flag, Outline Code, Formula 44. There is no in-place type conversion. If you import a number into a Text field and need it as Number later, you delete the field, lose any data already loaded into it, and re-create. Stamp the type on day one of the schema design, not after the first dry-run. 44
High impact
Auto-Schedule reshuffles imported dates
Microsoft Project's default task mode is Auto Scheduled, which means Project recomputes Start and Finish from Duration + Dependencies + Constraints + Calendar at every recalculation. Imports that load explicit dates into Auto-Scheduled tasks watch those dates drift after the load. The fix is either to set the project default to Manually Scheduled before import (File → Options → Schedule → New tasks created → Manually Scheduled) or to import a Constraint Type of Must Start On / Must Finish On alongside the date, accepting the constraint warnings that follow.
High impact
CSV parsing broken for UTF-8 and ANSI after recent updates
After Microsoft Project updates rolled out in late 2025, the desktop application stopped parsing CSV files encoded in ANSI or UTF-8 71. Plans imported from any modern data-pipeline tool default to UTF-8 and fail to open with no clear error message. The current workaround is to re-save the CSV as Unicode (UTF-16 LE with BOM) in Excel before opening. Audit every source CSV's encoding before the migration and standardise the conversion step. 71
High impact
Assignments to unresolved resources land as duplicates or vanish
When the Import Wizard encounters an Assignment row whose Resource Name does not match an existing entry on the Resource sheet, it either creates a new resource with the source's text representation (polluting your Resource sheet with "jane.doe", "Jane Doe" and "JDOE" as three resources) or, on Project for the Web, drops the assignment silently. Pre-populate the Resource sheet with canonical names and email addresses before importing assignments, and dry-run a 10-row pilot to confirm Resource matching.
Medium impact
Subprojects don't exist in Project for the Web
Project Desktop and Project Server support Insert Subproject for nesting multiple .mpp files into a master plan — Project for the Web does not 11. Teams modernising from a desktop master/insert architecture cannot bring that structure across; the typical remediation is to flatten subprojects into a single master plan (losing per-subproject ownership) or to keep each former subproject as a peer Project in Project for the Web with Roadmap for cross-project visualisation, accepting the loss of summary rollup. 11
Medium impact
Project Online programmatic throttling is not documented in fixed numbers
Project Online's PSI/CSOM surface respects Dynamics 365 service-protection limits, but the exact per-second / per-minute caps are not published as fixed numbers — Microsoft's guidance is to gradually increase load until throttling kicks in, then honour the Retry-After response 19. Naive migration code that fires fixed-rate parallel calls without backoff hits 5503-style errors mid-load and corrupts partially-written records. Use multiple service principals and exponential backoff. 19
Medium impact
EU Data Boundary and tenant region are baked in at tenant creation
Microsoft completed the EU Data Boundary in February 2025, committing to store Customer Data for EU customers within the boundary across Microsoft 365, Dynamics 365 and Power Platform 125130. Project for the Web sits on Dataverse and inherits the tenant's region — and a tenant created in the wrong region cannot be flipped post-hoc. Audit the destination tenant's data-residency settings before migration; a mismatch means re-creating the tenant or accepting cross-border storage. 125
Low impact
Project Online is on a retirement trajectory
Microsoft set Project for the Web — the Dataverse-backed predecessor — to retire on August 1, 2025, folding into the new Microsoft Planner 1. Project Online itself has not been formally end-of-lifed but Microsoft's roadmap clearly favours Project for the Web / Planner. Migrating *to* Project Online today carries platform-decline risk; teams in this position should evaluate Project for the Web / new Planner as the actual destination and build their schema around its constraints (10 custom fields, no formulas). 1
Section 07
Validation and cutover
What to verify after the import job, in what order — and how to fail safely when something is wrong.
Validation is the bridge between the import finishing and PMs being allowed to schedule against the new plan. Practitioners recommend a three-stage validation: a pilot of 2 to 3 representative projects with PM spot-checks, the full load with real-time monitoring of task counts and dependency integrity, and a 30-day post-migration audit on actuals and baselines.
The most reliable signal is having the project's owning PM verify their own schedule — they know what the critical path should look like better than any reconciliation script.
Build a reconciliation queries spreadsheet that compares source and destination on the counts below. Anything outside a 0.5 percent variance gets investigated before PMs get edit access.
- Total tasks per project vs source — including summary tasks; mismatches usually trace to outline-level parsing gone wrong.
- Total dependencies per project — count Predecessor links and compare; dependency drops are the most common silent failure during Excel/CSV imports.
- Total assignments per project — and total Work hours summed across all assignments; a non-trivial hour variance usually signals unresolved resources.
- Critical path length (project Finish - project Start) — should match the source to within a calendar day; if it doesn't, calendar or task-mode mismatches are in play.
- Baseline coverage — count tasks with a non-null Baseline Start; this should be 100% for projects you baselined before migration, 0% for projects you intend to re-baseline after.
- Resource roster — count distinct resources on the Resource sheet; any duplicates indicate the resource-name lookup transform missed cases.
- Per-resource Work totals —
GROUP BY Resourceon Assignment Work and confirm against the source's capacity planning.
On top of reconciliation, run a manual spot-check: pick 10 random tasks across the most complex projects and verify Name, Duration, Start, Finish, Predecessors, Assignments and %Complete against the source UI. Pick three high-complexity dependency chains and trace each predecessor link visually on the Gantt chart. If a non-trivial discrepancy shows up in three or more of the 10, halt the load, fix the root cause, and re-import the affected projects.
Dataverse-backed Project for the Web supports record restoration: deleted Dataverse table records can be restored from the recycle bin via the Power Platform admin centre for a limited window (usually 30 days) 104. Project Desktop has no native undo across a closed-file boundary — close the file after import and the undo stack is gone, which is why every desktop migration should keep the original MPP file as the rollback artefact.
The real rollback strategy remains: export every source plan to MPP and XML before the import starts, stamp every imported task with an *Import Batch ID* custom Text field, and if catastrophe strikes, bulk-delete by that batch ID and re-import from the cleaned source.
Cutover sequencing: (1) source goes read-only and PMs are notified; (2) final delta export captures everything that changed during the pilot window; (3) delta is imported; (4) reconciliation runs; (5) PMs get edit access and a 48-hour hyper-care window with the migration lead on call; (6) baselines are set on the destination after PMs sign off on the schedule; (7) source decommission is scheduled for 30 to 90 days out, never the same day.
Section 08
Migration partners and tools
Microsoft-certified consultants, specialist migration shops, and the Dataverse/iPaaS layer — what each is good for and how to choose.
The Microsoft Partner Network tiers consultants by competencies — Project Management is a recognised competency and there is a publicly-searchable Partner Directory. Practices that specifically deliver Project Online and Project for the Web migrations include Katalyst Partners (which lists 1,000+ Project Server migrations), Progent, PPM Express, Birdview PSA, and Aelum Consulting in the ServiceNow corner of the market for teams moving off Project Online entirely.
On the specialist migration-tool side, FluentPro ships Project Migrator and FluentBooks specifically for project-management platform migrations and is listed in the Microsoft Marketplace; it supports Asana, Smartsheet, Planner, Project Online, and Project for the Web with built-in object mapping151.
Relokia Migration Wizard covers MS Project to common PM destinations and exports Groups, Tasks (with Comments and Custom Fields), Task Dates, Created Date, and Users — practitioners note that MS Project does not have native task comments and Relokia synthesises one from the Notes field instead.
On the ETL and iPaaS side, Fivetran, Airbyte, Stitch, Workato and MuleSoft all have Microsoft Dataverse and Microsoft 365 connectors. Their role in a Project migration is rarely the migration itself — it is the staging layer that lands source data into a warehouse, the transformation layer that converts resource names and resolves dependencies, and the ongoing-sync layer that takes over once the one-time migration is complete.
Microsoft's own implementation guidance for Dynamics 365 / Power Platform — which Project for the Web shares as a backend — recommends a sandbox-first environment strategy, with separate Dev, Test and Production tenants and a tested promotion pipeline 74.
Managed-migration cost ranges vary widely. PPM Express advertises predictable enterprise pricing starting around $7,200/year for unlimited users, and partners scoping a migration service typically price by project rather than by seat.
A clean desktop-MPP consolidation of 25 to 50 plans without resource pools usually lands in the $5,000–$15,000 range; an enterprise Project Online to Project for the Web move with custom fields, baselines, timesheets and Power BI report rebuilds typically runs $40,000–$150,000 depending on plan count and historical depth148.
For teams that want to outsource the migration end-to-end, FlitStack specialises in Microsoft Project migrations and handles the field mapping, edition-fit assessment, calendar and resource pool setup, baseline preservation, and validation work described in Sections 5 and 7 of this guide. Pricing is fixed-fee, based on plan count and source platform, with separate line items for historical actuals depth and timesheet preservation so the scope is transparent before signature.
This is one of several legitimate paths — the right choice for any given team depends on whether they want a Microsoft Partner Network consultancy, a specialist tool like FluentPro Project Migrator, an iPaaS-first approach, or an end-to-end managed migration. Explore FlitStack →
Section 09
Frequently asked questions
The eight questions every Microsoft Project migration team works through before they sign the scope.
References
Sources
- 1 Microsoft Project — Wikipedia
- 3 Migrating work items — Microsoft Q&A
- 8 Get Ready for Microsoft 365 Ticking Timebomb in 2026 — r/sysadmin
- 11 Microsoft Project Server — Wikipedia
- 18 Upsert Multiple records in Microsoft Dataverse — Microsoft Learn
- 19 Service protection — Finance & Operations | Dynamics 365 | Microsoft Learn
- 22 Project programming reference — Microsoft Learn
- 25 Project programming basic operations — Microsoft Learn
- 26 Microsoft Project Online programming — Microsoft Community Hub
- 27 Configure table relationship cascading behavior (Microsoft Dataverse) — Power Apps
- 34 Project Online software boundaries and limits — ProjectOnline | Microsoft Learn
- 36 Project object model — Microsoft Learn
- 43 Project for the Web — 10 custom fields hard limit (Microsoft Tech Community)
- 44 Create a custom field in Project — Microsoft Support
- 45 Microsoft Project 2016 — Change Field Drop Down List (Stack Overflow)
- 50 MS Project Custom Fields Not Calculating Correctly — Microsoft Q&A
- 53 File formats supported by Project desktop — Microsoft Support
- 57 Export or import data to another file format — Microsoft Support
- 60 How to import Actual Work to MS Project 2013 from CSV — pm.stackexchange
- 69 Importing a Task Outline Structure into Project — Microsoft Learn
- 71 MS Project cannot open CSV in UTF-8 or ANSI encoding — Microsoft Q&A
- 74 Dynamics 365 environment strategy guidance — Microsoft Learn
- 75 Import Excel data into Project — Microsoft Support
- 84 Notes fields — Microsoft Support
- 93 Migrate attachments when moving Production database between D365 F&O LCS projects — Microsoft Q&A
- 97 File formats supported by Project desktop (alternate doc page) — Microsoft Support
- 102 Import a Microsoft Project file with the Import module — ServiceNow
- 104 Restore deleted Microsoft Dataverse table records — Power Platform admin
- 113 Keeping the original Date Modified/Modified By in MS Teams/SharePoint — Microsoft Q&A
- 115 Import Actual Work numbers in MS Project (bulk import) — Microsoft Q&A
- 125 What is the EU Data Boundary? — Microsoft Privacy
- 130 Microsoft completes landmark EU Data Boundary — Microsoft On the Issues
- 133 Comment on tasks in Microsoft Planner — Microsoft Support
- 134 Timesheet entries move task's start date — Microsoft Tech Community
- 135 Link tasks in a project — Microsoft Support
- 148 MS Project Alternative: Top 15 Tools Compared For 2026 — Monday
- 151 Project Migrator — Microsoft Marketplace (FluentPro Software)
Need help running this migration?
FlitStack AI runs Microsoft Project migrations end-to-end.
Fixed-fee pricing, a hands-on migration engineer, full field mapping and validation. The work described in this guide — done for you.