Skip to main content

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

Metadata

Release files for cdfi-val 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cdfi-val 0.1.0
File Size Uploaded Provenance Actions
cdfi_val-0.1.0.tar.gz 11.3 kB Without provenance Details for cdfi_val-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for cdfi-val 0.1.0
File Interpreter ABI Platform Actions
cdfi_val-0.1.0-py3-none-any.whl Python 3 none any Details for cdfi_val-0.1.0-py3-none-any.whl

Total release size: 24.0 kB

Release files / cdfi_val-0.1.0.tar.gz

Download URL cdfi_val-0.1.0.tar.gz
Size 11.3 kB
Tags Source
SHA-256 checksum
How to use checksums
8e869c76a1782d0beebe469dfb9bde93bbe80e0845920cbe0b4e666d70aff345
BLAKE2b-256 checksum
How to use checksums
89860414ea2340facb1546f9e2807d11cb04a919d60839b01f3e665e289c08b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.12

Release files / cdfi_val-0.1.0-py3-none-any.whl

Download URL cdfi_val-0.1.0-py3-none-any.whl
Size 12.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
445a1606b230e80c07d4fb18c85ed66668a6c617e85926825464ecec714a1b88
BLAKE2b-256 checksum
How to use checksums
03eb60b6c76f9ab0fe770471076984c854965486b15a9e72500e9806a634bd13
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.12

Security for cdfi-val 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page