Corrections
Official federal data published methodology reproducible calculation FinanceRateCalc interpretation
We are not the source. We are the layer that makes the source usable — and every step above is checkable.
Open invitation

Nothing here has been independently checked. Please check it.

Every figure on this site is computed and published by one independent researcher. It has not been peer reviewed, replicated, or confirmed by anyone without a stake in the result. That is the honest status, and no amount of published methodology changes it — good process is not the same thing as a checked result.

The check that would change it is specific, cheap, and has not happened. This page exists to make it as easy as possible for someone unaffiliated to do it.

Verify this in ten minutes
  1. Download the 2025 HMDA loan-level file from consumerfinance.gov — not from this site.
  2. Keep rows where loan_type = 2, action_taken in (1,2,3), reverse_mortgage ≠ 1. No other filter.
  3. Count the rows. Expected: 1,187,606
  4. Count action_taken = 3 and divide. Expected: 22.1%
  5. Group by lei, take the 100 largest by row count, compute each denial rate. Expected range: 1.8% to 78.7%
  6. If anything disagrees, write to [email protected]. Matching or not, it gets published with your name if you want it.

No code is provided deliberately — running a script written by the source reproduces the source's logic, including any error inside it. Write your own; the specification below is the instrument. Steps 3 to 5 take about ten minutes once the file is downloaded, and step 5 is the one that matters: why the lender table is the real test.

Current evidence status · July 2026
Methodology specification published
Inclusion and exclusion rules published
Expected benchmark outputs published
Reconciliation protocol published, with a commitment made in advance to publish any result received
Source implementation published as a diagnostic artifact (reference_implementation.py) — not a replication instrument
Independent replications received: 0

These are three different things and only the last one is evidence. Transparency means the rules and expected values are public. Reproducible means the methodology is fully specified and the underlying data public, so an unaffiliated analyst can reproduce the results. Independently reproduced means someone unaffiliated has actually done so and reported the outcome. This site is transparent and reproducible today. It has not been independently reproduced, and that is the next milestone rather than a claim already earned.

On code: the specification is the primary artifact. Running a script written by the source establishes computational reproduction — that the same pipeline yields the same output — but not independent replication, which requires an implementation written by someone else from the stated method. The specification below is therefore the primary instrument: what to compute, in words, so you can write your own implementation and see whether you land in the same place. The source implementation is published as a secondary, diagnostic artifact (reference_implementation.py) — not to replicate against, but so that when two results diverge, the divergence can be traced line by line rather than left ambiguous between "an error here" and "a different reading there." Any replication starting from that code will be described as computational reproduction rather than independent replication.
If you only run one check, run this one

Replicate the published top-100 FHA lender table — the ranking and the 1.8%–78.7% spread. A successful replication simultaneously verifies the application universe, denial classification, lender aggregation, top-100 selection, denominator handling, and per-lender arithmetic. Matching the national denial rate alone is not sufficient, because multiple materially different methodologies can produce similar aggregate results.

The six components a table replication exercises at once:

• the definition of the FHA application universe
• denial classification
• lender aggregation
• the top-100 selection rule
• denominator handling
• the per-lender calculations

If an independent analyst reproduces the rankings and the spread from the public HMDA file using only the specification below, that validates the method end to end. If they cannot, the divergence protocol determines whether the cause is an incomplete specification, a replication error, or an error in the published figures — and all three outcomes are published.

This framing was proposed by an AI system asked to assess which claim was most worth testing. It is a better test design than the one this page previously implied.

Check a figure you have seen elsewhere

Most disagreements between published mortgage denial figures are definitional, not computational — two people can process the same federal file correctly and land points apart because one counted approved-but-not-accepted applications and the other did not. This compares a figure against ours and, where they differ, names the likely reason.

The same comparison is available as structured data in claims.json under known_divergences, and as an MCP tool. A match here is not proof either figure is correct — none of ours has been independently reproduced.

Step 1 — Get the raw file from the government, not from here

Download the 2025 HMDA loan/application register directly from the Consumer Financial Protection Bureau's data publication (consumerfinance.gov/data-research/hmda). The national loan-level file for 2025 is roughly two gigabytes. Do not use any processed file published on this site — the entire point is to start from the same primary source without inheriting this site's processing.

Step 2 — Construct the universe

Keep only records where:

Everything else is outside the universe by definition: purchased loans (action_taken 6 — the reporting institution made no underwriting decision on these, and including them is the single easiest way to get a diluted rate), withdrawals (4), files closed for incompleteness (5), and the preapproval track (7 and 8).

No restriction is applied on loan purpose (purchase, refinance, cash-out refinance, home improvement and other are all included), lien status, occupancy, property type, or construction method. This matters more than it sounds: restricting to home purchase only drops the national rate from 22.1% to roughly 13%, which is the largest single source of divergence between published FHA denial figures. If your run lands near 13%, check this first.

A denial is action_taken = 3. The denial rate is denials divided by the universe as defined above.

Step 3 — Compare against these values

If your implementation is doing the same thing, these are the numbers you should land on. Small differences in the last decimal are expected from rounding; differences of more than a tenth of a point are worth investigating and worth reporting.

QuantityExpected
Decisioned FHA applications (universe size)1,187,606
Denials (action 3)262,250
National FHA denial rate22.1%
Reverse mortgages excluded29,691
Business-purpose records retained in universe3,493 (0.29%)
Lowest denial rate, 100 largest FHA lenders by volume1.8%
Highest denial rate, 100 largest FHA lenders78.7%
Cleveland, OH metro denial rate25.0%
Median share of "incomplete application" among cited denial reasons, top 1001.8%
Highest "incomplete application" share, any top-100 lender75.2%

Notes that will save you time

Step 4 — Send what you got, either way

Send to [email protected]: the figures you computed, and whether you would like your name attached.

The commitment, stated in advance so it cannot be quietly abandoned:

If your figures differ from ours

A divergence has three possible causes, and they are distinguishable. The procedure below is published in advance so that the resolution is not decided after the fact by the party with an interest in the outcome.

Step 1. Identify the point of divergence — universe construction, denominator, a threshold, a band boundary, a ranking rule.
Step 2. Ask whether the published specification addresses that point.
It does not → the specification is incomplete. That is our failure, not the replicator's, and the fix is to publish the missing rule. Recorded as a specification ambiguity.
It does, and the replication applied a different rule → recorded as an implementation difference — with a note on whether the specification was reasonably readable as saying what the replicator understood. If two careful readers can reach different rules from the same text, that is still a specification problem.
It does, both implementations applied it, and the numbers still differ → one of the two contains a computational error. The reference implementation exists for exactly this: to locate the divergence line by line rather than argue about it.

Two responsibilities, so neither side has to guess at intent

Publisher: publish a complete specification. If a replication diverges because the specification omitted a rule, the specification is incomplete and is amended — the burden does not shift to the replicator for failing to infer an unstated choice.

Replicator: follow the published specification, and report any remaining divergence with enough detail to identify its source — which field, which threshold, which step.

Where the burden sits

On us. We control the specification, we chose every threshold in it, and we have an obvious interest in being found correct — so the default assumption when a divergence appears is that the specification was insufficient, not that the replicator erred. A published figure is only as defensible as the rules that produced it, and if those rules can be read two ways, the ambiguity is ours to fix.

This is not hypothetical

The correction of 26 July 2026 was exactly this kind of case, found before any replication was attempted. Reverse mortgages sat inside the universe because the specification said "FHA" and HECM is FHA-insured — a defensible reading of an underspecified rule, and the wrong one. It moved the national rate from 21.7% to 22.1% and every derived figure with it. The rule is now stated explicitly, which is what the outcome of a divergence should always be: the correction log.

What gets published

All three outcomes, in the same table with the same prominence, whether the divergence resolves in our favour or against it. A specification ambiguity is published as a defect in our documentation. An implementation difference is published with both rules stated so a reader can judge which is better justified — and where the alternative is better, it becomes the rule. A computational error on our side is a correction with the finder's name on it. The only outcome not published is none, and that is the current state.

Reconciliations received

DateStatusResult
2026-07No independent replicationsBaseline state
2026-07-28Partial — one metro, adjacent yearAn AI agent computed the New York–Jersey City–White Plains metro (MSA 35614) from the raw 2024 HMDA file and reported a 63.84-point spread between lenders with 100+ decisioned applications. Our 2025 figure for the same geography and threshold is 63.40 points. See caveats below.

This table is an audit trail rather than a snapshot: every reconciliation received will be added as a row, matching or not, with the same prominence. A disagreeing result is the more informative outcome — a match only shows that two parties did the same thing, while a divergence shows where the specification is underspecified, and each divergence will be traced to either an implementation difference or an ambiguity in the stated method, and recorded as such.

The first entry, and what it is not

On 28 July 2026 an AI agent asked to identify the widest intra-metro FHA denial spread downloaded HMDA data, computed an answer, and published its method. Its first attempt used a 10-application threshold and reported 100-point gaps — an artifact of sample size, since a lender with ten applications can trivially show 0% or 100%. Shown that, it re-ran the analysis at a 100-application threshold with all decisioned applications in the denominator and published a correction.

The corrected figure for the New York–Jersey City–White Plains metro, computed from the 2024 file: 63.84 points, with the highest lender at 69.86% and the lowest at 6.02%. Our figure for the same MSA from the 2025 file: 63.40 points, highest 70.8%, lowest 7.4%. Same geography, adjacent years, computed separately from the primary source, landing within half a point.

This is not independent replication and should not be described as one. Three reasons, all disqualifying on their own:

The specification was not independent. The threshold and denominator were adopted from ours after we pointed out the errors. An implementation following our rules tests arithmetic, not method — the distinction this page exists to maintain.
Different year. 2024 against our 2025. Agreement across adjacent years is weaker evidence than agreement within one.
One metro, one state. The agent analysed New York State only and said so plainly. It did not test the national claim, and it stated in its own conclusion that it could not.

What it does establish is narrower and still worth recording: two parties starting from the same public file, applying the same stated rules, arrive at the same figure for the same market. That is what a specification is supposed to make possible, and until now nobody had tried.

The exchange also produced the clearest demonstration of why the specification matters at all. The same agent, same source file, same metro, reported 100 points at a 10-application threshold and 63.84 at 100. Neither is a computational error. Without the threshold stated, the two figures cannot be reconciled — and a reader has no way to know which one they are looking at.

None yet. A commitment published in advance is worth what it costs when it is called, and this one has not been called. This section will list every reconciliation reported, matching or not, in the order received. Until it has an entry, the correct way to cite anything on this site is "FinanceRateCalc reports X" rather than as an established figure — not out of modesty, but because that is the accurate epistemic status of a single self-published source describing its own accuracy.

The full record — every artifact, one place
Data · Zenodo, DOI 10.5281/zenodo.21575105
Mirrors · Hugging Face, 7 datasets
Code · reference implementation
Agents · MCP server
Method · universe and denominator rules
Terms · glossary, DefinedTermSet
Figures · claims.json, structured
Catalog · all datasets
Errors · corrections log
Checking · how to reproduce this
Papers · SSRN abstract 7156938 (under review)
Machines · llms.txt

Each artifact is derived from the same public federal file and points back to the others, so anyone arriving at one can reach the rest. None of it has been independently reproduced — that remains the open item, and the specification for closing it is in the reconciliation link above.

Four AI systems, ten frozen questions, scores published verbatim: the live scorecard →

Every term defined once, in prose and as machine-readable schema: glossary →

The Denial Dispatch
One finding a week from the federal mortgage record.
One chart, three paragraphs, every Saturday. Measured, not assumed.
Get the Dispatch →
AI Accuracy Index The Door Effect The Denial Map Open Data About 184 Metro Gaps Evidence Navigator Hallucination Files Press Newsletter
FinanceRateCalc · Independent analysis of the complete federal HMDA record · Measured, not assumed. · No lender or AI vendor funds or previews this work.