Migratly migrates Google Drive to OneDrive 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 22 field mappings, of which 7 carry across intact and 13 are flagged as lossy, partial, dropped, or needing a route other than the obvious one. 5 of them need a decision from you. The Google Drive 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, so every file has somewhere to land.
- Google Docs, Sheets and Slides have no OneDrive equivalent and are exported to Office formats on the way across.
- Sharing permissions are re-granted by email — both organisations must share or federate identities for this to match.
- OneDrive auto-versions on every upload, so revision history is normally carried as the latest revision only.
- Drive shortcuts have no OneDrive equivalent; they become a shared link stored in a sidecar file at the shortcut's location.
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.
| Google Drive | OneDrive | 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 | 3 |
| Revision | Version | 3 | comments, attachments and body content | 2 |
| Shortcut | SharedLink | 4 | comments, attachments and body content | 1 |
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
| Google Drive field | OneDrive field | Coverage | Notes |
|---|---|---|---|
name |
name |
Lossy | OneDrive does not allow creating new drives via API — must reuse existing user/group drives. Google 'My Drive' and Shared Drives map to OneDrive personal drives and SharePoint document libraries respectively, but mapping is admin-configured. Asks you first |
kind |
driveType |
Partial | Google's drive (personal) vs shared drive distinguished by 'kind'; OneDrive distinguishes personal/business/documentLibrary. |
User → User
| Google Drive field | OneDrive field | Coverage | Notes |
|---|---|---|---|
permissionId |
no equivalent | Lossy | Microsoft Graph identifies users by id (Azure AD object ID) or userPrincipalName — Google permissionId is opaque. |
emailAddress |
userPrincipalName |
Full | Email is the join key — both organizations must share or federate identities. |
displayName |
displayName |
Full |
Folder → Folder
| Google Drive field | OneDrive field | Coverage | Notes |
|---|---|---|---|
name |
name |
Full | |
parents |
parentReference.id |
Full | |
createdTime |
no equivalent | Dropped | Graph API sets createdDateTime at creation — cannot override on personal OneDrive. |
File → File
| Google Drive field | OneDrive field | Coverage | Notes |
|---|---|---|---|
name |
name |
Full | |
mimeType |
file.mimeType |
Partial | Google Docs/Sheets/Slides (application/vnd.google-apps.*) have no native OneDrive equivalent — must be exported to Office formats first. Asks you first |
size |
no equivalent | Internal | Used to choose between simple PUT (<4MB) and upload-session (≥4MB). |
parents |
parentReference.id |
Full | |
modifiedTime |
lastModifiedDateTime |
Partial | Graph API allows setting lastModifiedDateTime via PATCH after upload, but personal OneDrive may overwrite. |
owners |
createdBy.user |
Workaround | Cannot impersonate creator on personal OneDrive. For SharePoint, app-only auth with Sites.FullControl.All can set createdBy via the column 'CreatedBy'. Asks you first |
Comment → Comment
| Google Drive field | OneDrive field | Coverage | Notes |
|---|---|---|---|
content |
body.content |
Workaround | Comments only supported on Office-format files in OneDrive/SharePoint. Comments on PDFs / Google-only formats cannot be migrated and should be exported as plain-text annotation files instead. Asks you first |
author.emailAddress |
no equivalent | Workaround | Comment author cannot be impersonated — author name prepended to comment text. |
Permission → Permission
| Google Drive field | OneDrive field | Coverage | Notes |
|---|---|---|---|
emailAddress |
grantedToIdentities[0].user.email |
Full | |
role |
roles |
Partial | Drive roles (owner/writer/commenter/reader) → Graph roles (read/write). 'commenter' has no direct equivalent — flatten to 'read'. |
type |
no equivalent | Lossy | Drive permission types (user/group/domain/anyone) don't all map cleanly to Graph identity types. |
Revision → Version
| Google Drive field | OneDrive field | Coverage | Notes |
|---|---|---|---|
id |
no equivalent | Internal | OneDrive auto-versions every upload. Migrating historical revisions requires sequential uploads of each revision — typically only the latest revision is migrated. |
modifiedTime |
no equivalent | Dropped | Cannot set per-version timestamps on OneDrive — version history reflects upload time. |
Shortcut → SharedLink
| Google Drive field | OneDrive field | Coverage | Notes |
|---|---|---|---|
shortcutDetails.targetId |
no equivalent | Workaround | OneDrive has no native 'shortcut to a file' object. Closest workaround: create a SharedLink to the target file and store the link in a sidecar .url file in the shortcut's location. Asks you first |
What does not carry across cleanly
These are the 13 mappings where OneDrive cannot hold what Google Drive holds. Each one appears in your coverage report with the same reason, and with the alternative routes available.
permissionIdLossy
Microsoft Graph identifies users by id (Azure AD object ID) or userPrincipalName — Google permissionId is opaque.nameLossy
OneDrive does not allow creating new drives via API — must reuse existing user/group drives. Google 'My Drive' and Shared Drives map to OneDrive personal drives and SharePoint document libraries respectively, but mapping is admin-configured.kindPartial
Google's drive (personal) vs shared drive distinguished by 'kind'; OneDrive distinguishes personal/business/documentLibrary.createdTimeDropped
Graph API sets createdDateTime at creation — cannot override on personal OneDrive.mimeTypePartial
Google Docs/Sheets/Slides (application/vnd.google-apps.*) have no native OneDrive equivalent — must be exported to Office formats first.modifiedTimePartial
Graph API allows setting lastModifiedDateTime via PATCH after upload, but personal OneDrive may overwrite.ownersWorkaround
Cannot impersonate creator on personal OneDrive. For SharePoint, app-only auth with Sites.FullControl.All can set createdBy via the column 'CreatedBy'.rolePartial
Drive roles (owner/writer/commenter/reader) → Graph roles (read/write). 'commenter' has no direct equivalent — flatten to 'read'.typeLossy
Drive permission types (user/group/domain/anyone) don't all map cleanly to Graph identity types.contentWorkaround
Comments only supported on Office-format files in OneDrive/SharePoint. Comments on PDFs / Google-only formats cannot be migrated and should be exported as plain-text annotation files instead.author.emailAddressWorkaround
Comment author cannot be impersonated — author name prepended to comment text.modifiedTimeDropped
Cannot set per-version timestamps on OneDrive — version history reflects upload time.shortcutDetails.targetIdWorkaround
OneDrive has no native 'shortcut to a file' object. Closest workaround: create a SharedLink to the target file and store the link in a sidecar .url file in the shortcut's location.
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 OneDrive / SharePoint library for each Google Drive.mimeType→file.mimeType
Pick export format for Google Docs/Sheets/Slides (Office vs PDF).owners→createdBy.user
Cannot impersonate creator on personal OneDrive. For SharePoint, app-only auth with Sites.FullControl.All can set createdBy via the column 'CreatedBy'.content→body.content
Decide fallback: drop comments, append to file description, or export as a sidecar .comments.txt.shortcutDetails.targetId→ unmapped
Decide: drop shortcuts, or create .url sidecar files.
How a Google Drive to OneDrive migration runs
- Connect both systems. Google Drive 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 Google Drive instance.
- Coverage report. All 22 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 Google Drive to OneDrive?
Yes. Google Drive to OneDrive is a supported pair with a mapping covering 8 entity types and 22 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 Google Drive to OneDrive?
13 of the 22 field mappings for this pair are flagged rather than clean. For example, `permissionId` is marked lossy: Microsoft Graph identifies users by id (Azure AD object ID) or userPrincipalName — Google permissionId is opaque. 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 Google Drive to OneDrive 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 Google Drive data modified during the migration?
No. The source is read-only for the entire run. Migratly never writes to, archives, or deletes anything in Google Drive, and every action taken against OneDrive is written to an append-only audit log.
Do Google Docs convert to Word when migrating to OneDrive?
Yes. application/vnd.google-apps.* files have no native OneDrive type, so Docs, Sheets and Slides are exported to .docx, .xlsx and .pptx during the run.
Are Google Drive comments migrated to OneDrive?
Only on Office-format files — OneDrive and SharePoint do not support comments on PDFs or on Google-only formats. Where a comment cannot be written, it is exported as a plain-text annotation file rather than discarded.
Can file owners and created dates be preserved in OneDrive?
Not on a personal OneDrive: Microsoft Graph sets createdDateTime at creation and will not accept an override, and the creator cannot be impersonated. On SharePoint, app-only auth with Sites.FullControl.All can set CreatedBy.