Unofficial Desjardins AccèsD wrapper — track your balance, credit cards, transactions, and statements from Python
Project description
desjardins-py
Personal use only. This project is intended solely for personal, non-commercial use. You may not redistribute, sublicense, or use it as part of a product or service.
Disclaimer: This project is not affiliated with, endorsed by, or in any way connected to Desjardins Group. It is an independent, unofficial tool that interacts with Desjardins' web interface through browser automation. Use at your own risk. Your credentials are never transmitted anywhere other than Desjardins' own servers.
Unofficial Desjardins AccèsD wrapper for Python. Track your balance, credit cards, transactions, and statements. Pipe the data anywhere you need it.
Features
- Fetch accounts, credit cards, transactions, and statement metadata from AccèsD
- Returns typed Pydantic models — work with your data directly in Python
- Persist to SQLite, MySQL, or PostgreSQL with a single
save()call - Incremental fetching — only imports transactions newer than the last run
- Export to CSV or XLSX with
to_csv()/to_excel() - Persistent browser session — saves the session after the first OTP verification so subsequent runs are unattended
How it works
- Opens a headless Chromium browser to log into your AccèsD account and obtain a valid session token
- Intercepts the accounts API response to collect
BankAccountandCreditCardrecords - Calls the Desjardins REST API directly (reusing the session token) to fetch transactions and statement metadata for each account
- Returns a typed
FetchResultcontaining all fetched data. Use it directly in your code or persist it to a database
Usage
Once fetched, your data is plain Python objects — use them however you like:
- Budget automation — categorize transactions and trigger alerts when spending thresholds are hit
- Power BI / Tableau — load into a database and connect a live report on top of it
- Excel / Google Sheets — export with
to_excel()orto_csv()and refresh your spreadsheet on a schedule - Custom dashboards — pipe into any Python data stack (pandas, Plotly, Streamlit, etc.)
- Notifications — send a daily summary to Slack, email, or a home automation system
Installation
With pip
pip install desjardins-py
playwright install chromium
With uv
uv sync
uv run playwright install chromium
Examples
Basic fetch and inspect data
No database required. Credentials are passed directly.
from desjardins_py import DesjardinsClient
client = DesjardinsClient(
card_number="your_card_number",
password="your_password",
)
result = client.fetch()
# result.accounts → list[BankAccount]
# result.cards → list[CreditCard]
# result.transactions → list[Transaction]
# result.card_transactions → list[CardTransaction]
# result.statements → list[Statement]
for account in result.accounts:
print(account.name, account.amount, account.currency)
for tx in result.transactions:
print(tx.effective_date, tx.description, tx.amount)
On first run a you will be propmted for a OTP verification code in the terminal. Subsequent runs reuse the saved session in .session/.
Persist to SQLite
from desjardins_py import DesjardinsClient
client = DesjardinsClient(
card_number="your_card_number",
password="your_password",
)
client.connect_db("sqlite:///accesd.db")
result = client.fetch()
result.save() # inserts only transactions newer than the last fetch
Persist to PostgreSQL
pip install desjardins-py[postgres] # or: uv sync --extra postgres
from desjardins_py import DesjardinsClient
client = DesjardinsClient(
card_number="your_card_number",
password="your_password",
)
client.connect_db("postgresql+psycopg2://user:password@localhost:5432/accesd")
result = client.fetch()
result.save()
For MySQL:
pip install desjardins-py[mysql]and usemysql+pymysql://user:password@localhost:3306/accesd.
Export to XLSX
from desjardins_py import DesjardinsClient
client = DesjardinsClient(
card_number="your_card_number",
password="your_password",
)
result = client.fetch()
result.to_excel("accesd.xlsx") # one sheet per table
result.to_csv("./export") # one CSV file per table
Database schema
| Table | Description |
|---|---|
bank_accounts |
Chequing / savings accounts |
credit_cards |
Credit cards and lines of credit |
transactions |
Bank account transaction history |
card_transactions |
Credit card transaction history |
statements |
Statement metadata (name, date, size) |
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 desjardins_py-0.1.0.tar.gz.
File metadata
- Download URL: desjardins_py-0.1.0.tar.gz
- Upload date:
- Size: 84.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c9136b20cbac07baaa5403dc8295123e8eed15922a58b1dfa99c97423dbbf54
|
|
| MD5 |
b26b251a50dd957a268753a52e3fada6
|
|
| BLAKE2b-256 |
2110f0125ff9ba71bf5bc7145772ce66c6ce8fdd009c17a518474c39072f2b3b
|
Provenance
The following attestation bundles were made for desjardins_py-0.1.0.tar.gz:
Publisher:
release.yml on MaximBacar/desjardins-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
desjardins_py-0.1.0.tar.gz -
Subject digest:
4c9136b20cbac07baaa5403dc8295123e8eed15922a58b1dfa99c97423dbbf54 - Sigstore transparency entry: 1887216925
- Sigstore integration time:
-
Permalink:
MaximBacar/desjardins-py@8f5a43f49815b2725ca60bb9d99c32cec00906c9 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/MaximBacar
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8f5a43f49815b2725ca60bb9d99c32cec00906c9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file desjardins_py-0.1.0-py3-none-any.whl.
File metadata
- Download URL: desjardins_py-0.1.0-py3-none-any.whl
- Upload date:
- Size: 11.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa5f27a4a63c5c5310c0b40db378cf4d86995885dfba38499faa80f744ade82e
|
|
| MD5 |
270a4f1f72b662ca5efd773ce8f4e85a
|
|
| BLAKE2b-256 |
d05f10ca4563845cb38e14f6f4ec1353b247969a8bc1c5fa910e3892cb19b60e
|
Provenance
The following attestation bundles were made for desjardins_py-0.1.0-py3-none-any.whl:
Publisher:
release.yml on MaximBacar/desjardins-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
desjardins_py-0.1.0-py3-none-any.whl -
Subject digest:
fa5f27a4a63c5c5310c0b40db378cf4d86995885dfba38499faa80f744ade82e - Sigstore transparency entry: 1887217033
- Sigstore integration time:
-
Permalink:
MaximBacar/desjardins-py@8f5a43f49815b2725ca60bb9d99c32cec00906c9 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/MaximBacar
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8f5a43f49815b2725ca60bb9d99c32cec00906c9 -
Trigger Event:
push
-
Statement type: