Skip to main content

Automated NMTC eligibility checker — geocode addresses and check Low-Income Community status using CDFI Fund and Census data

Project description

nmtc-mapper 🗺️

Automated NMTC eligibility checker for addresses and census tracts.

Pass a DataFrame of addresses and get back a boolean column for NMTC eligibility, distress level, poverty rate, AMI ratio, and more — using official CDFI Fund and Census Bureau data. No manual lookups required.


Why nmtc-mapper?

The CDFI Fund provides a manual web tool (CIMS) for checking NMTC eligibility one address at a time. nmtc-mapper automates this — pass 10,000 addresses and get results in seconds, using the same official data source.


Installation

pip install nmtc-mapper

Quickstart

from nmtcmapper import NMTCMapper

mapper = NMTCMapper()

# Single address (geocodes automatically)
result = mapper.check_address("1234 S Michigan Ave, Chicago, IL 60605")
result.summary()
print(result.nmtc_eligible)    # True
print(result.distress_level)   # "severe"
print(result.poverty_rate)     # 0.38

# Known census tract (no geocoding needed)
result = mapper.check_tract("17031840100")
print(result.nmtc_eligible)    # True

# Batch — enrich a DataFrame of addresses
import pandas as pd
df = pd.read_csv("projects.csv")   # must have 'address' column
df = mapper.enrich(df, address_col="address")
print(df["nmtc_eligible"].value_counts())
print(df["distress_level"].value_counts())

# If you already have census tract IDs
df = mapper.enrich(df, tract_col="tract_id")

# Summary stats
mapper.eligible_count(df)

Eligibility Rules (2016-2020 ACS — mandatory since Sept 1, 2024)

A census tract qualifies as a Low-Income Community (LIC) if it meets ANY of:

  • Poverty rate >= 20%
  • Median Family Income <= 80% of metro/state AMI
  • Median Family Income <= 85% of state AMI (high migration rural counties)

Distress levels:

  • deep — Poverty >= 40% OR AMI <= 50% OR unemployment >= 2x national rate
  • severe — Poverty >= 30% OR AMI <= 60% OR unemployment >= 1.5x national rate
  • lic — NMTC eligible (meets LIC criteria)
  • ineligible — Does not qualify

Data Sources


Output Columns

After running .enrich(), your DataFrame will have:

  • nmtc_eligible (bool)
  • distress_level (str: deep / severe / lic / ineligible)
  • poverty_rate (float)
  • ami_ratio (float)
  • unemployment_rate (float)
  • is_non_metro (bool)
  • severe_distress (bool)
  • deep_distress (bool)

Running Tests

PYTHONPATH=. pytest tests/ -v

24 tests across all modules.


Who This Is For

  • CDEs screening project locations for NMTC eligibility
  • CDFI analysts qualifying borrower locations at scale
  • Researchers analyzing geographic distribution of LIC tracts
  • Anyone replacing manual CIMS lookups with automated Python

License

MIT 2026 Jaypatel1511

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

nmtc_mapper-0.3.3.tar.gz (13.5 kB view details)

Uploaded Source

Built Distribution

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

nmtc_mapper-0.3.3-py3-none-any.whl (14.6 kB view details)

Uploaded Python 3

File details

Details for the file nmtc_mapper-0.3.3.tar.gz.

File metadata

  • Download URL: nmtc_mapper-0.3.3.tar.gz
  • Upload date:
  • Size: 13.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for nmtc_mapper-0.3.3.tar.gz
Algorithm Hash digest
SHA256 58db91d3efe164c6997207fd226a047b9b6e5b65db4532e35aeddb0210b75f28
MD5 53beb5847518b302c6c907de2164f527
BLAKE2b-256 5c272366e8457720ed5625a2f42bceed51569b6790def8867561fd0a57222e46

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmtc_mapper-0.3.3.tar.gz:

Publisher: release.yml on Jaypatel1511/nmtc-mapper

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nmtc_mapper-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: nmtc_mapper-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 14.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for nmtc_mapper-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1f23f8fdae932a6e382fb7007400f129b8053c66844c835b9dd6a9e8bb3e61d4
MD5 0793f0c351c1fb286cdad7ab2859b2fe
BLAKE2b-256 b716f617f2929a5e4986b514ed895aed475d8df637fd3fc008903b0bf6ce8bba

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmtc_mapper-0.3.3-py3-none-any.whl:

Publisher: release.yml on Jaypatel1511/nmtc-mapper

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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