Verified = seen in the system. Self-reported = my own measure.
Years of deals, stuck in an old CRM.
The team had outgrown Zoho. But years of leads, deals and notes lived there.
A big-bang move felt too risky, so nobody started.
A move in six safe steps.
A 6-step migration in n8n: check the Zoho schema, set up fields and pipeline stages in Twenty, then move accounts, contacts, deals, and notes + tasks.
A 15-minute delta sync from Zoho to Twenty during the switch, with batching, retries for failed rows and a run log.
The new CRM is self-hosted Twenty, so the data stays on the client’s own servers.
Step by step
Step 0 reads the Zoho schema. It changes nothing.
Step 1 creates the custom fields and pipeline stages in Twenty.
Steps 2 to 5 move companies, people, deals, then notes and tasks. Each step logs what it did, so it can re-run safely.
While the team still works in Zoho, a sync copies changes every 15 minutes.
When everyone has moved, the sync is switched off.
Screenshots
One migration step: Zoho deals to Twenty.
The 15-minute sync during the switch.
People in the new CRM.
Companies in the new CRM.
How I built it
I worked inside the team’s own tools: their self-hosted n8n and their self-hosted Twenty CRM.
I wrote the workflows with Claude Code as my AI coding tool (self-reported). I decided what to build and checked every run.
Read-only probe workflows tested each API before anything wrote to it.
What you can check
Verified: 10,900+ contacts (9,700+ unique emails), 7,800+ companies and 342 opportunities now in Twenty. Source: CRM UI, 15 Oct 2026
Verified: Records stamped by the migration on 17–18 Jun 2026. Six migration workflows and the 15-minute sync are in n8n. Source: CRM record history and n8n, 15 Oct 2026