Python valuation toolkit for CDFIs and Minority Depository Institutions
Project description
cdfi-val 🏦
Institutional-grade valuation toolkit for CDFIs and Minority Depository Institutions.
Built for investment analysts, IC teams, and impact finance practitioners who need reproducible, auditable valuation outputs — without starting from scratch in Excel.
Why cdfi-val?
Community banks, CDFIs, and MDIs are consistently underserved by open-source finance tooling. Existing Python libraries target derivatives, public equities, and trading — not mission-driven depositories where valuation requires:
- Tangible Book Value multiples calibrated to peer community banks
- P/E analysis on thin or volatile earnings bases
- DCF models with WACC and terminal growth inputs
- Comparable transaction analysis across precedent MDI/CDFI deals
- Portfolio-level aggregation across 10–12 institutions
cdfi-val fills that gap.
Installation
cat > README.md << 'EOF'
# cdfi-val 🏦
**Institutional-grade valuation toolkit for CDFIs and Minority Depository Institutions.**
Built for investment analysts, IC teams, and impact finance practitioners who need
reproducible, auditable valuation outputs — without starting from scratch in Excel.
---
## Why cdfi-val?
Community banks, CDFIs, and MDIs are consistently underserved by open-source finance
tooling. Existing Python libraries target derivatives, public equities, and trading —
not mission-driven depositories where valuation requires:
- Tangible Book Value multiples calibrated to peer community banks
- P/E analysis on thin or volatile earnings bases
- DCF models with WACC and terminal growth inputs
- Comparable transaction analysis across precedent MDI/CDFI deals
- Portfolio-level aggregation across 10–12 institutions
`cdfi-val` fills that gap.
---
## Installation
```bash
pip install cdfi-val
Or clone and install locally:
git clone https://github.com/Jaypatel1511/cdfi-val.git
cd cdfi-val
pip install -e .
Quickstart
from cdfival import BankProfile, tbv, pe, dcf
# Define your institution
bank = BankProfile(
name="Carver Federal Savings Bank",
ticker="CARV",
total_assets=700_000_000,
tangible_common_equity=45_000_000,
shares_outstanding=179_600_000,
net_income_ltm=2_100_000,
eps_ltm=0.012,
cet1_ratio=0.118,
institution_type="MDI",
)
# TBV valuation
result = tbv.value(bank, multiple_range=(0.5, 0.9))
result.summary()
# P/E valuation
result = pe.value(bank, multiple_range=(8.0, 15.0))
result.summary()
# DCF valuation
result = dcf.value(bank, wacc=0.10, terminal_growth=0.025, projection_years=5)
result.summary()
Portfolio Mode
Aggregate valuations across a portfolio of institutions:
from cdfival import BankProfile, ValuationTracker
tracker = ValuationTracker()
tracker.add(bank1)
tracker.add(bank2)
tracker.add(bank3)
# Single method summary table
df = tracker.summary_table(method="tbv", multiple_range=(0.5, 1.0))
print(df)
# All three methods at once
results = tracker.all_methods(
tbv_range=(0.5, 1.0),
pe_range=(8.0, 15.0),
wacc=0.10,
terminal_growth=0.025,
)
print(results["tbv"])
print(results["dcf"])
Comparable Transactions
from cdfival.models.comps import ComparableTransaction, value
transactions = [
ComparableTransaction(
acquiree_name="Unity Bank",
deal_date="2021-04-01",
deal_value=36_000_000,
acquiree_tce=45_000_000,
acquiree_net_income=2_000_000,
acquiree_total_assets=500_000_000,
institution_type="MDI",
),
ComparableTransaction(
acquiree_name="Harbor Community Bank",
deal_date="2022-08-15",
deal_value=56_000_000,
acquiree_tce=70_000_000,
acquiree_net_income=3_500_000,
acquiree_total_assets=650_000_000,
institution_type="CDFI",
),
]
result = value(bank, transactions, metric="tbv")
result.summary()
Valuation Methodologies
| Method | Module | Key Inputs |
|---|---|---|
| Tangible Book Value | models.tbv |
TCE, shares outstanding, P/TBV range |
| Price / Earnings | models.pe |
Net income, EPS, P/E range |
| Discounted Cash Flow | models.dcf |
WACC, terminal growth, projection years |
| Comparable Transactions | models.comps |
Precedent deal multiples, TBV or P/E metric |
Who This Is For
- CDFI Fund staff reviewing investment proposals
- Impact investors conducting IC-level diligence on MDIs
- Analysts at CDFIs building valuation models for equity transactions
- Researchers studying community bank valuations at scale
Running Tests
PYTHONPATH=. pytest tests/ -v
46 tests across all modules.
Contributing
Pull requests are welcome. Please open an issue first to discuss what you'd like to change.
Issues tagged good first issue are a great starting point.
License
MIT © 2025 cdfi-val contributors
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 cdfi_val-0.1.0.tar.gz.
File metadata
- Download URL: cdfi_val-0.1.0.tar.gz
- Upload date:
- Size: 11.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e869c76a1782d0beebe469dfb9bde93bbe80e0845920cbe0b4e666d70aff345
|
|
| MD5 |
bdb9932ed7182118bcf64999cf60909c
|
|
| BLAKE2b-256 |
89860414ea2340facb1546f9e2807d11cb04a919d60839b01f3e665e289c08b6
|
File details
Details for the file cdfi_val-0.1.0-py3-none-any.whl.
File metadata
- Download URL: cdfi_val-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
445a1606b230e80c07d4fb18c85ed66668a6c617e85926825464ecec714a1b88
|
|
| MD5 |
35674e9e5419709e850765f10f268bb9
|
|
| BLAKE2b-256 |
03eb60b6c76f9ab0fe770471076984c854965486b15a9e72500e9806a634bd13
|