Skip to content

Migrate from Microsoft Project Online

All plans Member

Microsoft is retiring Project Online on 30 September 2026. Every PWA tenant goes read-only that day, and the OData feed Onplana reads stops responding shortly after. If you have meaningful work in Project Online today (even just a few projects), this is the right quarter to plan the move, because the file-by-file fallback that remains after the retirement is dramatically slower than the live-feed import described here.

If your first question is “what is actually in our estate and what shape is it in”, start there rather than here. The Estate Assessment connects to the same reporting feed and analyses your whole portfolio without importing anything: task and milestone counts, dependency shape, custom fields in use, cost coverage, resource email coverage, a per-project compatibility score, the honest gaps, and an effort estimate. Nothing is written to Project Online and nothing is created in Onplana. It runs on every plan including Free.

Assess first, then use the rest of this guide to run the move.

  • You need the URL of your Project Web App, usually https://<your-tenant>.sharepoint.com/sites/pwa.
  • You need an account with reporting access to Project Online (membership of the Portfolio Viewers group is enough; full edit rights are not required).
  • You need an access token for your SharePoint tenant. The next section shows two ways to get one. Tokens expire after about an hour, which comfortably covers a connect-and-import session; if yours expires mid-migration, mint a fresh one and reconnect.
  • Each wizard run imports one project. For a large portfolio, plan a series of runs in batches (see best practices below); batching also makes verification easier.

Onplana talks to your tenant with a standard bearer token. It is your own delegated session, so the import sees exactly the projects your account can see, and nothing in Project Online is modified.

The quick way (recommended for a one-time migration): sign in to your PWA site in the browser, press F12 to open developer tools, and copy the Authorization: Bearer eyJ... header value from any _api request on the Network tab. The import wizard shows this same walkthrough inline, with a console snippet you can paste.

The scripted way: mint an Azure AD OAuth 2.0 token with scope https://<your-tenant>.sharepoint.com/.default. Use this if your security team prefers a token issued through a registered app, or if you plan repeated runs.

The Onplana import screen, where you choose your import source. Project Online connects through the OData option; the wizard then walks through field mapping, preview, resources, and import.
  1. Open Import from the navigation and choose Project Online OData as the source.
  2. Enter your Project Web App URL as the Tenant URL, paste your access token, and click Connect.
  3. Onplana lists every published project your account can read. Pick one and click Fetch & Continue.
  4. Review the field mapping, including any custom enterprise fields the feed exposed, then the preview, then resource matching, the same steps as a file import.
  5. Create the project, and repeat from step 3 for the next one.

The OData import produces the same result as a file import, from live data instead of an exported file:

DataNotes
Project name, dates, rolled-up budgetBudget derives from the imported task costs
Tasks: names, dates, progress, priorities, notesProgress maps to task status (0 = To Do, in-between = In Progress, 100 = Done)
Work breakdown structureOutline levels become parent/subtask hierarchy
MilestonesFlagged and rendered as milestones
Estimated workFrom task work, or duration when work is absent
CostsPlanned, fixed, and baseline cost per task
Task dependenciesAll four types (FS/SS/FF/SF) with lead/lag, from the Project Server API; see the token note above
Date constraints and deadlinesFour of Project Online’s eight constraint types map directly; the others are dropped with a per-task warning so you can review the schedule
Custom enterprise fields (task-scoped)Definitions and per-task values, on every plan
Resources and assignmentsMatched to your organization by email; unmatched people can be invited from the wizard’s Resources step

Everything that cannot come across is called out as a warning before you commit, and again on the imported project’s banner:

  • Currency is not exposed by the reporting feed. Cost figures arrive as numbers; set the project currency after import.
  • Resource-scoped custom fields are not migrated (task-scoped ones are).
  • Timesheet history stays in Project Online; export it to Excel for archive before the retirement if you need it.
  • Project site content (document libraries and the Risks/Issues lists on each project’s SharePoint site) is not part of the schedule import. Those sites are ordinary SharePoint content and survive the Project Online retirement, so they can be linked into the matching Onplana project’s workspace afterwards at your own pace; nothing there is at deadline risk.

Review the Import → History record after each batch to confirm what was imported and clear any warnings.

If your tenant blocks the OData connection, or you have already started decommissioning, export each project from Microsoft Project as a .mpp or XML file and import the files instead. See Import a Microsoft Project file for that path.

For the full picture of Microsoft’s 2026 retirements and what they mean for your timeline, see the Project Online migration guide and Microsoft retirements 2026 on the main site.

  1. Migrate in batches of ten projects per sitting. Each wizard run brings one project across, which keeps failures isolated. A portfolio of fifty projects feels overwhelming as one marathon; ten runs at a time gives you a feedback loop where you spot resource-matching issues and field-mapping decisions before they propagate. Allow about half a day per batch of ten.
  2. Use a “validation project” first. Pick one mid-sized project from the portfolio (twenty to fifty tasks, a handful of resources, dependencies that matter). Import it, verify the Gantt against the Project Online view, then capture a baseline. This dry-run tells you whether the OData feed has any tenant-specific quirks that need addressing before the batches.
  3. Bring resources into Onplana first. OData imports match resources by email. Inviting the team to Onplana via Invite your team before the first batch turns every matched resource into a real assignment; otherwise you end up with a warnings list that has to be cleared by hand for every project.
  4. Plan the cutover, not just the import. The move happens in two phases: (a) get the data into Onplana while Project Online is still live, and (b) flip your team’s system of record on a chosen date. Treat (b) as a project of its own: communicate the cutover date, retire the Project Online links, and make sure end-users know where to file new requests after the flip.
  • Connect fails with “401 Unauthorized”. Two causes: (a) the token has expired (they last about an hour), so mint a fresh one and reconnect, or (b) the account behind the token doesn’t have reporting access on Project Online. An administrator can add the account to the Portfolio Viewers group without granting edit access.
  • “Task dependencies were NOT migrated” warning. The token authorized the reporting feed but not the Project Server API that holds dependency links. Everything else imported fine. Mint a token with broader scope (the Azure AD route with the .default scope covers both) and re-import the project.
  • My project list is empty even though I connected. The feed shows published projects the token’s account can read, not all projects on the tenant. Check the account’s Project Online permissions, or connect with a token from someone with full portfolio read. Also note only published projects appear; drafts saved but never published are not in the reporting feed.
  • Some tasks look one day off after import. Onplana treats task dates as calendar days and pins them to UTC precisely so they render the same for every viewer. If a date still looks shifted relative to Project Online, check the source task for an odd finish time (for example 00:00 rather than end of business) and adjust after import; the wizard’s preview step shows the exact dates before anything is created.
  • Where did my custom enterprise fields go? Task-scoped custom fields import on every plan, definitions and values. Managing and editing custom fields afterwards is a Pro+ feature, but nothing is dropped at import time. Resource-scoped custom fields are the one exception; they are skipped with a warning.
  • One project failed. Is my batch gone? No. Each wizard run is a single project, so a failure affects only that project; check its import-history warning and retry it individually.
  • OData migration + Baselines. Capture baselines per project the moment its import completes. Because Project Online itself was your prior system of record, the Project Online baseline is effectively your historical truth; the Onplana baseline becomes your forward-looking line in the sand.
  • OData migration + Rate cards. If you used Project Online’s resource cost rates, configure Rate cards before the cutover so earned-value calculations on the imported plans use the same numbers your old reports relied on.
  • OData migration + the AI assistant. After import, ask the in-app AI assistant to “summarize the imported portfolio and flag projects with missing milestones or resource conflicts.” It’s a fast quality-check pass that catches the issues humans miss when the list runs to dozens of projects.
SourcePath
Project Online (live tenant, OData feed)Direct OData import here
Project Online (decommissioned)Export each project to .mpp and use Import from Microsoft Project
Project Server on-premOData feed if exposed; otherwise per-project .mpp export
Project for the Web (the newer cloud product)Not supported as live feed today; export to .mpp per project
MS PlannerRecreate using Create your first project; Planner schedules are typically small enough for AI Kickstart to scaffold them in minutes

What is the OData feed? Project Online exposes your portfolio as a read only reporting feed. Onplana reads from it to pull your projects across; nothing in Project Online is modified.

Can I re-run the import to pick up changes? Each import creates new projects in Onplana. Import once you are ready to switch over, rather than syncing repeatedly, so you do not create duplicates. Move your team into Onplana as the system of record once the data is verified.

Will my custom enterprise fields come across? Yes, task-scoped custom fields import as Onplana custom fields, definitions and per-task values, on every plan. Each one appears as its own row in the field mapping step so you can confirm how it lands, or skip columns you don’t want.

What happens to my resource assignments? Assignments are preserved and people are matched to Onplana members by email. Unmatched names are flagged so you can reconcile them rather than creating duplicates.

Do I need an Onplana paid plan to migrate? No, OData import works on every plan including Free. Some of what comes across (Gantt, custom fields) is only visible on higher plans, but the underlying data is always imported.

How long does a full portfolio migration take? Roughly half a day per ten projects, plus a day for cutover planning and team communication. Allow more for portfolios with complex resource pools or extensive custom-field usage.

Should I keep Project Online live after the migration? Yes, until after the cutover date you publicly announced. Most teams keep Project Online read-only for 30 days after Onplana goes live as a historical reference. Decommissioning Project Online before users have fully transitioned creates panic; phasing it out works better.