Final Proposal Data Gathering Engine
The Broadband Equity, Access, and Deployment (BEAD) Program is a $42.45 billion federal initiative administered by the National Telecommunications and Information Administration (NTIA). Its goal is to expand high-speed internet access across the United States, prioritizing unserved locations (below 25/3 Mbps) and underserved locations (below 100/20 Mbps).
Most states have now released some version of their Final Proposal, which details actual funding awards: which providers received grants, which locations they committed to serve, and at what cost. But the landscape is messy. Some states have full NTIA approval and published final data, others are still releasing revisions, a few have no public data at all, and formats vary from CSVs to PDFs to interactive portals. There is no single, normalized view of Final Proposal data across all states.
Build an agentic workflow that gathers, extracts, normalizes, and validates Final Proposal data across U.S. states.
Some sample agentic scenarios
- Your agent searches a state broadband office website, identifies the most recent Final Proposal document, downloads it, and extracts structured data from PDF tables or CSV files.
- Your agent detects that a state has published a new revision since the last run. It downloads the update, compares key metrics (location counts, funding totals) to the prior version, and flags significant changes for human review.
- Your agent encounters a state with no public Final Proposal data. It searches for press releases, NTIA filings, or legislative updates to determine the state's expected timeline.
- A user asks "Which states have increased their location counts since their initial filing?" and the agent queries the normalized dataset to answer.
What you're given
| Provided | Description |
|---|---|
| Seed State List | A list of 5 states with known Final Proposal data availability, including URLs to their broadband office pages. Use these to build and test your pipeline. |
| NTIA BEAD Portal | internetforall.gov/funding-recipients — the central hub listing all state BEAD allocations, approval statuses, and links to submitted documents. Note that this data can be outdated in comparison to states' own releases. |
| Target Schema | A reference schema defining the normalized output fields you should produce (see below). |
| Claude API Access | Anthropic API key with a budget available for testing. Use any agent framework you prefer (Claude Agent SDK, LangGraph, CrewAI, raw API calls, etc.). |
Target schema
Reference onlyYour pipeline should produce normalized records with at least these fields per state:
| Field | Description |
|---|---|
| state | State name or abbreviation |
| status | One of: approved in_revision not_released |
| version_date | Date of the most recent data release |
| source_url | URL where the data was obtained |
| source_format | csv, pdf, portal, other |
| total_funding_allocated | Total BEAD funding awarded (USD) |
| eligible_locations | Original number of eligible locations |
| locations_to_fund | Number of locations selected for funding |
| locations_excluded | Locations that cannot be funded (with reason if available) |
| provider_count | Number of providers receiving awards |
| providers | List of provider names |
| leo_location_count | Locations served by LEO satellite providers |
| non_leo_location_count | Locations served by non-LEO providers |
| has_coordinates | Whether location-level lat/lon data is available |
| download_url | URLs to download the coordinate-level data |
| notes | Any additional context or caveats |
Manual research (before writing code)
Before building anything, manually research 3 states from the seed list and answer:
- Where is their Final Proposal data published? What format is it in?
- How easy is it to extract the target schema fields from this format?
- What inconsistencies do you notice across states (naming conventions, data granularity, file structures)?
- Which fields from the target schema are commonly available, and which are rare or missing?
- What would break if you tried to apply the same extraction logic to all 3 states?
These are required. Spend your time here.
Agent-driven data pipeline
Primary deliverableDesign and build an agentic workflow that gathers, extracts, normalizes, and validates Final Proposal data.
- Architecture diagram (Mermaid or equivalent) showing agents, tools, data flow (from raw to transformed data), and where humans can intervene.
- Clear agent boundaries. Use LLMs for reasoning (e.g., classifying document structure, extracting data from unstructured PDFs) and deterministic scripts for execution (e.g., downloading files, parsing CSVs, writing to the output schema).
- Clear tool definitions. The tools and services used by each agent, with their schemas and descriptions.
- State management. How context, intermediate results, and per-state progress are tracked.
- Failure handling. What happens when a source is unavailable, a PDF is unparseable, or extracted values look anomalous.
Data validation & quality
The collected data must be automatically audited. Design validation that catches real problems:
- Cross-field consistency checks (e.g.,
locations_to_fund+locations_excluded<=eligible_locations). - Anomaly detection on funding amounts (e.g., a state reporting $0 or $999B).
- Completeness scoring per state (what percentage of target schema fields were populated?).
- Human-in-the-loop escalation for edge cases the agent can't resolve confidently.
- Completeness check to make sure your agent does not miss critical information or data.
Expanded state coverage
Extend your pipeline beyond the seed states toward full U.S. coverage. Not every state will be easy: some publish clean CSVs, others bury data in PDFs, and some have nothing public at all. What we're looking for:
- Fallback strategies for hard cases. If your primary extraction method fails for a state, what's plan B? (e.g., LLM-assisted PDF parsing, manual schema mapping, scraping state portals)
- Graceful degradation. A state with only partial data should still produce a record with what's available, not fail silently.
- Categorization of failures. For states you can't process, explain why (no data published, format too complex, behind authentication, etc.) and what would be needed to resolve it.
- Coverage report. A summary showing: states fully processed, states partially processed (with which fields missing), and states not processable (with reason).
Analysis & insights
Using the data you've collected, document your core findings:
- How many states have approved Final Proposals vs. still in revision vs. no data?
- What is the total funding allocated across collected states? Average per location?
- Which providers appear most frequently? What share of locations go to LEO vs. non-LEO?
- What patterns or surprises did you find in the data?
Optional, but they strengthen your submission
A strong core beats a rushed full submission.
Interactive dashboard & map
BonusBuild a locally-hosted dashboard (Streamlit, Plotly Dash, etc.) that includes:
- Summary charts of funding allocation and state status.
- A map showing states color-coded by status or funding level.
- Location-level map overlay for states where coordinate data is available.
- Filtering by state, provider, or status.
Scheduled refresh
BonusDesign (and optionally implement) a scheduling mechanism for weekly data refresh:
- How would you detect changes since the last run?
- How would you handle version tracking and changelog generation?
- What alerting would you set up for significant changes?
How your submission is scored
| Criteria | Weight |
|---|---|
| Agent system design & implementation | 25% |
| Data sourcing, extraction & normalization | 20% |
| State coverage & fallback strategies | 15% |
| Validation methodology & quality assurance | 15% |
| Communication & documentation | 25% |
| Bonus: dashboard, scheduling, polish | +up to 15% extra |
Include an AI_TOOLS.md listing
- Every AI tool you used (Claude, Copilot, Cursor, Codex, v0, etc.).
- What you used each tool for.
- 2–3 cases where you diverged from AI-generated output and why.
A 30–45 minute conversation after submission
If your solution is chosen, we'll ask you to:
- Walk through your pipeline's handling of a specific state, from discovery to normalized output.
- Respond to a scenario change ("What if a state switches from PDF to an API?").
- Debug a suspicious data point from your own output.
- Explain how you'd handle 50 states with 5 different data formats each.
What to send us
- GitHub repo (public, or invite-shared with
@brookefzy,@am2222, and@tgibbons). README.mdwith a decision log (Decision → Alternatives → Reasoning → What you'd revisit).AI_TOOLS.md/docs— architecture diagram, Step 0 research findings, analysis rationale./src— pipeline code, agent definitions, tool schemas.- 5-minute Loom walkthrough (optional, encouraged).