# US University & College Finance and Enrollment Intelligence (`afkdigital/newapi39-us-higher-ed-finance-enrollment-intelligence`) Actor

Official IPEDS institution, enrollment and finance data joined by UNITID/year. Filter by US state, sector, students and revenue. Nominal USD finance with reporting-form context. JSON/CSV for Clay and n8n.

- **URL**: https://apify.com/afkdigital/newapi39-us-higher-ed-finance-enrollment-intelligence.md
- **Developed by:** [AFK Digital](https://apify.com/afkdigital) (community)
- **Categories:** Lead generation, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 successful unique institution-year records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## US University & College Finance and Enrollment Intelligence

Find and segment US higher-education institutions using official IPEDS data via the Urban Institute Education Data Portal. Join institution details, 12-month enrollment, and institutional finance on **UNITID + Portal data year**. Export flat JSON or CSV to Clay, n8n, spreadsheets, or a CRM.

This Actor reports historical institutional finances. Institutional support is general administrative spending. It is **not a verified IT budget, procurement budget, purchase intention, or available vendor budget**.

### Quick start

```json
{"years":[2023],"states":["MA"],"maxResults":10}
```

An empty input returns up to ten institutions nationwide for Portal year 2023. Empty state/sector/UNITID arrays mean unrestricted. A small default run is designed to finish in less than five minutes. Results follow source directory order; they are not ranked by revenue. No API key or proxy is required for the source.

For known institutions across several sectors:

```json
{"years":[2023],"unitids":[166027,110635,104090,109208],"maxResults":10}
```

### Filters and limits

| Input | Meaning |
| --- | --- |
| `years` | Array of verified Portal academic-year start indices, 2018–2023; default `[2023]` |
| `states` | Uppercase USPS states/territories, e.g. `["CA","MA"]` |
| `sectors` | Array of IPEDS sector codes, listed below |
| `unitids` | Optional array of six-digit institution identifiers; repeats are removed |
| `minEnrollment`, `maxEnrollment` | Inclusive bounds on 12-month headcount |
| `minRevenueUsd`, `maxRevenueUsd` | Inclusive bounds on nominal USD total revenue |
| `maxResults` | Total unique institution-year limit across all selected years; default 10, maximum 10,000 |
| `maxCandidates` | Directory candidate scan cap; default 2,000, maximum 20,000; must be at least maxResults |
| `requestTimeoutSecs` | Per-request timeout; default 25 seconds, range 2–60 |
| `maxRetries` | Retries after the initial request; default 3, range 0–5 |
| `maxRuntimeSecs` | Source retrieval time budget; default 240 seconds, maximum 3,600 |

Sector codes: 1 public four-year or above; 2 private nonprofit four-year or above; 3 private for-profit four-year or above; 4 public two-year; 5 private nonprofit two-year; 6 private for-profit two-year; 7 public less-than-two-year; 8 private nonprofit less-than-two-year; 9 private for-profit less-than-two-year. These are IPEDS classifications for the requested directory year, not guesses from institution names. Community colleges offering bachelor's degrees may be in sector 1.

Enrollment/revenue filters are applied after joining. Restrictive filters can yield fewer results than requested. Increase maxCandidates to examine more institutions, and raise the Apify run timeout if raising maxRuntimeSecs. RUN-SUMMARY identifies scan/result limits and skipped incomplete records. A source retrieval deadline or persistent source failure fails the run rather than claiming complete coverage. Output is collected before writing, so a retrieval failure produces no newly billed results.

### Output definitions and years

| Field | Source and definition | Unit / period |
| --- | --- | --- |
| `unitid` | IPEDS institutional identifier, exact join key | Integer |
| `inst_name` | Directory `inst_name` | Name in directory data year |
| `state_abbr` | Directory USPS state/territory abbreviation | String |
| `general_url` | Directory `url_school`; HTTPS prefix supplied when absent | Source-listed URL; availability is not checked |
| `total_enrollment` | Headcount `headcount`; level_of_study, race, sex, ftpt, class_level and degree_seeking all 99 (total) | Students, unduplicated within institution over July 1–June 30; not fall enrollment or FTE |
| `total_revenues_usd` | Finance `rev_total_current`; total revenue including investment return and other additions | Nominal USD, source fiscal period |
| `instruction_expenditures_usd` | Finance `exp_instruc_total`; total instruction functional expenditures | Nominal USD, same fiscal period |
| `institutional_support_spend` | Finance `exp_inst_supp_total`; day-to-day institutional administrative support, including executive, legal, fiscal and other general operations | Nominal USD, same fiscal period; not an IT/procurement budget |
| `sector_type`, `sector` | Directory `sector`, readable label and original numeric code | Directory data year |

Each row additionally includes `data_year`, `directory_data_year`, `enrollment_data_year`, `finance_data_year`, `academic_year`, `finance_fiscal_year`, `enrollment_period`, `currency`, `monetary_unit`, `reporting_form`, `form_type`, parent-reporting identifiers, and individual source URLs.

**Year alignment matters.** The Portal codebook defines year as the academic-year start index. For this verified 2018–2023 release, finance's fiscal year is **Portal index + 1**. Thus Portal year 2023 joins directory fall 2023, headcount July 2023–June 2024, and finance FY2024; it does not mean three identical calendar-year observation windows. Portal 2022 finance was independently matched to the NCES `F2223` FY2023 files for public, nonprofit and for-profit institutions. The source does not supply institution-specific fiscal start/end dates here; no common fiscal calendar is invented. Future unverified years are rejected; no latest-year substitution occurs.

Current source catalogs list directory through 2025, headcount through 2024, and finance through 2023. This release deliberately supports the verified common modern range **2018–2023** (finance FY2019–FY2024). Fiscal reporting and academic enrollment periods are related but should not be treated as identical cohorts.

Numbers are passed through from the Portal without inflation adjustment or multiplying/dividing by 1,000. The Portal's stored large totals can show floating-point rounding relative to original NCES integer-dollar records. For example, a published NCES total may differ by a few dollars or a few hundred dollars at billion-dollar scale. Decimal-looking results do not imply audited cent precision. The Actor preserves that source precision.

Missing/not-reported (-1), not-applicable (-2), and suppressed (-3) monetary/headcount codes are never treated as dollars, students or zero. A chargeable record requires matching directory, all-student enrollment, and finance rows with all four numeric metrics present. Incomplete institutions are skipped. Valid zero values and legitimate negative revenue values are preserved. Revenue minimum filters are nonnegative; omit them to include a legitimate negative revenue record.

### Comparison limits

IPEDS harmonization does not make every institution directly comparable. Most public institutions report under GASB, nonprofits under FASB, and for-profits under modified FASB. `reporting_form` carries the reported standard (2 GASB 34/35; 3 aligned GASB; 4 FASB; 5 aligned FASB; 6 modified FASB). `form_type` is a separate source-file identifier: 1 common form, 2 Form 1, 3 Form 1A, 4 Form 2, 5 Form 3. It is not an ownership code.

Revenue may include nonoperating investment returns, capital or other additions, and hospitals or affiliated operations; it is not operating revenue or discretionary purchasing power. Functional expenditure allocation, depreciation, pensions, scholarship allowances, and organizational scope differ across reporting forms and years. Do not interpret a cross-sector revenue/support ranking as an equivalent budget comparison. Use the same fiscal years, inspect reporting_form, and review institution scope first.

Parent/child and system reporting can consolidate, allocate or otherwise affect financial boundaries. Different UNITIDs are not a guarantee that their finances can be summed without double-counting. The Actor deduplicates institution-year keys, not entire financial systems. Enrollment is unduplicated within an institution, not across institutions or across years. It must not be summed with demographic subtotals or substituted for FTE in per-student cost measures.

### JSON/CSV for Clay and n8n

The default Apify Dataset contains only institution records. In the run's Dataset tab choose JSON or CSV export. OUTPUT exposes both export URLs; the Output tab links to JSON, CSV and RUN-SUMMARY. For API integrations:

```
GET https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&clean=true
GET https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&clean=true
```

Use your Apify authorization header for private data. In n8n, run the Actor and pass its defaultDatasetId to an HTTP Request node. In Clay, import the CSV or connect the JSON response through its supported HTTP workflow. Apify exports support offset/limit pagination; retain `unitid` and `data_year` as a composite CRM key.

### Reliability and billing

Source requests use official APIs, batched UNITID filters, bounded pagination, per-request timeouts, and exponential backoff with Retry-After handling for 429 and transient errors. Foreign/redirected pagination URLs, repeated pages, malformed payloads and inconsistent source keys fail closed. No website scraping or proxy is involved.

The sole price event is **`apify-default-dataset-item`: USD 0.005 for each successfully written unique institution-year record (USD 5 per 1,000)**. There is no Actor-start event, separate custom result event, or additional platform-usage pass-through for standard runs. No fee is charged for skipped/missing records, filter exclusions or duplicates. Apify may separately charge subsequent storage/export operations under its platform rules.

Uniqueness is per run, including resumed/resurrected attempts using that run's Dataset. Existing Dataset keys are read before output so a resumed run does not write or bill them again. A separate new run creates a new paid delivery. SDK 4.1.0 handles synthetic Dataset-item budget limits; set your maximum total charge in Apify Console. After the limit is reached, output stops. Apify's commission and platform costs are deducted from the publisher's proceeds.

### Sources, attribution and license

IPEDS directory, enrollment-headcount and finance data, via the **Urban Institute Education Data Portal**, accessed October 28, 2026, made available under the **Open Data Commons Attribution License (ODC-By) v1.0**. Original federal source: US Department of Education, National Center for Education Statistics, Integrated Postsecondary Education Data System. Preserve this attribution when redistributing records. This paid product provides retrieval, joins, validation and delivery of openly licensed source data. It is independently developed; no endorsement is implied.

- [Portal documentation, definitions and source licensing](https://educationdata.urban.org/documentation/)
- [College endpoint catalog](https://educationdata.urban.org/documentation/colleges.html)
- [IPEDS Finance User Guide](https://www.urban.org/research/publication/ipeds-finance-user-guide)
- [Finance codebook](https://educationdata.urban.org/csv/ipeds/codebook_colleges_ipeds_finance.xls)
- [IPEDS Data Center](https://nces.ed.gov/ipeds/datacenter/DataFiles.aspx)
- [ODC-By v1.0](https://opendatacommons.org/licenses/by/1-0/)
- [Apify Pay-per-event documentation](https://docs.apify.com/actors/monetize/pay-per-event)

Official endpoints used:

```
https://educationdata.urban.org/api/v1/college-university/ipeds/directory/{year}/
https://educationdata.urban.org/api/v1/college-university/ipeds/enrollment-headcount/{year}/99/?race=99&sex=99&ftpt=99&class_level=99&degree_seeking=99
https://educationdata.urban.org/api/v1/college-university/ipeds/finance/{year}/
```

### Development and validation

Version 1.0.0. Python 3.13, Apify SDK 4.1.0, requests 2.32.5. Tests and source evidence are kept in the project on the build server; Docker and uploaded Actor sources exclude credentials, environments and test artifacts. Run `python -m pytest -q` with pytest installed to verify exact joins, totals, filters, source errors, deduplication and budget behavior. Real-data evidence covers Harvard, UC Berkeley, Brookline College-Phoenix and American River College.

Source data are historical, may be revised, and have coverage/reporting limitations. They are not current financial statements or purchasing commitments.

# Actor input Schema

## `years` (type: `array`):

Verified academic-year start indices 2018-2023. Finance fiscal year is this index + 1. No silent year fallback.

## `states` (type: `array`):

Uppercase USPS codes, e.g. MA, CA, NY. Empty means all available.

## `sectors` (type: `array`):

1=Public, 4-year or above; 2=Private nonprofit, 4-year or above; 3=Private for-profit, 4-year or above; 4=Public, 2-year; 5=Private nonprofit, 2-year; 6=Private for-profit, 2-year; 7=Public, less-than-2-year; 8=Private nonprofit, less-than-2-year; 9=Private for-profit, less-than-2-year. Empty means all.

## `unitids` (type: `array`):

Restrict to six-digit IPEDS institution IDs. Repeated IDs are deduplicated. Empty means all.

## `maxResults` (type: `integer`):

Total unique institution-year records per run across all years.

## `maxCandidates` (type: `integer`):

Safety cap on directory candidates examined; increase for restrictive filters. RUN-SUMMARY reports if reached.

## `requestTimeoutSecs` (type: `integer`):

Timeout per source request.

## `maxRetries` (type: `integer`):

Retries for network timeouts, HTTP 408, 429 and transient 5xx errors with exponential backoff.

## `maxRuntimeSecs` (type: `integer`):

Overall source retrieval time budget. Apify run timeout must allow for this plus writing output.

## `minEnrollment` (type: `integer`):

Inclusive bound; omit for no bound. Applied after the exact institution-year join.

## `maxEnrollment` (type: `integer`):

Inclusive bound; omit for no bound. Applied after the exact institution-year join.

## `minRevenueUsd` (type: `number`):

Inclusive bound; omit for no bound. Applied after the exact institution-year join.

## `maxRevenueUsd` (type: `number`):

Inclusive bound; omit for no bound. Applied after the exact institution-year join.

## Actor input object example

```json
{
  "years": [
    2023
  ],
  "states": [],
  "sectors": [],
  "unitids": [],
  "maxResults": 10,
  "maxCandidates": 2000,
  "requestTimeoutSecs": 25,
  "maxRetries": 3,
  "maxRuntimeSecs": 240
}
```

# Actor output Schema

## `json` (type: `string`):

No description

## `csv` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("afkdigital/newapi39-us-higher-ed-finance-enrollment-intelligence").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("afkdigital/newapi39-us-higher-ed-finance-enrollment-intelligence").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 '{}' |
apify call afkdigital/newapi39-us-higher-ed-finance-enrollment-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,afkdigital/newapi39-us-higher-ed-finance-enrollment-intelligence"
        }
    }
}
```

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/oRfuYhcRLL3agFOC7/builds/pfl3HcWUMk7Ii9OBr/openapi.json
