SchoolDigger Python SDK
Official Python client for the SchoolDigger API — K-12 school data for 120,000+ U.S. schools.
Installation
pip install schooldigger
Quick Start
import schooldigger
config = schooldigger.Configuration()
config.api_key["appID"] = "YOUR_APP_ID"
config.api_key["appKey"] = "YOUR_APP_KEY"
client = schooldigger.ApiClient(config)
# Search schools
api = schooldigger.SchoolsApi(client)
result = api.search_schools(st="WA", q="Lincoln")
for school in result.school_list:
print(f"{school.school_name} — {school.address.city}, {school.address.state}")
# Get a specific school by SchoolDigger ID
school = api.get_school("530966001632")
print(f"Enrollment: {school.school_yearly_details[0].number_of_students}")
API Classes
| Class | Methods |
|---|---|
SchoolsApi |
search_schools(), get_school() |
DistrictsApi |
search_districts(), get_district() |
RankingsApi |
get_school_rankings(), get_district_rankings() |
AutocompleteApi |
autocomplete_schools(), autocomplete_districts() |
Test scores in API 3.0
This version of the SDK targets API 3.0. Pass include_ranges=True to get_school / get_district
(without it the record is identical to API 2.4). Each test-score percent
(percent_met_standard, percent_tier1 ... percent_tier5) is either a number or an
APIReportedPercent object (status of range, suppressed, legacyImputed or derived,
with optional value, low, high), and is None when the state reported nothing. The SDK
exposes the union through .actual_instance:
school = api.get_school("330004800609", include_ranges=True)
for ts in school.test_scores or []:
v = ts.school_test_score.percent_met_standard if ts.school_test_score else None
v = v.actual_instance if v is not None else None
if v is None:
text = "not reported"
elif isinstance(v, (int, float)):
text = f"{v}%"
elif v.status == "suppressed":
text = "suppressed by the state"
elif v.low is not None and v.low <= 0:
text = f"< {v.high}%"
elif v.high is not None and v.high >= 100:
text = f">= {v.low}%"
elif v.low is not None:
text = f"{v.low}-{v.high}%"
else:
text = f"{v.value}%"
print(ts.year, ts.grade, ts.subject, text)
See Data Quality and Suppression for the full vocabulary and rendering rule. API 2.4 and below (SDK 1.x) return only exact values.
Authentication
All API calls require an appID and appKey. Get your free API key at developer.schooldigger.com.
Documentation
Plans
| Plan | Price | Highlights |
|---|---|---|
| DEV/TEST | Free | Enterprise-level access, 20 calls/day |
| Basic | $19.90/mo | 1 year of data |
| Pro | $89/mo | Boundaries, geo search, finance |
| Enterprise | $189/mo | Full depth, boundary containment |
License
MIT
Metadata
Release files for schooldigger 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| schooldigger-2.0.0.tar.gz | 65.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| schooldigger-2.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 176.0 kB
Release files / schooldigger-2.0.0.tar.gz
| Download URL | schooldigger-2.0.0.tar.gz |
|---|---|
| Size | 65.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
40f94ea32defd26054a51236231f77044ca9e0f59e873fe0d93c12df4bf361f4
|
|
BLAKE2b-256 checksum How to use checksums |
5bcef06fc8bbbd58c55fd2a042e8931cf6134d32b52ba63db09bee9f7e659ce7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / schooldigger-2.0.0-py3-none-any.whl
| Download URL | schooldigger-2.0.0-py3-none-any.whl |
|---|---|
| Size | 110.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e58e18c0374971d9912a8598794e68d958471d016cb392083a608bb8d9ceebc4
|
|
BLAKE2b-256 checksum How to use checksums |
5fb3a49680e6fc164ef818a8d28630f431f514a336cb01f4fa9c5511988b20b0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|