How to migrate from Trello or Asana to Microsoft Planner
Export boards and projects from Trello or Asana, map lists, labels, members and due dates to Planner, and import tasks by hand, with Power Automate or with Microsoft Graph PowerShell.
How do you migrate from Trello or Asana to Microsoft Planner?
This moves boards from Trello, or projects from Asana, into Microsoft Planner (the task boards built into Microsoft 365). Neither Microsoft nor Trello or Asana has a direct import, so you export each board, tidy it into one row per task in a spreadsheet, and create the tasks in Planner by hand, with Power Automate (Microsoft's no-code automation tool) or with a script.
- Recommended route: Export, reshape to a task spreadsheet, then import by hand, Power Automate or Graph PowerShell
- Order: Clean up and decide where each board will live first, then set up the people, the plan and the mappings, prove the import on one board, and move the rest.
- 6 phases: Take stock, Export from Trello, Export from Asana, Set up the plan, Import the tasks and Switch over.
- You're done when: Task counts per bucket match tasks.csv, and assignees, due dates and labels match the source.
With those routes, comments, attachments and history stay in the export; paid third-party services can carry comments and attachments onto tasks. The time depends on how many open tasks each board has and which import route you use.
Uses tools you already have, and lets you match the method to the board: by hand for small boards, a flow or script for large ones.
Other options and when to use them
- Third-party service such as FluentPro Integration Cloud or Apps4.Pro Trello to Planner Migrator: Comments and attachments must sit on each task rather than in an archived export.
- Manual re-entry only: Boards have a few dozen open cards, or you want a fresh start with history left in the old tool.
Clean up and decide where each board will live first, then set up the people, the plan and the mappings, prove the import on one board, and move the rest. Close the old board only once its export is stored, because the export is the only record of what did not move.
- Inventory and clean-up of boards and projectsEvery card you import has to be checked, so archiving finished work first shrinks the job and keeps plans under their task limits.
- Microsoft 365 accounts, guests and the group for each planPlanner can only assign tasks to Microsoft 365 accounts that can see the plan, so people must exist before the import.
- User map and label mapEvery import route (script, flow or tool) uses them to set assignees and labels, and a plan has only 25 label slots.
- Plan, buckets and renamed labels in PlannerTasks are created into buckets and label slots that must already exist and match the maps.
- Pilot: one small board, exported and importedShows unassigned tasks, throttling and what is lost, before you run large boards.
- Each remaining board on its read-only date: export, then importExporting after the board stops changing means nothing is added in the old tool after its export, because no route tops up changes later.
- Automations rebuilt and the plan added to its Teams channelFlows and tabs need the plan to exist, and teams that relied on Butler or Asana rules notice the gap in the first week.
- Exports stored, old boards closed, subscription cancelled lastComments, history and anything a route did not carry live only in the export once the old tool is gone.
Built-in and third-party tools treat these differently. Tick each one off once you have decided.
Download this checklist (Excel)How each tool handles it
Built-in methodTrello: any board member can export a board as JSON, which holds only the 1,000 most recent actions (comments are included only inside that window). CSV export needs Premium, has no comments, and leaves out archived cards. A Workspace export needs Premium and a Workspace admin, includes all comments, and includes attachment files only if you tick Include raw attachments.Tip: On Premium, keep a Workspace export with raw attachments in SharePoint as the record, whatever import route you use.
Trello: Exporting data from TrelloHow each tool handles it
Built-in methodAsana: each project exports to CSV or JSON from the project menu. Asana's help page does not list what each export contains: check a sample export before you plan.FluentPro Integration Cloud (Asana)Migrates Asana comments and attachments, and reads custom field values except on the Asana Free plan or after a trial ends, where they are locked.Tip: Export one real project early and compare its columns with your Planner field map.
Asana: Project importing and exportingHow each tool handles it
Built-in methodThis guide's routes (by hand, Power Automate or Graph PowerShell) do not create comments in Planner; they stay in the export.FluentPro Integration Cloud (Trello)Migrates the last 100 comments per card. Comments are posted by the migration account, with the original author and date written into the text; formatting such as bold and quotes is lost.Apps4.Pro Trello to Planner MigratorMigrates comments. Whether the original author and date are kept: not stated in Apps4.Pro's documentation: test it in your pilot.Tip: Put each card's old link in the task notes, so people can open the original comments while the old tool stays readable.
Trello: Exporting data from TrelloHow each tool handles it
Built-in methodThis guide's routes do not upload attachment files. A Planner task can hold up to 15 references (attached files and links).FluentPro Integration CloudMigrates all attachments, but adds at most 10 to a Planner basic task; the rest are skipped.Apps4.Pro Trello to Planner MigratorMoves card attachments (files) into Planner tasks.Tip: Store the raw attachments export in the plan's group SharePoint library and link to it from the plan.
Microsoft Learn: Microsoft Planner limitsHow each tool handles it
Built-in methodPlanner: a task has one checklist with up to 20 items. This guide's conversion script puts the checklist text in the CSV, but the import script does not create checklist items: add them by hand or extend the script.FluentPro Integration CloudMoves only the first checklist per Trello card, up to 20 items, with names over 100 characters cut short. Asana subtasks become checklist items (title and status only) by default, or tasks of their own.Apps4.Pro Trello to Planner MigratorSays checklists are preserved.Tip: Turn long checklists into separate tasks before you import.
Microsoft Learn: Microsoft Planner limitsHow each tool handles it
Built-in methodPlanner: each plan has 25 label slots (category1 to category25 in the connector and API). The script and flow apply only labels in your label map.FluentPro Integration CloudMigrates only the first 25 labels and sets them on tasks to match the source; others are skipped.Apps4.Pro Trello to Planner MigratorMaps Trello labels to Planner labels.Tip: Merge duplicate labels and tags first, and rename the plan's labels before the import.
Microsoft Learn: Planner connector referenceHow each tool handles it
Built-in methodPlanner: tasks are assigned to Microsoft 365 accounts, up to 20 per task. People without an account in the plan's group, including outside collaborators who are not added as guests, end up unassigned.FluentPro Integration CloudUsers are not created: they must already exist in the target. Mapped users are added to the plan and its Microsoft 365 group. Up to 20 assignees per task.Apps4.Pro Trello to Planner MigratorMaps Trello board members to Planner plan members.Tip: Map people by email, not by name, and add guests to the group before you import.
Microsoft Learn: Microsoft Planner limitsHow each tool handles it
Built-in methodPlanner: the created date and creator of a task are set by Planner when the task is created, so imported tasks show the import date and the importing account.FluentPro Integration CloudCreated date is set to the migration date and the migration account is shown as creator. Completed By shows the migration account, because the Planner API cannot set it. FluentPro warns that Planner basic notifies group members during the migration.Apps4.Pro Trello to Planner MigratorNot stated in Apps4.Pro's documentation: test it in your pilot.Tip: Tell board members to expect a burst of Planner notifications on import day.
Microsoft Learn: Use the Planner REST APIHow each tool handles it
Built-in methodThis guide's conversion script exports open cards only. Trello's CSV leaves out archived cards by default. A basic plan holds up to 9,000 tasks, with no more than 3,000 active (not completed).Apps4.Pro Trello to Planner MigratorLets you include or exclude archived cards, and mark them completed in Planner.FluentPro Integration CloudArchived cards: not stated in FluentPro's documentation: test it in your pilot.Tip: Move only open work, and keep the export as the record of finished cards.
Microsoft Learn: Microsoft Planner limitsHow each tool handles it
Built-in methodPlanner: those features exist only in premium plans. The Power Automate Planner connector, and this guide's script, create tasks in basic plans only.FluentPro Integration Cloud (Asana)Asana dependencies and task hierarchy are not kept in Planner basic.Apps4.Pro Trello to Planner MigratorPremium plans: not stated on this tool's page (Apps4.Pro has a separate premium migration page): check with Apps4.Pro.Tip: Import into a basic plan and re-create premium features by hand, or rebuild the board in a premium plan.
Microsoft Support: Compare Planner basic vs premium plansHow each tool handles it
Built-in methodPower Automate route: the Planner connector allows 100 calls per connection every 60 seconds, and creating a task and then its details uses two calls. Script route: keep the pause between tasks.FluentPro Integration CloudOne migration account can create at most 20,000 tasks, so larger moves are split across accounts.Tip: Run large boards one at a time, outside working hours.
Microsoft Learn: Planner connector referenceHow each tool handles it
Built-in methodThis guide's script and flow create new tasks every time they run, so a second run makes duplicates. There is no top-up of changes made after the export.FluentPro Integration CloudCreate new or merge with existing Plans adds data into plans with matching names. Create new and remove existing Plans deletes those plans and all their tasks first.Apps4.Pro Trello to Planner MigratorIncremental runs: not stated in Apps4.Pro's documentation: test it in your pilot.Tip: Test on a copy plan, and delete it before the real import.
- 1
Take stock
Before you startWatch out: Planner assigns tasks to Microsoft 365 accounts, so names that match two people or guests with no account end up unassigned.
Ways around it
- Map people by email, and add outside collaborators as guests in the group before you import.
Tools that can do it
- FluentPro Integration CloudUser Mapping pairs source users with existing target users and adds them to the plan's group. Up to 20 assignees per task.
- Apps4.Pro Trello to Planner MigratorMaps Trello board members to Planner plan members, and Trello labels to Planner labels.
Watch out: A basic plan has 25 labels and holds up to 9,000 tasks, with no more than 3,000 active. Each task takes up to 20 assignees and 20 checklist items. Premium plans hold up to 3,000 tasks.
Ways around it
- Merge duplicate labels and tags, and split any board that would go over the limit.
Show the detailed steps (3) →Watch out: Dependencies, timelines, custom fields and sprints exist only in premium plans, which need a separate Planner licence for the people using them.
Ways around it
- Import into a basic plan and re-create those features by hand, or rebuild the board in a premium plan.
- 2
Export from Trello
If you use TrelloShow the detailed steps (3) →Watch out: By hand, flow or script: comments, attachments and history do not move. Trello's CSV has no comments, and the board JSON holds only the latest 1,000 actions.
Ways around it
- Keep the export in the team's SharePoint library as the record, and link to it from the plan.
Tools that can do it
- FluentPro Integration Cloud (Trello)Migrates the last 100 comments per card, all attachments and the first checklist per card.
- Apps4.Pro Trello to Planner MigratorMoves Trello cards with comments, attachments, checklists, labels and due dates into Planner tasks.
- 3
Export from Asana
If you use AsanaShow the detailed steps (2) →Watch out: By hand, flow or script: Asana comments, attachments and rules do not move with the CSV.
Ways around it
- Keep the export as the record, and rebuild rules you still need as Power Automate flows.
Tools that can do it
- FluentPro Integration Cloud (Asana)Migrates Asana comments and attachments, and turns subtasks into checklist items or tasks. Dependencies are not kept in Planner basic.
- 4
- 5
Import the tasks
Watch out: Power Automate route: the Planner connector allows 100 calls per minute per connection, so large flows slow down or fail.
Ways around it
- Keep the flow's concurrency low or add a short delay, and run large boards one at a time.
Show the detailed steps (4) →Watch out: The Power Automate Planner connector, and this guide's script, work with basic plans only.
Ways around it
- Import into a basic plan, or rebuild a premium plan by hand.
- 6
Switch over
On each board's read-only dateWatch out: Automations and Power-Ups do not export, and cancelling the old tool leaves history only in your exports.
Ways around it
- List every rule per board during the stocktake, and keep the exports in SharePoint before you cancel.
Turn this phase into dated tasks with the cutover planner
Show the detailed steps (2) →
- Task counts per bucket match tasks.csv, and assignees, due dates and labels match the source.
- Board members can open the plan from the Teams channel and update a task.
- Each owner has signed off their plan, and needed automations run as flows.
- The Trello board or Asana project is closed or archived, and its export is stored in SharePoint.
Tools named in this plan are independent third-party products, not endorsed by the platform vendor and not paid placements. Check the tool's own documentation and run a pilot first.
What does each step involve?
Open a part when you reach it in the plan. Each step says where to go, what to do and what you should see.
About this migrationWhat it covers, limits at a glance
Neither Microsoft nor Trello or Asana provides a direct migration into Microsoft Planner. You export each Trello board or Asana project, reshape the export into one row per task, and create the tasks in Planner. Small boards are quickest by hand. For dozens or hundreds of tasks, use Power Automate with the Planner connector or a Microsoft Graph PowerShell script.
Planner comes in basic plans (in every Microsoft 365 group) and premium plans that add timelines, dependencies, custom fields and sprints. The scripted routes in this guide create tasks in basic plans. If you are also moving plans between Microsoft 365 tenants, use the Microsoft 365 groups and Planner migration guide.
1What you need before step one
| Need | Details | Where to get it |
|---|---|---|
| Trello access | Board membership for JSON export. Workspace admin on Premium for CSV and Workspace exports. | https://trello.com |
| Asana access | Access to each project you are exporting. | https://app.asana.com |
| Microsoft 365 licences | A licence that includes Planner for every user; premium plans need a Planner premium licence. | Microsoft or your partner; check current pricing |
| Group ownership | Owner of the Microsoft 365 group (or team) that will hold each plan. | Microsoft 365 admin center (https://admin.microsoft.com) > Teams & groups |
| Power Automate (optional) | For flow-based imports, with the Planner and Excel Online (Business) connectors. | https://make.powerautomate.com |
| Microsoft Graph PowerShell (optional) | For scripted imports, with consent for Tasks.ReadWrite, Group.Read.All and User.Read.All. | Install Microsoft Graph PowerShell |
2Inventory boards and projects and agree the mapping3 steps
| Trello | Asana | Planner (basic plan) |
|---|---|---|
| Workspace | Team | Microsoft 365 group or team |
| Board | Project | Plan |
| List | Section (or board column) | Bucket |
| Card | Task | Task |
| Checklist items | Subtasks | Checklist items (or separate tasks) |
| Labels | Tags | Labels (25 per plan) |
| Members on a card | Assignee | Assigned to |
| Due date | Due date | Due date |
| Description | Notes | Notes |
| Comments, activity | Comments, activity | Not imported: keep the export |
- 1
List every board or project
Where: Your Application inventory and dependency mapRecord each board or project with its owner, number of open cards or tasks, labels or tags in use, members, automations and Power-Ups, and the target Microsoft 365 group. Mark boards that use dependencies, custom fields or timelines, because they need a premium plan or a manual rebuild.
You should see: One row per board with an owner, a task count, a target group and a decision: move, archive only, or drop. - 2
Build the user and label maps
Where: Two CSV files in your migration folder: user-map.csv and a label mapping in your Identity and licence mapping sheetIn
user-map.csvuse the columnsSourceName,Emailwith each Trello username or Asana assignee name and their Microsoft 365 address. For labels, list every Trello label or Asana tag and the Planner label slot (1 to 25) it becomes.SourceName,Email jsmith,jane.smith@contoso.com alee,alex.lee@contoso.comYou should see: Every active member and every label in use has a row; no Planner label slot is used twice. - 3
Pick the import route per board
Where: Your Migration wave planUse manual re-entry for boards with a few dozen cards, Power Automate for teams comfortable with flows, and the Graph PowerShell script for many boards or large ones. Set a read-only date for each board.
You should see: Each board has a route, a date and an owner who will check the result.
3Export from Trello3 steps
- 1
Export the board as JSON
Where: Trello (https://trello.com) > open the board > board menu > Print, Export, and ShareSelect Export as JSON and save the file as
board.json. Any board member can do this. The JSON holds every card, list, label, member and checklist, but only the 1,000 most recent actions, so it is not a complete comment history. Move cards out of your Inbox first: Inbox cards cannot be exported.You should see: A board.json file that opens in a JSON viewer and contains cards, lists, labels and checklists arrays. - 2
Or export CSV and the full Workspace (Premium)
Where: Trello > board menu > Print, Export, and Share (CSV), or your Workspace > Settings > Export (Workspace admins)On a Premium Workspace you can export the board as CSV. Archived cards are excluded by default; add
.csvto the end of the board URL to include them. Comments are not in the CSV. For a full archive, a Workspace admin exports all boards from Settings > Export and ticks Include raw attachments to get attachments in a ZIP.You should see: A CSV for the board, and (optionally) a Workspace export ZIP saved in the team's SharePoint library. - 3
Convert the JSON into one row per task
Where: PowerShell 7 on your admin PC, in the folder holding board.jsonRun the script below. It keeps open cards only and writes
tasks.csvwith the columns the import uses. Open the file in Excel, check bucket names and remove rows you are not moving.# Convert a Trello board JSON export into tasks.csv for import (open cards only) $b = Get-Content -Raw -Path .\board.json | ConvertFrom-Json $lists = @{}; $b.lists | ForEach-Object { $lists[$_.id] = $_.name } $labels = @{}; $b.labels | ForEach-Object { $labels[$_.id] = if ($_.name) { $_.name } else { $_.color } } $members = @{}; $b.members | ForEach-Object { $members[$_.id] = $_.username } $b.cards | Where-Object { -not $_.closed } | ForEach-Object { $card = $_ $items = ($b.checklists | Where-Object { $_.idCard -eq $card.id }).checkItems.name -join ';' [pscustomobject]@{ Title = $card.name Bucket = $lists[$card.idList] DueDate = $card.due Assignees = ($card.idMembers | ForEach-Object { $members[$_] }) -join ';' Labels = ($card.idLabels | ForEach-Object { $labels[$_] }) -join ';' Checklist = $items Notes = $card.desc SourceUrl = $card.shortUrl } } | Export-Csv -Path .\tasks.csv -NoTypeInformation -Encoding UTF8You should see: tasks.csv has one row per open card with Title, Bucket, DueDate, Assignees, Labels, Checklist, Notes and SourceUrl.
4Export from Asana2 steps
- 1
Export the project to CSV
Where: Asana (https://app.asana.com) > open the project > drop-down next to the project title > Export/PrintChoose CSV and save the file. Asana can also export JSON from the same menu, and can export a search view or My Tasks. Export each project you are moving.
You should see: A CSV with one row per task and a column for each field in the project. - 2
Reshape the CSV for import
Where: Excel on your admin PCCopy the Asana columns for task name, section, assignee, due date, tags and notes into a new sheet with the headers
Title,Bucket,DueDate,Assignees,Labels,Notes. Replace assignee names using user-map.csv, and tags with your Planner label names. Decide whether subtasks become checklist items on the parent or tasks of their own. Save as CSV UTF-8 namedtasks.csv.You should see: tasks.csv uses the same six columns as the Trello route, with one row per task you are moving.
5Create the plan, buckets and labels2 steps
- 1
Create the plan in the right group
Where: Planner on the web (https://planner.cloud.microsoft) or the Planner app in Teams > New planChoose a basic plan, name it after the board, and add it to the existing Microsoft 365 group or team from your inventory (or create a new group only if the audience differs). Check the group's members match the board's members.
You should see: The plan opens on the Board view with an empty To do bucket. - 2
Create buckets and rename labels
Where: The new plan > Board view (Add new bucket), and a task's Labels picker for renamingAdd a bucket for each Trello list or Asana section, in the same order. Open any task, select Labels, and rename the label slots to the names in your label map. The script also creates any missing bucket by name.
You should see: Buckets match the source lists or sections, and the plan's labels show your mapped names.
6Import the tasks4 steps
- 1
Small boards: enter tasks by hand
Where: Planner on the web (https://planner.cloud.microsoft) or the Planner app in Teams > the plan > Board viewFor each card, select Add task in the right bucket, type the title, set the due date and assignee, then open the task to add labels, notes and checklist items. Paste the card's Trello or Asana link into notes if you want a pointer to its history.
You should see: The plan's task count per bucket matches the open cards in each list. - 2
Medium boards: import with Power Automate
Where: Power Automate (https://make.powerautomate.com) > Create > Instant cloud flowPut tasks.csv into an Excel table in OneDrive or SharePoint. Build a flow with Manually trigger a flow, then Excel Online (Business) List rows present in a table, then Apply to each with Planner Create a task. Set Group Id, Plan Id, Title, Bucket Id, Due Date Time (ISO 8601), Assigned User Ids (emails separated by semicolons) and the category fields for labels. Add Planner Update task details for notes and checklist items. The connector works with basic plans only and allows 100 calls per 60 seconds per connection, so keep concurrency low.
You should see: A test run with five rows creates five tasks in the right buckets with assignees, due dates and labels. - 3
Large or many boards: import with Graph PowerShell
Where: PowerShell 7 on your admin PC, with Microsoft Graph PowerShell installed, in the folder holding tasks.csv and user-map.csvEdit the group name, plan title and
$labelMapat the top, then run the script. It looks up each user's ID, creates missing buckets, creates each task with due date, assignees and labels, and writes notes to the task details. Run it on a copy plan first.# Create Planner tasks from tasks.csv (columns: Title,Bucket,DueDate,Assignees,Labels,Notes) Connect-MgGraph -Scopes 'Tasks.ReadWrite','Group.Read.All','User.Read.All' $group = Get-MgGroup -Filter "displayName eq 'Marketing'" $planId = (Get-MgGroupPlannerPlan -GroupId $group.Id | Where-Object Title -eq 'Marketing campaigns').Id # user-map.csv columns: SourceName,Email (Trello username or Asana assignee -> Microsoft 365 address) $users = @{} Import-Csv .\user-map.csv | ForEach-Object { $users[$_.SourceName] = (Get-MgUser -UserId $_.Email).Id } # Source label name -> Planner label slot (category1 to category25) $labelMap = @{ 'Urgent' = 'category1'; 'Client' = 'category2'; 'Blocked' = 'category3' } $buckets = @{} Get-MgPlannerPlanBucket -PlannerPlanId $planId | ForEach-Object { $buckets[$_.Name] = $_.Id } Import-Csv .\tasks.csv | ForEach-Object { $row = $_ if ($row.Bucket -and -not $buckets.ContainsKey($row.Bucket)) { $buckets[$row.Bucket] = (New-MgPlannerBucket -Name $row.Bucket -PlanId $planId).Id } $params = @{ PlanId = $planId; Title = $row.Title } if ($row.Bucket) { $params.BucketId = $buckets[$row.Bucket] } if ($row.DueDate) { $params.DueDateTime = [datetime]$row.DueDate } $assign = @{} foreach ($a in ($row.Assignees -split ';' | Where-Object { $_ })) { if ($users[$a]) { $assign[$users[$a]] = @{ '@odata.type' = '#microsoft.graph.plannerAssignment'; orderHint = ' !' } } } if ($assign.Count) { $params.Assignments = $assign } $cats = @{} foreach ($l in ($row.Labels -split ';' | Where-Object { $_ })) { if ($labelMap[$l]) { $cats[$labelMap[$l]] = $true } } if ($cats.Count) { $params.AppliedCategories = $cats } $task = New-MgPlannerTask @params if ($row.Notes) { $d = Get-MgPlannerTaskDetail -PlannerTaskId $task.Id Update-MgPlannerTaskDetail -PlannerTaskId $task.Id -Description $row.Notes -IfMatch $d.AdditionalProperties['@odata.etag'] } Start-Sleep -Milliseconds 700 }You should see: The script finishes without errors and the plan shows the tasks in their buckets with assignees, due dates and labels. - 4
Fix what did not map
Where: Planner on the web (https://planner.cloud.microsoft) or the Planner app in Teams > the plan > Grid view, filtered by Assigned to: UnassignedCheck tasks with no assignee (names missing from user-map.csv), tasks with no label, and checklists. Add premium-only details such as dependencies by hand if the plan is premium.
You should see: Only tasks that were unassigned in the source remain unassigned.
7Switch the team over and freeze the source2 steps
- 1
Hand over with the board owner
Where: A short call with the board owner, with the plan open in TeamsWalk through buckets, labels and a few tasks. Add the plan as a tab in the team's channel so people find it. Rebuild any Butler rules or Asana rules that are still needed as Power Automate flows.
You should see: The owner signs off the plan in your Data validation report. - 2
Make the source read-only
Where: Trello board menu > Close board, or Asana project drop-down > Archive projectClose the Trello board or archive the Asana project on the agreed date so nobody keeps updating it. Keep the exports from Step 2 in the team's SharePoint library.
You should see: The source board or project shows as closed or archived, and new work appears only in Planner.
What can go wrong, and how do you avoid it?
The detail behind the plan: options compared, and what experienced engineers check first. Tap any item.
Compare all the ways to do this4 options
Manual re-entry
Low effortBest for: Boards with a few dozen open cards, or a fresh start where history stays in the old tool
- No tools or scripts
- Forces a clean-up of stale cards
- Slow for large boards
- Easy to miss due dates or assignees
Power Automate with the Planner connector
Medium effortBest for: Teams that already use Power Automate and boards of a few hundred tasks
- No code, repeatable per board
- Same flow can later replace Trello or Asana automations
- Basic plans only
- Throttled to 100 calls per connection per 60 seconds
Microsoft Graph PowerShell script
Medium effortBest for: Many boards or large boards moved by IT
- Handles buckets, assignees, labels and notes in one run
- Easy to rerun against a test plan
- Needs Graph permissions and PowerShell skills
- Premium-only fields still added by hand
Third-party migration or integration service
Medium effortBest for: Organisations that must keep comments or attachments with each task, or move many workspaces at once
- May carry comments and attachments that the native routes leave behind
- Check exactly what each service maps before you buy
- Gives a third party access to both systems
Re-enter small boards by hand and let the owner clean up as they go. For anything larger, use the Graph PowerShell script if IT runs the move, or Power Automate if the business owns it. Consider a third-party service only when comments and attachments must sit on each task rather than in an archived export.
Decide what you are not moving: comments, attachments and historySaves time
A Trello board CSV has no comments, and the board JSON holds only the 1,000 most recent actions. Planner has no field for a card's activity history. Recreating comments task by task is the slowest part of any import.
Agree with each board owner that history stays in an archived export. On Trello Premium, take a Workspace export (Settings > Export) with Include raw attachments and store the ZIP in the team's SharePoint library. Move only open cards and the description into Planner.
Migration tools carry comments and attachments into Planner tasks, which the CSV and script path cannot. Comments arrive posted by the migration account with the original author and date in the text, and Planner's limit of 10 attachments per task still applies.
- FluentPro Integration Cloud (Trello)Migrates the last 100 comments per card, all attachments (files go to the group's SharePoint folder) and the first checklist per card.
- FluentPro Integration Cloud (Asana)Migrates Asana comments and attachments, and turns subtasks into checklist items or separate tasks. Dependencies are not kept in Planner basic.
- Apps4.Pro Trello to Planner MigratorMoves Trello cards with comments, attachments, checklists, labels and due dates into Planner tasks.
Clean up before you exportSaves time
Old boards carry archived cards, finished lists and duplicate labels. Every row you import has to be checked, and plans have a task limit (9,000 basic, 3,000 premium).
Ask owners to archive done cards and close dead boards in Trello, or complete or delete old tasks in Asana. Split any board that would exceed the premium plan limit if you intend to upgrade it.
Fit labels into 25 slots, and tags into labelsUser impact
A Planner plan has 25 labels (category1 to category25 in the connector and API). Trello boards with many labels, and Asana projects that use tags, do not fit one to one.
List every Trello label or Asana tag in use, merge duplicates, and map the rest to at most 25 Planner labels. Rename the labels in the plan first, then use the same mapping in the import (the $labelMap in the script, or the category fields in Power Automate).
Map people by email, not by nameUser impact
The Trello JSON lists members by name and username, and Asana shows assignee names. Planner assigns tasks to Entra ID user IDs. A name that matches two people, or a guest with no Microsoft 365 account, leaves tasks unassigned.
Build a user map with one row per source person: their Trello username or Asana name, and their Microsoft 365 email. Add external collaborators as guests in the group before you import, or decide they will not be assignees.
Instead of a hand-built lookup in a script, these tools have a user mapping step that pairs each Trello or Asana member with a Microsoft 365 account and assigns tasks to it. Users are not created for you, so guests still need adding to the tenant first.
- FluentPro Integration CloudUser Mapping pairs source users with existing target users and adds mapped members to the plan and its Microsoft 365 group. Up to 20 assignees per task.
- Apps4.Pro Trello to Planner MigratorMaps Trello board members to Planner plan members, and Trello labels to Planner labels.
Choose basic or premium before you importCost lever
Dependencies, timeline, custom fields, milestones and sprints exist only in premium plans, and need the matching licence. The Planner connector in Power Automate supports basic plans only.
For boards that use Asana dependencies, custom fields or timelines, decide whether the team needs a premium plan. If so, import to a basic plan with the tools here and re-create those features by hand, or plan a manual rebuild in a premium plan.
Throttle the importPerformance
The Planner connector allows 100 API calls per connection every 60 seconds. A flow that creates a task and then updates its details uses two calls per task, so large boards hit the limit and the flow slows or fails.
Set the flow's Apply to each concurrency low, or add a short delay in the loop. In the PowerShell script, keep the Start-Sleep between tasks and run large boards one at a time.
Put each plan in the right Microsoft 365 groupUser impact
A basic plan belongs to a Microsoft 365 group, and the group's membership decides who can see it. Creating a new group for every board scatters files and conversations.
Map each Trello Workspace or Asana team to an existing team in Microsoft Teams where possible, and add the plan there. Create a new group only for boards whose audience differs.
Replace automations and Power-UpsReduces risk
Trello Butler rules, Power-Ups and Asana rules do not export. Teams that relied on them notice the gap in the first week.
List every rule and integration per board in your application inventory. Rebuild the ones still needed as Power Automate flows using the Planner connector triggers (for example When a new task is created or When a task is completed).
How do you check it worked, or roll back?
Full validation checklist7 checks
Run these before you declare the migration complete. Record the results in the data validation report.
| Check | How to check | What good looks like |
|---|---|---|
| Task counts match per bucket | In Graph PowerShell run | The total and each bucket's count equal the rows in tasks.csv. |
| Assignees came across | In the plan's Grid view, filter by Assigned to and compare a sample of people with the source board. | Every task assigned in the source is assigned to the mapped person; unassigned tasks were unassigned in the source. |
| Due dates are right, including time zone | Open ten tasks with due dates in Planner and compare them with the source cards. | Due dates match the source date; none are shifted by a day. |
| Labels map as agreed | Filter the plan by each label and compare with the source board filtered by the matching label or tag. | Each label shows the same tasks as its source label or tag. |
| The whole plan exports cleanly | In Planner on the web open the plan menu and choose Export plan to Excel, then compare with tasks.csv. | Titles, buckets, assignees, due dates and labels match the import file row for row. |
| People can see and use the plan | Ask two members of the board to open the plan from the Teams channel tab and update a task. | Both see the plan and their changes save. |
| The source is frozen | Open the Trello board or Asana project. | It shows as closed or archived, and no cards or tasks changed after the cutover date. |
Rollback planIf it goes wrong
Roll back if
- Task counts or assignees do not match and cannot be fixed before the read-only date
- The owner rejects the plan because a feature the team depends on (dependencies, custom fields, automations) is missing
- Users cannot see the plan because it was created in the wrong group
Point of no return
The import only copies data, so Trello and Asana stay as they were. Work entered in Planner after the switch exists only in Planner. The real point of no return is cancelling the Trello or Asana subscription or deleting boards and projects: after that, comments, attachments and history are only in the exports you kept.
- 1
Reopen the source
Where: Trello > Closed boards (from your boards list) > Reopen, or Asana > the archived project > UnarchiveReopen the board or unarchive the project and tell the team to keep working there.
You should see: Team members can edit cards or tasks in the source again. - 2
Copy back work done in Planner
Where: Planner on the web (https://planner.cloud.microsoft) or the Planner app in Teams > the plan > Export plan to ExcelExport the plan and filter for tasks created or changed after the cutover date. Enter those changes in Trello or Asana.
You should see: The source holds every change made since the cutover. - 3
Remove the plan
Where: Planner on the web (https://planner.cloud.microsoft) or the Planner app in Teams > the plan > plan menu > Delete planDelete the imported plan (or the test copy) so people do not use two places. If you created a new group only for this plan, delete it from the Microsoft 365 admin center as well; that removes its files and mailbox too.
You should see: The plan no longer appears in Planner or the Teams tab.
Agree the triggers and who decides before the go / no-go meeting. Use the rollback plan template.
Common problems and fixes6 errors
Tasks import with no assigneeCause: The Trello username or Asana name is missing from user-map.csv, or the person has no Microsoft 365 account or is not a group member.
Fix: Add the person to user-map.csv and to the group (as a guest if external), then assign the remaining tasks.
Planner connector: plan not found or not supportedCause: The flow points at a premium plan; the connector supports basic plans only.
Fix: Import into a basic plan, or rebuild the premium plan by hand.
Flow slows down or fails with 429 errorsCause: The Planner connector limit of 100 calls per connection per 60 seconds was reached.
Fix: Lower Apply to each concurrency, add a delay inside the loop and resubmit the failed rows.
Update-MgPlannerTaskDetail returns 412 Precondition FailedCause: The If-Match etag was missing or stale.
Fix: Read the task details again with Get-MgPlannerTaskDetail and pass the current @odata.etag with -IfMatch.
Comments and attachments missing in PlannerCause: Planner has no comment import, the Trello CSV has no comments and the JSON holds only the 1,000 latest actions.
Fix: Keep the Trello Workspace export or the Asana export as the record, and link to it from the plan.
Inbox cards are missing from the exportCause: Trello cannot export cards in the Inbox.
Fix: Move the cards to a board, then export again.
Frequently asked questions
Can Microsoft Planner import from Trello or Asana?
Not directly. Export from Trello (JSON, or CSV on Premium) or Asana (CSV or JSON), then create the tasks in Planner by hand, with Power Automate or with Microsoft Graph PowerShell.
Do Trello comments move to Planner?
Not with these routes. The board CSV has no comments and the JSON holds only the latest 1,000 actions. Keep a Workspace export as the record.
How many labels can a Planner plan have?
A plan has 25 label slots, shown as category1 to category25 in the Planner connector.
Do I need Planner premium?
Only for features such as timeline, dependencies, custom fields, milestones and sprints. Basic plans cover buckets, labels, checklists, due dates and assignments.
How many tasks can a plan hold?
Microsoft lists up to 9,000 tasks in a basic plan and 3,000 in a premium plan.
Official sources
8 official pages this guide is based on
Vendors change limits and features, so confirm details on the source before you rely on them. Last checked 4 Nov 2026.