Twenty
CRMA customer tracker (CRM) your whole team will actually like using
Replaces
Salesforcefrom $25/user/moHubSpotfrom $15/seat/moPipedrivefrom $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.