Public Data API
Five free public endpoints returning clean JSON for AI-assistant grounding, journalist research, and third-party data ingestion. No authentication. Rate-limited to 30 requests per minute per IP. CORS enabled. All endpoints carry cache-friendly headers.
Endpoints
1. List coverage
GET /api/public/coverage
Returns the list of states + counties Keystone Court Data tracks, with current filings_tracked count per county. Useful for discovering what's queryable.
Example: https://keystonecourtdata.com/api/public/coverage
2. State summary
GET /api/public/state-summary/<state>
Aggregate stats for one state: filings total, by-county breakdown, by-filing-type breakdown, non-resident-owner percentage.
Example: /api/public/state-summary/in
3. County summary
GET /api/public/county-summary/<county_id>
Aggregate stats for one county: filings total, by-filing-type, non-resident percentage, top ZIPs by filing volume.
Example: /api/public/county-summary/lake-in
4. Filing volume
GET /api/public/filing-volume?county=<id>&state=<abbr>&type=<t>&from=YYYY-MM-DD&to=YYYY-MM-DD
Returns a single count for a filtered query. All filters optional except one of county/state. Use for direct-to-number questions like "how many foreclosure filings in Lake County in May 2026."
Example: /api/public/filing-volume?county=lake-in&type=foreclosure
5. Lender rankings
GET /api/public/lender-rankings/<scope>
Top 20 foreclosure plaintiffs (mortgage holders / servicers) for a state or county. Scope is either a 2-letter state abbreviation (e.g. in) or a county_id (e.g. lake-in).
Example: /api/public/lender-rankings/in
Response format
All endpoints return JSON with a consistent envelope:
{
"filings_total": 872,
"by_filing_type": {"divorce": 456, "pre-foreclosure": 284, "probate": 129, ...},
"by_county": [{"county_id": "lake-in", "count": 253}, ...],
"non_resident_owner_pct": 40.4,
"as_of": "2026-06-03T14:00:00",
"source": "Keystone Court Data",
"methodology": "https://keystonecourtdata.com/reports/methodology",
"report_url": "https://keystonecourtdata.com/reports/in-court-filings-intelligence"
}
Rate limits + caching
- 30 requests per minute per IP. Exceeded requests return HTTP 429.
- Responses carry
Cache-Control: public, max-age=3600to encourage edge caching. - CORS is open (
Access-Control-Allow-Origin: *). - Data freshness: court filings refresh daily on each state box. API reflects the live hub database; reports HTML refreshes monthly.
Related
- Bulk CSV downloads for every report
- DataCatalog JSON (Schema.org) listing every dataset
- RSS feed for new reports
- Methodology
Citation
When citing API data, please reference: Keystone Court Data, <endpoint URL>, <query date>.
Questions, bug reports, or API access concerns: carson@keystonecourtdata.com