tva
← Approfondimenti

Self-hosting di un CRM: perché abbiamo abbandonato il SaaS

Il mercato dei CRM SaaS non manca di opzioni. Salesforce, HubSpot, Pipedrive, Zoho — ciascuno con le proprie fasce di prezzo, il proprio insieme di funzionalità e un account manager pronto a spiegare perché il piano superiore è esattamente ciò di cui la tua azienda ha bisogno. Abbiamo usato diversi di questi strumenti nel corso degli anni e abbiamo scoperto che, oltre un certo punto, il rapporto tra costi e benefici si rovescia.

I costi sono il sintomo più visibile. Pipedrive parte da costi ragionevoli, che poi crescono con il numero di utenti. Il piano gratuito di HubSpot è adeguato finché non smette di esserlo: a quel punto, passare a un piano a pagamento comporta un aumento sostanziale. Salesforce opera in una categoria completamente diversa: è software aziendale, con prezzi commisurati, e richiede amministratori dedicati per configurarlo e mantenerlo. Per una società di consulenza che gestisce alcune centinaia di contatti e una manciata di trattative attive, nessuna di queste strutture di prezzo è particolarmente efficiente.

Ma il calcolo dei costi non riguarda solo le tariffe di abbonamento. C’è anche la questione di cosa si sta effettivamente acquistando.

Il problema della dipendenza dal fornitore

I fornitori di CRM SaaS vendono comodità. In cambio, mantengono la disponibilità dei tuoi dati, il controllo sull’interfaccia e la capacità di modificare i prezzi a loro discrezione. Questa non è un’osservazione controversa — è il modello. Salesforce ha aumentato i prezzi più volte. HubSpot ha ristrutturato la distribuzione delle funzionalità tra i suoi piani. Pipedrive ha riorganizzato e rinominato la propria offerta di piani. Ognuna di queste mosse è pienamente legittima per il fornitore, e ognuna crea attrito per i clienti che hanno costruito flussi di lavoro sulle condizioni precedenti.

La portabilità dei dati conta più di quanto emerga nella maggior parte delle discussioni. Ogni grande CRM offre funzionalità di esportazione, tipicamente in CSV. Ma un’esportazione CSV dei dati dei contatti non equivale all’intero patrimonio di dati del CRM. Le relazioni tra contatti e aziende, la cronologia delle attività, la cronologia delle trattative, i campi personalizzati — questi elementi raramente vengono esportati in modo completo e utilizzabile. In pratica, abbandonare un CRM SaaS significa ricostruire porzioni significative della storia operativa da zero. I dati sono tecnicamente tuoi, ma recuperarli in una forma utile richiede uno sforzo sostanziale.

Twenty CRM e l’opzione self-hosting

Twenty (twenty.com) è un CRM open source emerso come seria alternativa alle offerte commerciali. Il codice viene sviluppato attivamente, il modello dei dati è ben strutturato e l’interfaccia è davvero utilizzabile. Funziona su PostgreSQL, il che significa che si possono usare direttamente gli strumenti standard per i database. Non è un progetto amatoriale — ha un team finanziato alle spalle e una roadmap chiara.

L’abbiamo distribuito sulla nostra infrastruttura Hetzner esistente, la stessa istanza CX53 che esegue il nostro sito web e altri servizi dietro Traefik. La configurazione Docker Compose fornita da Twenty è semplice. I servizi principali sono il server API, il frontend, il database PostgreSQL e Redis per il caching e la gestione delle code. Il consumo complessivo di risorse per un piccolo team è modesto: lo stack consuma meno di 2 GB di RAM quando è inattivo.

Il processo di configurazione ha richiesto circa due ore, inclusa la configurazione DNS e la terminazione SSL attraverso il nostro reverse proxy Traefik esistente. La documentazione di Twenty copre chiaramente la procedura di distribuzione con Docker. Le variabili d’ambiente sono ben documentate, i controlli dello stato dei servizi funzionano come previsto e la migrazione iniziale dei dati viene eseguita automaticamente al primo avvio. Non ci sono stati ostacoli significativi.

Che cosa mostra davvero l’analisi dei costi

Eseguire Twenty sull’infrastruttura che già gestiamo non comporta praticamente costi aggiuntivi. Su infrastruttura dedicata, il costo è la fattura mensile del server. Il nostro Hetzner CX53 costa circa €30 al mese e ospita più servizi — il CRM è un tenant in un ambiente condiviso, non la ragione per cui il server esiste.

Confronta queste cifre con le comuni alternative SaaS (prezzi di listino a ottobre 2026). Pipedrive costa $14–79 per utente al mese con fatturazione annuale, a seconda del piano. Per un team di tre persone, sono $42–237 al mese, o $504–2.844 all’anno. Sales Hub Professional di HubSpot, che sblocca l’automazione e i report personalizzati, costa $90 per utente al mese con fatturazione annuale, più un costo una tantum di $1.500 per l’avviamento. Starter Suite di Salesforce — il punto d’ingresso — costa $25 per utente al mese, ma le funzionalità che la maggior parte dei team di vendita richiede effettivamente si trovano in Pro Suite a $100 per utente al mese.

Nessuna di queste cifre è irragionevole per grandi organizzazioni di vendita in cui l’adozione del CRM aumenta direttamente il valore misurabile delle opportunità di vendita. Ma per una società di consulenza tecnica dove il CRM è principalmente un database di contatti e uno storico degli incarichi, il calcolo è diverso. Il costo operativo di una distribuzione sulla propria infrastruttura si misura in ore all’anno, non alla settimana. Il pareggio si raggiunge rapidamente.

La proprietà dei dati nella pratica

Quando i dati del CRM risiedono in un database PostgreSQL che si controlla, le implicazioni operative sono concrete. I backup sono dump standard del database — eseguiamo esportazioni giornaliere pg_dump su Hetzner Object Storage, conservate per 30 giorni con istantanee mensili conservati per un anno. Le query non hanno restrizioni. Si possono unire le tabelle CRM con i propri dati, costruire report personalizzati direttamente sullo schema, o inviare i dati dei contatti ad altri sistemi interni senza limiti alla frequenza delle esportazioni o quote di chiamate API.

Questo è più importante di quanto sembri inizialmente. I CRM SaaS impongono limiti alla frequenza delle richieste API che diventano vincoli architetturali su larga scala. Nei piani Free e Starter di HubSpot, le app private condividono un limite di 250.000 richieste al giorno e 100 richieste ogni 10 secondi (a ottobre 2026). I limiti di Pipedrive variano per piano. Quando è necessario sincronizzare i dati CRM con sistemi esterni — strumenti di fatturazione, gestione dei progetti, dashboard personalizzate — questi limiti determinano quali integrazioni sono architetturalmente fattibili. Con un database PostgreSQL gestito sulla propria infrastruttura, non esistono quote imposte dal fornitore; i vincoli pratici diventano la capacità del server, i propri controlli di accesso e la necessità di mantenere le integrazioni compatibili con lo schema di Twenty man mano che evolve.

C’è anche la questione di cosa succede ai tuoi dati se il fornitore viene acquisito, cambia i suoi termini o cessa le operazioni. Questi sono eventi a bassa probabilità per i principali fornitori, ma non sono eventi a probabilità zero. Possedere i propri dati significa assumersi la gestione del rischio anziché delegarla.

Personalizzazione senza un partner di sviluppo

Twenty è costruito su un’API GraphQL con un modello di dati guidato dai metadati. Aggiungere campi personalizzati a qualsiasi entità richiede secondi nell’interfaccia — si definisce il tipo di campo, appare immediatamente nell’interfaccia e nello schema API. Nessuna esportazione di configurazione, nessuna distribuzione in un ambiente sandbox, nessuna richiesta di assistenza, nessun passaggio a un piano superiore.

Questo è qualitativamente diverso da ciò che offrono i CRM SaaS. Salesforce consente un’estesa personalizzazione, ma il modello di personalizzazione è abbastanza complesso da sostenere un intero settore di servizi professionali attorno ad esso. Pipedrive consente campi personalizzati sulla maggior parte degli oggetti, ma la personalizzazione dell’interfaccia è limitata. Le capacità di personalizzazione di HubSpot dipendono fortemente dal piano che si sta pagando.

L’approccio di Twenty — schema aperto, controllo locale — significa che quando un incarico richiede di registrare informazioni che il modello dati predefinito non copre, lo si estende direttamente. Per una società di consulenza che a volte ha bisogno di registrare strutture di trattative insolite o metadati specifici del cliente, questa flessibilità si è rivelata davvero utile.

Strategia di backup

La nostra configurazione di backup è intenzionalmente semplice. Un pg_dump automatizzato giornaliero del database PostgreSQL di Twenty, compresso e caricato su Hetzner Object Storage. I dati dell’applicazione — immagini del profilo, allegati — risiedono in un volume Docker sottoposto a backup tramite restic con la stessa cadenza. La conservazione è di 30 giorni per gli istantanee giornalieri, 12 mesi per gli istantanee mensili.

I test di ripristino vengono eseguiti trimestralmente: ripristinare il backup su un database di preproduzione, verificare i conteggi delle righe, verificare a campione l’integrità dei dati. Un ripristino completo dal backup a un’istanza Twenty operativa richiede circa 15 minuti — accettabile per uno strumento che non è essenziale per le operazioni in tempo reale. Hetzner Object Storage costa €6,49 al mese (IVA esclusa, a ottobre 2026), con 1 TB di spazio di archiviazione incluso; i nostri backup CRM consumano una piccola frazione di quello spazio.

La disciplina operativa richiesta qui è modesta. I job di backup vengono eseguiti come task cron sull’host, registrano i risultati in un sistema di monitoraggio e avvisano in caso di errore. Questa è pratica standard dell’infrastruttura che qualsiasi team che gestisce carichi di lavoro server dovrebbe già avere in atto.

Quando il self-hosting ha senso

Il self-hosting di un CRM è più convincente quando ricorrono diverse condizioni. Il tuo team ha le competenze operative necessarie per eseguire container Docker e gestire un database PostgreSQL — questo è un prerequisito reale, non un dettaglio tecnico. Si gestisce già un’infrastruttura server con capacità disponibile. Il caso d’uso del CRM è relativamente stabile, il che significa che non si dipende dalla roadmap del fornitore per le funzionalità che serviranno nel prossimo trimestre.

Gli argomenti sul costo e sulla proprietà dei dati sono reali, ma sono secondari rispetto alla questione della capacità operativa. Il self-hosting sostituisce una spesa monetaria con tempo e competenze. Se il tempo operativo del team è più costoso di un abbonamento SaaS, il passaggio potrebbe non essere economicamente conveniente. Il pareggio non è puramente finanziario — dipende anche dalle competenze effettive e dal tempo disponibile del team.

Quando non ha senso

Se la tua organizzazione ha bisogno di integrazioni aziendali articolate — un CRM collegato a una piattaforma di automazione del marketing, a una CDP e a un data warehouse, tutti gestiti da una funzione RevOps dedicata — il self-hosting non è la strada giusta. L’ecosistema di integrazioni dei CRM commerciali è ricco perché i fornitori hanno investito anni per costruirlo. Un’istanza Twenty gestita sulla propria infrastruttura si collega tramite la sua API GraphQL o l’accesso diretto al database. Non dispone di una libreria di 500 connettori preconfigurati.

Allo stesso modo, se nessuno nel team sa diagnosticare un container Docker che non funziona, leggere i log di PostgreSQL o ripristinare un database da un backup, l’onere operativo supererà rapidamente il risparmio economico. Il self-hosting richiede competenze infrastrutturali di base che non tutti i team possiedono — e acquisirle ha un costo.

I requisiti di conformità possono anche cambiare l’equazione. Se la tua azienda è soggetta a normative che richiedono la gestione certificata dei dati da parte dei fornitori tecnologici — attestazioni SOC 2, audit ISO 27001 — una distribuzione sulla propria infrastruttura significa che non puoi fare riferimento all’attestazione di un fornitore di CRM; il CRM rientra nell’ambito dei tuoi controlli e audit. Se questo è un vantaggio o un onere dipende dal proprio livello attuale di conformità.

Che cosa usiamo in pratica

La nostra installazione Twenty in produzione è in esecuzione da diversi mesi senza incidenti significativi. La gestione dei contatti, le schede delle aziende, il monitoraggio delle trattative e la registrazione delle attività funzionano tutti come previsto. L’interfaccia è sufficientemente chiara da non richiedere formazione formale per i nuovi utenti. L’API GraphQL si è rivelata utile per trasferire le informazioni del CRM ad altri strumenti interni — specificamente per gli strumenti di reportistica per i clienti e monitoraggio degli incarichi che realizziamo internamente anziché acquistare come componenti aggiuntivi SaaS.

L’impegno di manutenzione è inferiore al previsto. Twenty rilascia aggiornamenti a un ritmo costante; per distribuirli basta scaricare la nuova immagine Docker e riavviare il servizio, tipicamente in meno di cinque minuti. Il database PostgreSQL non ha richiesto intervento manuale oltre la verifica di routine del backup.

La decisione non era ideologica. Non ci siamo allontanati dal CRM SaaS perché il SaaS è intrinsecamente sbagliato o perché il self-hosting è intrinsecamente virtuoso. La decisione era operativa: per il nostro caso d’uso specifico, la gestione sulla propria infrastruttura è più semplice, più economico e ci dà un migliore controllo sui dati che ci appartengono. Per un’organizzazione con vincoli diversi — un team di vendita più grande, requisiti di integrazione più profondi, o capacità infrastrutturale limitata — la conclusione potrebbe essere diversa. Il punto è fare il calcolo esplicitamente anziché scegliere automaticamente il modello in abbonamento perché è il percorso di minor resistenza.


Approfondimenti correlati

Per approfondire