# Address Parsing Rules Reference

**Generated:** 2026-09-15

> ⚠️ **Not a complete address-parsing solution.** This is a best-effort helper, not a formal or
> exhaustive specification for untangling address strings. Our internal rules keep evolving as we
> run into new formats and edge cases from real customer data — what's captured here is a snapshot
> of that evolving logic, not a finished, closed set of rules. There will be real addresses this
> does not handle correctly.
>
> You're welcome to use this as you see fit, including adapting it for your own project — but
> please don't publicly redistribute it without acknowledgment of its source.
>
> **This is not our production address-validation standard.** Our own API expects clean,
> correctly-formatted, real addresses — it does not run this rescue logic to fix up bad input.
> This tool exists to help a human (or another system) clean up messy address data *before*
> submitting it, not as a substitute for sending well-formed addresses in the first place. We're
> publishing it now as a convenience, and to have it ready to support in whatever form it's needed
> going forward.

Generated alongside `addressParsingEngine.js` as a snapshot of the rules ported from
`admin.errands.nyc`'s `bulkUploadPreprocess()`. Each `trace` entry returned by `processAddress()`
carries a `rule` id — look it up here to see what that step does.

This is a **copy at generation time**, not a live document — re-request generation after rule
changes in the source repo to keep this in sync.

**Contents:** [What problem this solves](#what-problem-this-solves) · [Rule reference](#rule-id-what-it-does) ·
[Warnings](#warnings-not-trace-entries--reported-separately-in-warnings) ·
[Appendix A: USPS suffixes](#appendix-a--recognized-usps-street-suffixes-207) ·
[Appendix B: Known cities](#appendix-b--known-cities-16) ·
[Appendix C: Neighborhood aliases](#appendix-c--nyc-neighborhood--borough-aliases-60) ·
[Appendix D: City misspellings](#appendix-d--city-name-aliases--misspellings) ·
[Appendix E: State names](#appendix-e--state-name--abbreviation-rule-099--151) ·
[Appendix F: Valid state codes](#appendix-f--valid-us-state-codes-whitelist)

## What problem this solves

Bulk-upload spreadsheets (CSV/Excel) almost never come in cleanly split `line1 / line2 / city /
state / zip` columns. Very often the whole address is jammed into a single "address" column, e.g.:

```
"439 Marcy Ave Apt 1A Brooklyn NY 11206"
"88 Tompkins Ave #4E 11206"
"1319 50TH STREET brooklyn NY 11219"
```

`processAddress({ address1, address2, city, state, zip })` takes whatever raw values you have per
row (`address1`/`line1` is the only required field — the others can be blank, or partially filled
from separate columns) and returns a normalized, fully split address, plus a `trace` of exactly
which rules changed what, and a `warnings` list of soft, non-blocking data-quality flags.

### Notes for porting to a different service area

- `KNOWN_CITIES` (inside `addressParsingEngine.js`, see [Appendix B](#appendix-b--known-cities-16))
  is a short, hand-picked list specific to this company's NYC/NY/NJ service area. Swap it for a
  different project's own city list, or delete the known-city branch entirely — the
  state/zip-anchor fallback (Rule 200) still works standalone without any city list, just with
  slightly less precise line2 extraction.
- `NEIGHBORHOOD_TO_BOROUGH` ([Appendix C](#appendix-c--nyc-neighborhood--borough-aliases-60)) is
  similarly NYC-specific — it maps neighborhood names to the boroughs in `KNOWN_CITIES`. Drop or
  replace it if the target service area has no borough/neighborhood distinction to normalize.
- Everything else (USPS suffix normalization, unit/floor extraction, typo fixes, state-code
  validation, warnings) is generic US-address logic and should work unmodified in any project.
- No React/Redux/app dependencies anywhere in `addressParsingEngine.js` — pure functions, safe to
  unit test directly, safe to bundle into any frontend.

| Rule ID | What it does | Example |
|---|---|---|
| `099d` | Neighborhood-name city column normalized to its borough. | `city="KEW GARDENS"` → `city="Queens"` |
| `099` | Spelled-out state name in the state column abbreviated. | `state="new york"` → `state="NY"` |
| `099zip` | Spelled-out state name found in the zip column moved to state, zip cleared. | `zip="new york"` → `state="NY"`, `zip=""` |
| `099b` | Protected a "`<number> 1/2`" half-address fraction before slash-stripping. | `"263 1/2 Penn St"` stays intact |
| `100` | Commas and slashes in the address replaced with spaces. | `"43 South 8th St, Brooklyn, NY"` → `"43 South 8th St Brooklyn NY"` |
| `100c` | Parenthetical text unwrapped (parens dropped, words kept). | `"(THE LEFT DOOR)"` → `"THE LEFT DOOR"` |
| `100b` | Stray " - " between house number and street name removed. | `"1134 - 57 street"` → `"1134 57 street"` |
| `101c` | "The Bronx" normalized to the known city alias "Bronx". | `"The Bronx"` → `"Bronx"` |
| `101b` | Fused apt-keyword+unit token split. | `"apt2C"` → `"apt 2C"` |
| `102` | Trailing dot stripped from a word. | `"Ny."` → `"Ny"` |
| `103` | Fused state+zip token split. | `"Ny1249"` → `"Ny 1249"` |
| `104` | Fused house-number+ordinal-street token split at the start of the address. | `"4520-12th Ave"` → `"4520 12th Ave"` |
| `105` | Fused house-number+directional split at the start of the address. | `"641E 3RD STREET"` → `"641 E 3RD STREET"` |
| `110` | Common floor/basement/entrance typo normalized. | `"Floot"` → `"Floor"` |
| `125` | Known city name matched in the address, dividing it into street part and city part. | `"9 Main St Brooklyn NY"` → street="9 Main St", city part="Brooklyn NY" |
| `130` | Common city alias/misspelling normalized. | `"Bklyn"` → `"Brooklyn"` |
| `130b` | NYC neighborhood name normalized to its borough. | `"Long Island City"` → `"Queens"` |
| `131` | Dot-fused street-type + apt-keyword tokens split. | `"St.Apt"` → `"St Apt"` |
| `133` | City re-scanned after Rule 131 fixed a fused token, now matches a known city. | — |
| `200` | City not recognized by name; state/zip pattern used to divide street part from city part. | `"439 Marcy Ave Hoboken NJ 07030"` → street="439 Marcy Ave", city part="Hoboken NJ 07030" |
| `250` | Apt/unit keyword and trailing text stripped from the street part (non-popular-city path). | `"439 Marcy Ave Apt 1A"` → street="439 Marcy Ave", unit="Apt 1A" |
| `250b` | Dangling apt/unit keyword with nothing after it stripped from the street part. | `"1102 42nd street apt"` → street="1102 42nd street", unit="apt" |
| `250f` | Trailing ordinal-floor phrase stripped from the street part. | `"...3rd floor"` → unit="3rd floor" |
| `250g` | Trailing "#unit" token stripped from the street part. | `"88 Tompkins Ave #4E"` → street="88 Tompkins Ave", unit="#4E" |
| `250c` | Stray trailing word after the street suffix moved to line 2 (city/state came from columns). | `"1157 42nd street Prero"` → street="1157 42nd street", unit="Prero" |
| `270` | City name extracted from the street part after the street suffix (non-popular-city path). | `"663 E Crescent Ave Upper Saddle River"` → city part gets "Upper Saddle River" |
| `270b` | Unit-shaped token right after the street suffix routed to line 2 instead of the city. | `"1761 Third Ave 10E NY..."` → unit="10E" (not swept into city) |
| `260` | City column value split into city + state when it held both. | `city="Brooklyn NY"` → `city="Brooklyn"`, `state="NY"` |
| `139` | "Bring/take/carry up to `<floor>`" delivery instruction moved to line 2. | `"...bring up to fourth floor"` → unit="bring up to fourth floor" |
| `140` | Apt keyword + unit / directional door moved to line 2. | `"439 Marcy Ave Apt 1A"` → unit="Apt 1A" |
| `141` | Ordinal floor moved to line 2. | `"...2nd floor"` → unit="2nd floor" |
| `141b` | Fused digit+floor token moved to line 2. | `"1117 49TH ST 1FLR"` → unit="1FLR" |
| `141c` | Bare cardinal + floor moved to line 2. | `"...1 Floor"` → unit="1 Floor" |
| `141d` | "N flight(s) up/down" delivery instruction moved to line 2. | `"...1 Flight up"` → unit="1 Flight up" |
| `142` | Bare floor/basement/delivery keyword moved to line 2. | `"...Upstairs"` → unit="Upstairs" |
| `143` | Bare "#unit" token moved to line 2. | `"...#5"` → unit="#5" |
| `143b` | Trailing dash separator left behind by a floor-strip removed. | `"8 -"` → `"8"` |
| `144` | Trailing alphanumeric unit remaining after a floor/keyword strip moved to line 2. | `"5502 14th Ave F2 [floor already stripped]"` → unit+="F2" |
| `145` | Trailing bare 1-4 digit number (not a zip) moved to line 2, anchored on a street suffix. | `"178 Hooper St 11"` → unit="11" |
| `146` | Trailing alphanumeric unit on a numbered street (no suffix) moved to line 2. | `"1259 52 2B"` → unit="2B" |
| `147` | Duplicated trailing state token stripped from a no-suffix street, then unit re-checked. | `"545 academy 4 NY"` → street="545 academy", unit="4" |
| `150` | Country name stripped from the city part. | `"Brooklyn USA NY 11206"` → `"Brooklyn NY 11206"` |
| `151` | Spelled-out state name in the city part expanded to its 2-letter abbreviation. | `"Brooklyn New York 11206"` → `"Brooklyn NY 11206"` |
| `160` | City / state / zip extracted from the city part (known-city path). | `"brooklyn NY 11219"` → city=brooklyn, state=NY, zip=11219 |
| `161` | City / state / zip extracted from the city part (state/zip-anchored path). | `"Flushing NY 11355"` → city=Flushing, state=NY, zip=11355 |
| `165` | Spelled-out directional in the street part normalized. | `"South 9th Street"` → `"S 9th Street"` |
| `170` | Street part exploded into house number / directional / name / suffix / post-directional. | `"85 N 9th St"` → house=85, dir=N, name=9th, suffix=St |
| `172` | Lettered-avenue exception applied. | `"417 Ave F"` kept as street name "Ave F" |
| `171` | Trailing bare unit token (no suffix present) moved to line 2. | `"95 S 9 2"` → unit="2" |
| `195` | Fused "`<number>st`" trailing token split into "`<number> St`". | `"1467 59st"` → `"1467 59 St"` |
| `196` | Trailing USPS street suffix normalized to its standard abbreviation (no city divide). | `"1268 52nd street"` → `"1268 52nd St"` |
| `177` | Known city name fused onto a line-2 unit token split apart. | `"#3dBronx"` → unit="#3d", city="Bronx" |
| `190` | Line 1 reverted to the original raw text because it didn't start with a house number (or nothing but the house number survived). | — |

## Warnings (not trace entries — reported separately in `warnings[]`)

- `"duplicate street type"` — line 1 has two street-type words (e.g. "56th Street ... 1st Street").
- `"possible stray word"` — a likely-unrecognized trailing word after a fused numbered-street token.
- `"incorrect ordinal suffix"` — a street number's ordinal suffix looks wrong (e.g. "51ND" instead of "51ST").
- `"missing street suffix"` — line 1 has a house number and street name but no recognized USPS
  suffix, and it isn't one of the known no-suffix NYC streets (Broadway, Bowery).

## Appendix A — Recognized USPS Street Suffixes (207)

Every variant/abbreviation the engine recognizes as a street-type word (used to find the suffix boundary in Rule 170/200/270/etc.), and the standard abbreviation it normalizes to.

| Standard | Recognized as (any of, case-insensitive) |
|---|---|
| ALY (Alley) | ALLEE, ALLEY, ALLY, ALY |
| ANX (Anex) | ANEX, ANNEX, ANNX, ANX |
| ARC (Arcade) | ARC, ARCADE |
| AVE (Avenue) | AV, AVE, AVEN, AVENU, AVENUE, AVN, AVNUE |
| BYU (Bayou) | BAYOO, BAYOU |
| BCH (Beach) | BCH, BEACH |
| BND (Bend) | BEND, BND |
| BLF (Bluff) | BLF, BLUF, BLUFF |
| BLFS (Bluffs) | BLUFFS |
| BTM (Bottom) | BOT, BTM, BOTTM, BOTTOM |
| BLVD (Boulevard) | BLVD, BOUL, BOULEVARD, BOULV |
| BR (Branch) | BR, BRNCH, BRANCH |
| BRG (Bridge) | BRDGE, BRG, BRIDGE |
| BRK (Brook) | BRK, BROOK |
| BRKS (Brooks) | BROOKS |
| BG (Burg) | BURG |
| BGS (Burgs) | BURGS |
| BYP (Bypass) | BYP, BYPA, BYPAS, BYPASS, BYPS |
| CP (Camp) | CAMP, CP, CMP |
| CYN (Canyon) | CANYN, CANYON, CNYN |
| CPE (Cape) | CAPE, CPE |
| CSWY (Causeway) | CAUSEWAY, CAUSWA, CSWY |
| CTR (Center) | CEN, CENT, CENTER, CENTR, CENTRE, CNTER, CNTR, CTR |
| CTRS (Centers) | CENTERS |
| CIR (Circle) | CIR, CIRC, CIRCL, CIRCLE, CRCL, CRCLE |
| CIRS (Circles) | CIRCLES |
| CLF (Cliff) | CLF, CLIFF |
| CLFS (Cliffs) | CLFS, CLIFFS |
| CLB (Club) | CLB, CLUB |
| CMN (Common) | COMMON |
| CMNS (Commons) | COMMONS |
| COR (Corner) | COR, CORNER |
| CORS (Corners) | CORNERS, CORS |
| CRSE (Course) | COURSE, CRSE |
| CT (Court) | COURT, CT |
| CTS (Courts) | COURTS, CTS |
| CV (Cove) | COVE, CV |
| CVS (Coves) | COVES |
| CRK (Creek) | CREEK, CRK |
| CRES (Crescent) | CRESCENT, CRES, CRSENT, CRSNT |
| CRST (Crest) | CREST, CRST |
| XING (Crossing) | CROSSING, CRSSNG, XING |
| XRD (Crossroad) | CROSSROAD |
| XRDS (Crossroads) | CROSSROADS |
| CURV (Curve) | CURVE, CURV |
| DL (Dale) | DALE, DL |
| DM (Dam) | DAM, DM |
| DV (Divide) | DIV, DIVIDE, DV, DVD |
| DR (Drive) | DR, DRIV, DRIVE, DRV |
| DRS (Drives) | DRIVES |
| EST (Estate) | EST, ESTATE |
| ESTS (Estates) | ESTATES, ESTS |
| EXPY (Expressway) | EXP, EXPR, EXPRESS, EXPRESSWAY, EXPW, EXPY |
| EXT (Extension) | EXT, EXTENSION, EXTN, EXTNSN |
| EXTS (Extensions) | EXTS |
| FALL (Fall) | FALL |
| FLS (Falls) | FALLS, FLS |
| FRY (Ferry) | FERRY, FRRY, FRY |
| FLD (Field) | FIELD, FLD |
| FLDS (Fields) | FIELDS, FLDS |
| FLT (Flat) | FLAT, FLT |
| FLTS (Flats) | FLATS, FLTS |
| FRD (Ford) | FORD, FRD |
| FRDS (Fords) | FORDS, FRDS |
| FRST (Forest) | FOREST, FORESTS, FRST |
| FRG (Forge) | FORG, FORGE, FRG |
| FRGS (Forges) | FORGES |
| FRK (Fork) | FORK, FRK |
| FRKS (Forks) | FORKS, FRKS |
| FT (Fort) | FORT, FRT, FT |
| FWY (Freeway) | FREEWAY, FREEWY, FRWAY, FRWY, FWY |
| GDN (Garden) | GARDEN, GARDN, GRDEN, GRDN |
| GDNS (Gardens) | GARDENS, GDNS, GRDNS |
| GTWY (Gateway) | GATEWAY, GATEWY, GATWAY, GTWAY, GTWY |
| GLN (Glen) | GLEN, GLN |
| GLNS (Glens) | GLENS |
| GRN (Green) | GREEN, GRN |
| GRNS (Greens) | GREENS |
| GRV (Grove) | GROV, GROVE, GRV |
| GRVS (Groves) | GROVES |
| HBR (Harbor) | HARB, HARBOR, HARBR, HBR, HRBOR |
| HBRS (Harbors) | HARBORS |
| HVN (Haven) | HAVEN, HVN |
| HTS (Heights) | HT, HTS |
| HWY (Highway) | HIGHWAY, HIGHWY, HIWAY, HIWY, HWAY, HWY |
| HL (Hill) | HILL, HL |
| HLS (Hills) | HILLS, HLS |
| HOLW (Hollow) | HLLW, HOLLOW, HOLLOWS, HOLW, HOLWS |
| INLT (Inlet) | INLT |
| IS (Island) | IS, ISLAND, ISLND |
| ISS (Islands) | ISLANDS, ISS, ISLNDS |
| ISLE (Isle) | ISLE, ISLES |
| JCT (Junction) | JCT, JCTION, JCTN, JUNCTION, JUNCTN, JUNCTON |
| JCTS (Junctions) | JCTNS, JCTS, JUNCTIONS |
| KY (Key) | KEY, KY |
| KYS (Keys) | KEYS, KYS |
| KNL (Knoll) | KNL, KNOL, KNOLL |
| KNLS (Knolls) | KNLS, KNOLLS |
| LK (Lake) | LK, LAKE |
| LKS (Lakes) | LKS, LAKES |
| LAND (Land) | LAND |
| LNDG (Landing) | LANDING, LNDG, LNDNG |
| LN (Lane) | LANE, LN |
| LINE (Line) | LINE |
| LGT (Light) | LGT, LIGHT |
| LGTS (Lights) | LIGHTS |
| LF (Loaf) | LF, LOAF |
| LCK (Lock) | LCK, LOCK |
| LCKS (Locks) | LCKS, LOCKS |
| LDG (Lodge) | LDG, LDGE, LODG, LODGE |
| LOOP (Loop) | LOOP, LOOPS |
| MALL (Mall) | MALL |
| MNR (Manor) | MNR, MANOR |
| MNRS (Manors) | MANORS, MNRS |
| MDW (Meadow) | MEADOW, MDW |
| MDWS (Meadows) | MDW, MDWS, MEADOWS, MEDOWS |
| MEWS (Mews) | MEWS |
| ML (Mill) | MILL, ML |
| MLS (Mills) | MILLS, MLS |
| MSN (Mission) | MISSN, MSN, MSSN |
| MTWY (Motorway) | MOTORWAY |
| MT (Mount) | MNT, MT, MOUNT |
| MTN (Mountain) | MNTAIN, MNTN, MOUNTAIN, MOUNTIN, MTIN, MTN |
| MTNS (Mountains) | MNTNS, MOUNTAINS, MTNS |
| NCK (Neck) | NCK, NECK |
| ORCH (Orchard) | ORCH, ORCHARD, ORCHRD |
| OVAL (Oval) | OVAL, OVL |
| OPAS (Overpass) | OVERPASS |
| PARK (Park) | PARK, PRK, PK |
| PARKS (Parks) | PARKS |
| PKWY (Parkway) | PARKWAY, PARKWY, PKWAY, PKWY, PKY |
| PKWY (Parkways) | PARKWAYS, PKWY, PKWYS |
| PASS (Pass) | PASS |
| PSGE (Passage) | PASSAGE |
| PATH (Path) | PATH, PATHS |
| PIKE (Pike) | PIKE, PIKES |
| PNE (Pine) | PINE, PNE |
| PNES (Pines) | PINES, PNES |
| PL (Place) | PL, PLACE |
| PLN (Plain) | PLAIN, PLN |
| PLNS (Plains) | PLAINS, PLNS |
| PLZ (Plaza) | PLAZA, PLZ, PLZA |
| PT (Point) | POINT, PT |
| PTS (Points) | POINTS, PTS |
| PRT (Port) | PORT, PRT |
| PRTS (Ports) | PORTS, PRTS |
| PR (Prairie) | PR, PRAIRIE, PRR |
| RADL (Radial) | RAD, RADL, RADIAL, RADIEL |
| RAMP (Ramp) | RAMP |
| RNCH (Ranch) | RANCH, RANCHES, RNCH, RNCHS |
| RPD (Rapid) | RAPID, RPD |
| RPDS (Rapids) | RAPIDS, RPDS |
| RST (Rest) | REST, RST |
| RDG (Ridge) | RDG, RDGE, RIDGE |
| RDGS (Ridges) | RDGS, RIDGES |
| RIV (River) | RIV, RIVER, RVR, RIVR |
| RD (Road) | RD, ROAD |
| RDS (Roads) | ROADS, RDS |
| RTE (Route) | ROUTE, RTE |
| ROW (Row) | ROW |
| RUE (Rue) | RUE |
| RUN (Run) | RUN |
| SHL (Shoal) | SHL, SHOAL |
| SHLS (Shoals) | SHLS, SHOALS |
| SHR (Shore) | SHOAR, SHORE, SHR |
| SHRS (Shores) | SHOARS, SHORES, SHRS |
| SKWY (Skyway) | SKYWAY |
| SPG (Spring) | SPG, SPNG, SPRING, SPRNG |
| SPGS (Springs) | SPGS, SPNGS, SPRINGS, SPRNGS |
| SPUR (Spur) | SPUR |
| SPUR (Spurs) | SPURS |
| SQ (Square) | SQ, SQR, SQRE, SQU, SQUARE |
| SQS (Squares) | SQRS, SQUARES, SQS |
| STA (Station) | STA, STATION, STATN, STN |
| STRA (Stravenue) | STRA, STRAV, STRAVEN, STRAVENUE, STRAVN, STRVN, STRVNUE |
| STRM (Stream) | STREAM, STRM, STREME |
| ST (Street) | STREET, ST, STRT, STR |
| STS (Streets) | STREETS, STS |
| SMT (Summit) | SMT, SUMIT, SUMITT, SUMMIT |
| TER (Terrace) | TER, TERR, TERRACE |
| TRWY (Throughway) | THROUGHWAY |
| TRCE (Trace) | TRACE, TRACES, TRCE |
| TRAK (Track) | TRACK, TRACKS, TRAK, TRK, TRKS |
| TRFY (Trafficway) | TRAFFICWAY |
| TRL (Trail) | TRAIL, TRAILS, TRL, TRLS |
| TRLR (Trailer) | TRAILER, TRLR, TRLRS |
| TUNL (Tunnel) | TUNEL, TUNL, TUNLS, TUNNEL, TUNNELS, TUNNL |
| TPKE (Turnpike) | TRNPK, TURNPIKE, TURNPK |
| UPAS (Underpass) | UNDERPASS |
| UN (Union) | UN, UNION |
| UNS (Unions) | UNIONS, UNS |
| VLY (Valley) | VALLEY, VALLY, VLLY, VLY |
| VLYS (Valleys) | VALLEYS, VLYS |
| VIA (Viaduct) | VDCT, VIA, VIADCT, VIADUCT |
| VW (View) | VIEW, VW |
| VWS (Views) | VIEWS, VWS |
| VLG (Village) | VILL, VILLAG, VILLAGE, VILLG, VILLIAGE, VLG |
| VLGS (Villages) | VILLAGES, VLGS |
| VL (Ville) | VILLE, VL |
| VIS (Vista) | VIS, VIST, VISTA, VST, VSTA |
| WALK (Walk) | WALK |
| WALK (Walks) | WALKS |
| WALL (Wall) | WALL |
| WAY (Way) | WAY, WY |
| WAYS (Ways) | WAYS |
| WL (Well) | WELL, WL |
| WLS (Wells) | WELLS, WLS |

## Appendix B — Known Cities (16)

Exact city names Rule 125/133/177 scan an address for to find the city divide. Case-insensitive, whole-word match.

- Kiryas Joel
- Spring Valley
- New City
- Staten Island
- Brooklyn
- Monsey
- Monroe
- Lakewood
- Montebello
- Pomona
- Airmont
- Linden
- Bronx
- Queens
- Manhattan
- New York

## Appendix C — NYC Neighborhood → Borough Aliases (60)

A neighborhood name found in the address (Rule 130b) or in a separate city column (Rule 099d) is rewritten to its borough before the city-divide runs, since the boroughs — not the neighborhoods — are the Known Cities (Appendix B) the engine actually divides on.

**Bronx**: Williamsbridge, Riverdale, Fordham, Kingsbridge, Pelham Bay, Throggs Neck, Morris Park, Co-op City, Wakefield, Parkchester, Mott Haven, Concourse, Soundview, Norwood, Woodlawn

**Brooklyn**: Williamsburg, Bushwick, Bedford Stuyvesant, Bed Stuy, Crown Heights, Flatbush, Park Slope, Sunset Park, Bay Ridge, Sheepshead Bay, Canarsie, Borough Park, Midwood, Greenpoint, Dyker Heights, Bensonhurst, Coney Island, East New York, Brownsville, Gravesend

**Queens**: Long Island City, Astoria, Flushing, Jamaica, Ridgewood, Woodside, Sunnyside, Elmhurst, Corona, Forest Hills, Rego Park, Jackson Heights, Maspeth, Middle Village, Ozone Park, Kew Gardens, Bayside, Fresh Meadows, Far Rockaway, Rockaway Beach, Whitestone, College Point, Howard Beach, Richmond Hill, Glendale

## Appendix D — City Name Aliases / Misspellings

Common shorthand/misspellings normalized to their full known-city name before the city-divide re-scan.

| Written as | Normalized to | Rule |
|---|---|---|
| Bklyn | Brooklyn | 130 |
| Bkln | Brooklyn | 130 |
| Bkly | Brooklyn | 130 |
| Lkwd | Lakewood | 130 |
| Spr Valley | Spring Valley | 130 |
| The Bronx | Bronx | 101c |

## Appendix E — State Name → Abbreviation (Rule 099 / 151)

Spelled-out US state names recognized and expanded/collapsed to their 2-letter abbreviation (used both when a caller-supplied state column is spelled out, and when a state name appears written out inside the address text).

Alabama → AL, Alaska → AK, Arizona → AZ, Arkansas → AR, California → CA, Colorado → CO, Connecticut → CT, Delaware → DE, Florida → FL, Georgia → GA, Hawaii → HI, Idaho → ID, Illinois → IL, Indiana → IN, Iowa → IA, Kansas → KS, Kentucky → KY, Louisiana → LA, Maine → ME, Maryland → MD, Massachusetts → MA, Michigan → MI, Minnesota → MN, Mississippi → MS, Missouri → MO, Montana → MT, Nebraska → NE, Nevada → NV, New Hampshire → NH, New Jersey → NJ, New Mexico → NM, New York → NY, North Carolina → NC, North Dakota → ND, Ohio → OH, Oklahoma → OK, Oregon → OR, Pennsylvania → PA, Rhode Island → RI, South Carolina → SC, South Dakota → SD, Tennessee → TN, Texas → TX, Utah → UT, Vermont → VT, Virginia → VA, Washington → WA, West Virginia → WV, Wisconsin → WI, Wyoming → WY, District Of Columbia → DC

## Appendix F — Valid US State Codes (whitelist)

Only these 2-letter codes are ever accepted as a state during city-part parsing (Rule 160/161/147/260) — prevents a stray 2-letter word (e.g. a street abbreviation) from being mistaken for a state.

AL, AK, AZ, AR, CA, CO, CT, DE, FL, GA, HI, ID, IL, IN, IA, KS, KY, LA, ME, MD, MA, MI, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, OH, OK, OR, PA, RI, SC, SD, TN, TX, UT, VT, VA, WA, WV, WI, WY, DC
