# Higher-Ed Institution Records — US IPEDS (`nexgensignal/higher-education-institution-records`) Actor

Keyless, pay-per-record NCES IPEDS register — one row per US college/university with control, level, and admissions decisions (applicants, admits, admit/yield rates, SAT/ACT). Public-domain; no person data.

- **URL**: https://apify.com/nexgensignal/higher-education-institution-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** Business, News, Other
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 institution records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Higher-Ed Institution Records — US IPEDS

**Keyless. Pay per record. Every US postsecondary institution — with admissions decisions.**

This actor turns the **US Department of Education's IPEDS** (Integrated Postsecondary Education Data System) into clean, per-institution records — the official register of every college, university, and postsecondary school in the United States, joined to its admissions decisions. Each run reads IPEDS's keyless bulk data files for the year you choose and delivers one row per institution: its identity and characteristics, its control and level, and — for institutions that report admissions — its applicants, admits, enrollees, admit and yield rates, SAT/ACT score ranges, and the factors it weighs in admission. Institution grain, structured for engineering use, in the public domain, with **no chief-administrator names, titles, or phone numbers ever emitted.**

### What this is, in one paragraph

IPEDS is the authoritative federal data system on US postsecondary education: reporting is mandatory for every institution that participates in Title IV federal student aid. This actor reads the IPEDS Directory (institutional characteristics) and Admissions files for a collection year, joins them by unit id, and flattens each institution into a single analysis-ready record: who they are and where, whether they are public or private, two-year or four-year, degree-granting, HBCU or tribal — and, where reported, the shape of their admissions funnel and the test-score profile of their class. Values are exactly as reported to and published by NCES. You are billed only for records actually delivered.

### Who buys this and for what job

- **EdTech, admissions, and enrollment-marketing products** building an institution reference table keyed by unit id, enriched with selectivity and test-score ranges.
- **Researchers and policy analysts** studying access, selectivity, control, and outcomes across the postsecondary sector and over years.
- **College-search, guidance, and financial-planning tools** surfacing admit rates, yield, and SAT/ACT ranges by institution.
- **Data engineers** who want the IPEDS Directory + Admissions join as clean rows without downloading and merging the raw survey files.

### Public-domain data — aggregate, not advice

Two honesty riders travel on every record. First, **licensing**: IPEDS is collected by NCES at the US Department of Education — a **work of the US federal government**, no copyright, **public domain** under 17 U.S.C. §105 — free to reuse with attribution to NCES/IPEDS. Second, **fitness**: these are **aggregate, institution-level figures as reported** for the year shown. Admission and enrollment counts are totals, **not** individual applicant records, and **not** admissions advice or a prediction of any applicant's outcome. IPEDS covers **postsecondary institutions only — no K-12 data.**

### Institution grain — no person data

This actor works at institution grain: one record per postsecondary institution per year. The IPEDS Directory also carries the **chief administrator's name and title and a general phone number** — this actor never reads or emits any of them. Those fields are excluded structurally (they are not in the field selection at all), a person-key guard runs on every record as a backstop, and the acceptance suite feeds a directory row carrying a planted chief-administrator name and phone and asserts none of it can ever appear in output. What you get is the institution, not the person who leads it.

### Pricing

| Event | Free plan | Bronze | Silver | Gold / Platinum / Diamond |
|-------|-----------|--------|--------|---------------------------|
| `institution_record` | $0.05 | $0.045 | $0.04 | $0.0335 |

Delivered before charged. Blocked runs and empty results cost nothing.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `year` | integer | 2023 | IPEDS data collection year (Directory + Admissions). |
| `state` | string | — | Optional. Keep only institutions in this 2-letter state code (e.g. CA, TX). |
| `control` | string | — | Optional. Public, Private nonprofit, or Private for-profit. |
| `admissionsOnly` | boolean | false | If true, deliver only institutions that report admissions decisions. |
| `maxRecords` | integer | 500 | Ceiling on records delivered and billed. |

### Output

One JSON object per institution. Real example (values as published by NCES, MIT, 2023):

```json
{
  "record_id": "166683-2023",
  "unitid": "166683",
  "year": 2023,
  "institution_name": "Massachusetts Institute of Technology",
  "city": "Cambridge",
  "state": "MA",
  "control": "Private nonprofit",
  "level": "Four or more years",
  "degree_granting": "Yes",
  "hbcu": "No",
  "reports_admissions": true,
  "applicants_total": 26904,
  "admitted_total": 1274,
  "enrolled_total": 1091,
  "admit_rate": 0.0474,
  "yield_rate": 0.8564,
  "sat_reading_25": 730,
  "sat_reading_75": 780,
  "sat_math_75": 800,
  "act_composite_25": 34,
  "act_composite_75": 36,
  "admission_considerations": {
    "hs_record": "Required",
    "recommendations": "Required",
    "admission_test_scores": "Required",
    "personal_statement": "Required"
  },
  "source": "US NCES IPEDS",
  "licence": "US NCES IPEDS ... public domain (17 U.S.C. §105) ...",
  "disclaimer": "Institution-level figures ... aggregate totals, NOT individual applicant records ...",
  "observed_at": "2026-08-21T00:00:00Z"
}
```

An unbilled `RUN_RECEIPT` records the robots check, the year and filters, institutions seen and delivered, whether charged equals delivered, and a note that chief-administrator person fields are never emitted.

### Field reference

Each record is one institution for one year. Identity: `record_id` (unit id + year), `unitid`, `institution_name`, and `alias`. Location: `city`, `state`, `zip`, and `fips_state`. Classification: `control`, `level`, `sector_code`, `degree_granting`, `highest_offering`, `undergrad_offering`, `graduate_offering`, `hbcu`, `tribal_college`, `medical_degree`, `has_hospital`, `locale_code`, and `open_to_public`. Links: `website`, `admissions_url`, and `net_price_url`. Admissions decisions (where reported): `reports_admissions`, `applicants_total`, `admitted_total`, `enrolled_total`, `admit_rate`, `yield_rate`, `sat_submit_pct`, `act_submit_pct`, the SAT `sat_reading_25/50/75` and `sat_math_25/50/75`, the `act_composite_25/50/75`, and the decoded `admission_considerations` map. Provenance and caveats: `year`, `source`, `source_url`, `licence`, `attribution`, `disclaimer`, and `observed_at`.

### How a run works

A run first re-reads the source host's robots posture from your runtime — the IPEDS datacenter path on nces.ed.gov is not disallowed — and stops at the door if that ever changes. It then downloads the Directory (HD) and Admissions (ADM) complete-data files for your chosen `year`, joins each institution to its admissions record by unit id, and flattens the pair into a single record — reading only institution and admissions fields, **never** the chief-administrator name/title or phone. Each record is delivered **before** it is charged, so a blocked or empty run costs you nothing. Your optional `state`, `control`, and `admissionsOnly` filters bound the pull, and the actor stops at your `maxRecords` ceiling and records `charge_equals_delivered` in the receipt.

### Coverage and scope

A single IPEDS year covers on the order of 6,000+ postsecondary institutions across all states and territories — public, private nonprofit, and private for-profit; four-year, two-year, and less-than-two-year. Roughly 2,000 of them report admissions decisions each year (the selective and semi-selective institutions); the rest — many open-admission and career institutions — appear with their directory characteristics and `reports_admissions: false`. Every record carries its collection `year`, so pulling two years and diffing by `unitid` gives you clean year-over-year change tracking of admit rates, yield, and score ranges. Pass a `state`, a `control`, or `admissionsOnly` to build a focused, bounded feed.

### Cost guidance

One `institution_record` per delivered institution: cost = institutions delivered × your plan's per-record price. A full year is 6,000+ institutions, so scope with `state`, `control`, or `admissionsOnly` to keep runs bounded — one state's institutions is typically a few dozen to a few hundred, and `admissionsOnly` narrows a year to ~2,000 selective institutions. 1,000 institutions is **$50** (Free) / **$33.50** (Gold).

### Honest limitations

- **Aggregate, not individual, and not advice.** Counts are institution totals as reported, not applicant-level records, and nothing here is admissions guidance or an outcome prediction.
- **Admissions where reported.** Institutions that do not report admissions (many open-admission and career schools) carry directory data with `reports_admissions: false` and null admissions fields.
- **Postsecondary only.** IPEDS covers higher education — there is no K-12 data here.
- **As published, per year.** Values are exactly as NCES distributes them for the collection year; this actor reformats and derives admit/yield rates, but does not otherwise recompute.
- **No person data** — chief-administrator names, titles, and phone numbers are structurally excluded.

### Differentiation

The NexGenData fleet ships a broad **IPEDS family** — around twenty actors covering specific surveys: the institution directory (**ipeds-institution-directory**) and offerings (**ipeds-institutional-offerings**), enrollment (**ipeds-fall-enrollment**, **ipeds-12-month-enrollment**), completions and degree mix (**ipeds-degree-completions**, **ipeds-degree-mix**), graduation and outcomes (**ipeds-graduation-cohorts**, **ipeds-extended-graduation-rates**, **ipeds-outcome-measures**, **ipeds-retention-cohort**), money (**ipeds-student-financial-aid**, **ipeds-tuition-charges**, **ipeds-institutional-finance**), staff and faculty (**ipeds-faculty-salary**, **ipeds-staff-position-status**, and more), plus libraries, student age, and migration. This actor's specific job is the one the family does **not** cover: **admissions decisions**. It joins institution identity to the admissions funnel — applicants, admits, enrollees, admit and yield rates, SAT/ACT score ranges, and the factors weighed in admission — none of which any of the IPEDS-family cells report. Where it overlaps them is the directory identity it carries so each admissions record is self-describing (that ground is also held by ipeds-institution-directory and ipeds-institutional-offerings); where it is distinct is the admissions-decision payload, which is unique to this actor. It is not a K-12 dataset, not a student-level dataset, and not a rankings product; it is the institution register with the admissions funnel attached.

### The NexGen Signal family

Part of the NexGen Signal family of pay-per-record data products:

- [Airport Facility Records — US FAA NASR](https://apify.com/nexgensignal/airport-facility-records)
- [Storm Event Records — US NOAA / NCEI](https://apify.com/nexgensignal/storm-event-records)
- [Air Quality Monitor Records — US EPA AQS](https://apify.com/nexgensignal/air-quality-monitor-records)
- [Federal Rulemaking Records — US Federal Register](https://apify.com/nexgensignal/federal-rulemaking-records)
- [Grant Opportunity Records — US Grants.gov](https://apify.com/nexgensignal/grant-opportunity-records)

*Source: US NCES Integrated Postsecondary Education Data System (IPEDS), Directory (HD) and Admissions (ADM) complete data files. IPEDS is collected by the US Department of Education, a work of the US federal government, no copyright, public domain (17 U.S.C. §105); free to reuse with attribution to NCES/IPEDS. Figures are aggregate, as-reported, postsecondary only (no K-12), and not admissions advice. Reformatted to institution records; chief-administrator name/title and phone are structurally excluded and never emitted.*

# Actor input Schema

## `year` (type: `integer`):

IPEDS data collection year (e.g. 2023). Directory + admissions files for that year.

## `state` (type: `string`):

Optional. Keep only institutions in this 2-letter state code (e.g. CA, TX, NY).

## `control` (type: `string`):

Optional. Keep only institutions of this control.

## `admissionsOnly` (type: `boolean`):

If true, deliver only institutions with an admissions (ADM) record — those with applicant/admit/enroll decisions.

## `maxRecords` (type: `integer`):

Maximum records delivered and billed. You are billed only for records delivered.

## Actor input object example

```json
{
  "year": 2023,
  "control": "",
  "admissionsOnly": false,
  "maxRecords": 500
}
```

# Actor output Schema

## `results` (type: `string`):

The delivered IPEDS institution records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "year": 2023,
    "maxRecords": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/higher-education-institution-records").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "year": 2023,
    "maxRecords": 500,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/higher-education-institution-records").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "year": 2023,
  "maxRecords": 500
}' |
apify call nexgensignal/higher-education-institution-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/higher-education-institution-records"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/tTfuANBC7p6KER1mi/builds/QprVUeY3knS7YEpEY/openapi.json
