actual-sync
ghcr.io/agigante80/actual-sync:latest
https://github.com/agigante80/Actual-sync/pkgs/container/actual-sync
bridge
sh
false
https://github.com/agigante80/Actual-sync/issues
https://github.com/agigante80/Actual-sync
Automated bank transaction synchronization for Actual Budget. Runs scheduled syncs across one or many budgets (including encrypted budgets), with a web dashboard, Prometheus metrics, multi-channel notifications (Email/Telegram/Slack/Discord), retry logic, and health monitoring.
Two ways to configure: (1) for a SINGLE budget, just fill in the "Actual server URL / password / Sync ID" variables below - no config file needed. (2) For MULTIPLE budgets, leave those blank and put a config.json in the Config path (on first start a config.example.json template is seeded there). See the project README.
Productivity: Tools:Utilities
http://[IP]:[PORT:3000]/dashboard
https://raw.githubusercontent.com/agigante80/Actual-sync/main/unraid/actual-sync.xml
https://raw.githubusercontent.com/agigante80/Actual-sync/main/unraid/actual-sync-icon.png
Automated bank transaction synchronization for Actual Budget with multi-server support, scheduling, encrypted-budget support, a web dashboard, Prometheus metrics, and multi-channel notifications.
SINGLE budget (simplest): fill in the "Actual server URL", "Actual server password" and "Actual server Sync ID" variables below and start - no config file needed. (Sync ID is in Actual Budget → open the budget → Settings → Advanced → "Sync ID".)
MULTIPLE budgets: leave those variables blank. On first start, if the Config directory has no config.json, the container writes a config.example.json template there and exits; fill in each server, rename it to config.json, and restart. config.json is validated at startup - an invalid one stops the container from starting (check the logs, or run 'npm run validate-config'), so fill the template correctly before renaming. If both a config.json and the variables are set, config.json wins (a budget is never synced twice).
The health/dashboard/metrics endpoint is served on container port 3000 (/health, /ready, /metrics, /dashboard). Keep healthCheck.host as "0.0.0.0" in config.json. Do NOT set it to your server's LAN IP, or the dashboard will be unreachable in bridge mode.
3000
/mnt/user/appdata/actual-sync/config
/mnt/user/appdata/actual-sync/data
/mnt/user/appdata/actual-sync/logs
99
100
Europe/Madrid
production