# US Public Schools Directory Scraper — NCES CCD School Data (`compute-edge/us-schools-directory-scraper`) Actor

Extract the official NCES Common Core of Data directory of 100K+ US public schools. Filter by state, year, charter, and magnet status. Returns names, addresses, phones, GPS coordinates, enrollment, grade levels, and district info.

- **URL**: https://apify.com/compute-edge/us-schools-directory-scraper.md
- **Developed by:** [Compute Edge](https://apify.com/compute-edge) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## US Public Schools Directory Scraper — NCES CCD School Data

Extract the **official directory of every US public school** from the National Center for Education Statistics (NCES) **Common Core of Data (CCD)**, served through the Urban Institute Education Data API. Over **100,000 public schools** across all 50 states, DC, and Puerto Rico — with verified addresses, phone numbers, GPS coordinates, enrollment counts, and district affiliations.

This is the same federally mandated dataset that every US public school district must report to annually, so the data is authoritative and refreshed every school year.

### Features

- **Filter by state** — two-letter state code (CA, NY, TX, ...)
- **Filter by school year** — historical coverage back to 2000
- **Charter-only / magnet-only toggles** for specialized lead lists
- **Clean, flat JSON output** ready for CRMs, spreadsheets, or RAG pipelines

### Output fields

| Field | Description |
|-------|-------------|
| `schoolName` | Official school name |
| `districtName` / `districtId` | Local education agency (district) name and NCES LEA ID |
| `streetAddress`, `city`, `state`, `zip` | Physical location |
| `phone` | School phone number |
| `latitude`, `longitude` | GPS coordinates |
| `enrollment` | Total student enrollment |
| `teachersFte` | Full-time-equivalent teachers |
| `charter`, `magnet` | School type flags |
| `schoolLevel`, `schoolType`, `schoolStatus` | NCES classification codes |
| `lowestGradeOffered`, `highestGradeOffered` | Grade span |
| `title1Eligible`, `freeOrReducedPriceLunch` | Demographic/funding indicators |

### How to scrape US school data

1. Set **State Filter** (e.g. `CA`) or leave blank for all states
2. Pick the **School Year** (default 2022, the latest complete CCD release)
3. Optionally enable **Charter Schools Only** or **Magnet Schools Only**
4. Set **Max Results** and click **Start**

### Input example

```json
{
    "year": 2022,
    "state": "TX",
    "charterOnly": true,
    "maxResults": 5000
}
````

### Output example

```json
{
    "schoolName": "Patricia A. Hannaford Career Center",
    "districtName": "Patricia Hannaford Career Center",
    "streetAddress": "51 Charles Avenue",
    "city": "Middlebury",
    "state": "VT",
    "zip": "05753",
    "phone": "(802)382-1012",
    "latitude": 44.00555,
    "longitude": -73.162392,
    "charter": false,
    "enrollment": 248
}
```

### Who uses this data?

- **EdTech sales teams** building district and school outreach lists
- **Curriculum and supply vendors** segmenting by grade span and enrollment size
- **Researchers and journalists** analyzing school distribution and demographics
- **Real estate platforms** enriching listings with nearby school data

### Pricing

Pay-per-result. A typical statewide pull (2,000–10,000 schools) costs a few cents plus minimal Apify compute (single-threaded API requests, no browser).

### FAQ

**How fresh is the data?** The CCD directory is published annually by NCES; this Actor reads the latest release available via the Urban Institute Education Data API.

**Are private schools included?** No — CCD covers public schools only (including charters).

### Legal disclaimer

This Actor extracts publicly available government data published by NCES/Urban Institute. School directory information is public record. You are responsible for ensuring your use of the data complies with applicable laws.

# Actor input Schema

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

Academic year (2022, 2021, 2020, etc.). The API includes data for multiple years.

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

Two-letter US state code (e.g., 'CA', 'NY', 'CO'). Leave blank for all states.

## `charterOnly` (type: `boolean`):

If enabled, return only charter schools (charter = 1).

## `magnetOnly` (type: `boolean`):

If enabled, return only magnet schools (magnet = 1).

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

Maximum number of school records to return. Set to 0 for unlimited.

## Actor input object example

```json
{
  "year": 2022,
  "state": "",
  "charterOnly": false,
  "magnetOnly": false,
  "maxResults": 1000
}
```

# Actor output Schema

## `dataset` (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("compute-edge/us-schools-directory-scraper").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("compute-edge/us-schools-directory-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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 compute-edge/us-schools-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=compute-edge/us-schools-directory-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "US Public Schools Directory Scraper — NCES CCD School Data",
        "description": "Extract the official NCES Common Core of Data directory of 100K+ US public schools. Filter by state, year, charter, and magnet status. Returns names, addresses, phones, GPS coordinates, enrollment, grade levels, and district info.",
        "version": "0.1",
        "x-build-id": "5vgQFhOXd11m7tf3d"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/compute-edge~us-schools-directory-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-compute-edge-us-schools-directory-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/compute-edge~us-schools-directory-scraper/runs": {
            "post": {
                "operationId": "runs-sync-compute-edge-us-schools-directory-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/compute-edge~us-schools-directory-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-compute-edge-us-schools-directory-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "year": {
                        "title": "School Year",
                        "minimum": 2000,
                        "maximum": 2025,
                        "type": "integer",
                        "description": "Academic year (2022, 2021, 2020, etc.). The API includes data for multiple years.",
                        "default": 2022
                    },
                    "state": {
                        "title": "State Filter",
                        "type": "string",
                        "description": "Two-letter US state code (e.g., 'CA', 'NY', 'CO'). Leave blank for all states.",
                        "default": ""
                    },
                    "charterOnly": {
                        "title": "Charter Schools Only",
                        "type": "boolean",
                        "description": "If enabled, return only charter schools (charter = 1).",
                        "default": false
                    },
                    "magnetOnly": {
                        "title": "Magnet Schools Only",
                        "type": "boolean",
                        "description": "If enabled, return only magnet schools (magnet = 1).",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 0,
                        "maximum": 200000,
                        "type": "integer",
                        "description": "Maximum number of school records to return. Set to 0 for unlimited.",
                        "default": 1000
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
