Twenty CRM autohospedado: alternativa a Salesforce para pymes
Qué cubre este artículo
- Qué es Twenty: CRM moderno de código abierto, “Salesforce para desarrolladores”.
- Instalación con Docker y configuración inicial.
- Modelo de datos: Companies, People, Opportunities, Workflows.
- API REST/GraphQL para integraciones.
- Integración de IA: Lead scoring y seguimientos con Ollama.
Introducción
Twenty es el CRM de código abierto más serio y joven del momento, construido explícitamente como “alternativa a Salesforce amigable con desarrolladores”. Frontend en React, backend en NestJS, Postgres de base de datos. Interfaz moderna, API limpia, activamente mantenido.
Para pequeñas y medianas empresas que desean alojar sus datos de clientes internamente (RGPD), Twenty es la opción más pragmática: significativamente más ligero que Salesforce o SuiteCRM, pero completamente funcional para ventas.
Casos de uso típicos
- Pipeline de ventas: deals, etapas, actividades, CRM clásico.
- Gestión de leads: leads desde formularios web → Twenty → IA califica.
- Cliente 360: todas las interacciones por cliente en un único lugar.
- Seguimientos asistidos por IA: Ollama redacta borradores de seguimiento para deals abiertos.
- Exportación de newsletters: exportar segmentos para workflows de correo.
Instalación: Docker
services:
twenty:
image: twentycrm/twenty:latest
ports:
- "127.0.0.1:3000:3000"
environment:
- PG_DATABASE_URL=postgres://twenty:geheim@db:5432/twenty
- SERVER_URL=https://crm.deine-domain.de
- FRONT_URL=https://crm.deine-domain.de
- ACCESS_TOKEN_SECRET=langer-zufaelliger-string
- LOGIN_TOKEN_SECRET=langer-zufaelliger-string-2
- REFRESH_TOKEN_SECRET=langer-zufaelliger-string-3
- FILE_STORAGE_TYPE=local
volumes: [twenty_data:/app/packages/twenty-server/.local-storage]
depends_on: [db]
restart: always
db:
image: postgres:16
environment:
POSTGRES_USER: twenty
POSTGRES_PASSWORD: geheim
POSTGRES_DB: twenty
volumes: [pg_data:/var/lib/postgresql/data]
restart: always
volumes:
twenty_data:
pg_data:
Después del inicio: http://localhost:3000 → registrarse → crear el primer workspace.
Modelo de datos
- Companies: empresas.
- People: contactos (vinculados a Companies).
- Opportunities: deals con pipeline de etapas (Kanban).
- Tasks/Notes: actividades.
- Custom Objects: tipos de objeto personalizados.
El modelo sigue intencionalmente la estructura de Salesforce, lo que facilita la migración y el pensamiento.
API para integraciones
Twenty ofrece REST y GraphQL. Genera la API key en Settings → APIs:
# Listar companies
curl -H "Authorization: Bearer DEIN_API_KEY" \
"https://crm.deine-domain.de/rest/companies"
# Crear person
curl -X POST -H "Authorization: Bearer DEIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":{"firstName":"Max","lastName":"Mustermann"},
"emails":{"primaryEmail":"max@firma.de"}}' \
"https://crm.deine-domain.de/rest/people"
Integración de IA: Lead scoring y seguimientos
import requests
import ollama
TWENTY = "https://crm.deine-domain.de"
HEADERS = {"Authorization": "Bearer DEIN_API_KEY"}
client = ollama.Client(host="http://ollama:11434")
# Opportunities abiertas sin actividad en los últimos 7 días
deals = requests.get(f"{TWENTY}/rest/opportunities",
headers=HEADERS).json()["data"]
for deal in deals["opportunities"]:
prompt = f"""Deal: {deal['name']}
Stage: {deal['stage']}
Betrag: {deal.get('amount',{}).get('amountMicros',0)/1e6}€
Letzte Aktivität: {deal.get('updatedAt')}
Schreibe einen kurzen, freundlichen Follow-up-E-Mail-Entwurf (3-4 Sätze)."""
draft = client.chat(model="llama3.1:8b",
messages=[{"role":"user","content":prompt}])["message"]["content"]
# Als Task/Note an den Deal hängen
requests.post(f"{TWENTY}/rest/notes", headers=HEADERS, json={
"title": "KI-Follow-up-Vorschlag",
"body": draft,
"targets": [{"opportunityId": deal["id"]}],
})
Integración con n8n
Twenty dispone de webhooks (Settings → Webhooks → HTTP call en eventos de objeto). Flow típico:
Twenty-Webhook: nuevo lead
│
▼
Ollama: enriquecer datos del lead (estimar industria, prioridad)
│
▼
Twenty-API: actualizar campos + crear task para ventas
│
▼
Si score > X → alerta en Slack/Telegram al equipo de ventas
Seguridad
- Secrets: los tres secretos de token en
.envdeben ser largos y aleatorios. - HTTPS: proxy inverso (Caddy): el CRM contiene datos sensibles de clientes.
- API keys: generar una key por integración, revocable en Twenty.
- RGPD: autohospedado = sin necesidad de contrato de procesamiento de datos con proveedores estadounidenses, gran ventaja respecto a Salesforce/HubSpot.
Twenty vs. alternativas
| CRM | Fortaleza | Debilidad |
|---|---|---|
| Twenty | UI moderno, código abierto, amigable con devs | Joven, menos features que SuiteCRM |
| SuiteCRM | Maduro, potente | UI antiguo, pesado |
| HubSpot | Integración de marketing | Cloud, caro, datos con proveedor estadounidense |
| Salesforce | Estándar de la industria | Caro, complejo, cloud |
| NocoDB | Más ligero que CRM | No es un modelo CRM verdadero |
Enlaces útiles
- IRC-Coding.de: tutoriales de programación en GraphQL, REST APIs.
- NocoDB: para hubs de datos más ligeros.
- Chatwoot: contraparte de servicio al cliente.
- n8n: automatización de workflows.
- Docker: fundamentos de contenedores.
Puntos clave:
- Twenty = CRM de código abierto moderno, “Salesforce amigable con desarrolladores”.
- Docker + Postgres, API REST/GraphQL limpia, pipeline Kanban.
- Autohospedado → amigable con RGPD sin contrato de procesamiento.
- Integración de IA: lead scoring, borradores de seguimiento, enriquecimiento de datos.
- La mejor opción de CRM de código abierto para entrar en el mercado de pymes.
FAQ
¿Es Twenty apto para producción?
¿Puedo migrar desde Salesforce/HubSpot?
¿Integración de correo electrónico?
¿Campos/objetos personalizados?
¿Requisitos de recursos?
¿Aplicación móvil?
Fuentes y lecturas complementarias
- Twenty: GitHub.
- Twenty Docs: documentación.
- IRC-Coding.de: tutoriales de programación.


