Discover/CPS API
live

CPS APIcps.edu

Access Chicago Public Schools data via API: search schools by name or filters, get full listings, and retrieve GeoJSON attendance boundary polygons for mapping.

Endpoint health
verified 2d ago
search_schools
advanced_search
get_school_boundaries
get_all_schools
4/4 passing latest checkself-healing
Endpoints
4
Updated
26d ago

What is the CPS API?

The CPS.edu API exposes 4 endpoints covering Chicago Public Schools data — from autocomplete-style name search via search_schools to full GeoJSON attendance boundary polygons via get_school_boundaries. Each endpoint returns structured fields including school ID, network, governance type, grades offered, student count, rating, and community area, giving developers a direct path to CPS school data for directory, mapping, and research applications.

Try it
Search term (school name or keyword)
api.parse.bot/scraper/0e034e5c-27fe-4f1b-9b45-a02e19c019ff/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/0e034e5c-27fe-4f1b-9b45-a02e19c019ff/search_schools?term=Washington' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 cps-edu-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.

from parse_apis.chicago_public_schools_api import CPS, School, SchoolMatch, BoundaryFeature, Governance, GradeLevel

cps = CPS()

# Search for schools using autocomplete
for match in cps.schoolmatches.search(term="Washington"):
    print(match.long_name, match.neighborhood, match.grades_readable)

# Advanced search: find all charter high schools
for school in cps.schools.search(governance=Governance.CHARTER, grade_level=GradeLevel.HIGH_SCHOOL):
    print(school.title, school.student_count, school.community, school.ada_accessibility)

# List all schools in the system
for school in cps.schools.list():
    print(school.title, school.id, school.network, school.governance)

# Get school boundary features for mapping
for feature in cps.boundaryfeatures.list(year="2025"):
    print(feature.properties.school_name, feature.properties.boundary_grades, feature.geometry.type)
All endpoints · 4 totalmissing one? ·

Autocomplete-style search for schools by name or keyword. Returns basic school information including name, address, network, governance, category, grades offered, rating, and neighborhood. Fast lightweight endpoint suitable for typeahead UIs.

Input
ParamTypeDescription
termstringSearch term (school name or keyword)
Response
{
  "type": "object",
  "fields": {
    "count": "integer, number of schools returned",
    "schools": "array of school objects with school_id, short_name, long_name, address fields, network, governance, category, grades, rating, and neighborhood"
  },
  "sample": {
    "data": {
      "count": 4,
      "schools": [
        {
          "rating": "Inability to Rate",
          "network": "Charter",
          "category": "ES",
          "long_name": "CICS - Washington Park",
          "school_id": "400029",
          "governance": "Charter",
          "short_name": "CICS - WASHINGTON PARK",
          "address_zip": "60637",
          "address_city": "Chicago",
          "is_preschool": false,
          "neighborhood": "WASHINGTON PARK",
          "rating_status": "Not Applicable",
          "address_street": "110 E 61ST St",
          "grades_offered": "K,1,2,3,4,5,6,7,8",
          "is_high_school": false,
          "grades_readable": "K-8",
          "is_middle_school": true,
          "is_elementary_school": true,
          "is_gocps_participant": false
        }
      ]
    },
    "status": "success"
  }
}

About the CPS API

School Search and Discovery

The search_schools endpoint accepts a term parameter and returns matching schools with fields like school_id, short_name, long_name, address, network, governance, category, grades, rating, and neighborhood. It behaves like an autocomplete lookup — useful for building search UIs where users type a school name and see instant results. The get_all_schools endpoint requires no parameters and returns up to 100 schools with a fuller field set including phone, student_count, community, and GoCPS participation status.

Advanced Filtering with Facets

The advanced_search endpoint accepts POST requests with filter parameters including network, governance, grade_level, neighborhood, search_term, page_number, and page_size. The response includes total_results, page, page_size, and an available_filters array of facet objects — each with name, field, and options — so your UI can dynamically render filter controls from the data itself. Neighborhoods are passed as community area names such as WEST TOWN or LINCOLN PARK; governance values include District, Charter, and Contract.

GIS Boundary Data

The get_school_boundaries endpoint returns a GeoJSON FeatureCollection where each Feature contains a Polygon geometry with catchment area coordinates and a properties object holding school name, ID, boundary grades, and styling metadata. An optional year parameter (e.g., 2025) lets you request boundaries for a specific school year. This makes the endpoint directly usable with mapping libraries that consume standard GeoJSON.

Reliability & maintenanceVerified

The CPS API is a managed, monitored endpoint for cps.edu — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when cps.edu 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 cps.edu 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.

Last verified
2d ago
Latest check
4/4 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a school finder map overlaying CPS attendance boundary polygons on a city basemap
  • Power a neighborhood school directory filtered by community area using the neighborhood parameter in advanced_search
  • Display a school profile page using student_count, phone, rating, and grades_offered from get_all_schools
  • Populate a faceted search UI using the available_filters array returned by advanced_search
  • Analyze charter vs. district school distribution across Chicago networks using governance and network fields
  • Support school enrollment research by cross-referencing GeoJSON catchment boundaries with census tract data
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 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.

Frequently asked questions
Does CPS have an official developer API?+
CPS publishes some datasets through the Chicago Data Portal (data.cityofchicago.org) under the city's open data program, but there is no official CPS developer API with documented endpoints for the school search, profiles, and boundary data covered here.
What does `get_school_boundaries` return and how is the `year` parameter used?+
The endpoint returns a GeoJSON FeatureCollection. Each Feature includes a Polygon geometry with attendance catchment coordinates and a properties object containing school name, school ID, boundary grades, and styling hints. Passing a year value like 2025 scopes the boundary data to that school year; omitting it returns the default (current) boundaries.
Does `advanced_search` return individual school program details such as magnet or selective enrollment program names?+
The advanced_search response includes a programs field on school objects alongside governance, network, and grade_level filters, but individual program-level detail pages and admissions criteria are not currently exposed as dedicated endpoints. The API covers search, listing, and boundary data. You can fork it on Parse and revise it to add an endpoint targeting individual program or admissions detail pages.
Is there a way to retrieve individual school profile data beyond what `get_all_schools` returns?+
Currently there is no single-school-by-ID endpoint; the most detailed per-school fields come from get_all_schools (which returns up to 100 schools) and advanced_search. Fields like phone, student_count, rating, community, and accessibility info are available from those two endpoints. You can fork the API on Parse and revise it to add a dedicated school profile endpoint keyed by school ID.
Does `get_all_schools` return every CPS school or only a subset?+
The endpoint returns up to 100 schools per call and exposes a count field showing the total number of schools in the system. If the system count exceeds 100, use advanced_search with page_number and page_size parameters to paginate through the full set.
Page content last updated . Spec covers 4 endpoints from cps.edu.
Related APIs in EducationSee all →
illinoisreportcard.com API
Search and analyze comprehensive performance data for Illinois public schools, districts, and the state, including academic achievements in ELA, math, and science, student demographics, teacher and administrator information, school finances, and environmental conditions. Compare schools side-by-side, track growth metrics, and access accountability ratings and school highlights to make informed decisions about education quality.
niche.com API
Search and retrieve data on K-12 schools and colleges from Niche.com, including rankings, report card grades, stats, and user reviews.
kys.udiseplus.gov.in API
Search for schools across India by geographic region and management type, then access detailed information about any school including academic performance, facilities, and enrollment data. Navigate through states, districts, and blocks to find schools that match your criteria and compare their profiles.
gradschools.com API
Search graduate programs across multiple categories and discover articles about funding, financial aid, and admissions to help guide your grad school journey. Find specific program information and detailed resources all in one place to support your application and enrollment decisions.
myschool.ng API
Search for Nigerian schools by type, explore courses and admission requirements, and stay updated with the latest education news all in one place. Find detailed information about schools and their programs to make informed decisions about your education.
yz.chsi.com.cn API
Search and explore graduate and doctoral programs across Chinese institutions on yz.chsi.com.cn. Browse institutions by name, province, or major; retrieve program details and school information; and access admission brochures to compare programs and enrollment requirements in one place.
senecapolytechnic.ca API
Search and explore Seneca Polytechnic's programs and courses to find detailed information about admissions requirements, costs, credentials, and learning pathways. Discover which programs match your interests by browsing by credential type or program category, and get complete course listings for any program you're considering.
realestate.com.au API
Search and retrieve property listing data from realestate.com.au, including listings for sale and rent, detailed property information, and nearby schools for any location across Australia.