---
name: usace-national-inventory-of-dams-ingestion
description: "How to get USACE National Inventory of Dams data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load the nationwide USACE dam CSV into Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/usace-national-inventory-of-dams
Provider: https://nid.sec.usace.army.mil/nid/
Checked against the provider's documentation: 2026-11-01

## Access
- No account or key. The national CSV and GeoPackage endpoints are public downloads.
- The CSV has a one-line update-date preamble before the column header.

## Request
```bash
curl -O 'https://nid.sec.usace.army.mil/api/nation/csv'
```

## Format
CSV with a metadata preamble followed by dam rows covering identifiers, owners, location, dimensions, storage, purpose, inspection, hazard, condition and regulatory fields.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""USACE nationwide National Inventory of Dams CSV -> pandas -> Parquet."""
import io
import requests
import pandas as pd

URL = "https://nid.sec.usace.army.mil/api/nation/csv"
r = requests.get(URL, timeout=120)
r.raise_for_status()
text = r.content.decode("utf-8-sig")
updated = text.splitlines()[0].split(",", 1)[1]
df = pd.read_csv(io.StringIO(text), skiprows=1, low_memory=False)
df.to_parquet("national_inventory_of_dams.parquet", index=False)
print(len(df), "dams", "data last updated", updated,
      "states/territories", df["State"].nunique())
```
Run by us on 2026-11-01 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 92692 dams data last updated 2026-10-30 states/territories 52

## Limits
- Rate limit: Not stated.
- The checked national CSV was about 69 MB.
- The provider does not state a fixed update schedule.

## Quirks
- Skip the first CSV line and retain its date as file-level provenance.
- Hazard Potential Classification describes downstream consequences if a failure occurs; it is not a probability of failure.
- Dates and condition fields can be blank or old, and the source agency is identified per record.
- The inventory is not real-time and must not be used as an emergency-warning feed.

## Terms and attribution
- USACE makes the public API and nationwide downloads available without a key.
- The API documentation says NID services are available for integration into applications.
- The NID site states that it is informational and not real-time; no separate open-data licence was stated.
- Terms page: https://nid.sec.usace.army.mil/api/developer

## Sources
- https://nid.sec.usace.army.mil/api/developer/json: "The National Inventory of Dams (NID) API is a complete, programmable interface to all NID functionality."
- https://nid.sec.usace.army.mil/api/developer/json: "Currently, you can develop your application with the public API."
- https://nid.sec.usace.army.mil/api/nation/csv: "Data Last Updated:,2026-10-30"

## Help improve this skill
Missing a source, or see something to improve? Call the MCP tool suggest_source or feedback (or POST /api/suggest or /api/feedback). Reviewed ideas: https://signal-lab-jet.vercel.app/agent-suggestions

Information for educational purposes only. Free tiers, limits and licenses belong to the providers and may change; check the provider's own terms before using the data.
