ERATE Workbench is a proof-of-concept analytics platform for exploring USAC E-Rate open data. It ingests publicly available datasets, normalizes them into a local SQLite database, and provides search, analytics, risk insights, and reference content through an ASP.NET Core Razor Pages UI and REST API.
Important
This repository is a proof of concept and is not an official USAC or FCC product. It is intended for exploration, prototyping, and engineering discussion. Current State: Project is paused while working on Home MCP platform/control plane project.
- .NET 8 SDK
- WSL2 (Ubuntu) recommended on Windows
lsofandcurl(used by dev scripts)
./scripts/dev-run.shThen open:
http://localhost:5000
- The database is created automatically on first run via EF Core migrations
- A fresh local database starts empty
- Use the import endpoints in Swagger UI at
/swaggerto load data
-
Search across 250k+ schools, libraries, and districts (USAC entity directory)
-
Explore funding commitments and disbursement-related analytics by year
-
Review applicant-level advisory risk indicators
-
Browse reference content:
- Program Workflow
- Ecosystem Map
- E-Rate Historical Timeline
-
Test all API endpoints via Swagger UI (
/swagger)
-
Imports four USAC-backed datasets:
- Entity Directory (EPC)
- Funding Commitments
- Service Providers (SPIN)
- Form 471 Applications
-
Idempotent ETL — safe to re-run without duplicating data
-
Data normalized into a local SQLite database
-
EF Core migrations automatically provision schema
A new local database starts empty. Use Swagger UI (/swagger) to trigger imports:
| Dataset | Endpoint |
|---|---|
| USAC Entity Directory (EPC) | POST /import/usac |
| Funding Commitments | POST /import/funding-commitments |
| Service Providers (SPIN) | POST /import/service-providers |
| Form 471 Applications | POST /import/form471 |
- Imports page through full datasets and may take several minutes
- All imports are idempotent and safe to re-run
./scripts/dev-run.sh --validate./scripts/ui-test.shIf the app is already running:
./scripts/ui-test.sh --app-runningsudo apt-get install -y libnss3 libnspr4 libasound2t64
~/.dotnet/tools/playwright install chromium(Handled automatically in GitHub Actions CI)
See docs/devops/local-workflow.md for details.
Runs on every push and pull request:
- Build
- Test
- UI smoke tests (Playwright, headless Chromium)
- Security scan (NuGet vulnerabilities)
- Secrets scan (gitleaks)
- Publish (self-contained linux-x64 artifact)
Releases are created manually via:
GitHub → Actions → Release → Run workflow
- Builds and packages the app
- Publishes a GitHub Release
- Attaches a self-contained
linux-x64binary
| Control | Tool | Behavior |
|---|---|---|
| Dependency vulnerability scan | dotnet list package --vulnerable |
Fails on vulnerable direct packages |
| Secrets scanning | gitleaks | Fails on detected secrets in git history |
| Dependency updates | Dependabot | Weekly PRs |
Dependabot strategy:
- Patch/minor → merge after CI passes
- Test/tooling → review CI output, merge if green
- Major upgrades → deliberate testing required
- Keep PR queue small
src/ErateWorkbench.Api— ASP.NET Core app, Razor Pages UI, API endpointssrc/ErateWorkbench.Domain— domain logic and shared rulestests/ErateWorkbench.Tests— unit and integration-style testsdocs/— architecture, DevOps, and reference documentationscripts/— local development and automation scripts
- Data freshness depends on manual imports
- Risk indicators are heuristic and advisory only
- SQLite is used for portability, not high-concurrency workloads
- Playwright UI tests require system dependencies (WSL/Linux)
A few views from the current ERATE Workbench UI:
Explore funding commitments over time, compare entities, and analyze program-wide trends.Review applicant-level advisory signals designed to highlight potential execution risks, including safeguards for partial-year data interpretation.
Translate risk signals into actionable guidance using structured advisory context.
Understand the end-to-end E-Rate process from application through funding and disbursement.
Visual overview of the stakeholders, systems, and relationships that make up the E-Rate program.
Browse the evolution of the E-Rate program through key milestones and policy changes.
This project uses publicly available datasets published by the Universal Service Administrative Company (USAC) as part of the FCC E-Rate program.
Primary datasets include:
-
Form 471 Applications (Basic Information)
https://datahub.usac.org/E-rate/E-rate-Form-471-Application-Data/9s6i-myen -
Funding Commitments
https://datahub.usac.org/E-rate/E-rate-Funding-Commitments -
Entity Directory (EPC)
https://datahub.usac.org/E-rate/E-rate-Entity-Directory -
Service Providers (SPIN)
https://datahub.usac.org/E-rate/E-rate-Service-Providers
These datasets are accessed via the Socrata Open Data API and ingested into a local SQLite database for analysis.
USAC datasets are publicly available and provided for transparency and analysis of the E-Rate program.
This project:
- Uses USAC data in accordance with its public/open data availability
- Does not modify source records beyond normalization for analytics
- Is intended for analytical and advisory exploration purposes only
This repository is not affiliated with or endorsed by USAC or the FCC.
Users should refer to USAC for official program data and guidance: https://www.usac.org/
Contributions are welcome. For larger changes, open an issue first to discuss scope and approach.





