US Address Normalizer & Geocoder — No Login, $2/1k
Pricing
from $2.00 / 1,000 address processeds
US Address Normalizer & Geocoder — No Login, $2/1k
Bulk-clean messy US addresses to USPS format (abbreviated suffixes, directionals, state codes, ZIP+4) and geocode them to latitude/longitude with county, tract and block FIPS. Census Geocoder + Nominatim fallback, one row per input, no API key. No login or API key. MCP-ready for AI agents. $2 per 1,
Pricing
from $2.00 / 1,000 address processeds
Rating
0.0
(0)
Developer
Khrystyna Skotte
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
US Address Normalizer & Geocoder
Turn messy US address lists into clean, USPS-style addresses with latitude/longitude and Census geography codes. Feed it strings or {street, city, state, zip} objects; get back exactly one row per input, in order, whether it matched or not. No API key, no browser, batches of thousands of addresses in seconds.
Built for lead lists, permit and license exports, CRM cleanup, store/branch lists and any dataset where addresses were typed by humans.
What normalisation does
| Input | Normalized |
|---|---|
1600 pennsylvania ave nw washington dc | 1600 PENNSYLVANIA AVE NW, WASHINGTON, DC |
350 Fifth Avenue, New York, NY 10118 | 350 5TH AVE, NEW YORK, NY 10118 |
233 S. Wacker Dr., Chicago IL 60606 | 233 S WACKER DR, CHICAGO, IL 60606 |
123 north main street apt 4b, saint louis, missouri 63101-1234 | 123 N MAIN ST APT 4B, SAINT LOUIS, MO 63101-1234 |
2000 Lake Shore Drive North East, Chicago, IL | 2000 LAKE SHORE DR NE, CHICAGO, IL |
- Upper-cases and strips punctuation
- USPS Publication 28 street-suffix abbreviations (
STREETtoST,BOULEVARDtoBLVD,PARKWAYtoPKWY, 400+ entries incl. common misspellings) applied only in suffix position, soLAKE SHORE DRkeeps its name - Directionals (
NORTH EASTtoNE) after the house number and at the end of the street - Secondary unit designators (
SUITEtoSTE,APARTMENTtoAPT,#spacing) - Ordinal street names (
FIFTHto5TH) - State names and aliases to two-letter codes (
CaliforniatoCA,Washington DCto city +DC) - ZIP+4 split into
zip5andzip4 - One-line strings without commas are parsed heuristically (
1600 pennsylvania ave nw washington dcsplits into street / city / state)
Geocoding pipeline
- US Census Bureau Geocoder, batch endpoint (
Public_AR_Currentbenchmark, up to 10,000 addresses per request). Returns the Census-standardised address, coordinates, match type (exact / non-exact) and, withincludeCensusGeographies, state FIPS, county FIPS, census tract and block. - Census one-line endpoint for anything the batch did not match, tried with the raw input, the normalized line and the normalized line without the unit number.
- Nominatim (OpenStreetMap) fallback, optional, for the rest. Rate-limited to 1 request per second per their usage policy, so a run with many unmatched addresses is slower. Nominatim hits are back-filled with Census FIPS codes via a point lookup so every matched row has the same geography fields.
Input
| Field | Default | Notes |
|---|---|---|
addresses | 5 sample addresses | Array of strings ("123 Main St, Austin, TX 78701") or objects ({"id": "a1", "street": "123 Main St", "city": "Austin", "state": "TX", "zip": "78701"}). Objects may also carry {"id", "address"} for a one-line string with your own id. |
fallbackToNominatim | true | Try OpenStreetMap for Census non-matches |
includeCensusGeographies | true | Add county / tract / block FIPS |
maxItems | 10 | Process at most this many addresses |
{"addresses": ["1600 pennsylvania ave nw washington dc",{ "id": "hq-4", "street": "1 Apple Park Way", "city": "Cupertino", "state": "California", "zip": "95014" }],"maxItems": 1000}
Output
One row per input address, in input order:
{"inputAddress": "1600 pennsylvania ave nw washington dc","id": 1,"normalizedAddress": { "street": "1600 PENNSYLVANIA AVE NW", "city": "WASHINGTON", "state": "DC", "zip5": null, "zip4": null },"normalizedAddressLine": "1600 PENNSYLVANIA AVE NW, WASHINGTON, DC","matchStatus": "match","matchType": "exact","matchedAddress": "1600 PENNSYLVANIA AVE NW, WASHINGTON, DC, 20500","latitude": 38.898702605246,"longitude": -77.035189204737,"geocoder": "census","countyFips": "11001","countyName": "District of Columbia","stateFips": "11","tract": "980000","block": "1034","confidence": 1,"processedAt": "2026-09-28T18:52:36.261Z"}
matchStatus:match,tie(Census found several candidates and none of the fallbacks resolved it) orno_matchmatchType:exactornon_exact(Census interpolated, or Nominatim)geocoder:census,nominatimornoneconfidence:1.0Census exact,0.7Census non-exact,0.5Nominatim,0no matchid: your object'sidif given, otherwise the 1-based position in the input
Limits
- US addresses only (50 states, DC, PR and territories covered by the Census benchmark). Non-US input comes back as
no_match. - The Census Geocoder interpolates along TIGER street segments: coordinates are typically within 50 to 200 m of the rooftop, not parcel-exact. In a 300-address test against listing coordinates, 87% were within 200 m and 98% within 1 km.
- Very new subdivisions and apartment complexes may be missing from TIGER and OpenStreetMap; those rows come back
no_match(you are still charged for them, since they were processed). - Nominatim fallback runs at 1 address per second. 1,000 Census non-matches add about 18 minutes; set
fallbackToNominatim: falsefor speed on large lists. - PO boxes have no street location and will not geocode.
Pricing
Pay per processed address: $2.00 per 1,000 addresses ($0.002 each, matched or not) plus $0.005 per run. Each address produces one dataset row, so what you pay is exactly what you get.
Typical throughput: 300 addresses in about 45 seconds including Nominatim fallbacks; Census-only batches of 10,000 complete in under a minute.