This is the guide for moving between Zoho Mail and Google Workspace in either direction. Zoho is reached the way a mail client reaches it — IMAP for mail, CardDAV for contacts, CalDAV for calendars — with one app-specific password per mailbox that you upload as a CSV. No Zoho API client, no OAuth, nothing installed. The old mailboxes keep working until the domain moves.
1 · Plan the move
| Decision | Options | What it changes |
|---|---|---|
| Direction | Zoho → Google · Google → Zoho | Which side needs app passwords (Zoho, always) and where mailboxes must exist first (the target). |
| Does the domain move? | Yes (people keep their address) · No (new domain) | Whether cutover switches MX/SPF/DKIM and where aliases are recreated. |
| Who moves? | Everyone · active staff | Who goes in the CSV. People not in the CSV are not migrated. |
| Waves or one evening? | By team · all at once | How long both suites coexist; forwarding in Zoho per wave. |
2 · What becomes what
| Zoho Mail | Google Workspace | How |
|---|---|---|
| Folders (nested) | Labels (nested) | Read over IMAP as MIME with read, flagged and draft state and original dates; imported with those states |
| Labels (Gmail → Zoho) | Folders | The first user label decides the folder; Inbox, Sent, Drafts map to Zoho's own folders |
| Contacts | Google Contacts | vCards over CardDAV, field by field; Zoho categories ↔ contact labels |
| Calendars, recurring events | Google Calendar | iCalendar over CalDAV; RRULE recurrence, reminders and attendees kept as data — no invitations are sent |
| Domain | Domain | DNS: MX, SPF and DKIM switched at cutover; added/verified in the target's admin console |
Listed, not moved: Zoho groups, aliases, signatures, mail filters, out-of-office, WorkDrive files, Cliq; on the Google side Drive, Groups, Chat and Google-native documents. See section 10.
3 · Prepare Zoho
- Allow IMAP for the organisationmailadmin.zoho.com → Mail Settings → Access: allow IMAP. Then each user turns it on: Settings → Mail Accounts → IMAP Access.
- Two-factor onZoho only issues app-specific passwords to accounts with two-factor authentication. Enforce it at the organisation level if it is not already.
- App-specific password per mailboxaccounts.zoho.com → Security → App Passwords → Generate, name it “MigrateX”. Each person does this once and sends the admin the password — or the admin generates them where policy allows.
- Zoho as the target: create the mailboxes firstAdd the users in Zoho with their final addresses (or the fallback domain), then generate their app passwords. MigrateX writes into existing mailboxes only.
- Data centreZoho hosts in several regions; the IMAP server differs:
imap.zoho.com(US),imap.zoho.eu,imap.zoho.in,imap.zoho.com.au. The CardDAV/CalDAV addresses follow the same pattern.
4 · The CSV
One line per mailbox: email,app-specific password,display name. A header line is fine (columns are recognised by name in any order). Upload it on the Zoho connection page; re-upload to add people — a blank password keeps the one already on file. Passwords are stored encrypted with the server's key and never shown again; delete the CSV from your computer afterwards.
email,password,name
jane@acme.com,abcd1234efgh5678,Jane Doe
ravi@acme.com,ijkl9012mnop3456,Ravi Kumar
5 · Prepare Google Workspace
- Google as the target: create the accounts (same alias as the Zoho address so auto-match pairs them), assign licenses, a fallback domain until cutover, and connect with a super administrator via domain-wide delegation — see Connect a Google Workspace tenant. The Workspace needs a Google Cloud organisation (a super admin has signed in at
console.cloud.google.comonce). - Google as the source: the same connection; nothing else.
6 · Connect
- Zoho sideConnect source (or target) → the Zoho page: IMAP server, the CardDAV/CalDAV addresses (pre-filled), the CSV, and one mailbox to test with. MigrateX signs in to that mailbox and reads its Inbox.
- Google sideDomain-wide delegation as usual, then the one-time email code.
You see: both tenant cards green, and a “Mailboxes on file” table on the Zoho page showing which passwords have signed in successfully (the assessment tests every one).
7 · Assess and match
The assessment signs in to every mailbox in the CSV, counts messages and adds up sizes, and flags passwords that do not work — fix those in the CSV and upload again. Users match by address; pair the rest by hand.
8 · Pilot and waves
Migrate two or three people first and check folders, flags and a recurring meeting on the other side. Then waves. Delta passes carry only new mail (IMAP UIDs on Zoho, history IDs on Gmail), so run them freely until cutover.
9 · Cutover
- ForwardingZoho as the source: in mailadmin.zoho.com (or per user under Settings → Mail Accounts → Forwarding) forward each migrated mailbox to its new address. MigrateX cannot set this with app passwords; the wizard marks the step when you confirm.
- Final delta passMailboxes, contacts and calendars.
- The domainAdd and verify it in the target's admin console (Google or Zoho — the wizard shows the record), then switch MX, SPF and DKIM. Zoho's MX:
mx.zoho.com,mx2.zoho.com,mx3.zoho.com; SPFinclude:zoho.com. Google's:smtp.google.com, SPFinclude:_spf.google.com. - AddressesZoho as the target: set each mailbox's primary address on the moved domain and add old aliases in the admin console. Google as the target: MigrateX applies them.
- Notice and sign-offSend the notice; print the report.
10 · Limits
- App passwords can read and write mail, contacts and calendars — nothing else. Groups, aliases, signatures, filters, out-of-office and forwarding are set in the Zoho admin console and are listed in the report.
- WorkDrive and Cliq are separate Zoho products and are not migrated.
- Zoho's IMAP allows a handful of connections per mailbox and roughly four messages a second; MigrateX uses one connection per mailbox and runs mailboxes in parallel across workers.
- Contact photos and calendar attachments do not travel over CardDAV/CalDAV.
- The CSV is the user list: someone missing from it is not assessed or migrated.