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.
loan_type = 2, action_taken in (1,2,3), reverse_mortgage ≠ 1. No other filter.action_taken = 3 and divide. Expected: 22.1%lei, take the 100 largest by row count, compute each denial rate. Expected range: 1.8% to 78.7%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.
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.
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:
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.
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.
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.
Keep only records where:
loan_type equals 2 (FHA insured)action_taken is 1, 2 or 3 — that is: originated, approved but not accepted, or denied. These are the applications on which the reporting institution actually made a credit decision.reverse_mortgage does not equal 1 — HECM is FHA-insured but underwritten on age and equity rather than income. (This exclusion was added on 26 July 2026; see the correction log. Computing both with and without it is a useful check in itself.)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.
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.
| Quantity | Expected |
|---|---|
| Decisioned FHA applications (universe size) | 1,187,606 |
| Denials (action 3) | 262,250 |
| National FHA denial rate | 22.1% |
| Reverse mortgages excluded | 29,691 |
| Business-purpose records retained in universe | 3,493 (0.29%) |
| Lowest denial rate, 100 largest FHA lenders by volume | 1.8% |
| Highest denial rate, 100 largest FHA lenders | 78.7% |
| Cleveland, OH metro denial rate | 25.0% |
| Median share of "incomplete application" among cited denial reasons, top 100 | 1.8% |
| Highest "incomplete application" share, any top-100 lender | 75.2% |
denial_reason-1 and derived_msa-md. A join or lookup that silently returns nothing is usually this.debt_to_income_ratio is reported as categorical bins in recent vintages, not as a continuous number. Treating it as continuous and re-binning it will shift cell boundaries.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:
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.
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.
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.
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.
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.
| Date | Status | Result |
|---|---|---|
| 2026-07 | No independent replications | Baseline state |
| 2026-07-28 | Partial — one metro, adjacent year | An 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.
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:
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.
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 →