Migrate from Google
Import your full Gmail history into Owlat over IMAP, and let your AI assistant learn from every imported conversation.
The Migrate from Google wizard moves your existing Gmail mailbox into Owlat: it connects your account, imports your entire history, and — when AI knowledge is enabled — teaches your AI assistant from every imported conversation so it can recall and draft with that context from day one.
It builds on the external mailbox connection (the mail.external flag). Connecting an external mailbox alone only syncs new mail going forward; a migration additionally backfills your old mail.
The wizard needs mail.external. The AI-learning step additionally needs ai.knowledge — without it, your mail is still imported and searchable, the AI just doesn't learn from it. Enable both from Settings → Features.
Start a migration
Open Postbox → Settings → Migrate from Google (/dashboard/postbox/migrate). The wizard has four steps:
- Connect — Gmail requires a one-time App Password for IMAP (your normal password won't work). Turn on 2-Step Verification, create an App Password named "Owlat", and paste it in. The wizard tests the connection, encrypts the credential at rest, and starts the import.
- Import mail — the
mail-syncworker walks every folder's history from newest to oldest, storing each message in your Owlat inbox. Progress is live; you can close the page and it keeps running in the background. - Teach AI — once import finishes, Owlat reads through the imported mail and extracts contact-scoped knowledge (facts, decisions, preferences, relationships) into the knowledge graph. Each message's sender becomes a contact, so what the AI learns about one person never leaks into a reply to another.
- Done — a summary of what was imported and learned, with links to your inbox and what your AI now knows.
Once the mailbox is connected, draft-on-arrival works for it too: enable postbox.aiDraft (with ai) and new messages that need a reply arrive with a pre-generated draft in the Reply Queue — no hosted Postbox or verified domain required, since the flag only needs one mailbox source (postbox or mail.external).
Already connected your mailbox from Postbox → Settings → External mailbox? The wizard skips the connect step and goes straight to "Start import".
What gets imported
Everything: Inbox, Sent, Drafts, Trash, Spam, and your full archive (Gmail's All Mail). Messages are deduplicated by Message-ID, so a message that appears under several Gmail labels is stored once. The import is idempotent and resumable — if the worker restarts mid-import, it picks up where it left off, and re-running a migration never duplicates messages or knowledge.
Team inboxes
A team inbox in this sense is an external mailbox (support@, hello@) connected for the whole organisation rather than for one person — the kind you add under Admin → Team Inboxes (/dashboard/admin/team/inboxes), not the hosted shared inbox behind the inbox flag. A freshly connected one starts empty: it only receives mail that arrives from the connect onward. Importing its existing history works exactly like a personal migration, with four differences that follow from the mail belonging to the organisation instead of to you.
- Who can start one — the inbox's owner, or any owner/admin of the organisation. People who are merely on the inbox's roster can read it but cannot start or cancel an import.
- Where the action lives — on the inbox's row on the Admin → Team Inboxes page, beside the reconnect and remove actions. Progress, the running count of imported messages, and a cancel button sit in the same place, and the import keeps running after you close the page.
- Imported mail never enters the reply queue — history is ingested as backfill, so it produces no AI drafts and no reply queue entries no matter how large the import. Only mail that arrives after the connect is triaged.
- AI learning is opt-in — a personal migration feeds the knowledge graph by default; a team import does not. Tick the knowledge option when you start it (offered only when
ai.knowledgeis on) to index the imported mail — one LLM call per message, into knowledge every member of that inbox can draw on. Leaving it off still imports and indexes the mail for search.
If writing-voice personalization is already switched on for the inbox, its profile is refreshed in the background from the newly imported Sent mail once the import finishes, so the first AI draft afterwards already sounds like the team. If it isn't on yet, the import derives nothing. The profile is built the first time it is used, after you enable it.
Imported mail is stored in full, attachments included, and external mailboxes have no storage quota. A multi-year team history can run to tens of gigabytes on the server's disk. Watch the imported count while it runs and cancel if it is pulling in more than you meant to — everything imported up to that point is kept.
Tuning & cancelling
- Large mailboxes import in batches. On a small VPS you can lower
MAIL_SYNC_BACKFILL_BATCH(default200); raise it to import faster. - You can cancel an in-progress migration at any time — mail imported so far is kept; the rest of your history simply isn't imported unless you start again.
- AI indexing calls your configured LLM provider once per imported message and is paced to stay within budget; cost scales with mailbox size.
The wizard is tuned for Gmail, but any IMAP provider works — connect it from Postbox → Settings → External mailbox and the same backfill + AI-learning runs against it.