Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

finstore-0.2.0.tar.gz (66.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

finstore-0.2.0-py3-none-any.whl (51.0 kB view details)

Uploaded Python 3

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

Hashes for finstore-0.2.0.tar.gz
Algorithm Hash digest
SHA256 83ee10b39e17e34b86175a68d265c32c79b420a72670f76392d4c23fa0249ffd
MD5 be79c5034464e310ae427fc034b02353
BLAKE2b-256 0cb4cca66c7ebe2a8fd34ea56bd8010215d219adb6ddfa70f492c86731600120

See more details on using hashes here.

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

Hashes for finstore-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f8284e5582bec1bec765bac714fa6143e2725f26f12283d12d5369a9c7c46252
MD5 1ffe59466aedc3468649cf267c74f79e
BLAKE2b-256 ddc8d389702f299b13331be44f45a7fda65614959e0db5555441e839bb6b1f3d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page