All posts
AnalysisJune 7, 2026·6 min read·DQHub

8 ways a HMDA filing fails the CFPB's edits — and how to catch them first

The CFPB's HMDA Platform won't let you submit until you clear its validity and quality edits. Here are the eight most common ways a Loan/Application Register fails — with a live contract that catches every one.

Every year, US mortgage lenders file their Loan/Application Register (LAR) with the CFPB by March 1. And every year, the same thing happens: you upload, and the HMDA Platform refuses the file until you clear its validity and quality edits (Filing Instructions Guide, §5.3). A blocked submission isn't a warning — it's a missed deadline if you don't fix it in time.

The frustrating part is that the failures are almost always the same handful of mistakes. We built a certified HMDA contract that runs those exact edits, pointed it at a sample register, and 10 of 24 records (42%) were flagged. Here's the breakdown — the eight failure modes that catch filers out, and how to catch them before the CFPB does.

Want to see it happen? The live HMDA demo runs the contract on the sample register in your browser and shows the exact records it flags.

1. Malformed LEI (the #1 offender)

The Legal Entity Identifier must be a 20-character ISO 17442 code. An 18- or 19-character LEI — a truncated copy/paste, a trailing space — fails a syntactical edit and blocks the whole file. In our sample this was the single most common error.

2. Duplicate ULIs

The Universal Loan Identifier must uniquely identify each loan. Re-used ULIs (often from a bad join or a re-run that double-loaded rows) trip a validity edit and inflate your counts.

3. Invalid Action Taken codes

Action Taken must be 1–8. A stray 9, a null, or a text value where a code belongs fails validity. Same story for Loan Type (1–4), Loan Purpose (1, 2, 31, 32, 4, 5), and Lien Status (1–2).

4. Invalid Loan Purpose

A close cousin of #3 and worth calling out: codes like 99 or a free-text purpose slip in from upstream systems and fail the validity edit.

5. Missing required fields

LEI, ULI, Action Taken, Action Taken Date, Loan Type, Loan Purpose, Loan Amount — if any is null, the record is incomplete and rejected. A single missing loan_amount is enough.

6. Geography that isn't in the FFIEC file

The county FIPS and the 11-digit census tract must exist in the FFIEC reference file for the filing year. Counties and tracts change; last year's value can quietly become this year's edit failure.

7. Implausible income

Negative income, or income wildly out of range, trips a quality edit — and quality edits must be confirmed or corrected in the Platform before you can submit. These are the ones that eat your last few days before the deadline.

8. Incomplete fair-lending demographics

Applicant ethnicity, race, and sex must be populated (including the permitted "information not provided" codes). Gaps here aren't just an edit — they undermine the fair-lending analysis the data exists to support.

The pattern

Seven of these eight are deterministic, machine-checkable rules. There is no reason to discover them when the CFPB's Platform rejects your upload in late February. You can run the exact same edits against your LAR the day you assemble it — and every day after — so the file is clean long before the deadline.

That's what a data contract is: the edits, written down once, runnable everywhere.

  • [Watch the live demo →](/demo/hmda) — the contract flags the bad records on a sample LAR.
  • [Get the HMDA contract →](/packs/hmda-lar-reporting) — compile it to Soda, dbt, SQL, or Spark and run it on your own register.
  • [Book a 30-minute demo →](/demo/book?interest=HMDA) — and we'll run it on data that looks like yours.

*Figures are from a reproducible synthetic sample register; the checks mirror the CFPB's validity and quality edits exactly.*

#hmda#data-quality#compliance#analysis#cfpb

Generate a data contract from a CSV — free

No database access required.

Try it now