Migratly migrates OneDrive to Google Drive by reading both APIs, deriving the mapping between them, and showing you what it found before anything is written. For this pair that is 8 entity types and 21 field mappings, of which 7 carry across intact and 10 are flagged as lossy, partial, dropped, or needing a route other than the obvious one. 3 of them need a decision from you. The OneDrive side is read-only throughout — Migratly never writes to or deletes from your source.
How the structure changes
- The folder tree is recreated first, parent before child.
- Office files stay as Office files by default — conversion to Google-native formats is opt-in, because it is lossy and irreversible.
- Comments only survive on files that were converted to Google-native format.
- A personal Drive cannot be created through the API, so the target is either an existing My Drive or a new shared drive, chosen before the run.
- OneDrive shared links flatten into Drive permissions — anonymous, organisation and per-user scopes do not all have an equivalent.
What maps to what
Entities are written in dependency waves. Everything at wave 0 exists before anything at wave 1 is created, which is what makes cross-references resolvable and the whole run resumable from a cursor.
| OneDrive | Google Drive | Wave | How it is handled | Fields |
|---|---|---|---|---|
| Drive | Drive | 0 | the collection that everything else lands in | 2 |
| User | User | 0 | accounts matched before anything is written | 3 |
| Folder | Folder | 1 | the records themselves | 3 |
| File | File | 2 | the records themselves | 6 |
| Comment | Comment | 3 | comments, attachments and body content | 2 |
| Permission | Permission | 3 | comments, attachments and body content | 2 |
| Version | Revision | 3 | comments, attachments and body content | 1 |
| SharedLink | Permission | 4 | comments, attachments and body content | 2 |
Field-by-field coverage
Every mapping carries one of five labels. Full means it carries across intact. Partial means the value survives with a narrowed range. Lossy means something is lost. Workaround means there is no native slot and it is carried another way. Dropped means the target will not accept it. Anything short of full is shown to you before the run, not discovered afterwards.
Drive → Drive
| OneDrive field | Google Drive field | Coverage | Notes |
|---|---|---|---|
name |
name |
Workaround | Drive cannot create new personal drives via API. Source OneDrive personal → user's My Drive. SharePoint document library → new Shared Drive (requires Workspace admin). Asks you first |
driveType |
no equivalent | Internal | Used to decide target type: 'personal' → My Drive, 'business'/'documentLibrary' → Shared Drive. |
User → User
| OneDrive field | Google Drive field | Coverage | Notes |
|---|---|---|---|
id |
no equivalent | Lossy | Drive identifies users by email; Microsoft Graph user id (Azure AD object ID) is opaque to Drive. |
userPrincipalName |
emailAddress |
Full | Email is the join key — both workspaces must have matching identities. |
displayName |
displayName |
Full |
Folder → Folder
| OneDrive field | Google Drive field | Coverage | Notes |
|---|---|---|---|
name |
name |
Full | |
parentReference.id |
parents |
Full | |
createdDateTime |
createdTime |
Partial | Drive accepts createdTime on create only via service-account/domain-wide delegation. |
File → File
| OneDrive field | Google Drive field | Coverage | Notes |
|---|---|---|---|
name |
name |
Full | |
file.mimeType |
mimeType |
Partial | Office formats (docx/xlsx/pptx) can optionally convert to Google Docs equivalents — must be opted in. Asks you first |
size |
no equivalent | Internal | Used to choose between multipart (<5MB) and resumable upload (≥5MB). |
parentReference.id |
parents |
Full | |
lastModifiedDateTime |
modifiedTime |
Partial | Drive accepts modifiedTime on create with the modifiedTime field but only on Shared Drives or service-account uploads. |
createdBy.user |
no equivalent | Workaround | Cannot impersonate creator on Drive unless using domain-wide delegation. |
Comment → Comment
| OneDrive field | Google Drive field | Coverage | Notes |
|---|---|---|---|
body.content |
content |
Partial | Drive comments only persist on Google-native formats (docs/sheets/slides). If files were uploaded as Office without conversion, comments cannot be reattached. Asks you first |
author.user.email |
no equivalent | Workaround | Cannot post a comment as another user — author name prepended to comment text. |
Permission → Permission
| OneDrive field | Google Drive field | Coverage | Notes |
|---|---|---|---|
grantedToIdentities[0].user.email |
emailAddress |
Full | |
roles[0] |
role |
Partial | Graph roles (read/write) → Drive roles (reader/writer). 'owner' transfer is not supported via API in either direction. |
Version → Revision
| OneDrive field | Google Drive field | Coverage | Notes |
|---|---|---|---|
id |
no equivalent | Internal | Drive auto-creates a revision per content update; full history requires sequential uploads. |
SharedLink → Permission
| OneDrive field | Google Drive field | Coverage | Notes |
|---|---|---|---|
scope |
type |
Partial | OneDrive SharedLink scopes (anonymous/organization/users) → Drive permission types (anyone/domain/user). |
link.webUrl |
no equivalent | Internal | Drive auto-generates the share URL — original URL preserved in audit log only. |
What does not carry across cleanly
These are the 10 mappings where Google Drive cannot hold what OneDrive holds. Each one appears in your coverage report with the same reason, and with the alternative routes available.
idLossy
Drive identifies users by email; Microsoft Graph user id (Azure AD object ID) is opaque to Drive.nameWorkaround
Drive cannot create new personal drives via API. Source OneDrive personal → user's My Drive. SharePoint document library → new Shared Drive (requires Workspace admin).createdDateTimePartial
Drive accepts createdTime on create only via service-account/domain-wide delegation.file.mimeTypePartial
Office formats (docx/xlsx/pptx) can optionally convert to Google Docs equivalents — must be opted in.lastModifiedDateTimePartial
Drive accepts modifiedTime on create with the modifiedTime field but only on Shared Drives or service-account uploads.createdBy.userWorkaround
Cannot impersonate creator on Drive unless using domain-wide delegation.roles[0]Partial
Graph roles (read/write) → Drive roles (reader/writer). 'owner' transfer is not supported via API in either direction.body.contentPartial
Drive comments only persist on Google-native formats (docs/sheets/slides). If files were uploaded as Office without conversion, comments cannot be reattached.author.user.emailWorkaround
Cannot post a comment as another user — author name prepended to comment text.scopePartial
OneDrive SharedLink scopes (anonymous/organization/users) → Drive permission types (anyone/domain/user).
Decisions you will be asked to confirm
Migratly stops and asks rather than guessing when the right answer depends on your instance.
name→name
Pick target Drive for each source library (My Drive vs new Shared Drive).file.mimeType→mimeType
Convert Office files to Google Docs format, or keep as Office files in Drive?body.content→content
Comments require file conversion to Google Docs format — decide per-file.
How a OneDrive to Google Drive migration runs
- Connect both systems. OneDrive is connected read-only. Migratly never writes to, archives or deletes anything on the source side.
- Schema discovery. Both APIs are read live, including your custom fields, so the mapping reflects your instance rather than a generic OneDrive instance.
- Coverage report. All 21 mappings are presented with their coverage. You confirm, reroute or exclude before anything is written.
- Execution in 5 waves. Writes are idempotent and cursor-tracked, so an interrupted run resumes instead of restarting or duplicating.
- Verification. The result is checked back against the source, and every action is in an append-only audit log.
Questions
Can Migratly migrate OneDrive to Google Drive?
Yes. OneDrive to Google Drive is a supported pair with a mapping covering 8 entity types and 21 fields. You connect both systems, Migratly reads the live schemas on each side, and it produces a coverage report you approve before any data moves.
What is lost when migrating from OneDrive to Google Drive?
10 of the 21 field mappings for this pair are flagged rather than clean. For example, `id` is marked lossy: Drive identifies users by email; Microsoft Graph user id (Azure AD object ID) is opaque to Drive. Every flagged mapping appears in the coverage report before the run, with its reason and the routes still open to it. Nothing is dropped silently.
How long does a OneDrive to Google Drive migration take?
It is bounded by the two APIs' rate limits rather than by Migratly. This pair runs in 5 dependency waves, starting with account matching and ending with cross-references, and every wave is resumable — a run interrupted halfway continues from its cursor rather than starting over or duplicating what it already wrote.
Is my OneDrive data modified during the migration?
No. The source is read-only for the entire run. Migratly never writes to, archives, or deletes anything in OneDrive, and every action taken against Google Drive is written to an append-only audit log.
Are Word and Excel files converted to Google Docs during migration?
Only if you ask for it. The default keeps the original Office format, because converting is lossy in ways that cannot be undone after the source is gone.
Do OneDrive comments carry over to Google Drive?
Comments survive only on files converted to Google-native format. Comments on files left in Office format cannot be attached and are reported before the run.
Where do the files land in Google Drive?
Either an existing My Drive or a new shared drive. Google does not allow creating a personal drive through the API, so the destination is a decision made during planning rather than at runtime.