CRA regulations · 12 CFR 228.12 · rule text checked October 20, 2026

CRA Census Tract Income Level Classifier

Under the CRA regulations, a census tract's income level compares its median family income with the area median income. Below 50% is low-income, 50% to under 80% is moderate, 80% to under 120% is middle, and 120% or more is upper. Low- and moderate-income tracts together are the LMI tracts examiners look at.

Classify a tract

Everything runs in your browser. Nothing you type is sent anywhere.

What do you have?

The four income levels

Income levelTract MFI as a share of area median incomeLMI?FFIEC code
Low-incomeless than 50%Yes1
Moderate-incomeat least 50% and less than 80%Yes2
Middle-incomeat least 80% and less than 120%No3
Upper-income120% or moreNo4
Unknowntract MFI is $0 or not availableNo0

The thresholds come from the "Income level" definition in the CRA regulations. The Federal Reserve's version, 12 CFR 228.12(m), says a geography is low-income when its "median family income... is less than 50 percent," moderate-income at "at least 50 and less than 80 percent," middle-income at "at least 80 and less than 120 percent," and upper-income at "120 percent or more." The OCC (12 CFR 25.12) and the FDIC (12 CFR 345.12) use the same lines. The FFIEC codes and the "unknown" row come from the FFIEC census data overview.

Which version of the rule applies? The agencies rewrote the CRA regulations in October 2023, and eCFR now prints that text. But the Federal Reserve and FDIC said in their January 2026 threshold notice that the 2023 rule "is currently enjoined" and "the legacy CRA regulations... remain in effect." For income levels it makes no difference: the 2023 text draws the lines at the same 50, 80 and 120 percent.

How the income level is calculated

Divide the tract's median family income by the area median income and multiply by 100. The regulation defines the area median income as the median family income of the MSA, or of the metropolitan division where an MSA is split into divisions. For a tract outside any MSA it is the statewide nonmetropolitan median family income.

A worked example, with made-up figures: a tract's median family income is $70,650 and its MSA's median family income is $90,000. That is 70,650 ÷ 90,000 = 78.5%. The tract sits under 80%, so it is moderate-income and counts as LMI. Had the tract's income been $72,000, the ratio would be exactly 80% and the tract would be middle-income, because each band includes its lower bound and stops short of the upper one.

Both figures behind the FFIEC's own percentage come from the Census Bureau's five-year American Community Survey. The FFIEC says the tract MFI "remains static for five years," and the MSA figure "normally remains unchanged for 5 years unless OMB boundary updates occur." Do not substitute the FFIEC Estimated MSA/MD Median Family Income, which is recalculated every year. Dividing a tract's income by that figure will not reproduce the FFIEC's tract classification. Our census tract explainer covers the two figures and when each changes.

Where the income level shows up

In a CRA evaluation, the lending test looks at "the number and amount of loans in low-, moderate-, middle-, and upper-income geographies in the bank's assessment area(s)" (12 CFR 228.22(b)(2), legacy rule). Lending in LMI tracts is also one of the first places a redlining review looks, alongside majority-minority tracts and how a lender's footprint compares with its peers'. Our redlining analysis page explains how that review is put together, and Comply Mapping shades an assessment area by tract income level so the pattern is visible on one map.

Because the income level travels with the tract, a loan geocoded to the wrong tract can change category. A moderate-income loan becomes a middle-income one without anyone noticing, and the LMI totals move with it.

Where to find a tract's median family income

For a single address, the FFIEC Geocoding/Mapping System returns the tract, the tract income level and the "Tract Median Family Income %" that this classifier takes as input. Our guide to the FFIEC Geocoding System explains each field in its result. The FFIEC says the system gets boundary updates in January but its demographic data only after the census flat file is released each summer, so a lookup early in the year can show last year's income data.

The FFIEC system has no batch geocoding, according to its FAQ. To check an address against several geocoding sources at once and see the tract's median family income and income level on a map, use our free ZOOM Geocoder.

Methodology and limits

The classifier applies the four thresholds above to the percentage you enter, or to the ratio of the two dollar figures, without rounding. A value of exactly 50, 80 or 120 falls in the higher band, as the regulation's "at least" wording requires. A tract median family income of zero returns "unknown," following the FFIEC's code 0. This page classifies tracts only. Borrower income levels use the same percentages applied to an applicant's income, and the classifier does not cover distressed or underserved middle-income tracts, which the agencies designate separately. It is a reading of the rule, not legal advice. Rule text last checked October 20, 2026.

Sources

Schedule your free demo today

Quoting a figure? Cite this page

To cite it: RATA Associates, "CRA Census Tract Income Level Classifier," rule text checked October 20, 2026, https://rataassociates.com/cra-tract-income-level-classifier/.

You may republish the explanations and thresholds on this page with attribution to RATA Associates and a link to this page.

See Comply HMDA/CRA in Action

Schedule a free online demonstration to discover what Comply HMDA/CRA can do for your institution.

Schedule Your Free Demo Have Questions? Contact Us

What happens next

  • 40 minutes, screen-shared. A live walkthrough on RATA sample data, driven by your questions rather than a script.
  • A specialist, not a relay. The person on the call knows both the software and the regulations behind it.
  • Mid-cycle is normal. Implementation and historical conversion are handled for you, typically inside a day.
Or see a specific module in action: