Backend-agnostic local repository of a user's financial data
Project description
finstore
Backend-agnostic local repository of a user's financial data.
finstore serves two audiences:
- End users — run the self-hosted CLI and dashboard to view your own finances.
- Developers — embed finstore in a larger application (e.g. an OFX server).
For end users
An end user is someone who wishes to build a personal environment to fetch and manage their own financial data. Such a user would use this finstore Python package to set up data connections to their own bank accounts, then fetch and maintain account and transaction data in a local data store.
Install the CLI and dashboard:
pipx install 'finstore[local]'
Step 1 — connect SimpleFIN:
SimpleFIN uses a one-time setup token to grant access. Get yours from beta-bridge.simplefin.org, then exchange it for a saved access URL:
finstore setup <your-setup-token>
The SimpleFIN access URL grants full read access to your account and transaction data and should be treated like a password. finstore saves it to a file readable only by your user account (credentials.json, mode 0600) and never transmits it anywhere other than to SimpleFIN itself.
To try it first with fictional demo data (no account needed):
finstore setup --demo
Step 2 — pull data and open the dashboard:
finstore fetch --start 2026-01-01 # backfill from a date; omit for incremental
finstore serve # dashboard at http://127.0.0.1:8081
The access URL is saved locally — you only run finstore setup once.
See finstore --help for all commands.
For developers
A developer is someone building an application that needs to store and query financial data — for example, an OFX server, a budgeting tool, or a reporting pipeline. They use finstore as a dependency, wiring up their own backend and storage configuration rather than using the CLI.
Install the core library, optionally with the SimpleFIN backend:
pip install finstore # core only
pip install 'finstore[simplefin]' # core + SimpleFIN backend
import asyncio
import time
from pathlib import Path
import httpx
from finstore import Tenant, fetch
from finstore.backends.simplefin import SimpleFINBackend, SimpleFINCredentials
from finstore.storage.filesystem import FilesystemStorage
tenant = Tenant(id="local")
storage = FilesystemStorage(root=Path("~/.local/share/finstore").expanduser())
creds = SimpleFINCredentials(access_url="https://user:pass@bridge.simplefin.org/simplefin")
dtstart = int(time.time()) - 90 * 86400 # last 90 days
async def main() -> None:
async with httpx.AsyncClient() as http_client:
backend = SimpleFINBackend(credentials=creds, httpx_client=http_client)
await fetch(tenant, backend, storage, window=(dtstart, None))
accounts = storage.list_accounts(tenant.id)
asyncio.run(main())
See docs/api-reference.md for the full public API.
For contributors
See docs/contributing.md for setup, running tests, linting, and CLI usage.
License
Apache-2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file finstore-0.2.0.tar.gz.
File metadata
- Download URL: finstore-0.2.0.tar.gz
- Upload date:
- Size: 66.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83ee10b39e17e34b86175a68d265c32c79b420a72670f76392d4c23fa0249ffd
|
|
| MD5 |
be79c5034464e310ae427fc034b02353
|
|
| BLAKE2b-256 |
0cb4cca66c7ebe2a8fd34ea56bd8010215d219adb6ddfa70f492c86731600120
|
File details
Details for the file finstore-0.2.0-py3-none-any.whl.
File metadata
- Download URL: finstore-0.2.0-py3-none-any.whl
- Upload date:
- Size: 51.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8284e5582bec1bec765bac714fa6143e2725f26f12283d12d5369a9c7c46252
|
|
| MD5 |
1ffe59466aedc3468649cf267c74f79e
|
|
| BLAKE2b-256 |
ddc8d389702f299b13331be44f45a7fda65614959e0db5555441e839bb6b1f3d
|