US Address Normalizer & Geocoder — No Login, $2/1k avatar

US Address Normalizer & Geocoder — No Login, $2/1k

Pricing

from $2.00 / 1,000 address processeds

Go to Apify Store
US Address Normalizer & Geocoder — No Login, $2/1k

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

Khrystyna Skotte

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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

InputNormalized
1600 pennsylvania ave nw washington dc1600 PENNSYLVANIA AVE NW, WASHINGTON, DC
350 Fifth Avenue, New York, NY 10118350 5TH AVE, NEW YORK, NY 10118
233 S. Wacker Dr., Chicago IL 60606233 S WACKER DR, CHICAGO, IL 60606
123 north main street apt 4b, saint louis, missouri 63101-1234123 N MAIN ST APT 4B, SAINT LOUIS, MO 63101-1234
2000 Lake Shore Drive North East, Chicago, IL2000 LAKE SHORE DR NE, CHICAGO, IL
  • Upper-cases and strips punctuation
  • USPS Publication 28 street-suffix abbreviations (STREET to ST, BOULEVARD to BLVD, PARKWAY to PKWY, 400+ entries incl. common misspellings) applied only in suffix position, so LAKE SHORE DR keeps its name
  • Directionals (NORTH EAST to NE) after the house number and at the end of the street
  • Secondary unit designators (SUITE to STE, APARTMENT to APT, # spacing)
  • Ordinal street names (FIFTH to 5TH)
  • State names and aliases to two-letter codes (California to CA, Washington DC to city + DC)
  • ZIP+4 split into zip5 and zip4
  • One-line strings without commas are parsed heuristically (1600 pennsylvania ave nw washington dc splits into street / city / state)

Geocoding pipeline

  1. US Census Bureau Geocoder, batch endpoint (Public_AR_Current benchmark, up to 10,000 addresses per request). Returns the Census-standardised address, coordinates, match type (exact / non-exact) and, with includeCensusGeographies, state FIPS, county FIPS, census tract and block.
  2. 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.
  3. 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

FieldDefaultNotes
addresses5 sample addressesArray 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.
fallbackToNominatimtrueTry OpenStreetMap for Census non-matches
includeCensusGeographiestrueAdd county / tract / block FIPS
maxItems10Process 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) or no_match
  • matchType: exact or non_exact (Census interpolated, or Nominatim)
  • geocoder: census, nominatim or none
  • confidence: 1.0 Census exact, 0.7 Census non-exact, 0.5 Nominatim, 0 no match
  • id: your object's id if 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: false for 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.