Address Tools
Validate, parse, normalize, standardize, interpolate, compare — plus timezone & distance utilities
What's in the toolbox
Validate
Check whether an address resolves to a real, geocodable location. Returns yes/no plus the matched record. Single (GET /v1/validate) or batch (POST).
Parse
Break a free-form address string into structured components — house number, street, city, state, postcode — using a machine-learned address parser trained on OpenStreetMap-derived data.
Normalize
Clean a raw address before you store or geocode it. Returns USPS Publication 28 parts — house number, predirectional, street name, suffix, postdirectional, unit, city, state, ZIP, ZIP+4 — directionals as N S E W NE NW SE SW and suffixes as ST AVE BLVD …, plus a one-line formatted address and a changed flag with the list of fixes. Invalid ZIPs, invalid states and oversize fields are flagged in a warnings list and never altered, and one bad row never fails a batch. Parse-only: no geocoding, no database lookup, never invents a house number. GET /v1/normalize or POST /v1/normalize (up to 1,000 addresses). Docs and examples.
Standardize
Normalize an address to canonical form: USPS-style abbreviations, casing, ordering. Useful for deduplication and matching.
Compare
Score the similarity between two addresses (0-1). Handles abbreviation variance, typos, and formatting differences. POST /v1/addresses/compare.
Cross-Street
Find the nearest cross-street to a coordinate. GET /v1/addresses/crossstreet?lat=...&lng=.... Useful for navigation hints and dispatch logic.
Interpolate
Estimate a house-number coordinate by interpolating from known address-range data. GET /v1/addresses/interpolate?q=.... Falls through to the ML address parser for free-form input.
Timezone & Distance
GET /v1/timezone?lat=...&lng=... returns the IANA timezone for a coordinate. GET /v1/distance calculates Haversine distance between two points (km/miles).
Address discovery
/addresses/{nearby,street,stats,random} — find addresses near a point, list addresses on a street + postcode, get coverage stats per country, sample random addresses for testing.
All 17 Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /v1/validate | Validate a single address |
| POST | /v1/validate | Batch validate addresses |
| GET | /v1/parse | Parse a free-form address |
| POST | /v1/parse | Batch parse addresses |
| GET | /v1/normalize | Normalize an address to USPS Pub 28 parts (parse-only) |
| POST | /v1/normalize | Batch normalize up to 1,000 addresses |
| GET | /v1/standardize | Normalize an address to canonical form |
| POST | /v1/addresses/compare | Compare two addresses for similarity |
| GET | /v1/addresses/nearby | Find addresses within radius of a coordinate |
| GET | /v1/addresses/street | List addresses on a given street + postcode |
| GET | /v1/addresses/random | Random sample of addresses (testing) |
| GET | /v1/addresses/stats | Address-database statistics |
| GET | /v1/addresses/interpolate | Interpolate a coordinate from address-range data |
| GET | /v1/addresses/crossstreet | Find the cross-street nearest to a coordinate |
| GET | /v1/timezone | IANA timezone for a coordinate |
| GET | /v1/distance | Haversine distance between two coordinates |
| GET | /v1/postcode | Postcode-only address lookup |
Examples
Parse a free-form address
GET /v1/parse?q=1600+Pennsylvania+Ave+NW+Washington+DC&api_key={key}
Response:
{
"components": {
"house_number": "1600",
"road": "pennsylvania ave nw",
"city": "washington",
"state": "dc"
}
}
Find the cross-street nearest to a coordinate
GET /v1/addresses/crossstreet?lat=40.7580&lng=-73.9855&radius=300&api_key={key}
Response:
{
"intersections": [
{ "street_a": "W 47th St", "street_b": "7th Ave", "lat": 40.758, "lng": -73.985 }
]
}