Canadian Address API

Validate, autocomplete, and standardize every Canadian address.

One REST endpoint. Any messy input in — clean, normalized, hierarchy-enriched address out. Built for MLS platforms, proptech products, and brokerage CRMs that need reliable Canadian address data at scale.

REST · JSON Canadian hosting ~100ms p95 RESO-aligned OAuth 2.0
address validation · live response
# Validate & standardize a messy input
GET /v1/address?q="147 lakeshore rd e, miss on"

→ 200 OK
{
  "full_addr": "147 Lakeshore Road East,
               Mississauga, ON",
  "number":    147,
  "street":    "Lakeshore",
  "suffix":    "Road",
  "direction": "East",
  "fsa":       "L5G",
  "ldu":       "L5G 1E1",
  "city":      "Mississauga",
  "province":  "Ontario",
  "neighbourhood": "Port Credit",
  "lat": 43.5513, "lng": -79.5817
}
All Canadian provinces & territories Postal code FSA + LDU resolution ~100 street-type synonyms Meilisearch typeahead endpoint PostGIS-backed
What it does

Not just validation — full address intelligence.

The Neighbourly address layer does three things other address APIs don't: it normalizes street components into indexed lookup tables, resolves the full 6-level geographic hierarchy, and links every address to permits, demographics, and energy data.

Validation & normalization

Submit any input — abbreviated, misspelled, or casually typed. The API returns the canonical full address with number, street name, suffix, direction, city, province, and postal code, each as a discrete field.

🔍

Typeahead autocomplete

The /location_typeahead endpoint serves sub-100ms suggestions from Meilisearch with ~100 street-type synonym mappings — "rd", "road", "Rd." all resolve correctly.

🗺

Geographic hierarchy

Every address response includes its full 6-level hierarchy — Country → Province → County → Upper-Tier Municipality → Lower-Tier Municipality → Neighbourhood — with geometry, centroid, and bounding box.

How it works

Three calls. Full address context.

Authenticate once. Query the address endpoint with any input. Follow the links to every data layer attached to that location.

STEP 01 · AUTHENTICATE

Bearer token, one line

Generate a scoped API key from your dashboard. Pass it as a Bearer token. Environment-scoped dev/prod keys, revocable at any time.

Authorization: Bearer nbk_prod_...
STEP 02 · VALIDATE

Submit any address string

No pre-processing required. Send the raw input — the API normalizes abbreviations, resolves postal codes, and returns structured fields with coordinates.

GET /v1/address?q="147 maple cr toronto"
STEP 03 · ENRICH

Pull any attached data layer

Every response includes _links to permits, demographics, environmental data, and energy. Follow what you need.

GET /v1/permits?address_id=8421 GET /v1/energy?address_id=8421
Response schema

Every field, clean and typed.

Address responses are fully structured — no packed strings, no parsing required. Every component is a discrete field, each lookup normalized to a reference table.

  • full_addrCanonical full address string — normalized casing, expanded abbreviations
  • numberStreet number as integer
  • streetStreet name, resolved to lookup table
  • suffixRoad, Street, Avenue, Crescent, etc.
  • directionEast, West, North, South
  • fsa / lduForward Sortation Area and Local Delivery Unit
  • neighbourhoodCurated neighbourhood name with description
  • city / provinceLower-tier municipality and province
  • lat / lngGeocoded coordinates (SRID 4326)
  • _linksHATEOAS links to permits, energy, demographics
GET /v1/address · RESPONSE 200 OK
{
  "full_addr": "147 Maple Crescent,
              Toronto, ON",
  "number":    147,
  "street":    "Maple",
  "suffix":    "Crescent",
  "fsa":       "M4K",
  "ldu":       "M4K 1A1",
  "neighbourhood": "Riverdale",
  "city":      "Toronto",
  "province":  "Ontario",
  "lat": 43.6712, "lng": -79.3501,
  "_links": {
    "permits":     "/v1/permits?address_id=8421",
    "energy":      "/v1/energy?address_id=8421",
    "demographics":"/v1/demographics/find?fsa=M4K"
  }
}
Who uses it

Built for any product that touches a Canadian address.

MLS Platforms

Clean listing addresses at ingestion

Normalize agent-entered addresses before they hit your database. No more duplicate streets, inconsistent abbreviations, or broken geo-queries — every listing resolves to the same canonical address record.

Brokerage CRMs

Autocomplete that understands Canada

Drop the typeahead endpoint into any address input field. It handles French street names, directional suffixes, Quebec municipalities, and postal code lookups — out of the box.

Proptech Products

One address, seven data layers

Once an address is validated, every Neighbourly data layer — permits, demographics, environment, energy — is one follow-up call away. Build richer property pages without building a data pipeline.

Data Teams

Bulk normalization & deduplication

Running address data through the API standardizes it to a canonical record ID, making deduplication trivial. Merge your CRM contacts, lead lists, or property databases with reliable join keys.

Common questions

Frequently asked about the Canadian Address API.

What input formats does the address API accept?
Any free-text Canadian address string. The API handles abbreviated street types ("rd", "ave", "blvd"), directional abbreviations, informal city names, and mixed-case input. The normalization layer resolves ~100 common street-type variants.
Does the API cover all Canadian provinces and territories?
Yes. All 10 provinces and 3 territories are covered, including Quebec French street names and Northern Canada addressing conventions. Coverage density is higher in major metro areas. See the coverage page for a full breakdown.
How does the typeahead endpoint work?
The /location_typeahead endpoint is backed by Meilisearch and is optimized for sub-100ms suggestion latency. It searches across addresses, neighbourhoods, and city names simultaneously, making it suitable for a single unified search input.
Can I validate addresses in bulk?
Yes. The API supports batch address requests and can be used for one-time normalization runs on existing datasets. Contact us for volume pricing if you need to process a large initial dataset.
Is this an address standardization service or just an API?
Both. The developer API lets you query directly. Neighbourly also offers a managed address standardization service for teams that want ongoing normalization of listing feeds without writing integration code.
What is the difference between FSA and LDU?
An FSA (Forward Sortation Area) is the first three characters of a Canadian postal code — e.g. "M4K" — and represents a geographic delivery area. An LDU (Local Delivery Unit) is the full six-character postal code and identifies a specific city block or building.

Start validating Canadian addresses today.

Talk to us about API access, volume pricing, or the managed standardization service. Most teams are up and running within a day.