How to Set Up Firefly III Automatic Bank Sync with SimpleFIN
Problem
Manual transaction entry in personal finance software is tedious. I tried keeping up with daily expenses in Firefly III, but the friction was real:
- Logging into multiple bank accounts to download CSVs
- Importing and deduplicating transactions manually
- Categorizing hundreds of transactions each month
- Forgetting to track small purchases entirely
After two weeks of enthusiasm, I abandoned the effort. My budget was only as good as my memory - which is to say, not very good.
The real problem: personal finance tools require consistent input to be useful, but consistent input requires effort that scales linearly with every account and transaction.
Environment
I run Firefly III in Docker on my home server. Here’s my setup:
version: '3.8'
services: fireflyiii: image: fireflyiii/core:latest container_name: fireflyiii restart: unless-stopped ports: - "8080:8080" environment: - APP_KEY=SomeRandomStringOf32CharsExactly - APP_URL=http://localhost:8080 - TRUSTED_PROXIES=** - DB_CONNECTION=pgsql - DB_HOST=db - DB_PORT=5432 - DB_DATABASE=firefly - DB_USERNAME=firefly - DB_PASSWORD=secret_password volumes: - firefly_iii_upload:/var/www/html/storage/upload depends_on: - db
db: image: postgres:15 container_name: fireflyiii-db restart: unless-stopped environment: - POSTGRES_DB=firefly - POSTGRES_USER=firefly - POSTGRES_PASSWORD=secret_password volumes: - firefly_iii_db:/var/lib/postgresql/data
volumes: firefly_iii_upload: firefly_iii_db:This gets Firefly III running, but transactions still need to be entered manually. That’s where SimpleFIN Bridge comes in.
Solution
SimpleFIN Bridge connects Firefly III to your bank accounts through the SimpleFIN cloud service. The architecture looks like this:
[Banks] --> [SimpleFIN Cloud] --> [SimpleFIN Bridge (Docker)] --> [Firefly III (Docker)]Your bank data flows through SimpleFIN’s secure cloud to standardize the format, then into your locally-hosted SimpleFIN Bridge, which pushes transactions to Firefly III. Your data stays on your infrastructure after the initial sync.
Step 1: Deploy SimpleFIN Bridge
Add SimpleFIN Bridge to your Docker Compose:
simplefin: image: aperfco/simplefin:latest container_name: simplefin-bridge restart: unless-stopped ports: - "8081:8080" environment: - BASE_URL=https://beta.simplefin.org - MANAGER_URL=https://beta.simplefin.org volumes: - simplefin_data:/app/data depends_on: - fireflyiii
volumes: simplefin_data:Step 2: Connect Your Bank Accounts
- Create an account at SimpleFIN
- In the SimpleFIN Bridge UI (http://localhost:8081), authenticate with your SimpleFIN account
- Add your bank credentials through SimpleFIN’s secure connection flow
- Map each bank account to the corresponding Firefly III account
SimpleFIN supports thousands of financial institutions. I connected 13 accounts: checking accounts, credit cards, savings, and investment accounts (RRSP, LIRA, TFSA).
Step 3: Configure Scheduled Syncs
The key insight: sync frequency should match your spending patterns. I set up twice-daily syncs using a simple cron job:
#!/bin/bash# /opt/firefly/sync.sh
# Morning sync at 6 AM# Evening sync at 6 PM
curl -X POST http://simplefin-bridge:8080/sync# Sync transactions twice daily0 6,18 * * * /opt/firefly/sync.sh >> /var/log/firefly-sync.log 2>&1With 2x daily syncs, I rarely wait more than 12 hours for transactions to appear.
Step 4: Set Up Auto-Categorization Rules
This is the critical gotcha: auto-categorization rules are what make automation actually hands-off.
Without rules, you’ll have automatic transactions but still need to categorize everything manually. I created 65+ rules covering:
- Recurring bills (Netflix, utilities, subscriptions)
- Common merchants (grocery stores, gas stations)
- Income sources (salary, transfers)
- Investment transactions
Here’s how to create a rule in Firefly III:
- Navigate to Rules > Create new rule
- Set trigger conditions (description contains “Netflix”)
- Set actions (set category to “Entertainment”)
Rule 1: Netflix Subscription Trigger: description contains "NETFLIX" Action: set category "Entertainment" Action: set budget "Fun Money"
Rule 2: Grocery Store Trigger: description contains "WHOLE FOODS" OR "TRADER JOE" OR "COSTCO" Action: set category "Groceries" Action: set budget "Food"
Rule 3: Gas Station Trigger: description matches regex /^(SHELL|CHEVRON|76|MOBIL)/ Action: set category "Transportation" Action: set budget "Auto"The regex-based rules are powerful for catching variations in merchant names.
Step 5: (Optional) Add Visualization with InfluxDB and Grafana
For deeper insights, I push Firefly III data to InfluxDB and visualize in Grafana:
influxdb: image: influxdb:2.7 container_name: influxdb restart: unless-stopped ports: - "8086:8086" volumes: - influxdb_data:/var/lib/influxdb2
grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana
volumes: influxdb_data: grafana_data:I wrote a Python script that queries Firefly III’s API and pushes metrics to InfluxDB every hour. Now I can answer questions like:
- “How much did I spend on restaurants this month?”
- “Am I over budget on AI tools?”
- “Summarize my top 5 expense categories for Q1 2026”
Key Insights
After running this setup for 50 days, here’s what I learned:
1. Sync frequency matters for cash flow awareness. Twice daily is enough for most use cases. Real-time would be overkill and might hit rate limits.
2. Rules need maintenance. New merchants appear, subscription names change. I review my categorization rules monthly and add 2-3 new ones.
3. The initial setup takes time. Connecting accounts and creating rules took me about 2 hours. But that’s a one-time cost that pays dividends indefinitely.
4. Privacy is preserved. Transaction data only leaves my network during the SimpleFIN sync. After that, it stays local.
5. Budget tracking finally works. With automatic categorization, I can set budgets and actually track against them without manual effort.
Summary
Setting up automatic bank sync between Firefly III and SimpleFIN Bridge eliminates the friction of manual transaction entry. The key components:
- Docker deployment for both services with persistent volumes
- SimpleFIN Bridge as the connector between banks and Firefly III
- Scheduled syncs (2x daily works well) via cron
- Auto-categorization rules to make the automation truly hands-off
- Optional visualization with InfluxDB and Grafana for advanced analytics
The result: I track 13 accounts across checking, savings, credit cards, and investments with zero manual entry. 65+ categorization rules handle the heavy lifting. Budget tracking finally works because the data is accurate and current.
The upfront investment was about 2 hours. The return is permanent: a personal finance system that actually reflects reality.
Final Words + More Resources
My intention with this article was to help others share my knowledge and experience. If you want to contact me, you can contact by email: Email me
Here are also the most important links from this article along with some further resources that will help you in this scope:
- 👨💻 Reddit: I gave my home a brain. Here's what 50 days of self-hosted AI looks like
- 👨💻 Firefly III Documentation
- 👨💻 SimpleFIN Bridge
Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!
Comments