Twenty

CRM

A customer tracker (CRM) your whole team will actually like using

Replaces

  • Salesforcefrom $25/user/mo
  • HubSpotfrom $15/seat/mo
  • Pipedrivefrom $14/user/mo

Your price: $0 — runs on your machine. And your data never leaves your hands.

What is it?

Think of a CRM as the shared memory of a business: every customer, every deal in progress, every conversation, in one place. Twenty is a free, open-source version of that — with a clean, modern design that feels more like a well-made app than corporate software. It covers what teams actually use day to day: contacts, companies, a visual deal pipeline, notes, tasks, and email sync.

Because your information lives in a standard database on your own machine, nobody can hold it hostage, raise the price, or limit how many records you keep.

What does it replace?

Salesforce (from $25/user/month), HubSpot (from $15/seat/month), Pipedrive (from $14/user/month). A team of ten easily pays $200–500 a month for these — every month, forever, and the price tends to go up once your data is locked in.

What does it cost you?

Nothing. Twenty is open source: unlimited people, unlimited customers, no feature tiers. It runs on your computer or a small server you rent for a few dollars a month.

Get it running

Don’t be intimidated by the text below — you don’t need to understand it. Select it, copy it, and paste it into Claude (or Claude Code). Claude will read the instructions, ask you a couple of simple questions (like where to put things and which passwords to use), and set everything up. Most people are done in about ten minutes.

Set up a self-hosted Twenty CRM on this machine using Docker Compose.

1. Follow the official self-hosting docs at https://twenty.com/developers/local-setup — use the docker compose setup from the twentyhq/twenty repo (packages/twenty-docker).
2. Create the .env file from the provided example, generating strong random values for every secret: the Postgres password, APP_SECRET, and the access, refresh, login, and file tokens.
3. Start the stack with `docker compose up -d` and confirm the server and worker containers stay healthy.
4. Verify the app responds at http://localhost:3000, then walk me through creating the first workspace and admin user.
5. When I'm ready to put it on a domain, set up a reverse proxy with TLS and update the server URL config accordingly.