Illinois Report Card APIillinoisreportcard.com ↗
Access Illinois public school and district data: demographics, ELA/math/science achievement, teacher stats, finances, accountability, and environment via 17 endpoints.
What is the Illinois Report Card API?
The Illinois Report Card API exposes 17 endpoints covering Illinois public school and district data, from statewide snapshots to per-school achievement, demographics, and finances. Start with search_schools to find schools or districts by name and retrieve their IDs, then call endpoints like get_school_profile, get_ela_achievement_profiles, or get_teachers to pull year-by-year data including enrollment figures, ESSA designations, average teacher salaries, and per-pupil expenditure.
curl -X GET 'https://api.parse.bot/scraper/add32287-babf-477c-8a70-63e1327b7264/search_schools?query=Springfield' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace illinoisreportcard-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
Illinois Report Card API - Usage Example
Get your API key from: https://parse.bot/settings
"""
from parse_apis.illinois_report_card_api import IllinoisReportCard, SchoolData, EntityYear
client = IllinoisReportCard(api_key="YOUR_API_KEY")
# Search for schools
for result in client.searchresults.search(query="Springfield"):
print(result.name, result.type, result.id)
# Get a school's profile data by constructing from a known ID
school = client.school(id="510841860250002")
profile = school.profile()
print(profile.current_year, profile.response_code)
for year_data in profile.entitylist:
print(year_data.year, year_data.name, year_data.enrollment, year_data.attendancerate)
# Get teacher data for the same school
teacher_data = school.teachers()
for year_data in teacher_data.entitylist:
print(year_data.year, year_data.averageteachersalary, year_data.instructionalexpperpupil)
# Get district profile
district = client.district(id="51084186025")
district_profile = district.profile()
print(district_profile.current_year, district_profile.response_code)
# Get statewide snapshot
state = client.statedatas.snapshot()
for year_data in state.entitylist:
print(year_data.year, year_data.enrollment, year_data.hsgraduationrate)
Search for schools, districts, or cities by name. Returns matching results with IDs that can be used with other endpoints. Searches across school, district, and city types simultaneously.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search term (school, district, city, or county name) |
{
"type": "object",
"fields": {
"results": "array of search result objects each with type, id, and name"
},
"sample": {
"data": {
"results": [
{
"id": "510841860250002",
"name": "SPRINGFIELD HIGH SCHOOL",
"type": "School"
},
{
"id": "51084186025",
"name": "SPRINGFIELD SD 186",
"type": "District"
}
]
},
"status": "success"
}
}About the Illinois Report Card API
Search and Identification
All school-specific endpoints require an alphanumeric school_id or district_id. Use search_schools with a query string to find matching schools, districts, or cities simultaneously. Each result includes a type field (School, District, or City) and an id you pass to downstream endpoints. District IDs (e.g. 51084186025) are shorter than school IDs (e.g. 510841860250002); make sure you use the right one for get_district_profile versus school-level endpoints.
Achievement and Growth Data
Academic performance is split across several endpoints. get_ela_achievement_profiles and get_math_achievement_profiles return fields like satelaaveragescore, satmathaveragescore, iarsgpela, and iarsgpmath. get_science_achievement_profiles includes averagescorescience. Growth endpoints get_ela_growth and get_math_growth return student growth percentile fields (iarsgpela, hssgpela, iarsgpmath, hssgpmath); these return -999 when data is unavailable for a school. get_eighth_grade_algebra similarly returns the eighthgradealgebra field as -999 for schools that don't serve 8th grade.
School Environment, Staff, and Finances
get_school_environment surfaces attendance-related metrics including attendancerate, chronicabsenteeism, and averageclasssize. get_teachers returns noteachers, averageteachersalary, percentteacherswmasters, and noviceteacherspct; get_administrators returns noadmins, averageadminsalary, pupiladminratio, and noviceadmin. Both staff endpoints return -999 for fields unavailable at the school level. get_school_finances includes instructionalexpperpupil, operationalexpperpupil, and prioryeartotalrevenue.
Accountability and Demographics
get_accountability returns essadesignation, essadesignationreasoncode, title1status, and school improvement status year by year. get_students_demographics returns a demographic array with race/ethnicity codes, enrollment percentages, and assessment breakdowns per group. All entity-level endpoints return data in an entitylist array indexed by year, alongside a currentYear string and a responseCode field. get_state_snapshot requires no inputs and returns statewide aggregates including graduation rates, teacher statistics, and financial figures.
The Illinois Report Card API is a managed, monitored endpoint for illinoisreportcard.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when illinoisreportcard.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official illinoisreportcard.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track year-over-year ELA and math proficiency trends for a specific Illinois school using
get_ela_achievement_profilesandget_math_achievement_profiles. - Compare chronic absenteeism and average class size across schools in a district using
get_school_environment. - Build a school finder app that resolves school names to IDs via
search_schoolsand displays ESSA designation status fromget_accountability. - Analyze teacher salary and retention data by district using
get_teachersfields likeaverageteachersalaryandnoviceteacherspct. - Aggregate per-pupil expenditure data from
get_school_financesto study funding equity across Illinois districts. - Monitor statewide graduation rates and enrollment trends using
get_state_snapshotwithout any school-specific inputs. - Generate demographic breakdowns by race/ethnicity and correlate with achievement scores using
get_students_demographicsandget_ela_achievement_profiles.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does illinoisreportcard.com have an official developer API?+
What does `get_school_profile` return versus the subject-specific achievement endpoints?+
get_school_profile returns a broad entitylist covering enrollment, grades served, demographics, contact info, attendance, and financial data in a single call. The subject-specific endpoints (get_ela_achievement_profiles, get_math_achievement_profiles, get_science_achievement_profiles) focus on score fields like satelaaveragescore and averagescorescience. If you only need achievement data, the subject endpoints are more targeted; for a full school snapshot, get_school_profile is the starting point.What does a `-999` value in a response field mean?+
-999 value indicates the data point is unavailable for that school or year. This is common in get_teachers and get_administrators for small schools, in get_eighth_grade_algebra for schools that don't serve 8th grade, and in growth fields like iarsgpela or hssgpmath when sample sizes are too small to report.Does the API cover private schools or schools outside Illinois?+
Can I retrieve data filtered by grade level, subject group, or subpopulation within a demographic?+
get_students_demographics returns a demographic array with multiple race/ethnicity breakdowns per year, but filtering must be done client-side after retrieving the full dataset. You can fork the API on Parse and revise it to add input-level filtering logic.