Skip to content
FinObservatory

US mortgage lending / Methodology

Mortgage-lending methodology

What HMDA is

The Home Mortgage Disclosure Act of 1975 requires most mortgage lenders to report, loan by loan, the applications they receive and what happened to each: originated, denied, withdrawn, closed for incompleteness, approved but not taken up, or purchased from another institution. The resulting Loan/Application Register (LAR) is the most complete public record of US mortgage lending. The Consumer Financial Protection Bureau (CFPB) and the Federal Financial Institutions Examination Council (FFIEC) publish the national loan-level files each year.

This layer aggregates the full national public LAR for activity years 2007 to 2024: 311,597,371 loan-level records (187,462,446 in the 2007-2017 legacy-schema files, 124,134,925 in the 2018-2024 HMDA Platform files), reduced by scripts/build/build_hmda_aggregates.py to one row per year and state. Pages read only this aggregate; every number on /mortgage derives from the loan-level files through that one audited script.

The public LAR is privacy-modified

Both eras are the public LAR, not the confidential register lenders file. The publishers state the modification directly. For the 2007-2017 historic files, the CFPB’s historic-data page says:

The data are modified to protect applicant and borrower privacy.CFPB, HMDA historic data (consumerfinance.gov/data-research/hmda/historic-data/)

For the 2018+ Snapshot files, the FFIEC dataset pages say:

The Snapshot files contain the national HMDA datasets as of [freeze date] for all HMDA reporters, as modified by the Bureau to protect applicant and borrower privacy.FFIEC HMDA Platform, Snapshot National Loan-Level Dataset pages (ffiec.cfpb.gov)

In the 2018+ files the modifications bin or redact sensitive fields. Loan amounts are disclosed as the midpoint of a $10,000 interval: every one of the 12,229,298 loan-amount values in the 2024 file sits exactly at such a midpoint ($5,000, $15,000, $25,000, and so on), a property we verified across the file. Legacy-era amounts are disclosed in whole thousands of dollars. Aggregate sums and medians therefore carry a small rounding layer from the disclosure rules; counts are unaffected.

Two schema eras

HMDA reporting changed fundamentally with the 2015 HMDA rule, effective with the 2018 collection year. The 2007-2017 files use the legacy schema (78 fields, with plain-language label columns in the “labels” variant used here); the 2018-2024 files use the 99-field HMDA Platform schema. The two eras are aggregated separately with era-specific column names and code sets, then combined; nothing is interpolated across the break.

Action-taken codes, per era

Both eras code the outcome of each record 1 through 8. The legacy labels below are quoted from the CFPB label files themselves (the action_taken_name column, verified against every legacy year); the modern labels are quoted from the FFIEC public-LAR data-fields documentation.

Code2007-2017 legacy label (CFPB label files)
1Loan originated
2Application approved but not accepted
3Application denied by financial institution
4Application withdrawn by applicant
5File closed for incompleteness
6Loan purchased by the institution
7Preapproval request denied by financial institution
8Preapproval request approved but not accepted
Code2018-2024 label (FFIEC public LAR data fields)
1Loan originated
2Application approved but not accepted
3Application denied
4Application withdrawn by applicant
5File closed for incompleteness
6Purchased loan
7Preapproval request denied
8Preapproval request approved but not accepted

Derived measures, identical in both eras: applications are codes 1-5 (excluding purchased loans, code 6, and standalone preapproval requests, codes 7-8); originations are code 1; denials are code 3. The build script verifies that every record in every year carries an action code in 1-8 and aborts otherwise.

The denial rate, defined

Denial rate = denials / (originations + denials + approved-not-accepted), that is, code 3 over codes 1 + 2 + 3: denied applications as a share of applications that reached a credit decision. Withdrawn applications (4) and files closed for incompleteness (5) are excluded from the denominator because the lender never decided them; purchased loans (6) are not applications; preapproval-only records (7-8) are excluded from both numerator and denominator. The same formula is applied to both eras, every year, every state.

Loan-purpose codes, per era

The legacy era codes purpose 1-3; the modern era splits refinancing in two and adds catch-all codes. Labels quoted from the same sources as above.

Code2007-2017 legacy label (CFPB label files)
1Home purchase
2Home improvement
3Refinancing
Code2018-2024 label (FFIEC public LAR data fields)
1Home purchase
2Home improvement
31Refinancing
32Cash-out refinancing
4Other purpose
5Not applicable

The purchase/refinance split on these pages counts originated loans only (action code 1): purchase = purpose 1 in both eras; refinance = purpose 3 in the legacy era and purposes 31 or 32 in the modern era (so cash-out refinancings are inside the refinance line throughout, they are just not separately identifiable before 2018); home improvement = purpose 2 in both eras; “other” = purposes 4 and 5, which exist only from 2018. The build aborts if a year carries a purpose code outside its era’s documented set.

Units and conversions

Every dollar figure on /mortgage is in plain US dollars. The legacy files report loan amounts in thousands of dollars (the loan_amount_000s field); the build multiplies them by 1,000. The modern files report loan_amount in dollars already (as $10,000-interval midpoints, per the privacy section above). Origination volume is the sum of loan amounts on originated loans; the median loan is the median over originated loans, computed within each year and state from the loan-level records, never as a median of medians.

In-chart transforms for the national histories

The origination-volume and applications-versus-originations figures offer four views of the same annual HMDA observations. Level shows the source aggregate without a change in value. Each activity year is assigned a December 31 chart date only to give the shared transform code a stable annual axis; this does not turn an annual flow or record count into a year-end stock.

YoY uses ((x[t] / x[t-1]) - 1) * 100, comparing each value with the prior activity year. The result is null when the current or prior observation is missing, or when the prior value is zero. Missing years are never interpolated. Index uses 100 * x[t] / x[base], where the base is each series’ own first non-null observation. Applications and originations are therefore indexed independently; that comparison does not create or represent an approval rate.

Log shows log10(x[t]). Nonpositive observations cannot be logged, so they are hidden and counted in the figure note; nulls remain null. The two selected HMDA histories are positive over the displayed span. In every transformed view, the values are not dollar levels or application counts. Denial rates, loan-purpose mix, median-loan levels, NMDB market shares, state figures and underwriting figures remain level-only because these transforms are not enabled for them.

Geography

The state key is the two-letter postal abbreviation: the legacy state_abbr field and the modern state_code field. Records with no state assigned (null in the legacy files, the literal NA in the modern files) are kept in every national figure but carry no state page, so the state pages sum to slightly less than the national totals. National rows are aggregated directly from the loan-level records in a single pass, not summed from state rows, which is what makes the national medians true medians. The modern era also includes filings for island territories and freely-associated states (Puerto Rico, Guam, the US Virgin Islands, American Samoa, the Northern Mariana Islands, Micronesia, the Marshall Islands, Palau), each of which gets a page where it appears in the data.

FHFA NMDB market-composition add-on

The market-composition section later on /mortgage comes from FHFA’s National Mortgage Database (NMDB), not from HMDA. FHFA describes the NMDB as a de-identified, nationally representative 5% sample of closed-end first-lien residential mortgages reported to the credit bureaus. On the mortgage page we use only the annual national new-residential-mortgage panel, because the brief for this pass was national first and because state and metro cells are where suppression appears.

Enumerating the parquet’s seriesid values against FHFA’s appendices yields 60 new-origination series (counts, loan volume, averages, market shares and borrower-composition buckets), 37 outstanding-loan series (active-loan counts, UPB, payment, mark-to-market LTV, rate, tenure and market shares), and 4 performance series (P3089DL, P90DL, PFORECL, PFORB). The page uses only the annual new-origination count series TOT_ORIG to compute shares.

NMDB value fields and suppression

FHFA’s 2026Q1 data dictionary defines VALUE1 as statistics weighted by number of loans. For new-residential-mortgage statistics, FHFA states that each sample mortgage represents 20 actual mortgages. FHFA defines VALUE2 only for the new-origination and outstanding panels: it is weighted by origination loan amount for new mortgages and by end-quarter unpaid principal balance for outstanding mortgages. The performance panel has no separate dollar-weighted measure in practice, so these pages do not read VALUE2 there.

FHFA suppresses cells based on fewer than 3 loans. We therefore null any row with SUPPRESSED = 1 before doing arithmetic, rather than treating its stored value as zero or as real data. In the measured parquet this affects 4,500 state new-mortgage rows, 72 state performance rows and 692 metro performance rows. The annual national composition rows used on /mortgage are all unsuppressed.

NMDB market tree and the no-double-count rule

FHFA’s market labels overlap by construction, so summing across all 27 market values would double- and triple-count loans. The mortgage page therefore uses only sibling cuts of FHFA’s own market definitions. The leaf decomposition we chart is:

All Mortgages
|- Government / Non-Conventional
|- Enterprise Acquisitions
|- Other Conforming Market
`- Jumbo Market

FHFA’s own footnote for the mortgage-market tables states the same identity in words: conforming market = government + Enterprise-acquired + other conforming, and all loans less jumbo = conforming market. We therefore compute the leaf-share chart from those four siblings, and the conforming-versus-jumbo chart as the alternate sibling cut of the same parent. We do not chart a parent beside its child on the same axis.

Snapshot tier and revisions

The 2018-2024 files are the Snapshot tier, frozen roughly one month after the filing deadline. The FFIEC’s static-dataset FAQ describes the revision cycle:

The One Year dataset is taken at least 12 months after the timely filing deadline has passed for a given filing year and incorporates any resubmissions or late submissions that have been completed in that timeframe.FFIEC HMDA documentation, static dataset FAQ (ffiec.cfpb.gov/documentation/faq/static-dataset-faq)

The effect is small but real: for 2024, the One Year tier served by the HMDA Data Browser carries 12,259,199 records against the 12,229,298 in our Snapshot file, a gap of 29,901 records (+0.24%) from late submissions and resubmissions between the two freeze dates (both counts verified against the source on 2026-07-11 and recorded in the data provenance). Recent-year figures on these pages can therefore sit slightly below the final revised figures. The 2007-2017 files are the CFPB’s final historic publication; their record counts match the CFPB’s published table exactly, year by year, as does the 2007 reconciliation of applications plus purchased loans plus preapproval-only records to the official total.

Sources

Back to US mortgage lending.