FinObservatory

Lending / methodology

How this layer is built

Every figure on the lending layer comes from the HMDA public Loan/Application Register, the loan-level file the Consumer Financial Protection Bureau publishes each year under the Home Mortgage Disclosure Act. This layer uses the modern schema era only: 2018 to 2024, 124,134,925 records. The 2007-2017 era holds a further 187,462,446 records and is used on /mortgage, not here.

Why this layer starts in 2018

The 2018 schema added the fields this layer is made of: debt-to-income ratio, combined loan-to-value ratio, interest rate, property value, and the derived race and ethnicity fields. None of those exist in the 2007-2017 file, so the composition standardization cannot be run before 2018 and no page here implies a longer series. Some fields do carry across the break and are not claimed as new: loan type, loan purpose, lien status and the denial reasons all exist in the older file, which has three denial-reason fields to the modern file’s four. That is why the denial-reason pages here start in 2018 as well: an older series would be measuring reporting practice as much as lending. The two eras also identify lenders differently: the legacy file uses a respondent ID and an agency code, the modern file a Legal Entity Identifier, and the panel file that would map one to the other is not in this data estate. Lenders cannot be tracked across the break.

Counting rules

The register records more than applications. A row with action taken 6 is a loan a reporter BOUGHT after another institution originated it, so it is already in the file once, under its originator; in 2024 there are 1,273,313 such rows. Rows with action taken 7 or 8 are preapproval outcomes, not applications; 201,079 of those. Counting either as an application would inflate the totals and deflate the denial rate.

CodeAction taken
1Loan originated (counted as an application, a decision and an origination)
2Application approved but not accepted (application, decision)
3Application denied (application, decision, denial)
4Application withdrawn by applicant (application only)
5File closed for incompleteness (application only)
6Purchased loan (not an application, a decision or an origination here: it is a second reporter's copy)
7Preapproval request denied (excluded)
8Preapproval request approved but not accepted (excluded)

So: applications = 1 to 5, decisioned = 1, 2, 3, originations = 1, and the denial rate is denials divided by decisioned applications. That is the same denominator the state aggregate on /mortgage uses, so the two layers agree: 24.31% nationally in 2024, on 8,636,578 decisioned applications.

Source: HMDA public LAR (CFPB/FFIEC), snapshot files The definition is fixed across both schema eras and every page of this layer. Methodology

The screen

Denial rates by applicant group are computed on a single product, because comparing a jumbo purchase to a manufactured-home loan compares products rather than applicants. The screen keeps decisioned applications for a first-lien, owner-occupied, site-built, one-unit home purchase that is not for a business purpose, not a reverse mortgage and not an open-end line of credit. In 2024 that is 3,070,808 of 8,636,578 decisioned applications (35.6%).

CodeScreen
action_taken IN (1,2,3)Reached a credit decision
loan_purpose = 1Home purchase
lien_status = 1First lien
occupancy_type = 1Principal residence
construction_method = 1Site-built
total_units = '1'One dwelling unit
business_or_commercial_purpose = 2Not primarily for a business purpose
reverse_mortgage = 2Not a reverse mortgage
open_end_line_of_credit = 2Not an open-end line of credit

The standardization

Direct standardization, not a regression. Every screened application is placed in a cell of a 7 x 6 x 4 x 7 grid: debt-to-income bucket, combined loan-to-value bucket, loan type, applicant-income bucket, which is 1,176 possible cells, 1,069 of them occupied in 2024. A group’s standardized denial rate applies that group’s own within-cell denial rate to the White non-Hispanic group’s cell weights. It answers one question: what would this group’s denial rate be if its applications had the reference group’s reported profile.

A reweighting is only as good as its overlap, so two diagnostics are published with the standardization. The share of reference weight matched is the fraction of White non-Hispanic cell weight sitting in cells where the group has at least one application (99.96% for Black applicants in 2024). The unmatched applications are the group’s own applications in cells the reference group never occupies (8 for Black applicants); they drop out of the standardized figure.

The grid holds four controls. The register carries others that are not in it: loan term, property value, census-tract characteristics, applicant age and sex, and the identity of the lender. It does not carry a credit score, assets or reserves, or employment history. It names the credit-scoring model the lender used and the automated-underwriting system it ran, and reports neither the score nor the recommendation. That is the whole reason the residual gap is presented as a bound and not as an estimate of anything.

Missing is not zero

Five fields this layer uses arrive as text rather than as numbers: debt-to-income ratio, combined loan-to-value ratio, interest rate, property value and income. Each of the five carries the string sentinel “NA” where a value is not reported, and four of the five also carry “Exempt”, filed by institutions using the partial reporting exemption; income carries “NA” and never “Exempt”. Every one of the five is read with a failing cast that returns null, and a null renders “n/a”. None is ever coalesced to zero: a missing loan-to-value ratio is an unknown ratio, not a ratio of zero.

This matters more than it sounds, because missingness is correlated with the outcome. In 2024, the combined loan-to-value ratio is missing on 17.7% of denials but 7.5% of originations; debt-to-income is missing on 12.0% of denials against 10.2% of originations. Dropping rows with a missing control would delete denials preferentially. So “not reported” is kept as its own bucket rather than dropped.

Race is its own case. In 2024, 432,477 of the 3,070,808 screened applications carry no usable race, which is 14.1% of the screen, and that bucket is denied at 10.36%. Every demographic figure on this layer is conditional on race being reported.

Schema drift between the 2018 and 2019 files

The 2018 file names the leverage column loan_to_value_ratio. Every later file names it combined_loan_to_value_ratio. Every file in the era carries the same column count and this is the only name that differs. The build reads one year at a time and names the column explicitly for that year.

Counties

A county gets a page if it decided 500 or more applications in 2024 and its five-digit FIPS code validates against a county reference. 1,764 counties qualify, covering 8,254,145 of 8,636,578 decisioned applications (95.6%). The reference is the FDIC Summary of Deposits county file, which is where the county names on these pages come from.

County codes are not stable and are not assumed to be. The 2018 file carries more distinct county codes than any later year, and Connecticut replaced its eight counties with nine planning regions, so the 2024 file uses codes that do not appear in the 2023 file at all. Nothing is back-filled onto a code an earlier file does not carry.

Source: FDIC Summary of Deposits Used only as the county FIPS and name reference. No deposit figure appears on this layer. Methodology

Lenders

A lender page exists for the 300 reporters with the most decisioned applications in 2024, out of 930 that decided 1,000 or more and 4,892 that decided any. Concentration measures (top-10 share, top-50 share, HHI) are computed on originated loans across every reporting lender, not just the 300. Lenders are identified by Legal Entity Identifier only: the HMDA panel file that maps an LEI to an institution name is not in this data estate, so no institution is named and none is inferred.

Units

Two dollar units live in this file and they are never mixed. Loan amounts are in dollars, rounded by the Bureau to the midpoint of a $10,000 interval, so the median originated loan of 2024 reads $235,000. Applicant income is in thousands of dollars, so a reported 113 means $113,000, and this layer multiplies before it prints. Interest rates and denial rates are percentages on a 0-100 scale. A percentage never shares a column with a count, and a rate never shares an axis with a dollar figure.

What this layer cannot tell you

  • Whether a denial was justified. The register has the decision and four underwriting controls, and not the credit score, the reserves, the employment history or the automated-underwriting recommendation.
  • Anything about applicants who were discouraged, screened out or never reached. The file begins at the application.
  • Anything about performance after origination. There are no delinquencies, no defaults and no prepayments in HMDA.
  • The final word on any year. Years from 2018 are the Snapshot files, frozen about a month after the filing deadline; later revisions add late submissions, so recent counts can sit slightly below the final figures.
  • Anything about an individual borrower. The published file is privacy-modified by the Bureau, which is why loan amounts arrive rounded and ages and some geographies arrive binned.

Source: HMDA public LAR (CFPB/FFIEC), snapshot files The lending aggregates are built by scripts/build/build_lending_aggregates.py, which reads the loan-level files once and writes the small tables these pages query. Methodology