Skip to main content

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


Download files

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

Source Distribution

cdfi_val-0.1.0.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

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

cdfi_val-0.1.0-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

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

Hashes for cdfi_val-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8e869c76a1782d0beebe469dfb9bde93bbe80e0845920cbe0b4e666d70aff345
MD5 bdb9932ed7182118bcf64999cf60909c
BLAKE2b-256 89860414ea2340facb1546f9e2807d11cb04a919d60839b01f3e665e289c08b6

See more details on using hashes here.

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

Hashes for cdfi_val-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 445a1606b230e80c07d4fb18c85ed66668a6c617e85926825464ecec714a1b88
MD5 35674e9e5419709e850765f10f268bb9
BLAKE2b-256 03eb60b6c76f9ab0fe770471076984c854965486b15a9e72500e9806a634bd13

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