Project Management migration guide

The Definitive Guide to Migrating to Microsoft Project

Microsoft Project is a schedule-first PM platform whose migrations live or die on edition choice — Project for the Web on Dataverse versus the retiring Project Online versus desktop MPP — and on preserving task dependencies, baselines, and resource assignments through formats that were never designed to round-trip.

23 min read 9 sections Updated May 27, 2026
Microsoft Project
Projects
Tasks
Subtasks
Comments
Attachments
Dependencies

Inside this guide

What you'll learn, section by section

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 07

    Validation and cutover

    What to verify after the import job, in what order — and how to fail safely when something is wrong.

  8. 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.

  9. 09

    Frequently asked questions

    The eight questions every Microsoft Project migration team works through before they sign the scope.

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 platform Contacts Companies Deals Tickets Tasks Notes
Standard objects orbit the platform; every association can be many-to-many with optional labels.

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-1d etc., but rejects free-form text. If the source exports Task 5, FS, 2 days you 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.

Rule

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.

SOURCE MICROSOFT PROJECT FirstName, LastName firstname, lastname AccountName company AnnualRevenue annualrevenue Owner.Email hubspot_owner_id CreatedDate createdate
Field-mapping flow — every source field resolves to a destination property or an explicit drop.

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

Source Destination
  • 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

Source Destination
  • 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.

1 Read-only Source goes write-frozen 2 Final delta Export incremental changes 3 Import Load into Microsoft 4 Validate Reconcile + spot-check 5 Cut over Users on new system
Cutover sequencing — five gated phases between source read-only and full user access.

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 totalsGROUP BY Resource on 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. 1 Microsoft Project — Wikipedia
  2. 3 Migrating work items — Microsoft Q&A
  3. 8 Get Ready for Microsoft 365 Ticking Timebomb in 2026 — r/sysadmin
  4. 11 Microsoft Project Server — Wikipedia
  5. 18 Upsert Multiple records in Microsoft Dataverse — Microsoft Learn
  6. 19 Service protection — Finance & Operations | Dynamics 365 | Microsoft Learn
  7. 22 Project programming reference — Microsoft Learn
  8. 25 Project programming basic operations — Microsoft Learn
  9. 26 Microsoft Project Online programming — Microsoft Community Hub
  10. 27 Configure table relationship cascading behavior (Microsoft Dataverse) — Power Apps
  11. 34 Project Online software boundaries and limits — ProjectOnline | Microsoft Learn
  12. 36 Project object model — Microsoft Learn
  13. 43 Project for the Web — 10 custom fields hard limit (Microsoft Tech Community)
  14. 44 Create a custom field in Project — Microsoft Support
  15. 45 Microsoft Project 2016 — Change Field Drop Down List (Stack Overflow)
  16. 50 MS Project Custom Fields Not Calculating Correctly — Microsoft Q&A
  17. 53 File formats supported by Project desktop — Microsoft Support
  18. 57 Export or import data to another file format — Microsoft Support
  19. 60 How to import Actual Work to MS Project 2013 from CSV — pm.stackexchange
  20. 69 Importing a Task Outline Structure into Project — Microsoft Learn
  21. 71 MS Project cannot open CSV in UTF-8 or ANSI encoding — Microsoft Q&A
  22. 74 Dynamics 365 environment strategy guidance — Microsoft Learn
  23. 75 Import Excel data into Project — Microsoft Support
  24. 84 Notes fields — Microsoft Support
  25. 93 Migrate attachments when moving Production database between D365 F&O LCS projects — Microsoft Q&A
  26. 97 File formats supported by Project desktop (alternate doc page) — Microsoft Support
  27. 102 Import a Microsoft Project file with the Import module — ServiceNow
  28. 104 Restore deleted Microsoft Dataverse table records — Power Platform admin
  29. 113 Keeping the original Date Modified/Modified By in MS Teams/SharePoint — Microsoft Q&A
  30. 115 Import Actual Work numbers in MS Project (bulk import) — Microsoft Q&A
  31. 125 What is the EU Data Boundary? — Microsoft Privacy
  32. 130 Microsoft completes landmark EU Data Boundary — Microsoft On the Issues
  33. 133 Comment on tasks in Microsoft Planner — Microsoft Support
  34. 134 Timesheet entries move task's start date — Microsoft Tech Community
  35. 135 Link tasks in a project — Microsoft Support
  36. 148 MS Project Alternative: Top 15 Tools Compared For 2026 — Monday
  37. 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.