NACo APInaco.org ↗
Access U.S. county profiles, FIPS-based lookups, bulk economic indicators, federal funding data, and NACo research resources via a structured API.
What is the NACo API?
The NACo.org API provides 4 endpoints covering U.S. county government data for all ~3,000 counties, including FIPS-coded profiles, bulk economic and federal funding indicators, and searchable NACo research resources. The get_county_profile endpoint returns fields like County_GDP, Governing_Authority, Board_Size, Year_Founded, and historical census population, while get_indicator_data delivers bulk indicator values across every county in a single call.
curl -X GET 'https://api.parse.bot/scraper/2c2ee68f-df52-4653-98eb-73ab9e98712b/search_counties?limit=10&query=CA' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace naco-org-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.naco_county_explorer_api import NACo, County, CountyProfile, Resource, Dataset, Indicator
naco = NACo()
# Search for California counties
for county in naco.counties.search(query="CA", limit=5):
print(county.name, county.state, county.population, county.is_naco_member)
# Get detailed profile for a specific county by FIPS
la_county = naco.county(fips="06037")
profile = la_county.profile()
print(profile.found, profile.county.county_seat, profile.county.county_gdp)
print(profile.pop)
# Retrieve bulk federal funding indicator data using enums
for record in naco.indicatorresults.list(dataset_db=Dataset.FEDERAL_FUNDING, indicators=Indicator.FED_PILT_ALLOCATION, year=2025, limit=5):
print(record.fips)
# Search for NACo resources on housing
for resource in naco.resources.search(query="housing", topic="38", limit=3):
print(resource.id, resource.title, resource.url, resource.date)
Search for U.S. counties by name, state abbreviation, or FIPS code substring. Returns matching counties sorted alphabetically by state then name. Omitting the query returns all ~3,100 counties. The search is case-insensitive and matches against county name, state abbreviation, and FIPS code.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results to return. |
| query | string | Search keyword matching county name, state abbreviation, or FIPS code substring. Omitting returns all counties. |
{
"type": "object",
"fields": {
"counties": "array of county objects with fips, name, state, population, and is_naco_member fields",
"total_matches": "integer total number of matching counties before limit is applied"
},
"sample": {
"data": {
"counties": [
{
"fips": "06001",
"name": "Alameda County",
"state": "CA",
"population": 1666753,
"is_naco_member": true
}
],
"total_matches": 196
},
"status": "success"
}
}About the NACo API
County Search and Profiles
The search_counties endpoint accepts a query string (county name, state abbreviation, or 5-digit FIPS code) and returns an array of matching county objects — each with fips, name, state, population, and is_naco_member — along with a total_matches count. To pull a full county record, pass the 5-digit FIPS code to get_county_profile. That response includes government structure fields (Governing_Authority, Board_Size), geographic attributes (Land_Area, County_Seat), economic data (County_GDP), a County_Website link, and a pop object mapping census years (from 1920 through 2020) to historical population figures.
Bulk Indicator Data
get_indicator_data is a POST endpoint that returns data for all ~3,000 counties in one call. You supply a dataset_db (confirmed values: Federal_Funding, County_Economy) and an indicators string (confirmed values include FED_PILT_Allocation for the Federal Funding dataset). The response includes a data array of objects keyed by FIPS with indicator values, plus year, count, and dataset fields. Only one indicator per request is reliably supported; invalid dataset/indicator combinations may return a 500 error from the upstream source.
NACo Research Resources
search_resources retrieves NACo publications, toolkits, and policy documents. Results are paginated (0-indexed page parameter) and filterable by query, topic ID (e.g., 37 for Health, 38 for Housing), and resource_type ID (e.g., 19 for Reports & Toolkits, 17 for Policy Document, 21 for Video). Each result object includes id, title, url, and date. The meta field in the response exposes totalResults, totalPages, and facets for further filtering.
The NACo API is a managed, monitored endpoint for naco.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when naco.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official naco.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Map federal PILT allocation across all U.S. counties using bulk
FED_PILT_Allocationindicator data - Build a county government directory using
Governing_Authority,Board_Size, andCounty_Websitefromget_county_profile - Identify NACo member counties for partnership targeting via the
is_naco_memberflag insearch_counties - Analyze historical county population trends using the
popobject spanning census years 1920–2020 - Surface county economic output figures with
County_GDPfrom theCounty_Economydataset - Retrieve NACo health or housing policy documents by filtering
search_resourceswith topic IDs like37or38 - Cross-reference county FIPS codes with external datasets using the FIPS lookup in
search_counties
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does NACo offer an official developer API?+
What does `get_county_profile` return beyond basic demographics?+
get_county_profile returns government structure fields (Governing_Authority, Board_Size), geographic attributes (County_Seat, Land_Area, Year_Founded), County_GDP, a County_Website URL, and a pop object with population figures for each decennial census year from 1920 to 2020. The found boolean indicates whether the requested FIPS code resolved to a record.Are there limitations on which indicator and dataset combinations work in `get_indicator_data`?+
dataset_db and indicators pairs are confirmed to work reliably — notably Federal_Funding with FED_PILT_Allocation and County_Economy with economic indicators. Unrecognized combinations may return a 500 error. Only one indicator per request is reliably supported; multi-indicator batching is not guaranteed.Does the API expose county-level contact information such as commissioner names or direct phone numbers?+
get_county_profile endpoint returns a County_Website URL and government structure data, but individual official names, direct phone numbers, and email addresses are not included in the response fields. You can fork this API on Parse and revise it to add an endpoint targeting those contact details.Can I filter `search_resources` by both topic and resource type at the same time?+
search_resources accepts topic, resource_type, and query as independent optional parameters, and they can be combined in the same request. Topic IDs include 37 for Health and 38 for Housing; resource type IDs include 19 for Reports & Toolkits, 17 for Policy Document, and 21 for Video.