You are here

Migrating emails from Google Apps to Office 365

The following is a general procedure for migrating users from Google Apps (GA) to Office 365 (O365). This assumes a familiarity with the GA and O365 control panels (CP) so only the general steps are listed below. It contains steps to migrate emails, calendars and contacts.

As there’s no fully comprehensive migration tool available by Microsoft, there are manual handling steps when migrating from GA to O365 as outlined below - this is feasible for small/medium size businesses but for large/enterprise migrations a more automated migration solution should be sought.

Additionally, below the procedure is a list of tips/notes for administrators managing a migration including things to avoid.


a. Don’t add the information recorded in step 2 and 3 yet

a. Line 1: EmailAddress,UserName,Password

b. Line 2: Office365EmailAddress,GoogleAppsEmailAddress,GoogleAppsPassword

i. each user on a new line

ii. The first email is the Office365 email the email will import INTO

iii. The second email is the GA email the email will export FROM

iv. The password is the GA password for the email it will export FROM

Collect all user’s GA credentials and verify all are correct (required!) - reset them if needed

Record all GA user aliases and distribution groups

All email and calendar sharing/delegation needs to be recorded, and then removed from each GA user. If not, this can cause issues with the migration.

Setup the Office 365 CP with the same users as GA

Export each user’s Contacts and Calendars from Outlook or the GA web interface.

Import all contacts and calendars into each user’s account (via Outlook or web interface)

For the mail migration, a CSV file needs to be prepared in the following format:

Log into as the administrator

Switch to exchange mode

On the dashboard, click on Migration under Recipients heading

Click the + symbol > Migrate to Exchange Online

Choose IMAP, Next

Attach the CSV file you prepared in step 7 - the web page will detect the users in the CSV file - ensure this is the same as the number you expect to migrate, Next

Enter these details, then click Next

a. IMAP server:

b. Authentication: Basic

c. Encryption: SSL

d. Port: 993

Enter the name of the migration batch (useful if you’re doing users in batches/groups), Next

Click Browse and add the client contact. If you want to add yourself and are on a different domain, enter your email in the Check Names field and click Check Names and then click OK - this will email you if there’s any errors and when the migration completes

Ensure Automatically start the batch is selected, unless you specifically want to delay the migration until later

Click New and the migration will start

Once the migration completes, assuming no errors, reinstate all the settings/delegations you recorded in step 2 and 3

Tips and Notes


  1. You can check the status of the migration from the same migration page you started the migration from in the O365 admin exchange panel, including which individual members of the batch have been completed, which have errors, and even how many mail items have been migrated for each user in the batch.
  2. If a migration fails for an individual user, the migration batch will continue and skip that user. You will not get an alert until the END of the migration, so it is recommend you check the migration status daily and if a migration fails, restart it as an individual migration immediately.
  3. When creating resource calendars or assigning licences in the O365 CP (as well as other tasks) there is a hidden delay from when you save the setting/task and then it becomes active - for example creating resource calendars and saving its settings can take ~15mins to save in the backend exchange system so ensure you wait before testing newly created resource calendars. This also applies to assigning an Office licence to a user and being able to consume that licence for an Office install.
  4. There is throttle and daily limits imposed by Google Apps’ servers. 1-5GB can take 1-2 days, 5-10GB can take 3-5 days, and larger accounts can take a week or more.
  5. Don’t forget to update phones, tablets and workstations with Outlook configured to the GA profiles.
  6. Office 2013 doesn’t support Windows XP or Windows Vista at all so if you are planning on implementing Office 2013 (if you have that level of subscription) you’ll need to keep the existing office on the older operating systems
  7. There are a lot of migration tools available. Most use API access which is fully supported by Google Apps (with configuration). One of the most popular tools is The Code-Two migration tool which has lots of great documentation and looks to have all the features required. However, it has a severe limitation that at the time of writing was not yet resolved: Google limits API access to any individual user account to 1 hour of access per 24 hours (i.e. user accounts get locked for 24 hours once the 1 hour limit is reached). In our experience, this became a problem for the following reasons:


a. the O365 server as needed for mobile devices is:

a. The Code-Two migration tool can migrate all contacts, calendars and mail per account, however it cannot do this within just an hour (unless the account is very small).

b. Once the hour limit is reached, the migration fails for that user with the account only partially migrated.

c. The next day, when you restart the migration (after the 24 hour lock out fades), the tool re-pools the entire account and starts back at the start and attempts to migrate all items again (starting with contacts > calendars > emails) - It will not migrate duplicates however this means checking each item so it effectively restarts the migration so when it hits the hour limit again, it may have only migrated a small amount of new data, with most of the time wasted with pooling, checking and skipping already migrated items. The next day this process starts again.

i. Best case scenario, it can take many many days to migrate an account of small/medium size by restarting the migration every 24 hours.

ii. Worst case scenario, if the account is large enough, it will never clear the already migrated list before the hour limit is reached and it effectively loops - going back over already migrated data for an hour each day and nothing new gets migrated before it reaches the lockout.

d. Code-Two support acknowledge this as an issue and they’re working on a fix but at the time of writing, none was available so we had to change methods of migration. Additionally, partially migrated data from every user account had to be deleted because the IMAP method via O365 does not detect duplicates, except for items migrated by itself.