MigrationFox Documentation
MigrationFox migrates files, SharePoint sites, Teams channels, Slack channels, and mailboxes across 13 platforms, from the cloud or from MigrationFox Desktop on your Windows PC. It also archives InfoPath forms to searchable PDFs and runs read-only Microsoft 365 assessments for tenants preparing a Copilot rollout. Start free with 2 GB of migration credit.
Quick Start
Get your first migration running in a few steps.
Platform Guides
Setup instructions for every supported platform.
Troubleshooting
Solutions to common errors and issues.
Supported Platforms
How It Works
Every migration follows five steps:
Quick Start Guide
Get your first migration running in a few steps.
Create an Account
Sign up at app.migrationfox.com. You get 2 GB of free migration credit (one time, never expires). No credit card required.
Create a Project
Projects are how you organize migrations, for example "Marketing Team to SharePoint" or "Google Drive to Microsoft 365". On Projects, click + New project, give it a name and an optional description.
Connect Source & Destination
On the project's Connect tab, add a connection for where data is coming from and one for where it's going (you can also add them from inside the migration wizard with + Add a connection). For Microsoft 365, the default is Sign in with Microsoft. The platform guides below cover each platform.
File shares and local folders are migrated with MigrationFox Desktop, the Windows app.
Scan the Source (optional)
On the Discover tab, click ⌕ Scan to see folders, file counts, and sizes before you migrate.
Start the Migration
On the Migrate tab, pick a tile (Microsoft 365, Other platforms, Teams & chat, InfoPath archive) and click Start. The wizard walks through Source, Destination, Choose content, Options, and Review; click Launch migration to begin. Progress shows live on the migration's page.
Tip
Run a small test migration with one subfolder before migrating your whole organization. It's the quickest way to confirm permissions and folder structure come out the way you expect.
Creating a Project
A project is the top-level container for a migration effort. It holds your connections, scan results, provisioning, and every migration you run in it.
Project Settings
| Setting | Description |
|---|---|
| Name | A label for the project, for example "Acme SharePoint Migration" |
| Description | Optional: what the project is migrating |
| Source / Destination | Chosen per migration in the wizard, from the project's connections |
| Transfer Mode | Copy, Move, or Sync changes, chosen per migration. See Migration Modes |
| If file already exists at destination | Chosen per migration. See Conflict Resolution |
Project Lifecycle
The project tabs follow the usual stages:
- Connect: add source and destination connections
- Discover: scan the source to see what's there
- Provision: optionally create destination sites, libraries, teams, Shared Drives, buckets, or folders
- Migrate: transfer files and metadata
- History: review results, retry failed files, and download reports
Understanding the Workflow
Every migration follows the same five phases.
Phase 1: Connect
Connect your source and destination platforms. Depending on the platform, that's an OAuth sign-in (for example Sign in with Microsoft), admin consent, a service account or your own app registration, or access keys. Stored credentials are encrypted with AES-256-GCM.
Phase 2: Discover
The Discover tab scans the source and shows:
- Folder, file, and total size counts, and last-modified dates
- A folder table with direct and total files, size, and subfolders (downloadable as CSV)
- Optionally, folder permissions and Microsoft 365 group membership (Include permissions, which makes the scan take longer)
A migration's page also has a Pre-Migration Analysis (files that will transfer or be skipped, oversized files, unsupported types, duplicate paths) and a file type breakdown.
Phase 3: Provision
The Provision tab can create the destination structure before you migrate: SharePoint sites, libraries, and folders; Teams teams and channels; Google Shared Drives; S3 buckets; and folders on the other platforms.
Phase 4: Migrate
The data transfer. Runs from MigrationFox Desktop on your PC send files straight from source to destination. Cloud runs stream files through the MigrationFox worker (on Oracle Cloud) and don't store them after the migration. Files are transferred in parallel, with parallelism tuned per platform, and large files use chunked uploads.
Phase 5: Monitor
Track progress live on the migration's page:
- Files transferred, skipped, and failed
- Transfer speed and an estimated time remaining
- Per-file status with the error or skip reason
- A live log you can export
The Activity page keeps a workspace-wide audit log.
Tip
After the first pass, run the migration again with Sync changes or the Incremental option to pick up files added or changed since. For SharePoint and OneDrive destinations, unchanged files are skipped. See Migration Modes for the platforms where this applies.
Google Drive / Google Workspace
Migrate files and folders to or from Google Drive, including My Drive and Shared Drives, for one user or across a Google Workspace organization.
Prerequisites
- For one user's content: a Google account you can sign in with (OAuth 2.0)
- For organization-wide access: a Google Cloud project with the Google Drive API enabled, a service account, and a Google Workspace admin to authorize domain-wide delegation
Required Permissions / Scopes
This is the scope you authorize for a service account's domain-wide delegation. It grants read/write access to Drive files. The OAuth 2.0 sign-in also asks for Gmail access, which MigrationFox uses only for mail migration.
Service Account Setup (Recommended)
A service account with domain-wide delegation gives organization-wide access without each user signing in.
Create a Google Cloud project
Go to console.cloud.google.com. Click Select Project → New Project. Give it a name (for example "MigrationFox") and click Create.
Enable the Google Drive API
In your project, go to APIs & Services → Library. Search for "Google Drive API" and click Enable. Allow a few minutes for it to take effect.
Common error: "Google Drive API has not been used in project X before or it is disabled." This means the API isn't enabled in the same Google Cloud project that owns the service account. Open console.developers.google.com/apis/api/drive.googleapis.com/overview?project=YOUR_PROJECT_ID and enable it.
Create a Service Account
Go to APIs & Services → Credentials → Create Credentials → Service Account.
Give it a name, skip the optional permissions, and click Done.
Download the JSON key
Open the service account → Keys tab → Add Key → Create new key → JSON. Download it and keep it secure.
Enable Domain-Wide Delegation
In the Google Workspace admin console (admin.google.com):
- Go to Security → API Controls → Domain-wide Delegation
- Click Add new
- Enter the service account's Client ID (in the JSON key or in Google Cloud Console)
- Add the scope:
https://www.googleapis.com/auth/drive - Click Authorize
Add the connection in MigrationFox
On your project's Connect tab, choose Google Drive → Service Account. Upload the JSON key file, enter an Impersonate Email (a Workspace user, usually an admin), and click Add & Validate. (In MigrationFox Desktop, paste the JSON key instead.)
OAuth Setup (Alternative)
Signing in is quicker to set up but only reaches the content the signed-in user can access.
- On the Connect tab, choose Google Drive → OAuth 2.0 (in Desktop: Sign in)
- Sign in with your Google account and allow access
Both options see the Shared Drives the signed-in (or impersonated) user is a member of.
Supported Features
| Feature | Supported |
|---|---|
| Files & folders | Yes |
| Shared Drives | Yes |
| Permissions / sharing | Yes (with Migrate permissions) |
| Google Docs → DOCX export | Yes |
| Google Sheets → XLSX export | Yes |
| Google Slides → PPTX export | Yes |
| Google Drawings export | Yes, as PNG |
| Large file support (chunked) | Yes |
| Only new or changed files on re-runs | Yes, as a source or a destination |
Limitations
Google Forms, Google Sites, Apps Script, Jamboard, and My Maps files have no export format, so they're skipped and reported in the migration results.
Microsoft Teams
Migrate Teams channels, messages, replies, members, and channel files between Microsoft Teams tenants, from Slack to Teams, or from Teams to Google Chat. Start from the Teams & chat tile on the Migrate tab.
Prerequisites
- A Global Administrator of the Microsoft 365 tenant, to approve the MigrationFox Teams app once
- Or, as an alternative, your own Entra ID app registration
Required Permissions
Application permissions requested by the MigrationFox Teams app:
Setup
Connect with admin consent (recommended)
On the Connect tab, choose Microsoft Teams → Connect with admin consent. A Global Administrator signs in and approves the MigrationFox Teams app once. No Azure setup, nothing to copy.
Or bring your own Azure app
Choose Bring your own Azure app. In your app registration, add the application permissions listed above under Microsoft Graph → Application permissions, click Grant admin consent, and create a client secret. Enter the Application (Client) ID, Client Secret Value, and Directory (Tenant) ID.
Teams as a source
Reading channel messages without a signed-in user is a Microsoft protected API that needs Microsoft's approval. Approval for the MigrationFox Teams app is pending, so with an admin-consent connection Teams works as a destination but not yet as a message source. To use Teams as a source today, use the Bring your own Azure app path.
Supported Features
| Feature | Status |
|---|---|
| Channels (standard & private) | Yes |
| Messages (original time and author) | Yes |
| Replies & threads | Yes (Include thread replies) |
| Reactions | No (not carried over) |
| Members & owners | Yes (guests are skipped) |
| Channel files | Yes (Also migrate channel files) |
| 1:1 and group chats | No |
Note
Messages are written with Microsoft's Teams import API, which keeps original timestamps and senders. The destination team or channel is in "migration mode" during import, and members are added when the import completes.
Slack
Migrate Slack channels, threads, and files to Microsoft Teams.
Prerequisites
- A Slack app with a bot token
- Workspace Admin or Owner permissions (to install the app)
Required Bot Token Scopes
Setup
Create a Slack App
Go to api.slack.com/apps → Create New App → From scratch. Name it (for example "MigrationFox") and select your workspace.
Add Bot Token Scopes
Go to OAuth & Permissions → Scopes → Bot Token Scopes and add the scopes listed above:
channels:history+channels:read: read public channelsgroups:history+groups:read: read private channelsusers:read+users:read.email: map Slack users to destination usersfiles:read: download files shared in channels
Install to workspace
Click Install to Workspace and authorize the app.
Copy the Bot User OAuth Token
Back in OAuth & Permissions, copy the Bot User OAuth Token. It starts with xoxb-.
Add the connection in MigrationFox
On the Connect tab, choose Slack and paste the token into Bot User OAuth Token. Private channels are visible only if the bot has been added to them.
Supported Features
| Feature | Status |
|---|---|
| Public channels | Yes |
| Private channels | Yes |
| Messages | Yes, as plain text (formatting and mentions aren't converted) |
| Threads | Yes |
| Reactions | No |
| Files | Yes (Also migrate channel files, uploaded to the Teams channel's files) |
| User mapping | Yes (auto-matched by email, then username; CSV upload) |
| Direct messages and group DMs | No |
| Slack to Google Chat | No (destination is Teams) |
Important
On Slack's free plan, older message history isn't available. MigrationFox can only migrate the history your Slack plan makes available to the app.
AWS S3
Migrate files to or from Amazon S3 buckets. Also works with S3-compatible storage such as MinIO, Wasabi, and Backblaze B2.
Prerequisites
- An AWS account with an IAM user that has S3 access
- The bucket name and region
Required IAM Permissions
At minimum, the IAM user needs these S3 permissions. You can use the managed AmazonS3FullAccess policy or a custom policy like this one:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}
Setup
Create an IAM user (or use an existing one)
In the AWS Console, go to IAM → Users → Create user. Attach AmazonS3FullAccess or a narrower custom policy like the one above.
Create an access key
Select the user → Security credentials → Create access key. Choose Third-party service as the use case. Note the Access Key ID and Secret Access Key.
Add the connection in MigrationFox
On the Connect tab, choose AWS S3 → Access Keys and enter:
- Access Key ID
- Secret Access Key
- Region (for example
us-east-1) - Bucket Name
- Custom Endpoint (optional, for S3-compatible storage)
Supported Features
| Feature | Supported |
|---|---|
| Files & folders (prefixes) | Yes |
| Buckets (create on the Provision tab) | Yes |
| Multipart upload (large files) | Yes (parts upload one at a time) |
| S3-compatible providers | Yes |
| Storage class mapping | No |
| Permissions | No (S3 has no file sharing to map) |
S3-Compatible Storage
MigrationFox works with S3-compatible storage when you set a custom endpoint:
| Provider | Endpoint Example |
|---|---|
| MinIO | https://minio.yourserver.com |
| Wasabi | https://s3.wasabisys.com |
| Backblaze B2 | https://s3.us-west-004.backblazeb2.com |
| DigitalOcean Spaces | https://nyc3.digitaloceanspaces.com |
Tip
When you set a Custom Endpoint, MigrationFox uses path-style addressing automatically, which most S3-compatible providers need. There's nothing else to configure.
SFTP
Migrate files to or from servers over SFTP (SSH File Transfer Protocol). In the app this platform is listed as "SFTP / FTP", but only SFTP is supported; plain FTP isn't.
Prerequisites
- SSH access to the server
- An account with read access (source) or write access (destination) to the target directory
Setup
Gather connection details
You'll need:
- Hostname or IP address of the server
- Port (default 22)
- Username
- Password or an SSH private key (OpenSSH or PEM format; Ed25519, RSA, or ECDSA), plus its passphrase if it has one
Verify access
Test that you can connect from the command line:
sftp username@your-server.com
Or with key-based authentication:
sftp -i /path/to/key username@your-server.com
Add the connection in MigrationFox
On the Connect tab, choose SFTP / FTP → SSH / Password. Enter Hostname / IP, Port, Username, and either Password or SSH Private Key (PEM) with an optional Key Passphrase.
Supported Features
| Feature | Supported |
|---|---|
| Files & folders | Yes |
| Recursive directory scan | Yes |
| Streaming transfers | Yes |
| Key-based authentication | Yes (OpenSSH or PEM) |
| Password authentication | Yes |
| Plain FTP / FTPS | No |
Dropbox
Migrate files and folders to or from Dropbox, for the account you connect (personal or a Dropbox Business member account).
Prerequisites
- A Dropbox account to sign in with
- Or, for the access-token option, a Dropbox developer app
Required Scopes
For the access-token option, your Dropbox app needs:
Setup
Sign in (recommended)
On the Connect tab, choose Dropbox → OAuth 2.0 and sign in. MigrationFox keeps the connection refreshed automatically.
Or create a Dropbox app and token
Go to dropbox.com/developers → App Console → Create App. Choose Scoped access and Full Dropbox. On the Permissions tab enable the scopes above and click Submit.
Generate a token
In the app's Settings tab, under OAuth 2, click Generate.
Add the connection in MigrationFox
Choose Dropbox and paste the token into Access Token (Long-lived) (Account ID is optional).
Supported Features
| Feature | Supported |
|---|---|
| Files & folders | Yes |
| Chunked uploads (large files) | Yes |
| Team folders the connected account can access | Yes |
| Sharing read from Dropbox (as a source) | No |
| Sharing applied to Dropbox (as a destination) | Yes, for users with an email address |
| Team-admin access to other members' Dropbox | No (one connected account at a time) |
| Paper docs converted to Word | No |
Box
Migrate files, folders, and folder collaborations to or from Box, for one user or, as a Box admin, for many users at once.
Prerequisites
- A Box account to sign in with
- To browse and migrate other users' content: a Box admin, or a co-admin with "Manage users"
Setup
Sign in (recommended)
On the Connect tab, choose Box → OAuth 2.0 and sign in with your Box account.
Or use a developer token
For a quick test, create a Custom App at developer.box.com, generate a Developer Token, and enter it (with the optional Enterprise ID). Developer tokens expire after an hour, so use sign-in for real migrations.
Browse other users' Box (admins)
When a Box admin is signed in, the content picker can browse other users' Box and select many people at once. Folders shared between selected users are copied once.
Supported Features
| Feature | Supported |
|---|---|
| Files & folders | Yes |
| Chunked uploads (large files) | Yes |
| Admin view of other users (As-User) | Yes |
| Box Notes → Word (.docx) | Yes (on by default when the destination isn't Box) |
| Folder dates and version history | Yes |
| Folder collaborations | Yes, as destination folder permissions (with Migrate permissions). Group collaborations and file-level shares aren't read yet |
| Server authentication (JWT) | No |
SMB / Windows File Shares
Migrate files from on-premises Windows file servers, network shares (UNC paths), and local folders using MigrationFox Desktop, the Windows app. Desktop runs the migration on your PC, so files go straight from the share to the destination.
Windows app troubleshooting
If the Windows app disconnects, stalls, or needs an update, see Windows app troubleshooting.
Prerequisites
- A Windows PC or server with network access to the file share
- MigrationFox Desktop, signed in to your MigrationFox account. No administrator rights needed
- Read access to the share for the Windows account that runs the migration
How It Works
On-premises file shares aren't reachable from the internet, so the migration runs on a PC inside your network. MigrationFox Desktop installs without admin rights ("Only for me"), runs as you, and reads file shares with your own Windows account. Migrations keep running while you're signed in to Windows, even with the screen locked. MigrationFox sees status, counts, file names and paths, and errors; file contents go straight from source to destination.
Run Options
- Runs while signed in (default): Desktop runs migrations as the signed-in user.
- Background mode (optional): in Desktop's Settings, turn on Background mode (one admin prompt). Migrations then run as a Windows service, keep going with nobody signed in and after restarts, and read file shares as the computer account, so grant that account read access to the share.
- PowerShell: Desktop includes the MigrationFox PowerShell module for scripted and bulk runs (see Setup step 4).
There's no separate server agent to install anymore; MigrationFox Desktop replaces it.
Setup
Install MigrationFox Desktop
Download it from app.migrationfox.com/download/desktop (an MSI for IT deployment is on the Devices page). Install, open it, and sign in.
Connect the destination
In Desktop's Connections (or the web app's Connect tab), add the destination, for example SharePoint with Sign in with Microsoft.
Start the migration
In Desktop, go to Migrate → Other platforms and choose This computer or file share as the source. Enter or browse to the folder, mapped drive, or UNC path:
\\fileserver\shared\documents
Then pick the destination and options and start. You can close the window; progress shows on the Dashboard and in the web app.
Or script it with PowerShell
The module uses the Desktop sign-in:
Import-Module MigrationFox
Connect-MigrationFox
Start-MFMigration -SourcePath '\\fileserver\Departments\HR' `
-DestinationSiteUrl 'https://contoso.sharepoint.com/sites/HR' `
-DestinationLibrary 'Documents' | Wait-MFMigration
For many shares, Import-MFMigrationPlan -Path plan.csv -ShareRoot \\fileserver\Departments starts one migration per CSV row. Run Get-Help Start-MFMigration -Full for all options.
SMB to Cloud Direct Upload
Desktop uploads files directly from the share to the cloud destination; they don't pass through MigrationFox's servers. This means:
- Direct path: data goes from your network to the cloud provider
- Parallel uploads: several files upload at once, tuned to the destination's limits
- No copies kept: files are streamed, not stored by MigrationFox
Supported Features
| Feature | Supported |
|---|---|
| Files & folders | Yes |
| UNC paths, mapped drives, local folders | Yes |
| Recursive directory scan | Yes |
| Large file streaming | Yes |
| Direct upload (no relay) | Yes |
| NTFS permissions | No (not migrated; set permissions at the destination) |
| Only new or changed files on re-runs | No (re-runs from a file share copy everything again) |
Important
Without Background mode, migrations run only while you're signed in to Windows on that PC (a locked screen is fine; signing out or shutting down stops them). For long migrations on a server, turn on Background mode.
Azure Blob Storage
Migrate files to or from Azure Blob Storage containers, using the storage account's access key.
Full connector guide
Soft-delete interactions, custom endpoints (Azure Government / China / Private Endpoint), source-platform compatibility, and troubleshooting are on the Azure Blob Storage connector page.
Prerequisites
- An Azure Storage Account with at least one container
- The storage account name and an access key
Setup
Open your Storage Account
Go to portal.azure.com → Storage accounts → select your storage account.
Copy the access key
Go to Security + networking → Access keys. Click Show next to key1 and copy the Storage account name and the Key.
Add the connection in MigrationFox
On the Connect tab, choose Azure Blob Storage → Account Key and enter:
- Storage Account Name
- Access Key: key1 or key2 from the Azure portal
- Container Name: the container to migrate from or to
- Custom Endpoint URL (optional)
Validate
Click Add & Validate. MigrationFox checks it can reach the container before saving. You can re-check a saved connection later with Test. If validation fails, double-check the account name and key, and that the container exists.
Supported Features
| Feature | Supported |
|---|---|
| Files & virtual folders (prefixes) | Yes |
| Containers | Yes |
| Block blob upload (large files) | Yes |
| Account key authentication | Yes |
| SAS token or connection string | No |
Limitations
MigrationFox reads and writes block blobs (the default and most common type). Page blobs and append blobs aren't supported.
InfoPath PDF Archive
What It Does
InfoPath PDF Archive turns InfoPath form submissions (XML) into searchable PDFs, one per submission. Files attached inside a form are restored as the original files next to the PDF, and each run writes a CSV index (opens in Excel) listing every submission, its PDF, its attachments, and its field values. The original XML stays where it is; nothing is deleted.
InfoPath is out of support
Microsoft retired InfoPath Forms Services in SharePoint Online on July 14, 2026, so browsers no longer render form submissions there. The XML is still in your libraries, but it's hard to read without the InfoPath client, which is also retired. Archiving to PDF keeps a readable record.
Source Options
- SharePoint form library (SharePoint Online): runs in the cloud. Connect with Microsoft, pick the site and form library, and pick a destination document library.
- A folder of submissions: XML files on a PC, a file share, or exported from SharePoint Server (on-premises). Run this from the MigrationFox Windows app (Migrate → InfoPath archive, source Folder on this PC). The output can go to SharePoint/cloud storage or to a local folder or file share.
How the SharePoint Online Path Works
- You connect the SharePoint tenant that hosts the form library (source) and the tenant for the destination; most customers use the same connection for both.
- The wizard shows the lists on the site that have an InfoPath template; you pick one form library per run.
- For each submission, MigrationFox reads the field values and renders a searchable PDF with field labels and values.
- The PDFs go into an InfoPath Archive folder in the destination library, one subfolder per submission holding the PDF and any attachments. The CSV index goes in the InfoPath Archive folder.
- A submission that can't be read is logged as failed and the run continues with the rest.
Prerequisites
- A SharePoint connection in your project with read access to the form library and write access to the destination library.
- Form credits: one credit per submission converted (see Pricing below). Runs from the Windows app on a PC covered by MigrationFox Pro don't use form credits, and the Windows app's free 14-day trial covers up to 100 forms.
Step-by-Step Setup
Open InfoPath archive
In your project, open the Migrate tab and click Start on the InfoPath archive tile. (Many libraries? Use Many libraries? Import a CSV on the same tile.)
Choose the source
Pick SharePoint form library and select your SharePoint connection (or add one with + Add a connection).
Choose the destination
Select the SharePoint connection for the destination.
Choose content
Expand the source site and pick the form library (or type its name in Form Library). The tree shows only lists with InfoPath forms by default. Then pick the destination document library.
Launch
Review the options and click Launch migration (or schedule it for later). Progress and per-submission results show on the migration's page.
Pricing
InfoPath PDF Archive is billed per form (submission) converted, not by GB: CA$0.25 per form, or CA$0.15 per form when you buy 10,000 or more. Form credits never expire. Buy them on the Billing page under InfoPath PDF Archive. Runs from the Windows app on a PC covered by MigrationFox Pro are included in that license (from Desktop 0.6.24, the forms are turned into PDFs on that PC). See pricing.
If your balance runs out during a run, MigrationFox converts as many forms as you have credits for and the run log shows how many remain, so check your balance before a large run. To see what the output looks like first, preview one form free.
Output Format
Each submission becomes one searchable PDF with:
- Field labels: taken from the form template where available; otherwise derived from the XML element names, with SharePoint encoding (
_x0020_→ space) decoded and camelCase split into words. - Field values: as text; rich-text fields have HTML removed, dropdown codes are shown as their display text where the template defines them, and dates are formatted. Empty fields are left out.
- Attachments: listed in the PDF and saved as the original files next to it.
- SharePoint system fields (
ContentType,FileLeafRef, compliance tags, and similar) are left out of the PDF. - File names: based on the submission's title, its date, and a short ID (for example
Budget-request_2025-03-14_a1b2c3.pdf).
Tip
Before a large run, archive a small batch and open a few PDFs to check that the labels and values read correctly for your template. Contact us if something on a form doesn't render as you expect.
Mail Migration
Supported Platforms
- Microsoft 365 (Exchange Online) mailboxes, via Microsoft Graph
- Gmail (Google Workspace) mailboxes, via the Gmail API
Either can be the source or the destination. On-premises Exchange and IMAP aren't offered.
Features
- Mailbox selection: Just my own mailbox, Pick users from my tenant (with Auto-match of source to destination users), or Paste / CSV mapping (
sourceEmail,destEmail). - Folder Filter: migrate only the folders you list (for example Inbox, Sent Items).
- From Date / To Date: migrate only messages within a date window.
- Attachments: during the beta, attachment copying is switched on per platform, so check with us before a run that needs attachments, and open a few migrated messages to confirm they came across.
- Bulk with user mapping: see Bulk mail migration with user mapping for the CSV format, Gmail service-account and domain-wide delegation setup, and the Microsoft 365
Mail.ReadWriteapplication permission. - Connections for many mailboxes: Microsoft 365 uses Multiple users in my tenant (the MigrationFox Mail app, admin consent) or your own Azure app; Gmail uses a Workspace service account with domain-wide delegation. See Mail Migration: Service-Account Setup.
Mail migration runs in the web app; it isn't in the Windows app.
M365 Assessment Suite
What It Does
The M365 Assessment Suite is a family of six read-only Microsoft Graph assessments, found under Governance in the MigrationFox app. Each produces a 1.0 to 4.0 composite score, a prioritized list of findings with stable IDs, and recommendations. The in-app estimate for a typical tenant is about 3 to 5 minutes per run; large tenants take longer.
6 Assessment Products
- Copilot Readiness Assessment: whether your tenant is safe to enable Microsoft 365 Copilot, and what to fix first. Includes the SharePoint Advanced Management (SAM) module.
- Microsoft 365 Complete Assessment: every module in one scan, including Power Platform. Available only with Tenant Suite or Consultant Pro; not sold on its own and not part of the free snapshot.
- SharePoint and OneDrive Assessment: oversharing audit, "Anyone" link inventory, external sharing posture, ownership gaps, OneDrive governance.
- Teams Assessment: Teams lifecycle and governance (orphaned teams, owner counts, guests, external sharing).
- M365 Security Assessment: Conditional Access, MFA coverage, Global Admin count, guest ratio, Purview labels, audit readiness.
- Power Platform Assessment: license inventory, service principals, OAuth grants, plus manual-verification links for environments, connector DLP, premium usage, and gateways.
Assessment Modules & 100+ Checks
Findings come from ten modules with more than 100 distinct check IDs. Each product runs the relevant subset: Copilot Readiness runs eight modules, the Microsoft 365 Complete Assessment runs nine (adding Power Platform), and the focused products run two or three each. See Assessment Modules.
Why this matters
Microsoft Copilot can surface anything the signed-in user can access. Stale "Anyone with the link" sharing, broken inheritance, or weak Conditional Access can lead Copilot to show sensitive content to the wrong person. The assessment is designed to find those gaps before a rollout.
The 1.0 to 4.0 Score
The composite score is a weighted average across the modules that ran (Apps Readiness is weighted 2×; Purview and Copilot Configuration 1.5×; the rest 1×). Every score lands in one of four bands:
- 1.0 to 1.9: NOT_READY (red). Critical gaps in data protection, oversharing, or identity. Don't enable Copilot, even for a pilot, until the "Must Do Before Copilot" items are resolved.
- 2.0 to 2.9: PARTIALLY_READY (orange). Run a tightly scoped pilot with a handful of hand-picked users on non-sensitive workloads only. Address all "Must Do Before Copilot" items before broadening.
- 3.0 to 3.4: MOSTLY_READY (yellow). An internal pilot is reasonable. Resolve the remaining "Must Do Before Full Rollout" items before expanding to all users.
- 3.5 to 4.0: READY (green). Full rollout is reasonable. Keep re-assessing periodically to catch drift.
Setup & Required Scopes
Assessments connect to your Microsoft 365 tenant through the read-only MigrationFox Assessment app. The default is to sign in with an admin account and consent; no app registration is needed. Using your own Azure app registration (a "Service Account" connection) is the advanced option.
The Read-Only Graph Scopes
The base set is 15 read-only Microsoft Graph permissions, all requiring admin consent. None of them grant write access.
Sites.Read.All: SharePoint sites and permission settingsFiles.Read.All: OneDrive and SharePoint files (oversharing scan)User.Read.All: user profiles, license assignments, Copilot eligibilityGroup.Read.All: Microsoft 365 groups and Teams membershipDirectory.Read.All: tenant directory and rolesAuditLog.Read.All: audit log readinessInformationProtectionPolicy.Read.All: sensitivity labels and policies (tenant-wide)Policy.Read.All: Conditional Access and authentication policiesReports.Read.All: Microsoft 365 usage and adoption reportsSecurityEvents.Read.All: identity protection and security eventsTeamSettings.Read.All: Teams configuration and policiesDelegatedPermissionGrant.Read.All: OAuth grants, for risky-app detectionApplication.Read.All: app registrations, for overprivileged-app detectionSharePointTenantSettings.Read.All: tenant-wide SharePoint sharing settingsRecordsManagement.Read.All: retention labels and records management
Some deeper modules use a few more permissions: Sites.FullControl.All (SharePoint Advanced Management, to read per-site access-control state that Graph only exposes under that permission), Team.ReadBasic.All, TeamMember.Read.All and Channel.ReadBasic.All (Teams), and RoleManagement.Read.Directory and IdentityRiskyUser.Read.All (Identity). If one is missing, the affected checks are marked unverified instead of failing the run.
Four of the base permissions (AuditLog.Read.All, InformationProtectionPolicy.Read.All, Reports.Read.All, DelegatedPermissionGrant.Read.All) exist only as application permissions. With a Connect with Microsoft connection, checks that need them are marked unverified; a Service Account connection covers them.
Read-only by design
A write guard in the assessment's Graph client blocks any PATCH, POST, PUT, or DELETE request, so the assessment code can't change your tenant. Findings are stored encrypted (AES-256-GCM).
Step-by-Step Setup
Open Governance
Sign in to the MigrationFox app, click Governance in the left nav, then + Run New Assessment. The first screen is Connect your Microsoft 365 tenant.
Add a tenant connection with Connect with Microsoft
Under Tenant connections, choose Connect with Microsoft and click Connect with Microsoft →. Sign in with a Global Admin or Application Administrator account and accept the read-only permissions for the MigrationFox Assessment app. No app registration is needed.
Or (advanced): use your own app registration
Choose Service Account. In your tenant's Entra admin center, create an app registration (single tenant, no redirect URI), add the 15 Microsoft Graph Application permissions listed above, click Grant admin consent, and create a client secret. Back in MigrationFox, enter Tenant ID, Client ID (Application ID), and Client Secret, then click Test Connection. The test lists any permissions that aren't consented yet. When it passes, name the connection and click Save Credential.
Run the assessment
Pick the product under Choose an assessment, select the tenant connection, and click Run Assessment →. Progress shows per module. You can close the page and come back later from the Governance page.
Running an Assessment
From Governance, click + Run New Assessment. Choose the product (Copilot Readiness, SharePoint and OneDrive, Teams, M365 Security, Power Platform, or Microsoft 365 Complete if you have Tenant Suite or Consultant Pro), choose the tenant connection, and click Run Assessment →.
Live Progress
The page shows progress for each module as it scans. If a check can't be verified (a missing permission, or an endpoint that returns an error), it's marked unverified and the scan continues. One module's problem doesn't stop the overall run.
Re-runs
Paid purchases allow unlimited re-runs while the purchase is active (90 days for a single assessment, 1 year for Tenant Suite and Consultant Pro). The free snapshot is limited to one run per MigrationFox account every 30 days. Each run produces a fresh score and findings, so you can track progress over time from the score trend on the Governance page.
Reading the Report
When the assessment completes, the results page shows the score banner, the module scorecard, and then the findings (paid) or one sample finding (free snapshot).
Hero Score Banner
The composite score (1.0 to 4.0) with the color-coded four-state verdict, the guidance for that verdict, the target tenant, and the assessment date. Export buttons appear here for paid purchases; the free snapshot shows "Free Snapshot: view only" instead.
Module Scorecard
One row per module with its score (1 to 4), label, and finding count. Modules with unverified checks are noted. The scorecard is visible to everyone, including the free snapshot.
Finding Priorities
Each finding is tagged with one of three priorities:
- Must Do Before Copilot: blockers. Don't enable Copilot until these are resolved.
- Must Do Before Full Rollout: a pilot is reasonable, but a wider rollout needs these closed first.
- Nice to Have: improvements that don't block Copilot but strengthen your long-term posture.
Each finding has a stable ID (for example SAM-004 or ID-003), an observation, the business impact, a recommendation, the responsible role, an effort estimate, and a Microsoft documentation link.
DLP Coverage for Copilot
Data Loss Prevention coverage for Copilot is one of the most important things to confirm before a rollout: if your DLP policies protect SharePoint, OneDrive, Teams, and Exchange but not Copilot, Copilot can still surface that content. Microsoft Graph doesn't expose DLP policies for reading, so the assessment raises this as a manual-verify item (in the Copilot Configuration module) with the steps to check it in the Purview portal, rather than inspecting your DLP policies directly.
Stored Results
Assessment results are stored in MigrationFox, encrypted at rest, so you can track readiness over time and re-open reports. You can delete an assessment from the Governance page at any time.
Assessment Modules
Every finding belongs to a module, and each module has a stable ID prefix. These are the modules the six products run today.
1. Licensing & Infrastructure (LIC)
Subscribed SKUs, base plan detection (E3, E5, Business Premium), add-ons such as Copilot, Purview, and Entra ID P1/P2, and service health. Answers: do you have the licenses the features you want require?
2. Purview (PD)
Sensitivity labels, retention labels, and information protection settings that Graph exposes. Policy areas Graph can't read (such as DLP policy contents) are raised as manual-verify findings with steps.
3. Identity & Access (ID)
Conditional Access policies, MFA coverage, guest ratio, privileged roles, risky users, OAuth grant sprawl, and applications with broad permissions such as Mail.ReadWrite or Files.ReadWrite.All.
4. Apps Readiness (APP)
Microsoft 365 Apps update channels across the tenant. Copilot in the desktop apps needs Current Channel or Monthly Enterprise Channel, so this module shows how much upgrade work there is.
5. Teams (TD) and OneDrive (OD)
Teams: lifecycle hygiene (stale and ownerless teams), guests, external access, and channel inventory. OneDrive: per-account sharing, orphaned drives, storage governance, and OneDrive policy settings.
6. SharePoint Advanced Management (SAM)
Tenant and site sharing defaults, "Anyone" link settings, site access controls, and the SharePoint settings Microsoft's Copilot readiness checklist calls out. The free snapshot samples up to 30 sites; paid runs read up to 200. Settings that are only available through SharePoint PowerShell are raised as manual-verify findings.
7. Power Platform (PP, PPD) and Copilot Configuration (COP)
Power Platform: license inventory, service principals, OAuth grants, and manual-verification links for environments, connector DLP, premium connector usage, and on-premises gateways. Copilot Configuration: Copilot license use, audit presence, sensitivity-label enforcement, and manual-verify items for Restricted SharePoint Search, Copilot admin settings, and DLP for Copilot.
SharePoint Restructuring Wizard
The Restructuring Wizard (Governance → Restructuring Wizard) analyzes a SharePoint site and proposes a plan to split an overgrown site into properly scoped sites. It requires an active governance purchase.
What It Analyzes
- Permission fragmentation: broken inheritance on libraries and top-level folders (checked at the library and top-level folder level, not per file)
- Storage concentration: storage consumed per library, to find hot spots
- Stale content: libraries with no activity in 90+ days
- Large lists: libraries over the 5,000-item list view threshold
- Item count: libraries with more than 100,000 items, heading toward SharePoint's limits
- Folder sprawl: many deeply nested folders that suggest independent content areas
Health Score
Each site gets a health score from 1 to 10 (10 is healthiest; each issue lowers it by its severity). A site is flagged for restructuring when it has two or more unique permission boundaries or any high-severity issue.
Editable plan (the architect's planner)
The proposed plan is editable before execution. Rename proposed sites and target libraries, move libraries between sites with Move to another site, remove sites (their libraries return to the primary site), or add empty sites with + Add empty site. A per-site Structure only (empty site) option and a global Skip content migration checkbox provision the new sites with empty libraries, which helps when content will move in a later change window. The plan can also be exported as CSV.
Source tree with Promote
Alongside the generated plan, a Source Tree view shows the site's libraries and folders as an expandable hierarchy. Every library and folder has a Promote → button that spins it off as its own target site. Promoting a folder copies only that sub-tree into a new library; the rest of the parent library is untouched. See Folder restructuring for the full walkthrough.
Execution
Click Execute Restructuring, then Confirm & Execute. The wizard creates the new sites (created as team sites today) and, unless the plan is structure only, queues MigrationFox migration jobs to copy content from the original site into the new ones. The original site isn't changed.
OneDrive Cleanup Wizard
The OneDrive Cleanup Wizard analyzes up to 100 licensed users' OneDrives and sorts what it finds into five categories. It's analysis only: it doesn't change anything in your tenant. It requires an active governance purchase.
5 Issue Categories
- Oversized: OneDrives using more than 80% of their quota
- Stale Account: no file changes in 12+ months
- External Sharing: OneDrives with active external sharing
- Departed User: OneDrives belonging to disabled or deleted accounts
- Orphan Content: content with no active owner
Export
Click Export CSV to download the results for remediation planning or your IT service management tool. Fixes are applied by your team; the wizard doesn't apply them.
Continuous Monitoring
With monitoring on, MigrationFox re-runs your last assessment about every 30 days, compares it with the previous run, and emails you the comparison.
Comparison Report
The email includes:
- New findings: issues that appeared since the last run
- Resolved findings: issues no longer detected
- Score change: the change in composite score, with a trend arrow
Enable monitoring
Turn it on from Governance → Continuous Monitoring (Monthly auto-monitoring), or from the purchase row on the Billing page (Enable Monitoring). Monitoring needs an active paid purchase and uses the tenant connection from your earlier assessment. See Enable monthly monitoring.
Exports (PDF / Word / Excel / HTML / CSV / JSON)
Any active paid purchase unlocks exports. The free snapshot is view-only and has no exports.
Export Formats
- PDF Report: the full report. With Tenant Suite or Consultant Pro, the PDF is white-label (your logo, no MigrationFox branding); with a single assessment it's MigrationFox-branded.
- Word Report (.docx): an editable report for adding commentary before delivery. White-label with Tenant Suite or Consultant Pro.
- Excel Data (.xlsx): summary, module scorecard, action plan, and per-module sheets.
- HTML Report: a self-contained HTML file with inline CSS and no external resources, for an intranet or an email attachment.
- Action Plan CSV: Microsoft Planner import format, one task per finding, bucketed by module.
- Raw JSON: all findings, the action plan, module results, and metadata, for scripts or ticketing tools.
You can also create a read-only Share Link to a report (30 days by default, up to 90).
Pricing & Tiers
The M365 Assessment Suite is priced separately from migration credits. Every option is a one-time payment with no subscription, no auto-renew, and no per-user fee. Current prices are on the pricing page.
Free Snapshot: CA$0
One assessment every 30 days per MigrationFox account, for any one of the five individually sold products (the Microsoft 365 Complete Assessment isn't included). View-only: the composite score, the four-state verdict, the module scorecard with finding counts, and one sample finding in the same format as paid reports. No exports, and no email or webhook on completion.
Single Assessment: CA$99 one-time
One product (Copilot Readiness, Power Platform, SharePoint and OneDrive, Teams, or M365 Security) with 90 days of access and unlimited re-runs, locked to one Microsoft 365 tenant at the first scan. Full findings, all export formats, MigrationFox-branded PDF and Word reports.
Tenant Suite: CA$399 one-time
All six assessments, including the Microsoft 365 Complete Assessment, plus the governance tools (Restructuring Wizard, OneDrive Cleanup, Bulk Provisioning, Continuous Monitoring and more) for one Microsoft 365 tenant, with 1 year of access. Includes white-label PDF and Word reports and a commercial redistribution license, so you can deliver the report to a client as your own work product.
Consultant Pro: CA$1,599 one-time, 1 year
Everything in Tenant Suite for one named consultant, across unlimited client tenants, with white-label reports and the commercial redistribution license on every report.
Per-tenant lock
Single assessments and Tenant Suite are locked to the first Microsoft 365 tenant you scan with them. Scans against a different tenant are blocked, so an MSP scanning ten client tenants needs ten purchases (or Consultant Pro).
Full pricing and FAQ on the Microsoft 365 Assessment Suite page.
API & Webhooks
These are the endpoints the MigrationFox web app uses for assessments, under https://api.migrationfox.com/api/v1. They authenticate with your signed-in app session; there are no personal API tokens today. Access rules are enforced on the server: export endpoints return 402 with paid_tier_required without an active paid purchase.
Endpoints
| Method | Endpoint | Access | Description |
|---|---|---|---|
POST | /governance | Free+ | Start an assessment. Body: { label, credentialId, productKey?, projectId? } |
GET | /governance | Free+ | List your assessments |
GET | /governance/:id | Free+ | One assessment: status, score, pilotState, module scores |
GET | /governance/:id/findings | Free+ | Findings. The free snapshot returns counts and one sample finding; paid returns the full list |
GET | /governance/:id/export.pdf, .docx, .xlsx, .html, .csv, .json | Paid | Exports (see Exports) |
GET | /governance/history | Free+ | Recent completed assessments, for the score trend |
POST | /governance/:id/delete | Free+ | Delete an assessment |
Webhook Event: governance.assessment.completed
If you've set a webhook URL (Billing → Webhook notifications), MigrationFox sends governance.assessment.completed (or governance.assessment.failed) when a paid assessment finishes. Free snapshot runs don't send webhooks. The same webhook URL receives migration events; switch on the X-MigrationFox-Event header.
Webhook Payload Example
{
"event": "governance.assessment.completed",
"assessmentId": "cmnxxx...",
"tenantId": "ten_xxx...",
"label": "Q1 Readiness Scan",
"targetTenantId": "<M365 tenant GUID>",
"targetTenantName": "Contoso Ltd.",
"status": "COMPLETED",
"overallScore": 2.8,
"pilotState": "PARTIALLY_READY",
"totalFindings": 14,
"mustDoBeforeCopilot": 5,
"durationMs": 198432,
"timestamp": "2026-04-11T15:30:42.123Z"
}
When you set a webhook secret, an HMAC-SHA256 signature is sent in X-MigrationFox-Signature (sha256=<hex>). The headers match migration webhooks: X-MigrationFox-Event, X-MigrationFox-Delivery, and X-MigrationFox-Signature.
Email Delivery
For paid assessments, MigrationFox also emails a summary when each assessment completes: the score, the verdict, the finding counts, the top 3 "Must Do Before Copilot" actions, and a link back to the report. Free snapshot runs don't send emails.
Discovery / Scanning
Before migrating, you can scan the source to see what's there. This is the project's Discover tab.
Running a Discovery Scan
- Make sure the project has a source connection (Connect tab)
- On the Discover tab, choose the connection and path, then click ⌕ Scan (for a file share on a PC, ⌕ Create Scan Job)
- Optionally tick Include permissions to collect folder permissions and Microsoft 365 group membership (the scan takes several times longer)
- Small sources finish in minutes; sources with millions of files can take hours
Discovery Report
The scan shows:
- Folders, Files, Total Size, Last Modified, and scan time
- A folder table with direct files, total files, total size, last modified, and subfolders, downloadable as CSV
- Permissions, when Include permissions is on
Each migration's page also has a Pre-Migration Analysis (files that will transfer or be skipped, oversized files, unsupported types, and duplicate paths), a File Type Breakdown, and pre-flight checks such as long paths.
Selective Migration
In the wizard's Choose content step you can migrate everything or pick specific folders or libraries. This is useful for phased migrations or leaving out content you don't need.
Tip
A scan doesn't copy or change any data. It reads metadata only (names, sizes, dates, and optionally permissions), so you can run it as often as you like.
Provisioning
Provisioning creates destination containers (sites, libraries, teams, drives, buckets, folders) before you migrate. It's the project's Provision tab.
What Gets Provisioned
| Destination | Provisioned Resources |
|---|---|
| SharePoint | Sites, document libraries, folders |
| Microsoft Teams | Teams, channels |
| OneDrive | Folders |
| Google Drive | Shared Drives, folders |
| S3 | Buckets, folders (prefixes) |
| Dropbox, Box, SFTP | Folders |
How to Use
- Optionally run a scan to review the source structure first
- Open the Provision tab and pick what to create (for example Create Site or Create Shared Drive)
- Fill in the details and confirm
- Start the migration and choose the new container as the destination
Note
The SharePoint migration wizard can also create a destination site as you go (+ Create new site), and missing destination folders are created during the migration. For many sites at once, see Bulk Provisioning.
Migration Modes
The wizard's Transfer Mode decides what happens to the source and which files are copied.
Copy Default
Copies files from source to destination. The source isn't touched. This is the safest mode and the right one for most migrations.
- Source files are not modified or deleted
- Good for the first pass, or when you want to keep the source as a backup
Move
Copies each file to the destination, then deletes it from the source after it transferred successfully. Use with caution.
- A source file is deleted only after its upload succeeded; if the delete fails, the file stays and a warning is logged
- Useful when decommissioning the source
- Not every source supports deletion
Warning
Move permanently deletes files from the source, and rollback only removes files from the destination; it doesn't restore the source. Verify a test migration before using Move on production data.
Sync changes
Copies only files that are new or changed since the last run, comparing file size and modified date. Use it for follow-up passes during a transition.
- Much faster than a full copy for follow-up runs
- Unchanged files are skipped for SharePoint, OneDrive, Google Drive, Box, Dropbox, Amazon S3, Azure Blob and SFTP destinations
- Not available for re-runs from a file share; those copy everything again
The Incremental option under If file already exists at destination works the same way for files that already exist: they're replaced only when the source is newer.
Folder Mapping
Folder Mapping Rules (in the wizard's Options step) rewrite source paths to different destination paths. Use them when the destination is organized differently from the source.
How It Works
Each rule maps a source path to a destination path. Rules are checked in order and the first match wins:
Source Path → Destination Path /Marketing/2024/Campaigns/* → /Departments/Marketing/Campaigns-2024/* /Engineering/Docs/* → /Technical/Documentation/* /Shared/Photos → /Media Library/Photos
Mapping Rules
- Prefix with wildcard (
/OldDept/*→/Archive/2024/OldDept/*): everything under the source folder goes under the destination folder - Path prefix: a folder path without
*also maps that folder and everything beneath it - Click + Add mapping rule for each rule
To leave folders out, pick only the folders you want in Choose content or use Exclude File Types; there's no flatten or skip rule type.
Tip
Run a scan first to review the source folder structure before writing mappings.
Conflict Resolution
When a file with the same name already exists at the destination, MigrationFox follows the If file already exists at destination option you chose.
Skip existing (default)
Leave the existing destination file as it is and don't transfer the source file. Best for re-running a migration where most files are already there.
Copy and replace
Replace the destination file with the source version. Use when the source is authoritative.
Keep both
Keep both files: the new file gets a numeric suffix in its name so the two can coexist.
Incremental
Replace the destination file only if the source is newer; otherwise skip it. Live-checked for SharePoint and OneDrive destinations; see Migration Modes for where it applies.
Permission Migration
With Migrate permissions on (the default), MigrationFox copies file and folder sharing from the source to the destination where both platforms support it.
How Permissions Are Mapped
People are matched by email address. If a user has access on the source (for example Google Drive sharing), MigrationFox shares the item with the same user at the destination, provided that user exists there. For cross-tenant moves, add a User mapping CSV (sourceEmail,destEmail); when a mapping is set, users not in it are left out.
Permissions are applied on SharePoint, OneDrive, Google Drive, Box, and Dropbox destinations (Dropbox: users with an email address). S3, Azure Blob, SFTP, and file shares have no user sharing to apply. NTFS (file share) permissions aren't migrated.
Permission Mapping Matrix
| Source role (Google Drive example) | SharePoint / OneDrive result |
|---|---|
| Viewer / Reader | Read |
| Commenter | Review |
| Editor / Writer (also Content manager, Manager) | Edit |
| Owner | Edit (ownership can't be granted through sharing) |
Important
Users who exist only on the source are logged, and their permissions aren't created at the destination. Rollback removes migrated files only; it doesn't undo permissions.
Bandwidth Throttling
MigrationFox manages transfer speed for you. There's no bandwidth or concurrency setting in the wizard today.
Configuration
- Parallel transfers are tuned per source and destination pair, based on each platform's limits (for example, fewer parallel writes to SharePoint than to Google Drive).
- Platform throttling: when Microsoft or Google rate-limits requests, MigrationFox waits the time the service asks for (Retry-After) and slows down, then recovers automatically.
- Off-hours runs: to keep load off business hours, use Schedule for later.
Tip
For PC runs, MigrationFox Desktop uses your PC's network connection, so a large file-share migration can be scheduled outside business hours to avoid saturating your office link.
Scheduling
Schedule a migration to start at a specific time, for example during off-peak hours.
How to Schedule
In the wizard's Review step, tick Schedule for later and choose a date and time (at least 5 minutes ahead). The migration is queued and starts automatically at that time; its page shows the scheduled time.
Scheduling Options
- Immediate: start right away (default)
- One-time schedule: run once at a specific date and time
- Recurring schedules aren't available; to repeat a sync pass, start or schedule another run
Tip
From PowerShell, you can start runs from Windows Task Scheduler with the MigrationFox module for a repeatable cadence.
API Reference
There are no personal API keys or a public REST API for general use today. To script migrations, use the MigrationFox PowerShell module, which is included with MigrationFox Desktop and uses its sign-in.
Authentication
Install MigrationFox Desktop on the Windows PC and sign in, then:
Import-Module MigrationFox Connect-MigrationFox
On a machine without a Desktop sign-in, create a sign-in token on the web app's Devices page and pass it with Connect-MigrationFox -Token (Read-Host -AsSecureString). Works on Windows PowerShell 5.1 and PowerShell 7+.
Base URL
https://api.migrationfox.com/api/v1
The module talks to this API for you; you don't call it directly.
Endpoints (Preview)
| Cmdlet | Description |
|---|---|
Connect-MigrationFox / Disconnect-MigrationFox | Connect with this PC’s Desktop sign-in (or -Token), or forget the connection |
Get-MFConnection / New-MFConnection / Remove-MFConnection | List saved connections, sign in to OneDrive, SharePoint, Google Drive, Dropbox, Box or Teams and save one, or delete connections |
Get-MFProject / Get-MFCredit | List projects; show the migration credit balance |
Start-MFScan / Get-MFScanSummary | Scan a source without copying (Discovery); totals, file types and pre-flight risks |
Start-MFMigration | Start one migration (-Mode Copy|Move|Sync, -Conflict Skip|Overwrite|Rename|Incremental, -Versions, -Permissions, -UserMappingPath, -FolderMapping, -ExcludePattern, -ScheduledAt; supports -WhatIf) |
Start-MFSiteMigration | Copy a SharePoint site: libraries, lists, pages and optionally its structure |
Start-MFRehearsal | Migration Rehearsal on a SharePoint site (read-only) |
Start-MFChatMigration | Slack to Teams, Teams to Teams, or Teams to Google Chat; Get-MFChatTeam, Get-MFChatChannel and Get-MFChatMember list what to pick and map |
Start-MFMailMigration | Gmail and Microsoft 365 mailbox migration (private beta) |
Start-MFInfoPathArchive | InfoPath form submissions to searchable PDFs, from a SharePoint form library or a local folder |
Get-MFMigration / Wait-MFMigration | List or get migrations (-Status Running|Active|Finished and the exact states, -First); wait for them with a progress bar |
Stop-MFMigration / Suspend-MFMigration / Resume-MFMigration / Restart-MFMigration | Cancel, pause, resume, or retry failed files |
Get-MFMigrationItem / Export-MFMigrationReport | Per-file results; download the CSV, HTML, PDF or JSON report |
New-MFShareLink / Get-MFShareLink / Revoke-MFShareLink | Client Live View links: create, list and revoke |
Undo-MFMigration / Remove-MFMigration | Roll back the files a migration copied (previews first, deletes only with -Confirm); delete migration records |
Import-MFMigrationPlan | Start one migration per CSV row (-ShareRoot), optionally wait and write a results log |
Help
Every cmdlet has built-in help: Get-Help Start-MFMigration -Full. Governance assessments run from the web dashboard, not from PowerShell.
Webhooks
Get an HTTP POST when a migration finishes.
Supported Events
| Event | Description |
|---|---|
job.completed | A migration completed |
job.failed | A migration failed |
governance.assessment.completed / .failed | A paid assessment finished (see Assessment webhooks) |
Configuration
On the Billing page, find Webhook notifications and enter:
- URL: your endpoint that receives the POST requests
- Signing secret (optional): used to sign each payload with HMAC-SHA256, sent as
X-MigrationFox-Signature: sha256=<hex>
Click Save, then Send test to send a sample job.completed. One webhook URL applies to your whole workspace. Each event is sent once (10-second timeout, no retries), so treat webhooks as notifications and check the migration's status in the app if one is missed.
Payload Example
{
"event": "job.completed",
"jobId": "cmxxxxxxxx",
"tenantId": "cmyyyyyyyy",
"label": "HR share to SharePoint",
"status": "COMPLETED",
"mode": "COPY",
"filesTransferred": 15420,
"filesFailed": 3,
"bytesTransferred": "52428800000",
"timestamp": "2026-03-24T15:30:00.000Z"
}
Headers: X-MigrationFox-Event (the event name), X-MigrationFox-Delivery (the migration ID), and X-MigrationFox-Signature when a secret is set.
Tip
Use webhooks to notify your own tools, for example a Teams or Slack channel through an incoming-webhook relay, when migrations complete or fail.
Troubleshooting
Common errors and their solutions.
"Authentication expired"
Cause: The OAuth access token has expired and the refresh token is no longer valid.
Solution: On the project's Connect tab, click Test on the affected connection. If it fails, add the connection again (sign in again, or re-enter the service account or app credentials) and retry the migration.
Prevention: For long-running migrations, consider a service account (Google) or your own app registration (SharePoint), which don't depend on one user's sign-in. Client secrets have their own expiry date, so note it.
"File not found"
Cause: The file was deleted or moved on the source between the discovery scan and the migration.
Solution: These errors are per file and don't stop the migration. Scan again if you want an updated inventory, then use Retry failed on the migration's page.
Prevention: Minimize the time between discovery and migration. Communicate with your team that the source should not be modified during migration.
"Request Timeout (408)"
Cause: A large file transfer or API call exceeded the timeout limit.
Solution: MigrationFox retries timed-out requests automatically, and large files already upload in chunks. If some files still fail, use Retry failed on the migration's page.
Prevention: For PC runs, check the PC's network connection and keep it from sleeping during the migration. Running large migrations outside business hours also helps.
"Permission denied (403)"
Cause: The connected account does not have sufficient permissions to access the requested resource.
Solution:
- Google: Verify domain-wide delegation is configured and the correct scopes are authorized in the Google Workspace admin console
- SharePoint / OneDrive: Check that the signed-in account can reach the site. With your own app registration, check that the API permissions show as granted (admin consent) in Entra ID
- S3: Verify the IAM policy includes the correct bucket ARN and actions
Prevention: Follow the platform setup guides and test with a small folder before running a full migration.
"Rate limited (429)"
Cause: Too many API requests in a short time. Cloud providers enforce rate limits to prevent abuse.
Solution: Usually nothing. MigrationFox handles 429 responses automatically: it waits as long as the service asks (Retry-After), slows down, and recovers. The migration log notes when this happens.
Prevention: Avoid running several large migrations against the same tenant at once, and schedule big runs outside business hours.
"Insufficient storage quota"
Cause: The destination doesn't have enough storage to receive the migrated files.
Solution: Check the discovery report for total source size and compare with available space at the destination. Increase the destination storage quota, or migrate in smaller batches.
Prevention: Always check destination storage capacity before starting a migration. The discovery report includes total source size for planning.
Still Need Help?
If your issue isn't listed above:
- Check the migration's page for per-file errors and skip reasons, and export its log
- Review the Activity page for your workspace's audit log
- In MigrationFox Desktop, use Report a problem to send diagnostics to support
- Contact support at support@migrationfox.com
Security
How MigrationFox handles your data and credentials. MigrationFox doesn't hold SOC 2 or ISO 27001 certification today.
AES-256 Credential Encryption
Stored connection credentials (OAuth tokens, access keys, service account keys, passwords) are encrypted at rest with AES-256-GCM. Encryption keys are kept separate from the database, and the format supports key rotation.
Argon2id Password Hashing
MigrationFox account passwords are hashed with Argon2id, the winner of the Password Hashing Competition, which is designed to make GPU and ASIC cracking expensive.
TOTP Multi-Factor Authentication
Protect your account with time-based one-time passwords (TOTP) from a standard authenticator app. Turn it on under Account → Two-Factor Auth; recovery codes are provided. Two-factor is set per user.
Where Your Files Go
PC runs (MigrationFox Desktop): files go straight from source to destination; MigrationFox sees status, counts, file names and paths, and errors. Cloud runs: files stream through the MigrationFox worker on Oracle Cloud and aren't stored after the migration. InfoPath archives run on a PC are turned into PDFs on that PC from Desktop 0.6.24 (earlier versions sent each form to MigrationFox to be rendered). Operational metadata (accounts, migrations, file names and paths) is hosted in the US.
Audit Trail
Workspace activity is logged with timestamps, user identity, and action details, and is shown on the Activity page. Each migration also keeps a detailed log you can export from its page.
Data Handling Summary
| Data Type | Stored? | Protection |
|---|---|---|
| User files | Not kept. PC runs: straight to the destination. Cloud runs: streamed through the worker, not stored after the migration | TLS in transit |
| Credentials (tokens, keys) | Encrypted at rest | AES-256-GCM |
| Passwords | Hashed | Argon2id |
| File metadata (names, paths, sizes, status) | Stored for job tracking | Hosted in the US |
| Activity (audit) log | Stored | Visible to your workspace on the Activity page |