Why Subscription Costs Are Harder to Track Than They Should Be
Every month, money quietly leaves your bank account in small, forgettable increments – a streaming service here, a cloud storage plan there, a SaaS tool you signed up for during a free trial two years ago and never canceled. These charges are designed to be invisible. Billing cycles are staggered, amounts vary, and most people have no single place to see everything at once. By the time you notice how much is actually going out, the damage is already done.
Wallos is a self-hosted subscription tracker that puts that picture in one place. It runs on Docker, stores your data locally, and gives you a clean dashboard of every recurring expense – sorted by billing cycle, currency, category, or renewal date. There are no third-party servers involved, no bank account integrations, and no subscription fee to track your subscriptions. You enter the data manually, and Wallos does the organizing. This guide walks through the full setup from scratch.

What You Need Before Starting
Wallos runs inside Docker, so the first requirement is having Docker and Docker Compose installed on whatever machine you plan to use as a host. That can be a home server, a Raspberry Pi, an old laptop running Linux, or a VPS. The application itself is lightweight – it runs comfortably on hardware with as little as 512MB of RAM. If you already run other self-hosted tools like Grocy, you likely have everything you need already set up.
You will also want to decide where Wallos will live on your network. Running it locally means it is only accessible from devices on your home network unless you configure a reverse proxy or VPN. That is perfectly fine for personal use and actually adds a layer of privacy since nothing leaves your local environment. If you want to access it remotely from a phone or when traveling, you will need either a reverse proxy like Nginx Proxy Manager or a tunnel service like Cloudflare Tunnel. That setup is outside the scope of this guide, but the Wallos container itself does not require it to function.
Setting Up the Docker Container
Start by creating a directory for Wallos and its persistent data. On a Linux host, a clean path would be something like /opt/wallos or a folder inside your home directory. Inside that directory, create a docker-compose.yml file. Wallos uses a SQLite database stored in a mounted volume, which means your data persists across container restarts and updates without any external database configuration.
Paste the following into your docker-compose.yml file:
- image: bellamy/wallos:latest
- container_name: wallos
- ports: “8282:80” (or change the host port to whatever is free on your machine)
- volumes: ./data:/var/www/html/db and ./logos:/var/www/html/images/uploads/logos
- environment: TZ=Your/Timezone (example: America/New_York)
- restart: unless-stopped
Once the file is saved, run docker compose up -d from that directory. Docker will pull the Wallos image, create the container, and start it in detached mode. The whole process takes under a minute on a reasonably fast connection. Open a browser and navigate to http://your-server-ip:8282 to confirm the interface loads. On first launch, Wallos will prompt you to create an admin account with a username and password. That account is stored locally in the SQLite database – there is no email verification or external authentication required.

Adding and Organizing Your Subscriptions
Once inside the dashboard, adding a subscription is straightforward. Click the plus button and fill in the name, cost, billing cycle (monthly, yearly, weekly, or custom), payment method, category, and next renewal date. You can also upload a logo for each service, which makes the dashboard easier to scan visually. Wallos includes a logo fetching feature that can pull icons automatically by searching a built-in database, which saves time when you are adding a long list of services at once.
Categories are user-defined, which means you build the taxonomy that makes sense for your situation. Some people separate by type – entertainment, productivity, cloud storage, gaming. Others organize by who uses the service – personal, family, work. Neither approach is more correct than the other, but being consistent from the start saves reorganization time later. Wallos lets you filter and sort by category on the main dashboard, so the structure you create directly affects how readable the overview becomes.
The dashboard displays a running total of monthly and yearly spending across all active subscriptions. This is where Wallos earns its value. Seeing a monthly figure is easy to process in the same way you would look at a utility bill. Seeing the yearly total, on the other hand, is often the number that changes how people feel about certain services. A twelve-dollar monthly plan looks minor in isolation. Stacked with six other “minor” subscriptions, the annual number tends to prompt a serious audit.
Wallos also supports multiple currencies, which is useful if you pay for some services in a foreign currency through regional pricing or if you use multiple cards billed in different countries. You can set a primary display currency and assign individual currencies per subscription, and Wallos will convert the totals using rates you configure manually. The conversion is not live – there is no API call to a rate provider – so you will need to update rates periodically if currency conversion accuracy matters to you. For most users tracking domestic subscriptions, this is a non-issue.

Notifications, Updates, and Long-Term Maintenance
Wallos supports renewal notifications through a built-in notification system that can alert you a set number of days before a subscription renews. Notification delivery options include email and several webhook-compatible services. Setting this up requires entering SMTP credentials if you want email, or a webhook URL for services like Gotify, Ntfy, or similar self-hosted notification tools. This is configured inside the settings panel under the notifications tab and takes only a few minutes to test once your credentials are ready.
Keeping Wallos updated is handled through Docker. Because the container uses the unless-stopped restart policy and stores data in a named volume rather than inside the container itself, updating is safe and non-destructive. Pull the latest image with docker compose pull, then bring the container back up with docker compose up -d. Your database stays intact. Running docker image prune afterward cleans up the old image layer to reclaim disk space.
The SQLite database file lives in the ./data directory you created during setup. Backing it up is as simple as copying that file to another location – a network share, an external drive, or a cloud storage folder you sync manually. Because it is a standard SQLite file, you can open it with any SQLite browser to inspect or export your data without ever touching the Wallos interface. That portability is the practical upside of local-only self-hosted tools: your data is yours in a format that does not require the app to read.
One thing Wallos does not do is pull transaction data automatically from banks or card providers. Every entry is manual. For some people that feels like extra work. In practice, the manual entry process is also why the tool stays accurate – there is no parsing logic to misread a charge description, no OAuth token to expire, and no third-party service holding read access to your financial accounts. You know exactly what is in the database because you put it there, and nothing changes without your input.
Frequently Asked Questions
Does Wallos connect to my bank account or credit card?
No. Wallos is fully manual – you enter each subscription yourself. It does not integrate with any financial accounts or external data sources.
Can I access Wallos from my phone or outside my home network?
By default, Wallos is only accessible on your local network. Remote access requires a reverse proxy or a tunnel service like Cloudflare Tunnel configured separately.





