Schools Data API · Canada-wide

Every K–12 school, board, and catchment — queryable by coordinate.

Resolve any Canadian address to its elementary and secondary school catchment areas, retrieve school profiles with grades, type, language of instruction, and board affiliation — all from a single REST endpoint.

Canada-wide coverage Catchment boundaries Public & Catholic French-language schools Board hierarchy GeoJSON polygons
CATCHMENT BOUNDARY SECONDARY Rosedale P.S. Public · Gr. JK–8 Jarvis C.I. Public · Gr. 9–12 Your address
Rosedale Junior Public School
Toronto District School Board · Toronto, ON · JK–8
Type
Public
Grades
JK – 8
Language
English
Catchment polygon Board hierarchy Feeder schools Bilingual
Every province & territory Public, Catholic & independent schools French-language instruction Catchment boundaries (GeoJSON) School board hierarchy Elementary & secondary
What the API delivers

School data that belongs on every listing page.

Schools are one of the top three factors in Canadian homebuying decisions — but the data has always been locked in provincial ministry websites with inconsistent schemas. Neighbourly normalizes every K–12 school in Canada into a single coordinate-queryable API with catchment polygons, board hierarchy, and feeder school links.

📍

Catchment boundaries for every school

Every school in the dataset ships with its attendance area as a GeoJSON polygon — so you can resolve any property address to its assigned elementary and secondary schools without any runtime spatial join on your side. Query by coordinate; receive the matching catchment and school profile in one response.

🏫

Full board hierarchy, pre-joined

Each school carries its school_board_id, board_name, and board_type — so you can display "Toronto District School Board · Public" without a second lookup. Feeder school arrays link elementary schools to their destination secondary school in the same board system.

🌐

Bilingual — English & French instruction

French-language schools and dual-track schools are first-class records in the dataset — not a post-filter. Every school includes a language_of_instruction field (en, fr, en_fr) so French-immersion and Francophone school catchments are fully resolved for any Canadian address.

Data models

Four models. One coordinate query.

A catchment lookup response returns the school profile, its board affiliation, the catchment polygon, and feeder school links — everything needed to populate a "Schools nearby" section on a listing page from a single API call.

Model Geometry type Notable fields & notes
School Point name, school_type (public, catholic, independent, francophone), grade_range (e.g. JK–8), language_of_instruction, school_board_id FK, phone, address_id FK
SchoolCatchment Polygon GeoJSON polygon for the attendance area; school_id FK, level (elementary / secondary), province, effective_year; feeder secondary_school_id for elementary catchments
SchoolBoard name, board_type (public, catholic, francophone, independent), province, website_url, school_count; stable board ID used as FK across all school records
SchoolFeederLink Maps elementary source_school_id to secondary destination_school_id within the same board; includes board_id, is_primary_feeder boolean
Endpoints

Resolve a coordinate. Get the school context.

Every school model is queryable by its stable ID, by a lat/lng coordinate (catchment polygon containment), or by bounding box — so you can resolve the school context of any listing or build a map layer showing catchment boundaries for any Canadian city.

GET
/v1/schools/catchment?lat={lat}&lng={lng}
Resolve a coordinate to its elementary and secondary school catchments. Returns school profiles, board affiliation, catchment polygon, and feeder links — the primary endpoint for listing-page school lookups.
GET
/v1/schools/{id}
Full school profile by stable ID. Returns all school fields, the SchoolBoard record, the catchment GeoJSON, and an array of feeder school links.
GET
/v1/schools/nearby?lat={lat}&lng={lng}&radius_km={r}
Return all schools within a given radius of a coordinate, ordered by distance ascending. Useful for "schools nearby" listing sections where catchment assignment is less important than proximity.
GET
/v1/schools?bbox={bbox}&type={type}
Return all schools intersecting a bounding box, optionally filtered by school_type (public, catholic, francophone, independent). Useful for building map layers by city viewport.
GET
/v1/schools/boards/{id}
School board profile by stable ID. Includes all schools in the board as a linked array with minimal fields — useful for board-level directory pages or franchise territory research.
GET
/v1/schools/{id}/catchment/geojson
Returns only the GeoJSON polygon for a school's catchment area — no school metadata. Efficient for map layers that only need the boundary geometries without the full school profile payload.
Response schema

School context in one round-trip.

A catchment lookup returns both the elementary and secondary school assignments for a coordinate — with profiles, board names, and GeoJSON polygons — so a listing page can display full school context from a single call.

  • elementarySchool profile for assigned elementary school
  • secondarySchool profile for assigned secondary school
  • school.idStable school ID
  • school.nameOfficial school name
  • school.school_typepublic · catholic · francophone · independent
  • school.grade_rangee.g. "JK–8" or "9–12"
  • school.language_of_instructionen · fr · en_fr
  • school.boardEmbedded SchoolBoard record (name, type, province)
  • school.locationGeoJSON Point (school building)
  • catchment.boundaryGeoJSON Polygon (attendance area)
  • feeder_secondary_idSecondary school this catchment feeds into
  • distance_mDistance from query coordinate to school (metres)
GET /v1/schools/catchment?lat=43.6744&lng=-79.3892 200 OK
{
  "elementary": {
    "id":         "school_rosedale_ps_on",
    "name":       "Rosedale Junior Public School",
    "school_type": "public",
    "grade_range": "JK-8",
    "language_of_instruction": "en",
    "distance_m": 340,
    "board": {
      "id":         "board_tdsb",
      "name":       "Toronto District School Board",
      "board_type": "public",
      "province":   "ON"
    },
    "location": {
      "type": "Point",
      "coordinates": [-79.3841, 43.6791]
    },
    "catchment": {
      "boundary": { "type": "Polygon", ... },
      "feeder_secondary_id": "school_jarvis_ci_on"
    }
  },
  "secondary": {
    "id":         "school_jarvis_ci_on",
    "name":       "Jarvis Collegiate Institute",
    "school_type": "public",
    "grade_range": "9-12",
    "distance_m": 1240,
    ...
  }
}
Who uses it

Schools data that makes real estate products decisively better.

School proximity and catchment assignment are among the most-searched filters on Canadian real estate platforms. Neighbourly's school data API puts accurate, boundary-based school context directly on your listing pages — without requiring buyers to leave your site.

Real Estate Platforms

Assigned schools on every listing

Resolve any listing coordinate to its exact elementary and secondary school catchment areas. Display school name, type (public/Catholic/French), grade range, and board name directly on the listing page. Stop losing buyers to other sites that show this information.

Livability Score

Schools as a scored neighbourhood dimension

School proximity, catchment assignment, and school type are key inputs to Neighbourly's Livability Score — the personalised neighbourhood match product. Families can weight schools heavily; young professionals can weight them lightly. The API powers the underlying data layer.

Relocation & HR Tools

School options for relocating families

When employees are relocating to a new city, school district and language of instruction are often deciding factors in neighbourhood choice. Surface assigned schools — including French-immersion and Catholic options — for any address a relocating family is considering.

Franchise & Retail Site Selection

School density for trade area analysis

School count and type within a trade area is a meaningful signal for child-related service businesses — tutoring centres, childcare, sporting goods, and food service. Query schools by bounding box to enrich any site-selection model with educational density signals.

Put school context on every listing, today.

Talk to us about API access, coverage depth, or how schools data layers into your existing Neighbourly integration.

Frequently asked questions

Common questions about this data and how to use it.

What does the Schools Data API cover?

Every K–12 school, school board, and catchment boundary across Canada.

How can I query schools?

By coordinate, by ID, or by bounding box — for example, to find all schools near an address.

Are catchment boundaries included?

Yes. School catchment boundaries are provided as GeoJSON where available.

What is the data used for?

Enriching property listings, neighbourhood reports, and relocation tools with the school information families care about.

How current is the data?

School and board data is maintained against official sources, and each record carries a refresh timestamp.