BYTETOOLS

College Scorecard API

US Department of Education College Scorecard API: 6,200+ institutions with costs, graduation rates, earnings after study and admissions data. Free key. Tested example.

API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the College Scorecard API?

The College Scorecard API, published by the US Department of Education, covers more than 6,200 higher education institutions with tuition costs, admission rates, completion rates, student debt and post-graduation earnings. It uses a free api.data.gov key, with DEMO_KEY working for evaluation.

College Scorecard exists because the Department of Education linked institutional records to federal tax and student aid data, which is why it can publish something almost no other education dataset has: what graduates of a specific institution and programme actually earn years later. That single fact makes it the reference source for American higher education value comparisons, and it is why the field list runs to thousands of columns rather than dozens.

The response shape is the thing to plan for. Fields are deeply nested under year keys — `latest.school.name`, `latest.cost.tuition.in_state`, `latest.earnings.10_yrs_after_entry.median` — and historic years appear as their own top-level keys alongside `latest`. Requesting everything returns an enormous document per institution, so use the `fields` parameter to name exactly the columns you want; it flattens the response to just those keys and is the difference between a usable API and a slow one. Register your own free key rather than relying on the shared DEMO_KEY, which caps at roughly 30 requests per hour per IP.

Quick facts

Base URL
https://api.data.gov/ed/collegescorecard/v1
Authentication
A free api.data.gov key is required. DEMO_KEY works for a small number of evaluation calls but is shared globally and throttled to roughly 30 requests per hour per IP.
Rate limit
1,000 requests per hour with a registered key. DEMO_KEY is much lower and shared with every anonymous caller on your IP.
Pricing
Free. US government works are in the public domain.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the College Scorecard API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Fetch a US institution from College Scorecard

GET https://api.data.gov/ed/collegescorecard/v1/schools?api_key=DEMO_KEY&per_page=1

curl
curl 'https://api.data.gov/ed/collegescorecard/v1/schools?api_key=DEMO_KEY&per_page=1'
JavaScript (fetch)
const res = await fetch("https://api.data.gov/ed/collegescorecard/v1/schools?api_key=DEMO_KEY&per_page=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://api.data.gov/ed/collegescorecard/v1/schools?api_key=DEMO_KEY&per_page=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "metadata": {
    "page": 0,
    "total": 6273,
    "per_page": 1
  },
  "results": [
    {
      "latest": {
        "school": {
          "zip": "35762",
          "city": "Normal",
          "name": "Alabama A & M University",
          "alias": "AAMU",
          "state": "AL",
          "locale": 12,
          "address": "4900 Meridian Street",
          "dolflag": 0,
          "branches": 1,
          "men_only": 0,
          "operating": 1,
          "ownership": 1,
          "region_id": 5,
          "accreditor": "Southern Association of Colleges and Schools Commission on Colleges",
          "school_url": "www.aamu.edu/",
          "state_fips": 1,
          "women_only": 0,
          "main_campus": 1,
          "online_only": 0,
          "endowment": {
            "end": null,
            "begin": null
          },
          "carnegie_basic": 18,
          "faculty_salary": 8699,
          "ownership_peps": 1,
          "peps_ownership": "Public",
          "accreditor_code": "SACSCC",
          "ft_faculty_rate": 0.6439,
          "sector": {
            "scorecard": 4
          },
          "carnegie_undergrad": 10,
          "degree_urbanization": null,
          "under_investigation": 0,
          "price_calculator_url": "www.aamu.edu/admissions-aid/tuition-fees/net-price-calculator.html",
          "carnegie_size_setting": 14,
          "minority_serving": {
            "annh": 0,
            "nant": 0,
            "aanipi": 0,
            "tribal": 0,
            "hispanic": 0,
            "historically_black": 1,
            "predominantly_black": 0

Parameters

ParameterTypeRequiredDescription
api_keyqueryRequiredYour api.data.gov key. `DEMO_KEY` for evaluation only. DEMO_KEY
per_pagequeryOptionalResults per page, up to 100. 1
pagequeryOptionalZero-based page number. 0
fieldsqueryOptionalComma-separated dotted field paths. The single most important parameter — it flattens and shrinks the response. id,school.name,latest.cost.tuition.in_state
school.statequeryOptionalFilter by two-letter state code. CA
latest.student.size__rangequeryOptionalRange filter using the `__range` suffix. 5000..20000
sortqueryOptionalSort by a field path, with `:desc` for descending. latest.student.size:desc

Response fields

metadataobject
`page`, `total` and `per_page`. Total was 6,273 institutions at the time of testing.
resultsarray
The institutions.
results[].latestobject
Most recent data year. Historic years appear as sibling keys named by year.
latest.school.name / alias / city / state / zipstring
Institution identity and location.
latest.school.ownershipinteger
1 public, 2 private non-profit, 3 private for-profit — the single most important segmentation field.
latest.school.accreditorstring
Accrediting body, for example a regional Commission on Colleges.
latest.school.localeinteger
Urbanisation code from city through to rural.
latest.school.main_campus / branchesinteger
Whether this is the main campus and how many branches exist. Prevents double counting.
latest.school.operatinginteger
Whether the institution is still operating. Closed institutions remain in the dataset.
latest.cost / latest.earnings / latest.completionobject
Tuition, post-study earnings and completion rate blocks, each nested several levels deep.

What you can build with the College Scorecard API

  • Compare tuition costs across US institutions
  • Show median earnings by institution and field of study
  • Build a college search and comparison tool
  • Analyse student debt against post-graduation income
  • Filter institutions by size, control or geography

Common errors and how to fix them

429 or OVER_RATE_LIMIT

DEMO_KEY's shared quota is exhausted.

Fix: Register a free api.data.gov key. DEMO_KEY is capped at roughly 30 requests per hour per IP and shared with everyone on your network.

Enormous, slow responses

Every field is returned by default.

Fix: Always pass `fields` with the dotted paths you need; it both shrinks and flattens the response.

Null values on real institutions

Figures are suppressed where cohorts are too small to publish safely.

Fix: Treat null as suppressed rather than zero, and say so in your interface.

Closed institutions in results

The dataset retains them.

Fix: Filter on `latest.school.operating` when you only want institutions still enrolling students.

College Scorecard API — frequently asked questions

Do I need an API key for College Scorecard?

Yes, a free one from api.data.gov. DEMO_KEY works for a handful of evaluation calls but is shared globally and throttles at around 30 requests per hour per IP.

Does it really include graduate earnings?

Yes. The Department of Education linked institutional records to federal tax data, so median earnings at intervals after entry are published per institution and, for many, per field of study. Very few education datasets anywhere can offer that.

Why are so many values null?

Because figures are suppressed when the underlying cohort is too small to publish without risking individual identification. Null means suppressed, not zero, and presenting it as zero would badly misrepresent small institutions.

How do I stop the responses being so large?

Use the `fields` parameter with the dotted paths you actually need, such as `school.name,latest.cost.tuition.in_state`. It flattens the nested structure to those keys and cuts response size dramatically.

Tools that pair with this API

College Scorecard is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.