# SchoolDigger API V2.0 API

> SchoolDigger API V2.0 API on Apizie: 7 endpoints (Returns a simple and quick list of schools for use in a client-typed autocomplete, Returns a list of districts, Returns a detailed record for one district, Returns a SchoolDigger district ranking list, …) returned as clean JSON through one API key. 7 endpoints are live now. Call it over REST at https://apizie.tech/v1/open-data:schooldigger/{endpoint} or from Claude, ChatGPT and Cursor through the Apizie MCP server. Free plan: 1,000 requests a month.

- Project key: `open-data:schooldigger`
- Category: Open Data
- Status: live
- Source: https://schooldigger.com
- Page: https://apizie.tech/api/open-data/schooldigger
- OpenAPI: https://apizie.tech/api/open-data/schooldigger/openapi.json

Get detailed data on over 120,000 schools and 18,500 districts in the U.S. Version 2.0 incorporates the ATTOM School Boundary Level add-on and spending per pupil metrics

## Endpoints

### Returns a simple and quick list of schools for use in a client-typed autocomplete
`GET https://apizie.tech/v1/open-data:schooldigger/autocomplete-get-schools`

| Parameter | Type | Required | Description |
|---|---|---|---|
| q | string | no | Search term for autocomplete (e.g. 'Lincol') (required) |
| qSearchCityStateName | boolean | no | Extend the search term to include city and state (e.g. 'Lincoln el paso' matches Lincoln Middle School in El Paso) (optional) |
| st | string | no | Two character state (e.g. 'CA') (optional -- leave blank to search entire U.S.) |
| level | string | no | Search for schools at this level only. Valid values: 'Elementary', 'Middle', 'High', 'Alt', 'Private' (optional - leave blank to search… |
| boxLatitudeNW | number | no | Search within a 'box' defined by (BoxLatitudeNW/BoxLongitudeNW) to (BoxLongitudeSE/BoxLatitudeSE) (optional. Pro, Enterprise API levels… |
| boxLongitudeNW | number | no | Search within a 'box' defined by (BoxLatitudeNW/BoxLongitudeNW) to (BoxLongitudeSE/BoxLatitudeSE) (optional. Pro, Enterprise API levels… |
| boxLatitudeSE | number | no | Search within a 'box' defined by (BoxLatitudeNW/BoxLongitudeNW) to (BoxLongitudeSE/BoxLatitudeSE) (optional. Pro, Enterprise API levels… |
| boxLongitudeSE | number | no | Search within a 'box' defined by (BoxLatitudeNW/BoxLongitudeNW) to (BoxLongitudeSE/BoxLatitudeSE) (optional. Pro, Enterprise API levels… |
| returnCount | integer | no | Number of schools to return. Valid values: 1-20. (default: 10) |
| appID | string | yes | Your API app id |
| appKey | string | yes | Your API app key |

### Returns a list of districts
`GET https://apizie.tech/v1/open-data:schooldigger/districts-get-all-districts2`

| Parameter | Type | Required | Description |
|---|---|---|---|
| st | string | yes | Two character state (e.g. 'CA') - required |
| q | string | no | Search term - note: will match district name or city (optional) |
| city | string | no | Search for districts in this city (optional) |
| zip | string | no | Search for districts in this 5-digit zip code (optional) |
| nearLatitude | number | no | Search for districts within (distanceMiles) of (nearLatitude)/(nearLongitude) (e.g. 44.982560) (optional) (Pro, Enterprise API levels… |
| nearLongitude | number | no | Search for districts within (distanceMiles) of (nearLatitude)/(nearLongitude) (e.g. -124.289185) (optional) (Pro, Enterprise API levels… |
| boundaryAddress | string | no | Full U.S. address: flag returned districts that include this address in its attendance boundary. Example: '123 Main St. AnyTown CA 90001'… |
| distanceMiles | integer | no | Search for districts within (distanceMiles) of (nearLatitude)/(nearLongitude) (Default 50 miles) (optional) (Pro, Enterprise API levels… |
| isInBoundaryOnly | boolean | no | Return only the districts that include given location (nearLatitude/nearLongitude) or (boundaryAddress) in its attendance boundary… |
| boxLatitudeNW | number | no | Search for districts within a 'box' defined by (BoxLatitudeNW/BoxLongitudeNW) to (BoxLongitudeSE/BoxLatitudeSE) (optional) |
| boxLongitudeNW | number | no | Search for districts within a 'box' defined by (BoxLatitudeNW/BoxLongitudeNW) to (BoxLongitudeSE/BoxLatitudeSE) (optional) |
| boxLatitudeSE | number | no | Search for districts within a 'box' defined by (BoxLatitudeNW/BoxLongitudeNW) to (BoxLongitudeSE/BoxLatitudeSE) (optional) |
| boxLongitudeSE | number | no | Search for districts within a 'box' defined by (BoxLatitudeNW/BoxLongitudeNW) to (BoxLongitudeSE/BoxLatitudeSE) (optional) |
| page | integer | no | Page number to retrieve (optional, default: 1) |
| perPage | integer | no | Number of districts to retrieve on a page (50 max) (optional, default: 10) |
| sortBy | string | no | Sort list. Values are: districtname, distance, rank. For descending order, precede with '-' i.e. -districtname (optional, default:… |
| includeUnrankedDistrictsInRankSort | boolean | no | If sortBy is 'rank', this boolean determines if districts with no rank are included in the result (optional, default: false) |
| appID | string | yes | Your API app id |
| appKey | string | yes | Your API app key |

### Returns a detailed record for one district
`GET https://apizie.tech/v1/open-data:schooldigger/districts-get-district2`

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | yes | The 7 digit District ID (e.g. 0642150) |
| appID | string | yes | Your API app id |
| appKey | string | yes | Your API app key |

### Returns a SchoolDigger district ranking list
`GET https://apizie.tech/v1/open-data:schooldigger/rankings-get-rank-district`

| Parameter | Type | Required | Description |
|---|---|---|---|
| st | string | yes | Two character state (e.g. 'CA') |
| year | integer | no | The ranking year (leave blank for most recent year) |
| page | integer | no | Page number to retrieve (optional, default: 1) |
| perPage | integer | no | Number of districts to retrieve on a page (50 max) (optional, default: 10) |
| appID | string | yes | Your API app id |
| appKey | string | yes | Your API app key |

### Returns a SchoolDigger school ranking list
`GET https://apizie.tech/v1/open-data:schooldigger/rankings-get-school-rank2`

| Parameter | Type | Required | Description |
|---|---|---|---|
| st | string | yes | Two character state (e.g. 'CA') |
| year | integer | no | The ranking year (leave blank for most recent year) |
| level | string | no | Level of ranking: 'Elementary', 'Middle', or 'High' |
| page | integer | no | Page number to retrieve (optional, default: 1) |
| perPage | integer | no | Number of schools to retrieve on a page (50 max) (optional, default: 10) |
| appID | string | yes | Your API app id |
| appKey | string | yes | Your API app key |

### Returns a list of schools
`GET https://apizie.tech/v1/open-data:schooldigger/schools-get-all-schools20`

| Parameter | Type | Required | Description |
|---|---|---|---|
| st | string | yes | Two character state (e.g. 'CA') - required |
| q | string | no | Search term - note: will match school name or city (optional) |
| qSearchSchoolNameOnly | boolean | no | For parameter 'q', only search school names instead of school and city (optional) |
| districtID | string | no | Search for schools within this district (7 digit district id) (optional) |
| level | string | no | Search for schools at this level. Valid values: 'Elementary', 'Middle', 'High', 'Alt', 'Public', 'Private' (optional). 'Public' returns… |
| city | string | no | Search for schools in this city (optional) |
| zip | string | no | Search for schools in this 5-digit zip code (optional) |
| isMagnet | boolean | no | True = return only magnet schools, False = return only non-magnet schools (optional) (Pro, Enterprise API levels only) |
| isCharter | boolean | no | True = return only charter schools, False = return only non-charter schools (optional) (Pro, Enterprise API levels only) |
| isVirtual | boolean | no | True = return only virtual schools, False = return only non-virtual schools (optional) (Pro, Enterprise API levels only) |
| isTitleI | boolean | no | True = return only Title I schools, False = return only non-Title I schools (optional) (Pro, Enterprise API levels only) |
| isTitleISchoolwide | boolean | no | True = return only Title I school-wide schools, False = return only non-Title I school-wide schools (optional) (Pro, Enterprise API levels… |
| nearLatitude | number | no | Search for schools within (distanceMiles) of (nearLatitude)/(nearLongitude) (e.g. 44.982560) (optional) (Pro, Enterprise API levels only.) |
| nearLongitude | number | no | Search for schools within (distanceMiles) of (nearLatitude)/(nearLongitude) (e.g. -124.289185) (optional) (Pro, Enterprise API levels only.) |
| nearAddress | string | no | Search for schools within (distanceMiles) of this address. Example: '123 Main St. AnyTown CA 90001' (optional) (Pro, Enterprise API level… |
| distanceMiles | integer | no | Search for schools within (distanceMiles) of (nearLatitude)/(nearLongitude) (Default 5 miles) (optional) (Pro, Enterprise API levels only) |
| boundaryLatitude | number | no | Search for schools that include this (boundaryLatitude)/(boundaryLongitude) in its attendance boundary (e.g. 44.982560) (optional)… |
| boundaryLongitude | number | no | Search for schools that include this (boundaryLatitude)/(boundaryLongitude) in its attendance boundary (e.g. -124.289185) (optional)… |
| boundaryAddress | string | no | Full U.S. address: flag returned schools that include this address in its attendance boundary. Example: '123 Main St. AnyTown CA 90001'… |
| isInBoundaryOnly | boolean | no | Return only the schools that include given location (boundaryLatitude/boundaryLongitude) or (boundaryAddress) in its attendance boundary… |
| boxLatitudeNW | number | no | Search for schools within a 'box' defined by (boxLatitudeNW/boxLongitudeNW) to (boxLongitudeSE/boxLatitudeSE) (optional) |
| boxLongitudeNW | number | no | Search for schools within a 'box' defined by (boxLatitudeNW/boxLongitudeNW) to (boxLongitudeSE/boxLatitudeSE) (optional) |
| boxLatitudeSE | number | no | Search for schools within a 'box' defined by (boxLatitudeNW/boxLongitudeNW) to (boxLongitudeSE/boxLatitudeSE) (optional) |
| boxLongitudeSE | number | no | Search for schools within a 'box' defined by (boxLatitudeNW/boxLongitudeNW) to (boxLongitudeSE/boxLatitudeSE) (optional) |
| page | integer | no | Page number to retrieve (optional, default: 1) |
| perPage | integer | no | Number of schools to retrieve on a page (50 max) (optional, default: 10) |
| sortBy | string | no | Sort list. Values are: schoolname, distance, rank. For descending order, precede with '-' i.e. -schoolname (optional, default: schoolname) |
| includeUnrankedSchoolsInRankSort | boolean | no | If sortBy is 'rank', this boolean determines if schools with no rank are included in the result (optional, default: false) |
| appID | string | yes | Your API app id |
| appKey | string | yes | Your API app key |

### Returns a detailed record for one school
`GET https://apizie.tech/v1/open-data:schooldigger/schools-get-school20`

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | yes | The 12 digit School ID (e.g. 064215006903) |
| appID | string | yes | Your API app id |
| appKey | string | yes | Your API app key |

## Example
```
curl "https://apizie.tech/v1/open-data:schooldigger/autocomplete-get-schools" \
  -H "x-api-key: $APIZIE_KEY"
```

## FAQ

### How do I call the SchoolDigger API V2.0 API?
Create a free Apizie key, then send GET https://apizie.tech/v1/open-data:schooldigger/autocomplete-get-schools with the header x-api-key. Every endpoint returns { project, data, timestamp }.

### Is the SchoolDigger API V2.0 API free on Apizie?
Yes. The Free plan includes 1,000 requests a month at 100 requests a minute, no credit card.

### Can AI agents use the SchoolDigger API V2.0 API?
Yes. Add the Apizie MCP server (https://apizie.tech/mcp) to Claude, ChatGPT, Cursor or VS Code, then ask in plain language. The agent calls run_scraper with project key open-data:schooldigger.

### What is the status of the SchoolDigger API V2.0 API?
Live: works with just an Apizie key
