Wallos
Self-hosted personal subscription tracker with multi-currency support, household member management, and AI-powered savings recommendations.
Wallos is an open-source, self-hostable web application that gives you complete ownership of your subscription and expense data without relying on any cloud service. It tracks recurring payments across any currency, alerts you before bills are due, and surfaces cost-saving opportunities using AI models you already control — ChatGPT, Gemini, OpenRouter, or a local Ollama instance.
Deployment is a single Docker container that bundles PHP 8.3, Nginx, and SQLite — no external database or additional services required. Wallos runs equally well on a home server, a VPS, or a baremetal NGINX/Apache stack, and updates itself cleanly through a built-in migration system. The Progressive Web App manifest lets you install it on mobile devices with offline shortcuts that behave like a native app.
The notification system covers email, Discord, Telegram, Pushover, Gotify, ntfy, Mattermost, PushPlus, ServerChan, and custom webhooks — all configurable per-user. An iCal feed endpoint emits RFC 5545-compliant calendar data so subscription due dates appear in any calendar application. OIDC/OAuth and TOTP two-factor authentication are available for teams sharing a self-hosted instance.
Wallos has shipped over 185 releases since mid-2023 and is actively hardened against SSRF, XSS, CSRF, and cross-user data leakage vulnerabilities, with a dedicated security contact and a docker image trivy scanning policy. The v4.9 generation added lifetime subscription tracking, notification filtering, and usage-sorted statistics graphs, reflecting ongoing responsiveness to real user workflows.
What You Get
- Subscription Management - Add, edit, and categorize every recurring payment with due dates, billing cycles (daily/weekly/monthly/yearly/lifetime), and payment method tracking; next payment dates are recalculated automatically on renewal.
- Multi-Currency Support with Live Rates - Enter subscriptions in any currency and view all costs converted to your chosen base currency using real-time exchange rates fetched from the Fixer.io API on a configurable schedule.
- AI-Powered Savings Recommendations - Connect ChatGPT, Google Gemini, OpenRouter, an OpenAI-compatible endpoint, or a local Ollama model to analyze your spending patterns and receive actionable suggestions for canceling or consolidating services.
- 10-Channel Notification System - Receive payment alerts via email, Discord, Telegram, Pushover, Gotify, ntfy, Mattermost, PushPlus, ServerChan, or custom webhooks, with configurable lead time from 1 to 180 days before each payment.
- Household Member Tracking - Assign subscriptions to specific household members, filter cost views by member, and generate iCal feeds per member so each person sees only their upcoming payments in their calendar app.
- iCal Feed Export - Subscribe to a live RFC 5545-compliant calendar feed from any calendar application (Google Calendar, Apple Calendar, Thunderbird) to see all upcoming subscription payments alongside your regular events.
- Statistics and Usage Graphs - Visualize monthly and yearly spending by category or payment method, sort graph views by usage volume, and track historical total yearly cost snapshots stored weekly.
- Progressive Web App - Install Wallos as a standalone app on Android and iOS with home-screen shortcuts to Dashboard, Subscriptions, Calendar, Stats, Settings, and About, including window controls overlay for desktop PWA use.
- OIDC/OAuth and 2FA Authentication - Enable single sign-on with any OIDC-compatible identity provider (Keycloak, Auth0, Authentik) and protect accounts with TOTP-based two-factor authentication.
- RESTful API with API Key Auth - Programmatically query subscriptions, monthly costs, categories, currencies, and settings using the documented API at api.wallosapp.com; per-user API keys are auto-generated.
- Logo Auto-Search - Fetch subscription service logos automatically by name when no image is uploaded, keeping the dashboard visually organized without manual asset management.
- 29-Language Localization - Switch the entire UI including JavaScript strings to any of 29 supported languages, with contribution guidelines for adding incomplete or new translations.
Common Use Cases
- Consolidating scattered household bills - A family tracks Netflix, Spotify, Amazon Prime, utilities, and insurance across USD and EUR, assigns each to the relevant household member, and uses the iCal feed to see all payment dates in a shared family calendar.
- Finding subscriptions to cancel - A freelancer connects Wallos to a local Ollama instance, runs the AI recommendation engine monthly, and systematically cancels underused services based on per-month-cost analysis across all billing cycles.
- Managing international SaaS subscriptions - A developer paying for cloud tools billed in USD, GBP, and EUR connects Fixer.io to see the true monthly cost in their home currency before budget review meetings.
- Self-hosting for privacy - A privacy-conscious professional runs Wallos on a home server to avoid entering subscription and payment method details into any third-party financial app, keeping all data in a local SQLite file they control.
- Monitoring a small team’s software budget - A startup CTO uses OIDC login to give the team access, assigns SaaS subscriptions by owner, and reviews the statistics page monthly to track per-category software spend.
- Lifetime deal tracking - A deal hunter adds lifetime software purchases using the dedicated lifetime subscription cycle (v4.9.0), separating one-time payments from recurring costs in statistics without distorting monthly totals.
Under The Hood
Architecture
Wallos is built as a traditional PHP monolith without a formal MVC framework. Top-level page files include a chain of shared concerns — session validation, database connection, and i18n loading — then execute their page logic directly. Endpoints organized under an endpoints/ directory act as a pseudo-REST layer for AJAX calls, grouped by resource type (subscriptions, notifications, AI, household, etc.), but these are procedural scripts rather than a cohesive controller layer. SQLite queries are written inline using raw SQLite3 and PDO calls with no ORM or repository abstraction. Despite this coupling, security concerns are cleanly extracted — CSRF validation runs through shared middleware, and SSRF protection for outbound HTTP calls (webhooks, AI providers, logo search, Fixer.io) is centralized in a single helper that enforces an allowlist for private-network addresses. The architecture is approachable for contributors and easy to extend feature by feature, though testability in isolation is limited.
Tech Stack The server runtime is PHP 8.3 FPM running behind Nginx on Alpine Linux, packaged as a self-contained Docker image with both the web server and PHP interpreter bundled together. Persistence is SQLite3 accessed through PHP’s native PDO extension, eliminating any external database dependency. PHPMailer handles SMTP email delivery. OIDC/OAuth authentication uses a custom integration, and TOTP two-factor authentication is implemented via the OTPHP library. AI recommendations dispatch HTTP requests to ChatGPT, Google Gemini, OpenRouter, any OpenAI-compatible host, or a local Ollama instance — selected at runtime from settings. Currency exchange uses the Fixer.io REST API. Scheduled tasks (payment date recalculation, exchange rate updates, notification dispatch, AI recommendations) run inside the container via dcron, Alpine’s cron daemon. A Progressive Web App manifest with offline shortcuts, maskable icons, and window controls overlay enables installable mobile and desktop experiences.
Code Quality
No automated test suite exists in the repository — there is no PHPUnit configuration, no test directories, and no CI pipeline. The files named test*.php in the notifications directory are manually triggered delivery-verification endpoints, not unit or integration tests. Error handling is functionally adequate but inconsistent: structured JSON responses coexist with inline die() calls across different endpoints. A minimal input sanitization helper covers trim, stripslashes, and htmlspecialchars uniformly. Security is addressed reactively but persistently — SSRF, XSS, CSRF, DNS rebinding, cross-user data isolation, and 2FA bypass vulnerabilities have all been patched in recent releases, and a SECURITY.md establishes a responsible disclosure contact. PHP type declarations and static analysis tooling are absent. The contributor base of 65 developers and an active issue tracker partially compensate for the lack of automated quality gates.
What Makes It Unique
Wallos occupies a specific and underserved niche: a self-contained personal subscription tracker with no required cloud dependencies that still delivers features typically found only in paid SaaS tools. The combination of household member assignment with per-member iCal feeds, pluggable AI recommendations across five provider types including local Ollama, a ten-channel notification system covering services like ServerChan and ntfy alongside mainstream platforms, and lifetime subscription tracking (added in v4.9.0 to handle one-time deals separately from recurring costs) reflects genuine attention to user workflows. The decision to stay entirely on SQLite means the database is a single file that can be backed up with cp, and the Docker image requires no orchestration beyond a volume mount — a meaningful operational advantage over tools requiring PostgreSQL or Redis.
Self-Hosting
Wallos is released under the GNU General Public License version 3 (GPLv3). This means you can use, modify, and distribute it freely, including for commercial purposes, but any derivative work or modified version you distribute must also be released under GPLv3. For personal or internal business use — running the app on your own server for your household or team — the copyleft requirement never triggers, since you are not distributing the software. The license explicitly does not restrict what you track or who can access your instance.
Running Wallos yourself requires a PHP 8.3 environment with a modest set of extensions (curl, gd, imagick, intl, sqlite3, zip, and a few others) or, more practically, a container runtime to pull the official Docker image. The entire application state lives in a single SQLite file and a logos directory, both of which should be mounted as Docker volumes for persistence across upgrades. Database migrations run automatically on the registration page or can be triggered via CLI, so updates are a docker pull followed by a container restart. Cronjobs for payment date recalculation, exchange rate updates, and notification dispatch run inside the container, so no external scheduler is needed. The operational burden is low by self-hosted standards — a single-node deployment with a weekly database file backup is sufficient for personal or small-team use.
There is no paid cloud tier, enterprise license, or SaaS version of Wallos. What you give up compared to a managed finance app is primarily support and uptime guarantees: issue resolution depends on the GitHub issue tracker and community Discord, there are no SLAs, and you are responsible for your own backups and availability. The project patches security vulnerabilities actively and ships multiple releases per month, so keeping up with updates is advisable, particularly given the financial nature of the data involved. For teams needing SSO, OIDC integration is available but requires a compatible identity provider you operate separately.
Related Apps
OpenBB
Databases · Analytics · Invoicing Finance
The AI Workspace for Finance: Connect Data, Run AI Agents, Build Analytics
OpenBB
OtherMaybe
Databases · Invoicing Finance · Authentication
Self-hostable personal finance app that gives you full ownership of your financial data with a clean, minimal Rails-powered interface.
Maybe
AGPL 3.0ERPNext
ERP · Invoicing Finance
100% free, open-source ERP unifying accounting, manufacturing, inventory, CRM, HR, and POS in a single self-hostable platform.