Migration playbook · Trello and Asana

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.

Updated 6 phases16 detailed steps8 official sources
Start here

How do you migrate from Trello or Asana to Microsoft Planner?

Short answer

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.

Recommended routeExport, reshape to a task spreadsheet, then import by hand, Power Automate or Graph PowerShell

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.
Order to migrate in, and why

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.

  1. 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.
  2. 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.
  3. 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.
  4. Plan, buckets and renamed labels in PlannerTasks are created into buckets and label slots that must already exist and match the maps.
  5. Pilot: one small board, exported and importedShows unassigned tasks, throttling and what is lost, before you run large boards.
  6. 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.
  7. 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.
  8. 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.
Settings checklist: decide these before you copy

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 Trello
  • How 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 exporting
  • How 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 Trello
  • How 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 limits
  • How 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 limits
  • How 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 reference
  • How 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 limits
  • How 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 API
  • How 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 limits
  • How 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 plans
  • How 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 reference
  • How 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.

The plan, phase by phase
  1. 1

    Take stock

    Before you start

    Watch 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

    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.

    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.
    Show the detailed steps (3) →
  2. 2

    Export from Trello

    If you use Trello

    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

    Show the detailed steps (3) →
  3. 3

    Export from Asana

    If you use Asana

    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

    Show the detailed steps (2) →
  4. 4

    Set up the plan

    Show the detailed steps (2) →
  5. 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.

    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.
    Show the detailed steps (4) →
  6. 6

    Switch over

    On each board's read-only date

    Watch 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) →
You are finished when
  • 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.

Click by click

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.

Native importNone: Planner has no Trello or Asana importer, so tasks are created by hand, by Power Automate or by script
Trello exportJSON per board for every member; CSV and full Workspace export (with comments and attachments) on Premium
Asana exportProject menu > Export/Print > CSV or JSON
Planner limitsBasic plans up to 9,000 tasks, premium plans up to 3,000 tasks per plan
LabelsPlanner has 25 label slots per plan (category1 to category25 in the API)
1What you need before step one
NeedDetailsWhere to get it
Trello accessBoard membership for JSON export. Workspace admin on Premium for CSV and Workspace exports.https://trello.com
Asana accessAccess to each project you are exporting.https://app.asana.com
Microsoft 365 licencesA licence that includes Planner for every user; premium plans need a Planner premium licence.Microsoft or your partner; check current pricing
Group ownershipOwner 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
TrelloAsanaPlanner (basic plan)
WorkspaceTeamMicrosoft 365 group or team
BoardProjectPlan
ListSection (or board column)Bucket
CardTaskTask
Checklist itemsSubtasksChecklist items (or separate tasks)
LabelsTagsLabels (25 per plan)
Members on a cardAssigneeAssigned to
Due dateDue dateDue date
DescriptionNotesNotes
Comments, activityComments, activityNot imported: keep the export
  1. 1

    List every board or project

    Where: Your Application inventory and dependency map

    Record 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. 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 sheet

    In user-map.csv use the columns SourceName,Email with 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.com
    You should see: Every active member and every label in use has a row; no Planner label slot is used twice.
  3. 3

    Pick the import route per board

    Where: Your Migration wave plan

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

    Export the board as JSON

    Where: Trello (https://trello.com) > open the board > board menu > Print, Export, and Share

    Select 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. 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 .csv to 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. 3

    Convert the JSON into one row per task

    Where: PowerShell 7 on your admin PC, in the folder holding board.json

    Run the script below. It keeps open cards only and writes tasks.csv with 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 UTF8
    You 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. 1

    Export the project to CSV

    Where: Asana (https://app.asana.com) > open the project > drop-down next to the project title > Export/Print

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

    Reshape the CSV for import

    Where: Excel on your admin PC

    Copy 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 named tasks.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. 1

    Create the plan in the right group

    Where: Planner on the web (https://planner.cloud.microsoft) or the Planner app in Teams > New plan

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

    Create buckets and rename labels

    Where: The new plan > Board view (Add new bucket), and a task's Labels picker for renaming

    Add 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. 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 view

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

    Medium boards: import with Power Automate

    Where: Power Automate (https://make.powerautomate.com) > Create > Instant cloud flow

    Put 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. 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.csv

    Edit the group name, plan title and $labelMap at 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. 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: Unassigned

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

    Hand over with the board owner

    Where: A short call with the board owner, with the plan open in Teams

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

    Make the source read-only

    Where: Trello board menu > Close board, or Asana project drop-down > Archive project

    Close 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.
Worth knowing

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 effort

Best 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 effort

Best 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
Read more →

Microsoft Graph PowerShell script

Medium effort

Best 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
Read more →

Third-party migration or integration service

Medium effort

Best 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
Our advice

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.

What to do

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.

Tools that can get around this

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.

Third-party tools, not endorsed by the platform vendor. Confirm in the tool's documentation and run a pilot first.
Trello: Exporting data from Trello
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).

What to do

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.

Microsoft Support: Compare Planner basic vs premium plans
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.

What to do

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

Microsoft Learn: Planner connector reference
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.

What to do

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.

Tools that can get around this

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.

Third-party tools, not endorsed by the platform vendor. Confirm in the tool's documentation and run a pilot first.
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.

What to do

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.

Microsoft Support: Compare Planner basic vs premium plans
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.

What to do

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.

Microsoft Learn: Planner connector reference
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.

What to do

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.

What to do

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

Microsoft Learn: Planner connector reference
Finish safely

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.

CheckHow to checkWhat good looks like
Task counts match per bucket

In Graph PowerShell run (Get-MgPlannerPlanTask -PlannerPlanId $planId -All | Group-Object BucketId).Count for the bucket count and Get-MgPlannerPlanTask -PlannerPlanId $planId -All | Group-Object BucketId | Select-Object Name,Count for tasks per bucket, then compare with the rows per Bucket in tasks.csv.

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

    Reopen the source

    Where: Trello > Closed boards (from your boards list) > Reopen, or Asana > the archived project > Unarchive

    Reopen 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. 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 Excel

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

    Remove the plan

    Where: Planner on the web (https://planner.cloud.microsoft) or the Planner app in Teams > the plan > plan menu > Delete plan

    Delete 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 assignee

Cause: 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 supported

Cause: 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 errors

Cause: 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 Failed

Cause: 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 Planner

Cause: 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 export

Cause: Trello cannot export cards in the Inbox.

Fix: Move the cards to a board, then export again.

Search the full error library →

FAQ

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.

Sources

Official sources

8 official pages this guide is based on