Execute major Miro migrations — migrate boards between teams/orgs,
export board content to external systems, import data into Miro,
and re-platform from competing whiteboard tools using REST API v2.
Trigger with phrases like "migrate miro", "miro migration",
"export miro boards", "import to miro", "miro data migration".
Execute major Miro migrations — migrate boards between teams/orgs,
export board content to external systems, import data into Miro,
and re-platform from competing whiteboard tools using REST API v2.
Trigger with phrases like "migrate miro", "miro migration",
"export miro boards", "import to miro", "miro data migration".
allowed-tools
Read, Write, Edit, Bash(npm:*), Bash(node:*)
version
1.7.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
tags
["saas","miro","migration","data-export"]
compatibility
Designed for Claude Code
Miro Migration Deep Dive
Overview
Comprehensive guide for migrating Miro boards between teams and organizations, updating
from REST API v1 to v2, and re-platforming from competing whiteboard tools (Lucidchart,
FigJam). Covers board content export with cursor pagination, bulk import with rate-limit
aware queuing, widget API changes between v1 and v2, and the new app framework patterns.
Typical migration scope: dozens to thousands of boards with connectors, tags, and members.
Prerequisites
Before applying this guide, confirm you have a Miro app or workspace appropriate to the task, a dedicated non-production board where changes can be tested safely, and only the OAuth scopes or administrative access the procedure requires.
Migration Assessment
// Scan current integration for deprecated v1 patterns and board inventoryasyncfunctionassessMigration(teamId: string) {
const boards = awaitmiroFetch(`/v2/boards?team_id=${teamId}&limit=50`);
let totalItems = 0;
for (const board of boards.data) {
const items = awaitmiroFetch(`/v2/boards/${board.id}/items?limit=1`);
totalItems += items.total ?? 0;
}
console.log(`Team ${teamId}: ${boards.data.length} boards, ~${totalItems} items`);
console.log('API version: v2 (v1 deprecated 2024-01)');
console.log();
{ : boards.., totalItems };
}
# Delete the target board entirely (preserves source untouched)
curl -X DELETE "https://api.miro.com/v2/boards/${TARGET_BOARD_ID}" \
-H "Authorization: Bearer $MIRO_TOKEN"# Or delete only imported items by ID list (saved during import)cat imported-ids.txt | whilereadid; do
curl -X DELETE "https://api.miro.com/v2/boards/${TARGET_BOARD_ID}/items/${id}" \
-H "Authorization: Bearer $MIRO_TOKEN"doneecho"Rollback complete — source board unchanged"
Migration Checklist
Audit source boards: count items, connectors, tags, members
Export all source boards to JSON backup files
Create target boards in destination team/org
Run import with rate-limit aware queuing
Validate item counts (95%+ threshold)
Validate connector integrity (90%+ threshold)
Re-share boards with correct member permissions
Update any external links pointing to old board URLs
Run user acceptance testing with board owners
Decommission source boards after 30-day grace period
Instructions
Use the ordered procedures and code samples in this guide as a sequence: begin with the prerequisites, apply the configuration or operational step for the target environment, then perform the documented validation or cleanup before proceeding. Keep credentials in the documented secret store; never hard-code them in source.
Output
Following this guide produces the Miro integration outcome for its topic—configuration, validation evidence, operational recovery, or a documented migration result. Record command output and relevant identifiers so a failed step is traceable.
Examples
Start with the smallest applicable command or code example in the relevant section, using a dedicated test board and non-production credentials. Confirm the expected response or validation result before applying the pattern to production.