cdfi-superpowers

Open-source Python for community development finance

The public data is already there. Getting to it shouldn't take a data team.

Twenty-one packages that turn CDFI Fund, FFIEC, FDIC and Census data into answers a lender can act on — NMTC eligibility, fair-lending distributions, peer benchmarks, loan pricing, debt waterfalls. Built by a practitioner, for the CDFIs, MDIs and CDEs that don't have an analytics function.

$pip install nmtc-mapper hmda-analyzer cdfi-benchmark
21 packages published on PyPI, MIT licensed
85,395 census tracts in the NMTC eligibility table, queryable in bulk
FY18–22 CDFI Fund Transaction Level Report years loaded by cdfidata
$0 licensing, seats, or vendor contracts

Start here

Questions these answer before lunch

Three real questions that normally cost a week of someone's time, a consultant, or a subscription. Each is one import away. Note what every API returns alongside the answer: how it was derived, and what would make it wrong.

Is this address in a Low-Income Community, and how distressed is the tract?

Geocode, resolve the tract, and return eligibility against the CDFI Fund's own file. An address that can't be resolved comes back indeterminate — never a silent “ineligible.”

nmtc-mapper
from nmtcmapper import NMTCMapper

mapper = NMTCMapper()
result = mapper.check_address("1234 S Michigan Ave, Chicago, IL 60605")

result.nmtc_eligible            # True / False / None — None is indeterminate
result.eligibility_status       # verified-eligible | verified-ineligible
                                # | not-found | not-covered-territory
                                # | geocode-failed
result.distress_level           # deep | severe | lic | ineligible
result.opportunity_zone_status  # designated | not-confirmed | no-tract

# Or score an entire pipeline at once
df = mapper.enrich(df, address_col="address")
df["nmtc_eligible"].value_counts()

How does our bank compare to its real peer group?

FDIC call-report metrics for a bank CDFI or MDI and the banks nearest it in asset size — with the selection basis and every caveat about the group attached to the result.

cdfi-benchmark
from cdfibenchmark import get_financials, build_peer_group, summary_table

institution = get_financials(cert=34352)   # find CERTs with search_institutions()
peers = build_peer_group(institution, same_state=True)

peers.selection_basis      # how the group was chosen, in words
peers.asset_percentile     # near 50 means the group brackets you
for caveat in peers.caveats:
    print("CAVEAT:", caveat)   # size skew, mixed periods, dropped constraints

summary_table(institution, peers)   # NIM, ROAA, efficiency, Tier 1, NPLs

What does mortgage lending actually look like in this county?

Multi-year HMDA LAR pulls with provenance on every row. Aggregations that would pool incompatible census-tract vintages refuse to run rather than return a plausible wrong number.

hmda-analyzer
from hmdaanalyzer import (
    load_range, denial_rate_by_race, disparity_ratio, lending_desert_score,
)

df = load_range(2021, 2023, state="IL", county="17031", limit=10_000)
# df["activity_year"] tags each row's year; filters apply to every year

denial_rate_by_race(df)
disparity_ratio(df)          # ratios vs White applicants
lending_desert_score(df)     # low volume AND high denial rate — both required

The index

Twenty-one packages, grouped by the job

Grouped by the work, not by the dataset. Versions shown are what's live on PyPI today. Every package installs with pip and works from a notebook, a script, or a CLI.

New Markets & Low-Income Housing Tax Credit

5 packages

Automated NMTC eligibility checking — geocode an address or tract and return Low-Income Community status, distress tier, poverty rate, tract MFI ratio and Opportunity Zone status. Enriches a whole DataFrame; bulk access to the full 85,395-tract table.

Eligibility is tri-state. An address that can't be resolved returns None, not False — treating it as ineligible would fabricate a verified answer.

First-pass feasibility screening for an NMTC deal from the command line — does the project clear the threshold questions before anyone builds a model.

Leveraged NMTC transaction calculator — sources and uses, leverage loan, QEI sizing, and the credit stream for a standard leveraged structure.

Open-source intelligence for competitive CDFI Fund NMTC allocation applications — pipeline scoring against the published criteria. 544 tests.

LIHTC transaction calculator — qualified basis, applicable fraction, 4% and 9% credit, the 15-year compliance period, recapture exposure, and investor IRR.

Fair lending & CRA

3 packages

Pull and describe HMDA LAR records by county, state, lender LEI, or across years, with FFIEC MSA median family income and tract income percentage on every record.

Descriptive only. Borrower- and tract-income distributions, not disparity findings.

Statistical disparate-impact screening on HMDA data using the logistic-regression methodology federal examiners apply, with MSA fixed effects and an explicit minimum sample size.

A screening instrument for analysts who understand the methodology — deliberately not a one-click verdict, and not a substitute for a fair-lending review.

Search the FFIEC CRA exam database and parse Performance Evaluations — ratings history, and banks whose CRA posture makes them plausible partners.

Institution & portfolio data

6 packages

Peer benchmarking for bank CDFIs and MDIs on FDIC call-report metrics — NIM, ROAA, ROAE, efficiency ratio, Tier 1 capital, loans-to-deposits, NPL ratio, loan-loss coverage.

FDIC-insured institutions only — no credit unions, no unregulated loan funds.

ETL pipeline for Treasury CDFI Fund public datasets — a multi-year Transaction Level Report loader covering FY2018 through FY2022, plus CLR, ILR, NMTC and Awards data.

Award analysis and compliance tracking across CDFI Program, BEA, NACA, Native American, RAPID, CMF and Bond Guarantee awards.

Bring your own data — no CDFI Fund ingestion path is implemented; the bundled data is a sample.

Portfolio tracker for impact investment, private debt and community development finance — positions, cash flows and impact metrics in one ledger.

Valuation toolkit for CDFIs and Minority Depository Institutions — tangible common equity and book-value-per-share work on institutions that trade thinly or not at all.

Portfolio stress-testing engine — Monte Carlo simulation with correlated net-operating-income, interest-rate and property-value shocks.

Credit, pricing & structuring

5 packages

Loan amortization, DSCR tracking, covenant monitoring and loan sizing — the arithmetic behind a credit memo, without the spreadsheet.

Minimum viable loan rate from first principles — cost of capital, target ROAA, expected loss and administrative cost, so a concessionary rate is a decision rather than a guess.

Period-by-period mechanical debt-waterfall engine for structured finance — cash applied through the priority of payments, one period at a time.

CDFI Bond Guarantee Program eligibility screening — net asset, lending volume and portfolio quality thresholds, and whether an issuance is feasible at all.

Generate investment-committee credit memos from structured deal inputs — CDFI loans, NMTC transactions and impact investments, on one consistent template.

Published, with the defect stated on the tin

2 packages

These two are listed here rather than quietly delisted. Both are installable, both do less than their name suggests, and both say so in their own PyPI summary before you install them. That is the standard the rest of the suite is held to as well — it's only more visible here.

Opportunity Zone tracker — Qualified Opportunity Fund tax-benefit and portfolio modeling.

OZ tract lookup is non-functional in 0.2.0. Both upstream data sources return 404, so the package raises a typed error rather than returning a fabricated result. The QOF modeling works.

SBIC investment portfolio analyzer — fund-level IRR, TVPI and DPI, and licensee modeling.

Unmaintained. Live SBA data loading is not implemented; the package returns sample data only when explicitly asked for it.

For people who don't write Python

The same tools, asked in plain English

cdfi-superpowers is a Claude plugin that wraps the audited packages as skills. Ask the question the way you'd ask a colleague; the skill calls the package and reports what it actually returned — never an estimate from general knowledge.

This is the part that matters for adoption. A loan officer at a $40M CDFI is not going to open a notebook, and shouldn't have to. The skills enforce the same scope limits the packages do — if a question falls outside what the data supports, the answer says so instead of filling the gap.

Install it from the plugin marketplace alongside nmtc-underwriting, or clone it from GitHub.

github.com/Jaypatel1511/cdfi-superpowers
  • nmtc-eligibility “Is 1420 Main St, Orangeburg SC in a Low-Income Community?”
  • cdfi-peer-benchmark “How does this bank CDFI compare to its peers on efficiency ratio?”
  • hmda-analysis “Pull three years of HMDA for Cook County and show the tract-income distribution.”

How it's built

Rigor is the product

Anyone can wrap a federal API. What makes a tool usable in an underwriting file is knowing exactly where it stops being right — so that boundary is documented, tested, and enforced in code.

Known limitations are published, not buried

Every package documents what it gets wrong and why. A vintage mismatch between tract boundaries, an unreachable branch in a threshold test — disclosed in the release notes and excluded from any claim the tool makes.

Hostile audit before release

Each package is reviewed adversarially — the reviewer's job is to find the fabrication, the hardcoded sample passed off as real data, the confident answer the data can't support. Findings are triaged into named versions.

Descriptive and inferential stay separated

Tools that describe lending patterns do not draw disparity conclusions, and tools that run inferential tests say plainly what the test does and does not establish. The friction is intentional and legally defensive.

Sample data is labeled as sample data

Where a package ships bundled data for offline use, it says so at every surface — CLI output included. No package narrates a hardcoded profile as a real result.

Real datasets, real scale

Built against the actual files practitioners use — the CDFI Fund eligibility workbook, FFIEC HMDA, FDIC call reports, Treasury TLR extracts — not toy fixtures.

MIT licensed, no strings

Free to use, fork, embed in internal tooling, or cite in a filing. No seats, no vendor relationship, no data leaving your machine except to the public APIs you're already entitled to query.

Who this is for

Built for the organizations without a data team

CDFIs, MDIs and CDEs

Loan officers, portfolio managers and compliance staff who need a defensible answer today and don't have an analyst to assign it to.

Researchers and journalists

Reproducible access to HMDA, CRA and CDFI Fund data with the methodology visible — every number traceable to a public source.

Consultants and advisors

Screening, sizing and benchmarking that would otherwise mean a subscription or a bespoke build for every engagement.