# Schools & districts

For any point in the United States, `/v1/schools` returns the public school districts that serve it and, grade by grade, the assigned public school with its attendance zone. It covers every US public school district and public school, and you may store the results.

For IDX platforms, enterprise and wholesale buyers.

School data comes with a platform or enterprise contract, or as a data licence. It isn't part of the self-serve plans.

Start a platform pilot

or write to sales@pinsharing.com.

```bash
curl "https://api.pinsharing.com/v1/schools?lat=41.8789&lon=-87.6359&key=YOUR_KEY"
```

```
{
  "coverage": "zone",
  "districts": [{ "id": "1709930", "name": "City of Chicago School District 299", "type": "unified", "grades": "PK-12" }],
  "assigned": [
    { "grades": "KG-08",
      "school": { "id": "170993000…", "name": "…", "address": { … }, "lat": 41.87, "lon": -87.63, "distance_m": 900 },
      "zone": { "method": "district_gis", "confidence": 0.97, "school_year": "2025-2026", "source": "https://data.cityofchicago.org/d/x72b-38qv" } }
  ],
  "unassigned": [],
  "notice": "Attendance boundaries change. Verify enrolment with the school district before relying on an assignment."
}
```

## Parameters

| Parameter | Meaning |
| --- | --- |
| `lat`, `lon` | The home or listing, in decimal degrees (required). Geocode an address first if you only have the address. |
| `grade` | Only this grade: `PK`, `K` or `1` to `12`. Leave it out for every grade. |

## Reading the answer

- **`coverage`**: `zone` when every grade has an attendance zone; `partial` when some do; `district_only` when only the district is known; `none` outside any US school district.
- **`assigned`**: one entry per run of grades with the same school, with the zone's `method`, `confidence`, `school_year` and `source`.
- **`unassigned`**: grades whose zone we haven't mapped yet, with the district's nearest regular public schools for those grades. These are not assignments.

## Zones

Each zone carries its `method`, a `confidence` score, the `school_year` it applies to and a `source` you can check. Charter and fully virtual schools are never shown as assigned.

## Coverage (November 2026)

- Every US public school district (13,368) and public school (101,110), from NCES and the U.S. Census Bureau.
- Attendance zones in 12,652 districts in every state: 63,351 of 82,889 regular public schools have one, and 9,871 districts are covered for every school.
- Every zone states the school year it applies to. Older zones are replaced as districts publish current maps, and we add districts every month.
- Current boundary maps published by districts, cities and counties cover 38,152 schools in 1,090 districts, including:

| Metro | District | Zones | School year |
| --- | --- | --- | --- |
| Chicago, IL | Chicago Public Schools and 16 suburban districts | 480 | 2025-26 for Chicago; suburban maps as each district publishes them |
| New York, NY | New York City public schools (elementary and middle) | 779 | 2024-25 |

## The data file

Licensed data comes as monthly releases: the whole country, any one state or territory, or only what changed since the previous release. Every file is GeoJSON with one feature per line, gzip-compressed, in WGS84 (EPSG:4326), and loads straight into PostGIS, BigQuery, Snowflake or GDAL (`ogr2ogr`). After each download your dashboard shows the file's SHA-256 so you can check your copy.

[Download a free sample (Delaware)](https://api.pinsharing.com/v1/schools/sample) Every district, public school and attendance zone in one state, for evaluation.

| layer | Geometry | Properties |
| --- | --- | --- |
| `about` | none | The first line: licensee, licence, release, file, terms and source notices. |
| `district` | MultiPolygon | `leaid` (NCES district id), `name`, `kind` (unified, elementary or secondary), `state_fips`, `grades`, `school_year` |
| `school` | Point | `ncessch` (NCES school id), `leaid`, `name`, `street`, `city`, `state`, `zip`, `grades`, `level`, `charter`, `school_year` |
| `zone` | MultiPolygon, or none when the zone is the whole district | `zone_id` (stable from release to release, unique to your licence), `ncessch`, `leaid`, `grades`, `grade_lo` and `grade_hi` (-1 is PK, 0 is KG), `covers` (area or district), `basis`, `confidence` (0 to 1), `as_of`, `school_year` |

**Staying current:** load a full file once, then apply each month's changes file. `properties.change` is `added`, `changed` or `removed`; added and changed records are complete, and removed records carry only their id. Upsert by `leaid`, `ncessch` and `zone_id`.

## Fair housing

PinSharing returns boundaries and school facts only: no ratings, test scores or demographic data. Show the district's own sources next to an assignment and the notice that boundaries change.

## How to get it

- **API access** is included in platform and enterprise contracts.
- **Data licence:** the whole dataset in your own database (districts, schools and every published zone, released monthly with a changes file; see [the data file](https://pinsharing.com/docs/schools#data-file)), from $5,000 a year, under the [School Data Licence terms](https://pinsharing.com/terms#data-licence). Use it in your own products and keep what you downloaded after the licence ends; reselling the dataset needs a separate agreement.

Buy the data licence: $5,000 a year

Pay by invoice

Buying means you agree to the [School Data Licence terms](https://pinsharing.com/terms#data-licence). Card or US bank account through Stripe. After payment, sign in to your [dashboard](https://pinsharing.com/dashboard) with the same email to download; downloads need two-step sign-in and each link works once. For an invoice (net 30), write to sales@pinsharing.com with your company name and billing contact. API access comes with a [platform contract](https://pinsharing.com/partners/idx#pilot).

---
Source: https://pinsharing.com/docs/schools · Map data © OpenStreetMap contributors · Index: https://pinsharing.com/llms.txt
