SSD Nodes Learn Hosting plans →
Guide Matt ConnorDi Matt Connor · Aggiornato 2026-10-03

App di budgeting self-hosted a confronto

Confronto tra Actual, Firefly III, Fava e Wallos: quali importano automaticamente le transazioni bancarie, quali richiedono file manuali e quali usano aggregatori.

La risposta breve

Le app di budgeting self-hosted si differenziano soprattutto per un aspetto: se recuperano le transazioni oppure se devi inserirle manualmente. Actual Budget è la scelta predefinita migliore per il bilancio familiare. Usa il metodo a buste e viene eseguito come un singolo container. Quando lo richiedi, può anche recuperare le transazioni tramite un provider di dati bancari.

Firefly III è la scelta adatta se vuoi conti in partita doppia oppure se vuoi eseguire le importazioni secondo una pianificazione, senza supervisione. Beancount con Fava è indicato se vuoi che il libro mastro sia un file di testo semplice gestito con il controllo versione. Wallos svolge una sola funzione specifica: tiene traccia dei costi ricorrenti che vengono addebitati sul conto ogni mese.

Nessuna di queste app comunica direttamente con la banca. Tutte quelle che mostrano transazioni bancarie le ricevono da un aggregatore di terze parti, e la creazione di un account presso un aggregatore è il passaggio che spesso blocca l'installazione. Leggi la sezione sulla sincronizzazione prima di installare qualsiasi applicazione.

Cosa esegue ciascuna applicazione, a confronto

ChartServices, storage and sync model, taken from each project's own install docs
The data behind this chart
[
  {
    "tool": "Actual Budget",
    "services": 1,
    "storage": "SQLite files",
    "bank_sync": "Aggregators, manual pull",
    "multi_user": "Needs OpenID",
    "encryption": "Optional end to end"
  },
  {
    "tool": "Firefly III",
    "services": 3,
    "storage": "MariaDB",
    "bank_sync": "Importer, cron capable",
    "multi_user": "Built in accounts",
    "encryption": "None at rest"
  },
  {
    "tool": "Beancount + Fava",
    "services": 1,
    "storage": "Text file",
    "bank_sync": "Import scripts only",
    "multi_user": "No login at all",
    "encryption": "File level, your choice"
  },
  {
    "tool": "Wallos",
    "services": 1,
    "storage": "SQLite file",
    "bank_sync": "Manual entry only",
    "multi_user": "Extra logins in settings",
    "encryption": "None at rest"
  }
]

Actual Budget esegue 1 servizio a esecuzione prolungata. Firefly III ne esegue 3, perché il relativo file Compose ufficiale avvia l'applicazione, un database MariaDB e un componente di supporto per cron in container separati. Questo esaurisce il quadro delle risorse per queste 4 applicazioni: l'unico componente pesante nel gruppo è il server database; tutto il resto è un processo leggero che gestisce un file di piccole dimensioni.

Quali applicazioni di budgeting self-hosted possono importare le transazioni dalla banca?

Nessuna applicazione self-hosted si collega direttamente a una banca. Le banche espongono le transazioni tramite API di open banking, raggiunte attraverso un aggregatore: un'azienda che gestisce i rapporti con le banche e rivende l'accesso. La domanda reale ha quindi due parti. L'applicazione comunica con un aggregatore? È possibile aprire un account presso un aggregatore che supporta la propria banca?

Actual Budget comunica con diversi aggregatori. Ad agosto 2026 la documentazione elenca Akahu per la Nuova Zelanda, Enable Banking per l'Europa, GoCardless Bank Account Data per l'Europa, SimpleFIN Bridge per il Nord America e Pluggy.ai per il Brasile. È necessario registrarsi direttamente presso il provider, generare chiavi e secret, quindi inserirli nel server. Ci sono due limitazioni importanti. La documentazione specifica chiaramente che Actual non sincronizza automaticamente i dati bancari, quindi l'utente deve premere il pulsante. La stessa pagina segnala inoltre che GoCardless non accetta nuovi account. Questo esclude il percorso europeo gratuito ancora consigliato dalle guide meno recenti. SimpleFIN Bridge è un servizio in abbonamento a pagamento. La fatturazione viene effettuata dal provider, non da Actual.

Firefly III separa l'importazione in un secondo container, Firefly III Data Importer. La configurazione di esempio include campi per le credenziali di GoCardless (Nordigen), Enable Banking, Spectre e SimpleFIN, oltre all'importazione di file CSV e CAMT.053. Impostare CAN_POST_AUTOIMPORT=true, inserire un valore casuale lungo in AUTO_IMPORT_SECRET e configurare un cron job sull'host permette di avviare un'importazione senza che sia aperto un browser. Questo è l'unico metodo di sincronizzazione realmente non presidiato nel confronto.

Beancount non supporta la sincronizzazione. È necessario scaricare un file CSV o OFX dalla banca ed eseguire uno script di importazione scritto o reperito autonomamente. Anche Wallos non supporta la sincronizzazione, per progettazione: si inserisce un abbonamento una volta e questo viene ripetuto secondo la pianificazione configurata.

L'importazione manuale è il metodo che funziona sempre e non dipende dai cambiamenti dei provider utilizzati dalla banca. Se la connettività bancaria è il criterio decisivo, verificare la copertura dell'aggregatore per la propria banca specifica prima di installare qualsiasi componente. Questa verifica richiede dieci minuti e può evitare un intero fine settimana di lavoro.

Actual Budget: gestione a buste in un solo container

La gestione a buste consiste nell'assegnare il denaro già disponibile a una categoria prima di spenderlo. Alla spesa alimentare assegni 300, ai trasporti 80 e il totale assegnato non può mai superare il denaro presente nei tuoi conti. Actual implementa questo metodo e segue un approccio local-first: il browser o il client desktop conserva una copia completa del budget e la sincronizza con il server, quindi l'app continua a funzionare anche quando il server è inattivo.

services:
  actual_server:
    image: actualbudget/actual-server:latest
    ports:
      - '5006:5006'
    volumes:
      - ./actual-data:/data
    restart: unless-stopped

Avvialo con docker compose up -d e apri http://your-server:5006. Il volume dei dati contiene due directory aggiuntive, server-files e user-files. Queste directory costituiscono il tuo budget. Prima di usarlo al di fuori della tua rete, configura un reverse proxy con TLS (transport layer security). La procedura completa è disponibile nella nostra guida all'installazione di Actual Budget, mentre i pattern Compose utilizzati da quel file sono descritti in Docker Compose su un VPS.

Multiutente. Per impostazione predefinita, il server utilizza una sola password condivisa da tutti. Per usare account separati è necessario OpenID Connect, che il server supporta con provider come Authentik, Keycloak, Google e GitHub. La prima persona che accede tramite OpenID diventa il proprietario del server e ACTUAL_USER_CREATION_MODE stabilisce se gli accessi successivi creano automaticamente nuovi account. Due persone possono aprire contemporaneamente lo stesso file di budget, ma la documentazione avverte che le modifiche in conflitto non sono sicure. Due persone che condividono un budget dovrebbero quindi evitare di modificare contemporaneamente la stessa schermata.

Crittografia. Actual offre la crittografia end-to-end per ogni file di budget. Quando è attiva, il server conserva dati che non può leggere, come richiesto su un server noleggiato. Ne derivano due conseguenze. Se perdi la password di crittografia, il file non è recuperabile perché non esiste una procedura di reimpostazione. Inoltre, i token di sincronizzazione bancaria sono archiviati separatamente e non sono protetti da questa crittografia. Chiunque disponga dell'accesso al database sul server può quindi leggerli.

Firefly III: partita doppia e l'unica importazione automatica di questa guida

La partita doppia prevede che ogni transazione abbia un conto di origine e un conto di destinazione. L'acquisto della spesa trasferisce denaro dal conto corrente a un conto delle spese, quindi nessun importo compare dal nulla. Il denaro che non si riesce a giustificare emerge come conto non bilanciato, invece di scomparire nel totale di una categoria. Questo è il motivo per scegliere Firefly III: il suo modello è più vicino alla contabilità che al semplice budgeting.

Installalo usando i file del progetto:

mkdir -p /srv/firefly
curl -fsSL -o /srv/firefly/docker-compose.yml https://raw.githubusercontent.com/firefly-iii/docker/main/docker-compose.yml
curl -fsSL -o /srv/firefly/.env https://raw.githubusercontent.com/firefly-iii/firefly-iii/main/.env.example
curl -fsSL -o /srv/firefly/.db.env https://raw.githubusercontent.com/firefly-iii/docker/main/database.env

Modifica .env prima del primo avvio. APP_KEY deve essere una stringa composta esattamente da 32 caratteri; il progetto include il comando per generarne una:

head /dev/urandom | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 32 && echo

STATIC_CRON_TOKEN richiede una seconda stringa di 32 caratteri. Il container cron definito in quel file compose chiama l'app una volta al giorno. Senza un token valido, la chiamata viene rifiutata e quindi le transazioni ricorrenti e i promemoria delle bollette non vengono eseguiti. Imposta SITE_OWNER sul tuo indirizzo email, fai corrispondere la password del database in .env a quella in .db.env, quindi avvialo:

docker compose up -d
docker compose logs -f app

Un primo avvio corretto termina con l'app disponibile sulla porta 80 all'interno del container e con i log che si stabilizzano. Un ciclo continuo di errori di connessione al database indica che le password in .env e .db.env non corrispondono. Di conseguenza, l'app non riesce ad autenticarsi a MariaDB.

Importazione automatica. Data Importer viene eseguito in un container separato e si autentica a Firefly III tramite un token di accesso personale in FIREFLY_III_ACCESS_TOKEN. Configura un'importazione in modo interattivo, salva il file di configurazione che viene generato, quindi lascia che cron invii richieste all'endpoint di importazione automatica secondo una pianificazione. È questo che si intende quando si dice che Firefly III esegue la sincronizzazione: l'aggregatore mantiene la connessione con la banca, l'importer raccoglie i dati e il server esegue il lavoro mentre dormi.

Multiutente. Firefly III gestisce gli account reali nel proprio database; è questo che seleziona AUTHENTICATION_GUARD=web. Imposta invece remote_user_guard e un proxy di autenticazione come Authelia gestirà l'accesso, passando il nome utente in un header. LDAP non è più supportato. Se l'istanza è raggiungibile da Internet, apri la pagina di amministrazione dopo il primo accesso e controlla l'impostazione della modalità a utente singolo. Questa impostazione determina se altri utenti possono registrarsi.

Crittografia. I dati non sono crittografati a riposo. Le transazioni sono archiviate in MariaDB in forma leggibile, quindi chiunque disponga della password del database o di una copia del volume può accedere alla tua cronologia finanziaria. Termina TLS davanti all'applicazione, mantienila fuori da Internet quando possibile e crittografa i backup.

Beancount e Fava: il registro è un file di testo

Beancount è una sintassi a partita doppia in formato testo semplice. Una transazione occupa poche righe in un file di tua proprietà:

2026-08-19 * "Supermarket" "Weekly shop"
  Expenses:Food:Groceries   42.10 EUR
  Assets:Bank:Checking

Fava è l’interfaccia web per quel file. Genera grafici, stato patrimoniale e conto economico e consente di modificare il sorgente. Installala in un ambiente virtuale:

sudo apt update && sudo apt install -y python3-venv
python3 -m venv ~/.venvs/fava
~/.venvs/fava/bin/pip install fava
~/.venvs/fava/bin/fava --read-only ~/ledger/main.beancount

Un semplice pip3 install fava non funziona su Ubuntu 24.04 con error: externally-managed-environment perché apt gestisce il Python di sistema. L’ambiente virtuale è quindi la soluzione, non un workaround.

Per impostazione predefinita, Fava resta in ascolto su localhost, sulla porta 5000. -H modifica l’host e -p modifica la porta, ma valuta attentamente se esporla su un indirizzo più ampio: Fava non dispone di autenticazione. La riga di comando non offre alcuna opzione per utente o password, quindi chiunque possa raggiungere la porta può leggere tutte le transazioni di tua proprietà. Mantieni l’host predefinito e accedi tramite un tunnel SSH, una VPN oppure un proxy che richieda l’autenticazione. Il flag --read-only impedisce le scritture dal browser. È utile impostarlo quando modifichi il file sul laptop e lo sottoponi a commit.

Multiutente e cifratura. Non esiste alcun modello di utenti. Una singola istanza pubblica un solo registro senza associare un’identità. La condivisione consiste quindi nel condividere l’accesso al proxy. La cifratura dipende dal metodo applicato al file, ad esempio una copia cifrata con age o gpg oppure un repository di backup cifrato. Il vantaggio di un registro testuale è che git offre gratuitamente cronologia, blame e una copia remota.

Wallos: quello piccolo, per i costi ricorrenti

services:
  wallos:
    image: bellamy/wallos:latest
    ports:
      - "8282:80/tcp"
    volumes:
      - './db:/var/www/html/db'
      - './logos:/var/www/html/images/uploads/logos'
    restart: unless-stopped

Wallos conserva tutto in un unico file SQLite in db/wallos.db. Gestisce più valute con conversione e può avvisarti via email, Discord, Telegram, Gotify, Pushover o webhook dell’imminente rinnovo di un abbonamento. Dalla pagina delle impostazioni puoi creare account aggiuntivi, ciascuno con il proprio elenco.

È importante chiarire cosa non è. Wallos non tiene traccia delle spese giornaliere e non gestisce budget. Risponde a una sola domanda: quanto pago ogni mese e cosa si rinnoverà la prossima settimana? Molte persone lo usano insieme ad Actual proprio per questo. Se gli importi ricorrenti che ti interessano sono quelli che fatturi, anziché quelli che paghi, consulta il software di fatturazione self-hosted.

E Maybe Finance?

Maybe Finance viene consigliato in molte discussioni, quindi è necessario fornire una risposta. Il README indica che il repository non è più mantenuto attivamente; l’ultima release è contrassegnata come v0.6.0 e il codice è distribuito con licenza AGPLv3. Il software è ancora funzionante. I dati di budgeting vengono conservati per un decennio e un software non mantenuto che gestisce uno schema di database e credenziali bancarie non è una scelta adeguata per conservarli. Questa era la situazione ad agosto 2026; prima di adottarlo, verifica direttamente il repository.

Quante risorse server richiedono?

Sono tutte applicazioni leggere. È preferibile misurare l'utilizzo reale invece di affidarsi a un numero riportato in un blog. Eseguite questo comando sul vostro server dopo una giornata di utilizzo normale:

docker stats --no-stream

Leggete la colonna MEM USAGE. Actual, Wallos e Fava mantengono ciascuno un file di piccole dimensioni e un processo leggero, quindi funzionano senza problemi su un VPS di dimensioni modeste insieme ad altri servizi. Firefly III è diverso perché nello stack è presente MariaDB, e un server di database occupa memoria anche quando non state eseguendo query. Prevedete margine per il database, non in base al volume delle transazioni. In ogni caso, un'applicazione per la gestione del budget raramente è ciò che esaurisce la memoria di un VPS: se state dimensionando un unico server per tutto lo stack, i requisiti minimi di memoria di PhotoPrism e Immich hanno molte più probabilità di determinare la quantità di RAM da acquistare.

I dati crescono molto lentamente. Dieci anni di transazioni familiari occupano un file di pochi megabyte, quindi lo spazio su disco non è il fattore limitante. La conseguenza principale di questa longevità viene illustrata nella sezione successiva.

La situazione su mobile e i suoi limiti

È in questo ambito che le applicazioni finanziarie self-hosted sono inferiori alle soluzioni commerciali. Valutate quindi con realismo la situazione prima di trasferire su una di esse la gestione finanziaria di un intero nucleo familiare.

La documentazione ufficiale indica che le applicazioni mobile sono deprecate. Al loro posto si usa la versione web, descritta nella documentazione come una progressive web app responsive da installare nella schermata principale e da usare come un'applicazione nativa. Funziona bene. Tuttavia, non è un'applicazione distribuita tramite app store, anche se la community mantiene client nativi non ufficiali.

Firefly III non distribuisce neppure un'applicazione ufficiale e la sua API ha prodotto due applicazioni non ufficiali valide. Waterfly III è un'applicazione Android, pubblicata su Google Play e F-Droid. Abacus funziona su iPhone, iPad e Android, esegue l'accesso con OAuth2 e memorizza i token nel portachiavi iOS. Entrambe devono poter raggiungere la tua istanza dal telefono.

Fava e Wallos offrono una pagina web responsive e nient'altro. Leggere un registro contabile dal telefono è semplice. Inserire una transazione Beancount usando la tastiera del telefono non lo è.

Un aspetto vale per tutte queste applicazioni: un telefono connesso tramite rete mobile non si trova sulla rete domestica. Devi pubblicare l'applicazione su un dominio con TLS e un'autenticazione robusta, oppure connettere il telefono a una VPN. Pubblicare un'applicazione finanziaria su Internet usando una sola password condivisa è l'errore da evitare. Se nessuna delle due soluzioni è adatta, mettere l'istanza dietro un onion service v3 è una terza modalità di accesso, perché non richiede un record DNS pubblico né una porta aperta verso Internet, a condizione di raggiungerla dal telefono tramite Tor Browser.

Backup: la sezione più importante di questa categoria

Perdere una libreria multimediale comporta soltanto un nuovo download. Perdere cinque anni di transazioni categorizzate significa perdere dati che non puoi scaricare di nuovo. Configura i backup dal primo giorno.

Cosa copiare per ogni applicazione:

  • Actual Budget: l'intero volume dei dati, sia server-files sia user-files.
  • Firefly III: un dump del database, oltre a .env, .db.env e al volume degli upload.
  • Beancount: il file del libro mastro, preferibilmente in un repository git con un remote.
  • Wallos: db/wallos.db e la directory dei loghi caricati.

Copiare un file SQLite mentre è in uso è il modo classico per creare un backup che non può essere ripristinato. SQLite conserva le scritture recenti in un file separato di tipo write-ahead log, quindi una copia del solo file .sqlite può non contenere le transazioni più recenti oppure non riuscire ad aprirsi. Arresta il container per i pochi secondi necessari alla copia:

cd /srv/actual
docker compose stop actual_server
tar czf /srv/backups/actual-$(date +%F).tgz -C /srv/actual actual-data
docker compose start actual_server

Firefly III richiede invece un dump. Eseguilo dall'interno del container del database, così la password non finisce nella cronologia della shell:

cd /srv/firefly
docker compose exec -T db sh -c 'mariadb-dump -u firefly -p"$MYSQL_PASSWORD" firefly' > /srv/backups/firefly-$(date +%F).sql

Le immagini MariaDB meno recenti includono lo stesso strumento con il nome precedente, mysqldump. Conserva .env e .db.env insieme al dump, perché ripristinare un database in un'installazione di cui non possiedi più la configurazione significa dover risolvere un problema nel momento peggiore.

Una copia sullo stesso VPS protegge da una modifica errata. Non protegge dalla perdita del server né da una compromissione. Invia la directory dei backup a un object storage con restic, che cifra il repository prima che qualsiasi dato lasci il server:

export RESTIC_REPOSITORY=s3:s3.example.com/money-backups
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init
restic backup /srv/backups
restic forget --keep-daily 7 --keep-weekly 8 --keep-monthly 12 --prune

restic snapshots dovrebbe ora elencare uno snapshot con la data odierna. La pianificazione, le credenziali e il timer systemd sono descritti in la nostra guida ai backup restic cifrati su un VPS.

Un backup che non hai mai ripristinato è soltanto un'ipotesi. Verificalo subito, finché non ci sono problemi:

restic restore latest --target /tmp/restore-test

Estrai l'archivio di Actual in una directory temporanea, avvia un secondo container che la utilizzi su un'altra porta e aprilo. Dovresti vedere i tuoi account con i saldi presenti al momento dell'esecuzione del backup. Per Firefly III, importa il dump in un database temporaneo e conta le righe nella tabella transactions. Se i numeri corrispondono a quelli dell'istanza attiva, il backup è valido. Elimina quindi le copie temporanee, perché un'istanza di test dimenticata con dati finanziari reali costituisce un problema a sé.

Scegli un'applicazione, utilizzala per un mese con dati reali prima di migrare lo storico e configura il backup nella stessa settimana. Se stai ancora decidendo quali aspetti della tua vita ospitare sul tuo server, la nostra panoramica di ciò che vale la pena ospitare autonomamente nel 2026 copre il resto dello stack.

FAQ

Quale applicazione di budgeting self-hosted può collegarsi alla mia banca?

Sia Actual Budget sia Firefly III possono farlo tramite un aggregatore di terze parti, non tramite una connessione diretta alla banca. Actual supporta provider come SimpleFIN Bridge per il Nord America, Enable Banking per l'Europa, Akahu per la Nuova Zelanda e Pluggy.ai per il Brasile. La documentazione specifica inoltre che Actual non sincronizza automaticamente i dati bancari: è necessario premere il pulsante. Firefly III usa un container separato, Data Importer, che può essere avviato tramite cron; per questo è l'unica delle due soluzioni a funzionare realmente senza intervento. Beancount e Wallos non offrono alcuna connessione bancaria. Prima di scegliere, verifica che l'aggregatore copra la tua banca specifica: nella maggior parte dei casi la copertura è più determinante delle funzionalità.

Posso usare queste applicazioni di budgeting sul telefono?

Sì, ma non tramite un'applicazione ufficiale. La documentazione di Actual specifica che le applicazioni mobili ufficiali sono deprecate e rimanda alla versione web, una progressive web app responsive che puoi installare nella schermata principale. Firefly III dispone di due client non ufficiali validi: Waterfly III su Android e Abacus su iOS e Android. Fava e Wallos offrono soltanto pagine web responsive. In ogni caso, il telefono deve poter raggiungere il server. Prevedi quindi un dominio con TLS e un'autenticazione robusta, oppure collega il telefono a una VPN.

Come posso eseguire il backup di un'applicazione di budgeting self-hosted senza danneggiare il database?

Non copiare mai da sola una base dati SQLite in uso. SQLite conserva le scritture recenti in un write ahead log separato. Una copia eseguita durante una scrittura può quindi non contenere alcune transazioni oppure non riuscire ad aprirsi. Arresta il container, copia la directory dei dati e riavvialo. Per applicazioni di queste dimensioni bastano pochi secondi. Per Firefly III, esegui mariadb-dump direttamente nel container del database e conserva i file dell'ambiente insieme al dump. Trasferisci il risultato fuori dal server in un repository restic cifrato e ripristinalo una volta per verificare che funzioni.

Firefly III è troppo pesante per un piccolo VPS?

È l'opzione più pesante tra quelle indicate, esclusivamente perché il suo file compose ufficiale esegue un server MariaDB accanto ai container dell'applicazione e di cron. I dati di finanza personale occupano poco spazio. La memoria viene quindi utilizzata dal processo del database inattivo, non dalle transazioni. Esegui docker stats --no-stream sul tuo server dopo una normale giornata di utilizzo e leggi la colonna MEM USAGE invece di affidarti a un valore pubblicato. Se vuoi ridurre al minimo l'uso delle risorse, Actual Budget e Wallos eseguono ciascuno un solo processo su un singolo file.

#budgeting#personal-finance#self-hosting#docker#privacy