Microsoft Project Online retires September 30, 2026, migrate to a modern platform before it's too late.Start migration
Back to BlogValidate Data After Migration: The Line-by-Line Audit Before You Trust Project Online Cutover
Migration

Validate Data After Migration: The Line-by-Line Audit Before You Trust Project Online Cutover

"Import successful" isn't proof. Validate data after migration with the five-layer audit that catches broken baselines and dependencies before a sponsor does.

Onplana TeamJuly 5, 202611 min read

"Import successful" is the most dangerous sentence in any Project Online migration. It confirms the tool moved bytes from one system to another. It says nothing about whether those bytes are the same schedule you had before, which is exactly why you validate data after migration instead of taking the log at its word. By the time anyone finds out otherwise, the wrong numbers have already fed a status report, a resourcing decision, or a slide in front of a sponsor.

Every migration tool logs success when the import job finishes without throwing an error. That log entry means the file parsed and every row landed somewhere. It does not mean the row landed in the right field, that a dependency kept its lag value, or that a baseline is a genuine historical snapshot instead of a flat copy of the current schedule. Those failures are silent by design: nothing crashes, nothing shows a red banner, and the Gantt chart looks correct at a glance. The only way to catch them is to validate data after migration deliberately, before anyone builds on top of it.

TL;DR

A clean import log is not validation. Validate data after migration with a five-layer audit run project by project: task counts and dates, all four dependency types with their lag values, baseline snapshots (not flat copies), custom field values (not just field names), and resource assignment percentages against the original allocations. Set a tolerance before you look at results, not after. Any project that fails a layer goes on a hold list before anyone reports on it, and the audit ends with a sign-off document, not a verbal "looks fine."

Why "Import Successful" Isn't the Same as Correct

A migration tool's success message answers one narrow question: did the parser reach the end of the file without an unhandled exception? That is a useful signal, but it is a parsing signal, not a data-fidelity signal. The parser can succeed while dropping a field it doesn't recognize, flattening a structure it doesn't support, or silently defaulting a value it can't map.

This is why the audit discipline behind missing baselines after migration exists as its own post: a tool can report a clean import while every baseline in the portfolio has silently collapsed into a copy of the current schedule. The failure is invisible until someone opens the variance view three weeks later and finds every project reporting zero variance, which reads as good news until you realize it means the comparison data is gone, not that performance is perfect.

Treat the import log as step zero, not step done. It tells you the migration didn't crash. Whether it's correct is a separate question that needs its own evidence.

The Five-Layer Audit: How to Validate Data After Migration

Work through five layers in sequence, from coarse to fine, to validate data after migration properly. Each layer catches a different failure mode, and running them in order means you find the cheap-to-fix problems before spending time on the expensive ones.

  1. Task counts and dates. Pull the original Project Online project list and match it against the destination tool, project for project, task for task. A task count mismatch is the fastest, cheapest signal that something didn't import cleanly, and it should be the first thing you check on every project.
  2. All four dependency types with lag. Finish-to-Start is the easy case almost every migration tool handles correctly. Confirm Start-to-Start, Finish-to-Finish, and Start-to-Finish dependencies carried their lag or lead values, not just the relationship type. A dependency that imports as FS with no lag when it was SS with a 3-day lag in the source changes the computed critical path without anyone noticing.
  3. Baseline snapshots, not flat copies. A baseline that matches the current schedule exactly, field for field, almost certainly imported as a copy rather than a preserved historical snapshot. Every variance report depends on the baseline being a true point-in-time capture, which is why this layer is where the most consequential silent failures hide, as detailed in migrating Project Online baselines without losing history.
  4. Custom field values, not just field names. A custom field that exists in the destination tool with the right label but shows blank or default values for every migrated project has a mapping problem: the field structure moved, the data didn't.
  5. Resource assignment percentages against original allocations. Assignment percentages sometimes survive import while the underlying leveling delays that had adjusted them do not, which quietly shifts computed finish dates earlier than the source schedule actually supported.

The diagram below shows these five layers as a validation gate: a project only reaches the sign-off document after clearing every layer, and a failure at any layer routes the project to a hold list rather than letting it through by default.

The five-layer data validation gate for Project Online migration Five-Layer Validation Gate 1. Task counts and dates 2. Dependencies with lag values 3. Baseline snapshots 4. Custom field values 5. Resource assignments All five layers pass: sign-off document Any layer fails: project goes on the hold list, not into a report

Run these five checks against a sample before running them against the full portfolio. If layer three (baselines) fails on more than a handful of projects, stop and diagnose the migration tool's baseline handling before continuing the audit; a systemic failure caught early is a configuration fix, while the same failure discovered project by project across a 150-project portfolio is weeks of manual rework, and it's the kind of finding that turns your migration from a scheduling exercise back into a data-engineering problem.

How Do You Verify All Four Dependency Types Survived?

Dependency verification is where most audits get shallow, because Finish-to-Start dependencies are common, easy to eyeball, and rarely broken. The other three types are where migrations quietly fail.

Pull a dependency export from both the Project Online source and the destination tool, then compare relationship type and lag value side by side for every non-FS dependency in the project. Start-to-Start dependencies with a lag are especially prone to importing as plain FS, because some migration tools default unmapped relationship types to Finish-to-Start rather than flagging them as unsupported.

The consequence compounds. A dependency that silently changes type doesn't just misrepresent one relationship; it changes the computed critical path, which changes float on every downstream task, which means every schedule risk assessment built on top of the migrated data is working from a wrong picture without any visible error. For the mechanics of what specifically goes wrong at the dependency layer, see broken dependencies after migration, which catalogs the failure patterns this audit step is designed to catch.

Detecting Baseline Collapse Before Variance Reporting Breaks

Project Online stores baseline data in fields separate from the current schedule: BaselineStart, BaselineFinish, BaselineWork, and BaselineCost for the primary baseline, with BaselineXStart through BaselineXCost for baselines 1 through 10. A migration tool that imports current schedule fields correctly can still fail this layer entirely if it never reads the BaselineX fields at all.

The tell is specific and checkable in minutes: open the variance view for a sample of migrated projects. If baseline dates match current dates exactly, project after project, the baseline imported as a copy, not a snapshot. Genuine baselines almost never match current dates perfectly across an entire portfolio; real projects drift, and a drift-free baseline is itself the signal something is wrong.

If baseline collapse shows up in your sample, export Project Online data for the BaselineX fields directly via OData while the source tenant is still live, and treat the fix as a re-import of baseline data specifically, not a full re-migration. Waiting to discover this after the source tenant goes read-only turns a data-mapping fix into a permanent, unrecoverable loss.

Building the Line-by-Line Comparison Method

A spot check tells you a problem might exist. A line-by-line comparison tells you exactly which projects and which fields are affected, which is what a sign-off document actually needs.

  1. Export the source of truth. Pull a complete OData export of every project, task, dependency, baseline, custom field, and assignment from Project Online before it goes read-only.
  2. Export the same scope from the destination. Match the export to the same field set and the same project list, project ID to project ID.
  3. Diff programmatically, not visually. Load both exports into a spreadsheet or a lightweight script and compare row by row. Visual comparison across more than a handful of projects misses exactly the silent, single-field discrepancies this audit exists to catch.
  4. Log every discrepancy with its tolerance status. A discrepancy inside your pre-set tolerance (see below) gets logged and passed. A discrepancy outside tolerance routes the project to the hold list.
  5. Re-run after any re-import. A fix to one field mapping can introduce a regression in an adjacent field; re-run the full comparison, not just the field you fixed.

Set your tolerance before you see the results, not after. A defensible working threshold for most PMOs is zero tolerance for missing tasks, missing dependencies, or missing baselines, paired with a five percent variance ceiling for cost and duration fields, which absorbs rounding differences between systems without absorbing an actual data-mapping bug. Choosing tolerance after seeing which projects fail is how audits quietly get watered down until nothing fails.

What Tools Skip Silently

Every migration tool documents what it imports. Almost none document, with the same prominence, what it silently drops. The gaps worth checking explicitly, because they rarely appear in a migration tool's marketing material:

  • Baseline history beyond baseline zero. Many tools import only the active baseline, dropping baselines 1 through 10 without a warning, even though PWA supports up to eleven per project.
  • Lag and lead values on non-FS dependencies, as covered above.
  • Enterprise Custom Field lookup table values, as opposed to just the field definition. A dropdown field can migrate with its structure intact and every stored value blank.
  • Resource calendar exceptions tied to individual resources rather than the enterprise calendar, which quietly changes computed working time for those resources' assignments.
  • Deleted-but-not-purged tasks that still appear in OData exports and can inflate task counts on the source side in a way that makes an otherwise-correct migration look like it lost data, when the real issue is a comparison artifact.

Before starting your comparison, ask your migration tool's documentation, or its vendor directly, which of these five it handles and which it doesn't. A vendor who can answer specifically is a different signal than one who says "everything migrates."

The Sign-Off Checklist a PMO Lead Can Hand to Auditors

The end product of this audit isn't a feeling that the data looks right. It's a document with enough specificity that someone outside the migration team, a compliance auditor, a new PMO director eighteen months from now, can verify the claim without redoing the work.

For each project, the sign-off record should capture:

  1. Project ID and name, matched between source and destination.
  2. Task count in source versus destination, with any discrepancy explained.
  3. Dependency audit result: pass or fail, by dependency type, with lag values spot-checked.
  4. Baseline audit result: confirmed as historical snapshot, with the baseline date range noted.
  5. Custom field audit result: fields checked, with any blank-value fields flagged.
  6. Assignment audit result: allocation percentages compared, with any leveling-delay discrepancy noted.
  7. Overall status: passed, passed with noted exceptions, or held for remediation.
  8. Auditor name and date.

Store this alongside the project in your document management system, not in a spreadsheet that lives only on the migration lead's laptop. When a 2029 audit request asks whether a specific project's data was verified after migration, this record is the answer, and "we're pretty sure it was fine" is not an acceptable substitute for it.

When to Escalate: What Validation Failures Mean for Go-Live

Not every discrepancy should stop a rollout, but every PMO needs a pre-agreed threshold for what does. A single custom field with a mapping gap on one low-priority project is a remediation ticket. Baseline collapse across more than 10 percent of a sample, or a systemic dependency-type failure, is a stop-the-rollout finding: continuing to migrate more projects on a broken pipeline just multiplies the cleanup.

Escalate systemic findings to whoever owns the migration decision, using the specific evidence from the sign-off checklist, not a general concern. "Baselines failed the audit on 14 of our first 20 migrated projects, all showing baseline dates identical to current dates" is a finding a sponsor can act on. "Something seems off with the data" is not.

The free Schedule Health Check runs a version of the dependency and baseline checks in this audit against your own .mpp file, which is useful both for validating a destination-tool export and for confirming what a source Project Online file actually contains before you migrate it. For teams still deciding what to expect before cutover, the Migration Preview tool shows which data elements are likely to survive the tool boundary for a given file, which pairs well with this audit as an upfront check rather than a replacement for it.

Run the free Schedule Health Check Upload a .mpp or MSPDI XML from your destination tool and get a per-project breakdown of dependency integrity, baseline presence, and critical path validity, the same checks this audit runs by hand. No signup required. → Run the Schedule Health Check

Microsoft's Project Online lifecycle page confirms September 30, 2026 as the retirement date, which sets a hard limit on how long the source data stays live for comparison. Run this audit while Project Online is still reachable; every week closer to the deadline is a week less time to re-export anything the comparison flags.

Microsoft Project Online™ is a trademark of Microsoft Corporation. Onplana is not affiliated with Microsoft.

Validate data after migrationPost-migration data auditMigration fidelity checkMigrationProject OnlinePMOData Validation

Ready to make the switch?

Start your free Onplana account and import your existing projects in minutes.