Census Tract & Demographics
Send US addresses or coordinates. Get back the census tract and block group IDs, and the area's ACS 5-year estimates: population, median age, income, poverty rate, education, housing and unemployment.
Run it on ApifyUse it from an agentWhat you get for each row
- Match:
status(matched,no_match,tie,invalid), a plain-Englishmessage, the matched address and coordinates. - Geography: state, county and tract codes, the 11-digit tract GEOID and (optionally) the 12-digit block group GEOID.
- Demographics: 15 fields, listed below, from the ACS 5-year detailed tables, with optional margins of error.
Rows that don't match still come back with a reason, so you can join the results to your list by row number or your own id.
Example
{"operation": "geocode",
"addresses": ["125 N Main St, Memphis, TN 38103"],
"fields": ["income", "housing"]}
One result row (demographic values here are illustrative):
{"row": 1, "status": "matched", "match_type": "Exact",
"matched_address": "125 N MAIN ST, MEMPHIS, TN, 38103",
"state_fips": "47", "county_fips": "157", "tract": "004200", "tract_geoid": "47157004200",
"geo_name": "Census Tract 42; Shelby County; Tennessee",
"demographics": {"median_household_income": 51234, "poverty_rate": 21.7, "median_gross_rent": 1180}}
CSV files work too (by URL or upload). Columns named like address, street, city, state, zip and id are detected automatically. Other operations: coordinates (lat/lon points) and demographics (GEOIDs).
Demographic fields
| Group | Fields |
|---|---|
| population | total_population, median_age |
| income | median_household_income, per_capita_income, poverty_rate |
| education | population_25_plus, pct_high_school_or_higher, pct_bachelors_or_higher |
| housing | housing_units, vacancy_rate, owner_occupied_rate, renter_occupied_rate, median_home_value, median_gross_rent |
| employment | unemployment_rate |
Rates are percentages. Dollar amounts are inflation-adjusted to the release's last year. When the Census publishes no estimate for an area, the value is null and a note says why.
Use it
In the Apify Console
Open the Actor page on Apify, fill in the input form and click Start. Results land in the run's dataset (JSON, CSV or Excel download).
From an AI agent (MCP)
Apify's hosted MCP server exposes the Actor as a tool to Claude, Cursor, VS Code and other MCP clients. Server URL:
https://mcp.apify.com/?tools=errandkit/census-tract-demographics
For example, in Claude Code (sign in to Apify when asked, or add --header "Authorization: Bearer YOUR_APIFY_TOKEN"):
claude mcp add --transport http errandkit "https://mcp.apify.com/?tools=errandkit/census-tract-demographics"
Copy-paste config for Claude Desktop, Cursor, VS Code, Windsurf and ChatGPT →
From code (Apify API)
curl -X POST "https://api.apify.com/v2/acts/errandkit~census-tract-demographics/run-sync-get-dataset-items" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"operation":"geocode","addresses":["125 N Main St, Memphis, TN 38103"],"fields":["income"]}'
Errandkit doesn't run its own hosted API yet. Every way of using this tool goes through your Apify account.
Pricing
| Event | Price |
|---|---|
| Location matched to a census tract | $0.001 ($1.00 per 1,000) |
| ACS demographics appended | $0.0006 ($0.60 per 1,000) |
| Unmatched, tied or invalid rows | Free |
| Actor start (Apify standard) | $0.00005 |
Example: 1,000 addresses with a 92% match rate and demographics cost $1.47.
Launch prices. The price shown on the Apify Store page is the one you are charged, and Apify shows it before every run.
Accuracy and limits
- US addresses only (states, DC, Puerto Rico and the Island Areas). Matching works best on street addresses; PO Boxes are rejected.
- Default data: ACS 5-year 2020–2024. Tract codes come from the same year's boundaries, which matters in Connecticut (its county codes changed in 2022).
- Block group estimates come from small samples. Use margins of error (
include_moe) when the numbers matter. - These are estimates for an area, not facts about an address or the people who live there.
Sources and acceptable use
Matching uses the U.S. Census Bureau Geocoder. Demographics come from the Census Data API (American Community Survey 5-year detailed tables). This product uses the Census Bureau Data API but is not endorsed or certified by the Census Bureau.
Census terms forbid using these data, alone or combined with other data, to identify any individual person, household or business. Our terms forbid it too. Your addresses are sent to the Census Geocoder to be matched. Results are stored only in your own Apify run storage.
Questions
Which ACS release does it use?
ACS 5-year 2020-2024 by default. Earlier releases back to 2017 can be selected.
Am I charged for addresses that don't match?
No. Only matched rows are charged. No-match, tie and invalid rows are free.
Do I need a Census API key?
No. The Actor uses its own key. You can supply your own Census API key in the input if you prefer.
How fast is it?
Geocoding runs in batches of 1,000; one measured batch of 500 took 12 seconds. The Census service speed varies, and it occasionally goes down for maintenance. When that happens you get a clear UPSTREAM_UNAVAILABLE error.