The FFIEC Geocoding System, Explained

What it returns, which HMDA fields each result feeds, why a tract code changes without the building moving, and what happens to the addresses it will not match. The last of those is the part nobody publishes, so we ran eight real addresses and wrote down what came back.

The short answer. The FFIEC Geocoding and Mapping System is a free public lookup that takes one address and an activity year and returns the MSA or metropolitan division, the state, the county and the census tract, along with the income data attached to that tract. Three of those four go straight onto a HMDA record. It is the reference implementation and it is the right tool for settling one address.

What it does not do is tell you which of your addresses it is getting wrong. It returns one answer, from one engine, with no second opinion, and the addresses that matter to a filing are exactly the ones where engines disagree.

What it is, and who is required to use it

The FFIEC Geocoding and Mapping System is described by the FFIEC as a mapping utility that lets you enter an address and see a subset of the demographic data for the tract the address falls in. You give it a street address and an activity year; it gives you the geography codes and the tract-level figures for that year.

Nobody is required to use it. That is worth stating plainly, because the tool is frequently described as though it were mandatory. What the rules require is that the geography on a reported record is correct. Regulation C names the fields; it does not name the software. An institution that geocodes an entire register through a vendor and never opens the FFIEC tool is fully compliant, provided the codes are right.

What the tool is instead is the reference implementation, and that is a stronger position than being mandatory. If your census tract and the FFIEC tool’s census tract disagree for the same activity year, the conversation with an examiner starts from the assumption that yours is the one to explain. Which is why it is the correct thing to reach for when you are checking one file, and the wrong thing to reach for when you have a portfolio, for reasons set out in when one address at a time stops being enough.

What each field means, and where it lands on the LAR

A result is four geography codes and a block of income data. They do not all do the same job, and only some of them are reported.

What the FFIEC result gives you, and what the HMDA register does with it. Field positions are those of the Loan/Application Register specification in the FFIEC Filing Instructions Guide.
What comes backWhat it isWhere it goes
StateTwo-digit FIPS state code.Reported on the LAR, in the address block alongside city and ZIP.
CountyThree-digit FIPS county code, unique only within its state.Reported on the LAR at field 17. The full five digits are the state code and the county code together, which is why a county code on its own never identifies a county.
Census tractSix digits, written as four then two after a decimal point. The tract is the unit almost every fair lending and CRA test is measured at.Reported on the LAR at field 18. Edit V627 checks that its first five digits match the reported county, so a tract from the wrong county is caught; a wrong tract from the right county is not.
MSA/MDMetropolitan statistical area or metropolitan division. Blank, shown as NA, for an address outside one.Not a HMDA register field. It is here for two other reasons: CRA reporting is organized by MSA/MD, and the tract income level below is measured against it.
Tract income levelLow, moderate, middle or upper. The FFIEC assigns it from the tract’s median family income as a percentage of the surrounding MSA/MD median family income: low is below 50 percent, moderate is 50 to under 80, middle is 80 to under 120, upper is 120 or more.Not reported. It is the variable most CRA performance analysis is built on, and it is the reason a wrong tract is not simply a wrong number.
Tract median family income %The tract median family income divided by the MSA/MD median family income. For a tract outside any MSA/MD, the denominator is the statewide non-metropolitan figure instead.Not reported, but it is the figure the income level is banded from, and it is what moves when OMB redraws a metropolitan boundary.

The practical consequence of that table is that a tract error is never contained. It moves the record’s income level, which moves the CRA performance figures the record contributes to, and if the tract crosses an assessment area boundary it moves the record out of one assessment area and into another. That is why the geography fields get tested the way they do, and it is set out field by field in what your LAR looks like to an examiner.

Why a tract code changes without the building moving

Two different clocks run under this data, and neither has anything to do with the property.

The decennial redraw. Census tract boundaries are redrawn at each decennial census, and the FFIEC picks the new ones up in the census file for the year ending in 2. The 2022 file moved to the 2020 Census boundaries. So the same building can carry one tract code on a 2021 filing and a different one on a 2022 filing, and both are correct for their year. The FFIEC warns that after a decennial update the boundaries are no longer directly comparable to previous years, which means tract-level trend analysis across that line is comparing two different geographies.

The annual refresh. The census flat file is rebuilt each summer, typically July or August, to take in metropolitan-area boundary changes announced by OMB and the current CRA distressed and underserved tract designations. That one usually leaves the tract alone and moves what the tract is measured against: a new MSA/MD denominator can change a tract’s income level without a single boundary near it having moved.

Both are why the FFIEC tool asks for an activity year rather than assuming the current one, and why re-geocoding a portfolio against a new vintage is a real piece of work rather than a refresh. A tool that answers one address at a time makes that work manual.

Where the match fails: eight real addresses

This is the part that does not get published, so here it is. Eight real, public addresses, run on September 15, 2026, each chosen because it breaks in a different way.

Two things were run. The first is the Census Bureau’s public geocoding API, which is the free, documented way to turn an address into a census tract, using benchmark Public_AR_Current and vintage Current_Current. The second is RATA’s own ZOOM Geocoder, which puts several engines on one result for the same address, including an FFIEC one. Where an engine returns nothing for an address, it simply has no row on the ZOOM result, and that absence is itself the finding.

Eight addresses, run September 15, 2026 against the Census Bureau’s public geocoding API (benchmark Public_AR_Current, vintage Current_Current) and against RATA’s ZOOM Geocoder. Tracts are shown as the tools returned them.
Address, and why it is hereCensus Bureau APIZOOMWhat it shows
1600 Pennsylvania Ave NW, Washington DC 20500
Control. An address every engine knows.
Matched. Tract 9800.00, county 11001.Every engine agrees: 11 / 001 / 9800.00, MSA 47764.When an address is clean, the engines agree and there is nothing to decide. Most of a register looks like this.
1916 Boothe Cir, Longwood FL 32750
Control. An ordinary suburban commercial address.
Matched. Tract 0215.04, county 12117.Six engines, all 12 / 117 / 0215.04, MSA 36740.Same. Agreement across engines is the signal that an address is not near anything contentious.
1916 Boothe Circel, Longwood FL 32750
A transposed street type. The ordinary data-entry case.
Matched, and corrected, to 1916 BOOTHE CIR. Same tract.Every engine corrects it and returns 0215.04.Fuzzy matching handles a misspelling better than most people expect. This is the failure class to worry about least.
350 5th Ave Ste 4700, New York NY 10118
A suite number on a multi-tenant tower.
Matched, with the suite silently dropped: the standardized address comes back as 350 5TH AVE.The FFIEC engine keeps it, standardizing to 350 5TH AVE, SUITE 4700. All engines return 0076.00.Engines disagree about whether a suite survives standardization, and for a single-parcel building it does not change the tract. Worth knowing before you spend an afternoon stripping suites out of a file.
PO Box 217, Marfa TX 79843
A mailing point rather than a place.
No match.The FFIEC engine returns nothing. Others do answer: one resolves the box to 1411 W SAN ANTONIO ST, the post office, and returns tract 9501.00, MSA NA.The dangerous one. A PO box has no location, so a geocoder that answers is giving you the post office’s tract. It is a real tract and a valid-looking code, and it is not where the borrower lives.
HC 65 Box 101, Alpine TX 79830
A highway contract route box.
No match.The FFIEC engine returns nothing. Others resolve it to 250 JUNIOR RD and return tract 9505.00.Rural route boxes are a delivery arrangement, not an address. Where an engine does resolve one it is because it holds a separate crosswalk, and the result is only as good as that crosswalk.
Boothe Cir, Longwood FL 32750
A street with no house number.
No match.The FFIEC engine returns nothing. Three engines put it at 0215.04; a fourth falls back to a five-digit ZIP centroid and returns 0215.06.Two different tracts for the same input, because a missing house number forces each engine onto a different fallback. This is what a ZIP centroid costs you.
1 Hudson Yards, New York NY 10001
A named address on recently built land.
No match, although the building exists.Every engine answers, and they split two against two: 0099.03 from one pair, 0099.02 from the other, including the FFIEC engine.The one to take away. A real, occupied, well-known address, and four engines returning two different census tracts. No edit check catches this: both codes are valid and both agree with the county.

Four classes come out of that, and they need different answers.

  • A misspelling is not a problem. Every engine tested corrected Circel to Cir and returned the right tract. Time spent hand-cleaning spellings before geocoding is mostly time spent on the wrong thing.
  • A box is not an address. PO boxes and rural route boxes fail outright on a strict engine and resolve to the wrong place on a lenient one. The fix is upstream, in what the origination system captured, not in the geocoder.
  • A missing house number produces a plausible wrong answer. The engine falls back to a street or a ZIP centroid, and near a tract boundary that is a different tract. Nothing in the output says “this is a centroid” unless the tool tells you, which is why match precision matters more than match rate. Those are two different measurements and vendors quote whichever is flattering.
  • Engines disagree on real addresses. Not on broken ones: on 1 Hudson Yards, which exists and is occupied. A single-source lookup cannot show you this, because disagreement is only visible when you have more than one answer.

The edits will not save you from the last two. V625 rejects a census tract that is not a valid tract, and V627 rejects a county and tract that do not belong together. A wrong tract from the right county passes both. If you want to see which edits a record would fail before you file it, our HMDA edit-check validator runs a single row against the named subset that can be judged on one record.

When one address at a time stops being enough

Nothing above is an argument against the FFIEC tool. It is free, it is authoritative, and for one address it is the right thing to use. The limits are structural rather than a matter of quality, and they show up at three points.

Volume. A lookup is a person typing an address and reading a screen. A register is thousands of them. The difference is not effort, it is that the second one needs a process, and every result transcribed by hand into a loan record is a place a tract can be entered wrong.

The audit trail. The tool leaves none. It does not record what was geocoded, when, or against which vintage, and an examiner asking how a tract was assigned is asking exactly that. Compliance-grade results are ones that stay traceable to the matching engine and reference file that produced them.

The second opinion. This is the one the table above is about. One engine returns one answer and no measure of whether to believe it. RATA runs every address through a dozen proprietary, commercial and online sources in a 13-step process and reconciles the disagreements, which is where the 98%+ tract accuracy comes from, and the addresses no automated source resolves go to a technician rather than to a fallback. How that is measured is published rather than asserted.

For a single address you want a second opinion on today, ZOOM Geocoder shows every engine’s answer on one map, free, which is how the disagreements in the table above were found. For a register, that is what RATA’s geocoding services do, and a demonstration runs on your own file rather than a sample.

Questions people ask

Is the FFIEC Geocoding System free, and who has to use it?

It is free and public, and nobody is required to use it. What the rules require is that the state, county and census tract on a reported record are correct, and they do not say which tool produced them. The FFIEC tool is the reference implementation: if your figure and its figure disagree for the same activity year, the burden is on your figure. That is a different thing from being mandated.

Which HMDA LAR fields does an FFIEC geocoding result feed?

Three of the four. State, county and census tract each go onto the register at their own field position. The MSA or metropolitan division does not appear on the HMDA register at all. It is in the result because the tract income level is calculated as the tract median family income as a percentage of the MSA/MD median family income, and because CRA reporting is organized by MSA/MD.

Why did a census tract code change when the property did not move?

Tract boundaries are redrawn at each decennial census, on years ending in 2, and the FFIEC census file for 2022 moved to the 2020 Census boundaries. An address can therefore carry one tract code for a 2021 filing and another for 2022 with nothing about the property having changed. Separately, the census file is refreshed each summer for OMB metropolitan-area boundary changes, which can move the MSA/MD, and with it a tract’s income level, while the tract itself stays where it was.

Why do two geocoders return different census tracts for the same address?

Because they are not answering from the same reference data or at the same precision. An engine that resolves to the roof of a building and an engine that falls back to the center of a ZIP code are both returning a tract, and near a boundary those are frequently different tracts. We ran 1 Hudson Yards, New York on September 15, 2026 and four engines returned two different tracts for it. Running one address through several engines is the cheapest way to find out which of yours sit on a boundary.

What should you do with an address the geocoder will not match?

Work out what it is before you find a tract for it. A PO box, a rural route box and an address with no house number fail for three different reasons and take three different fixes, and none of them is fixed by accepting whatever an engine offers as a fallback. A PO box in particular will resolve to the post office on a lenient engine, which is a real census tract and the wrong one.

Does the FFIEC tool do batches?

No. It answers one address at a time, by design. That is the correct shape for checking a file or settling an argument, and the wrong shape for a register, which is the distinction drawn in when one address at a time stops being enough above.

Methodology and sources

The runs. The eight addresses in the table above were run on September 15, 2026. Each was sent once to the Census Bureau’s public geocoding API at geocoding.geo.census.gov, using benchmark Public_AR_Current and vintage Current_Current, and separately entered into RATA’s ZOOM Geocoder. Results are reported as the tools returned them, including the ones that returned nothing.

What was not run. The FFIEC’s own web tool at geomap.ffiec.gov was not used to produce this table. It refuses automated requests, and working around that to fill in a column is not something we are going to do. The FFIEC engine referred to in the ZOOM column is the FFIEC engine inside that tool, labeled there as such; where a row says the FFIEC engine returned nothing, that is what ZOOM displayed. If you want the FFIEC tool’s own answer for any of these addresses, type it in. That is the point of a free public lookup.

The field definitions in what each field means are the FFIEC’s own: the income-level bands (low below 50 percent, moderate 50 to under 80, middle 80 to under 120, upper 120 or more) and the tract median family income percentage calculation, including the statewide non-metropolitan denominator for tracts outside an MSA/MD, are stated in the FFIEC’s census documentation. LAR field positions and the V625 and V627 edits are from the FFIEC Filing Instructions Guide.

The boundary dates in why a tract code changes are the FFIEC’s: the 2022 census file adopted the 2020 Census tract boundaries, decennial boundary changes land on years ending in 2, and the census flat file is refreshed each summer for OMB metropolitan-area changes and CRA distressed and underserved designations.

What is not here. No accuracy percentage other than the 98%+ figure already published across this site, which is RATA’s own measured performance and not a regulatory floor. ZOOM displays a reliability figure for each engine on its result screen; those are deliberately not reproduced here, because a second accuracy number on this site is the exact failure our own methodology page tells readers to test vendors for.

How should you cite this page?

The runs are reproducible and the sources are public, so quote it freely.

Plain text

RATA Associates. “The FFIEC Geocoding System, Explained.” Address runs made September 15, 2026. https://rataassociates.com/ffiec-geocoding-system/

HTML link

<a href="https://rataassociates.com/ffiec-geocoding-system/">The FFIEC Geocoding System, Explained</a>, RATA Associates

Every heading here carries a stable id, so a section can be linked directly. You may republish these figures with attribution and a link to https://rataassociates.com/ffiec-geocoding-system/. If a result here does not match what you get from the same tool, tell us. We would rather fix it than be cited incorrectly.

See Geocoding Services in Action

Schedule a free online demonstration to discover what Geocoding Services can do for your institution.

Schedule Your Free Demo Have Questions? Contact Us

What happens next

  • 40 minutes, screen-shared. A live walkthrough on RATA sample data, driven by your questions rather than a script.
  • A specialist, not a relay. The person on the call knows both the software and the regulations behind it.
  • Mid-cycle is normal. Implementation and historical conversion are handled for you, typically inside a day.
Or see a specific module in action: