The Census Tract Lookup API tells you which census tract, county, district and school district a US address sits in
Send a US street address and get the census tract id, county, congressional district, metro area, place and school district it sits in, read from the Census Bureau's own address records. 2 credits, charged only when the address is matched.

2
Credits per address matched
about $0.01 on Starter
0
Credits when not matched
no match, no charge
Up to 4
Other matches listed with the first
one charge for the whole lookup
2M
Rows in one CSV file
one address per row
One address sits inside a stack of Census Bureau boundaries, and each one comes back named
The tract, block group and block, the county, the congressional district, the metro area, the place and the school district are all returned for the same address, with the ids kept as text.

An address comes back as the Census Bureau's own areas in one flat payload
The answer comes from the Census Bureau's own address records
The matched address, tract, county, districts, metro area, place and school district come from the Census Bureau's public address records. It is US government data, and benchmark and vintage in the answer say which address ranges and boundaries answered.
- The address as the Census Bureau matched it
- Benchmark and vintage of the answer
- Coordinates of the match
- Current boundaries
The tract comes with the ids you join on
The 11-digit tract id, the block group id and the block id come back as text with their leading zeros, and the state, county and tract codes are also given separately, so the row joins to a Census Bureau table without a cleanup step.
- 11-digit tract id and tract name
- Block group and block ids
- State, county and tract codes apart
- Leading zeros kept
Districts and areas come back with their names
The congressional district, the state legislative districts, the metro area with its code and type, the place and the school district are named in the answer, so nobody on your team has to look a code up in a table.
- Congressional district and Congress number
- State senate and house districts
- Metro area with code and type
- Place and school district
An address with several possible matches is handled in one call
The first usable match is returned in full and the next four are listed with their addresses and tract ids, so a common street is not mistaken for one place. The verdict asks you to check the matched address.
- First match returned in full
- Next four listed
- match_count for how many matched
- One charge for the whole lookup
An address that is not matched costs nothing
You are charged 2 credits only when the Census Bureau matches the address. An address it cannot locate, an incomplete address and a lookup that could not be answered cost 0, and that holds for bulk CSV jobs as well as the API.
- Zero credits when not matched
- Bulk CSV with an address column
- The same credits as every other product
- One API key for all of it
The tract id is the key to the Census Bureau's tables
The lookup returns ids and names, not demographics. Join the tract id to a Census Bureau table such as the American Community Survey to add income, age or population, and keep the judgment about what a number means with your own analysts.
- No demographic labels added
- Joins to American Community Survey tables
- Ids as text for spreadsheets and databases
- Same ids on every lookup
An address goes in and the census areas come out
Send a US street address
POST the address as one line, or as a street, city, state and ZIP. It needs a street number and a street name. An email address, a web link or an address with no street number is refused with a clear error and costs nothing.
$ POST /api/v1/census-tract-lookup
"address": "100 Example St,
Sampletown, IL 62999"
We ask the Census Bureau where it sits
The Census Bureau places the address on its own map and names every boundary around it. We keep the ids as text, put the names beside them and add the benchmark and vintage that answered.
Address checked
Census Bureau map read
Boundaries named
Ids kept as text
Get the areas, flat and structured
Tract, county, district, metro area, place and school district arrive in one JSON payload. An address matched bills 2 credits, and an address the Census Bureau cannot locate bills nothing.
tract17999990001
countySample County, IL
districtCongressional 99
One endpoint looks up an address and works like every other 1Lookup call
Same authentication, same credit balance, and the same response envelope as every other 1Lookup product. If you have already integrated one endpoint, this one is a URL change.
curl -X POST https://app.1lookup.io/api/v1/census-tract-lookup \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{ "address": "100 Example St, Sampletown, IL 62999" }'{
"classification": {
"found": true,
"outcome": "matched",
"input_address": "100 example st, sampletown, il 62999",
"matched_address": "100 EXAMPLE ST, SAMPLETOWN, IL, 62999",
"latitude": 40.123456,
"longitude": -89.654321,
"tract_geoid": "17999990001",
"tract_code": "990001",
"tract_name": "Census Tract 9900.01",
"block_group_geoid": "179999900011",
"block_geoid": "179999900011002",
"county_name": "Sample County",
"county_fips": "17999",
"state_name": "Illinois",
"state_fips": "17",
"state_abbreviation": "IL",
"congressional_district": "Congressional District 99",
"metro_area": "Sampletown, IL Metro Area",
"metro_area_code": "99990",
"metro_area_type": "metropolitan",
"place": "Sampletown city",
"school_district": "Sampletown Community Unit School District 99",
"match_count": 1,
"benchmark": "Public_AR_Current",
"vintage": "Current_Current"
},
"insights": {
"census_tract_result": {
"fips_codes": { "state": "17", "county": "999", "tract": "990001" },
"congressional_district": { "name": "Congressional District 99", "code": "99", "congress": 120 },
"state_legislative_upper": { "name": "State Senate District 99", "code": "099" },
"state_legislative_lower": { "name": "State House District 98", "code": "098" },
"zip_area": "62999",
"other_matches": [],
"data_source": "census_geocoder"
}
},
"recommendations": {
"primary_action": "APPROVE"
},
"metadata": { "credits_used": 2, "cache_hit": false }
}A column of addresses goes in and one row per address comes out
Upload a CSV with an address column that holds a full address on each row and download a result file with each address's tract id, county, state and congressional district. The three addresses here are invented.
- 1address
- 2100 example st, sampletown, il 62999
- 3250 sample ave, testville, tx 79999
- 49 nowhere ln, faketown, oh 43999
| address | Found | Matched Address | Tract ID | County | State | Congressional District | Credits Used |
|---|---|---|---|---|---|---|---|
| 100 example st, sampletown, il 62999 | Yes | 100 EXAMPLE ST, SAMPLETOWN, IL, 62999 | 17999990001 | Sample County | IL | Congressional District 99 | 2 |
| 250 sample ave, testville, tx 79999 | Yes | 250 SAMPLE AVE, TESTVILLE, TX, 79999 | 48999990100 | Example County | TX | Congressional District 98 | 2 |
| 9 nowhere ln, faketown, oh 43999 | No | 0 |
Fourteen more columns in the file, among them Tract Name, State FIPS, County FIPS, Metro Area, Place, School District, Block Group ID, Block ID, Latitude and Longitude.
One row in, one row out
Every address becomes one row, so a list of 500 addresses is a spreadsheet of 500 rows you can sort by county or filter by district.
An address that is not matched is a free row
A PO box, a new street or a misspelled suffix comes back as a row that says so and costs 0 credits, so cleaning a list never bills for the misses.
Open the id columns as text
The tract, state and county ids start with zeros that a spreadsheet drops when it reads them as numbers. Import those columns as text to keep every digit.
One call returns the census areas for an address
One call turns a street address on an application, a customer list or a site file into the census areas it sits in: the tract id and name, the block group, the county, the congressional district, the metro area, the place and the school district, with the raw JSON your code receives beside it. Every id comes back as text with its leading zeros kept.
- Matched address100 EXAMPLE ST, SAMPLETOWN, IL, 62999
- Census tract ID17999990001
- Tract nameCensus Tract 9900.01
- Block group ID179999900011
- CountySample County (17999)
- StateIllinois (IL)
- Congressional districtCongressional District 99
- Metro areaSampletown, IL Metro Area
- PlaceSampletown city
- School districtSampletown Community Unit School District 99
- Coordinates40.123456, -89.654321
- Possible matches1
{
"classification": {
"found": true,
"matched_address": "100 EXAMPLE ST, SAMPLETOWN, IL, 62999",
"tract_geoid": "17999990001",
"tract_name": "Census Tract 9900.01",
"block_group_geoid": "179999900011",
"county_name": "Sample County",
"county_fips": "17999",
"state_abbreviation": "IL",
"congressional_district": "Congressional District 99",
"metro_area": "Sampletown, IL Metro Area",
"place": "Sampletown city",
"school_district": "Sampletown Community Unit School District 99",
"match_count": 1
},
"recommendations": { "primary_action": "APPROVE" },
"metadata": { "credits_used": 2 }
}Every census tract lookup returns the same fields at one flat price
A level the address is not in comes back as null and never as a guess, and every address matched costs the same 2 credits.
The match
- found
- outcome
- input_address
- matched_address
- match_count
- other_matches[]
Tract and blocks
- tract_geoid
- tract_code
- tract_name
- block_group_geoid
- block_geoid
- fips_codes.state
- fips_codes.county
- fips_codes.tract
County and state
- county_name
- county_fips
- state_name
- state_fips
- state_abbreviation
Districts and areas
- congressional_district
- state_legislative_upper
- state_legislative_lower
- metro_area
- metro_area_code
- metro_area_type
- place
- school_district
- urban_area
- zip_area
Location and source
- latitude
- longitude
- benchmark
- vintage
Lenders, researchers and data teams place an address in its tract instead of searching the Census Bureau site by hand
Lenders and compliance teams placing applications
Give each application address its 11-digit tract id and county, then join the ids to the Census Bureau tables your analysts already use.
Researchers and nonprofits mapping the people they serve
Turn a list of client addresses into tract ids, then join the ids to American Community Survey tables and see the areas on a map.
Retail and site-selection teams sizing up locations
Sort a list of store or lead addresses by county, metro area and tract so each location sits in the right market.
Campaigns and civic groups routing outreach
Give every address on a list its congressional district and state legislative districts, then send each one the right message.
Real estate and insurance teams confirming a location
Check which county, place and school district a property address falls in before a quote, a listing or a file goes out.
Data teams cleaning an address list
Run a CSV of addresses through a bulk job and get tract, county, district and school district columns back, with unmatched rows marked and free.
Only an address that is matched is billed, and every other answer is free
An address that matches once returns the areas it sits in. An address with several possible matches returns the first in full for one charge, and an address the Census Bureau cannot locate returns not found at no charge.

These are the questions people ask before they look up their first address
What does the Census Tract Lookup API return?
Send a US street address as one line, or as a street, city, state and ZIP, and it returns the address as the Census Bureau matched it, the 11-digit census tract id and tract name, the block group and block ids, the county and state with their FIPS codes, the congressional district, the metro area with its code and type, the place and the school district, plus the latitude and longitude of the match. When more than one address could match, the first is returned in full and the next four are listed by address, tract id and county.
Where does the census data come from?
From the US Census Bureau's public address records. The Census Bureau places the address on its own map and names every boundary it sits inside, and we read that when you look an address up. benchmark and vintage in the answer name the address ranges and the boundaries that answered, so a result can be repeated later.
How much does a census tract lookup cost?
2 credits per lookup, about $0.01 on the Starter plan. You are charged only when the Census Bureau matches the address. An address it cannot locate, an incomplete address and a lookup that could not be answered all cost 0 credits, in the API, the dashboard and bulk jobs.
What does the address need to look like?
A full US street address with a street number and a street name, 8 to 200 characters, such as 100 Example St, Sampletown, IL 62999. A city, state and ZIP make the match more reliable. You can also send street, city, state and zip as separate fields, and a numeric ZIP is padded to 5 digits. An email address, a web link or an address with no street number is refused with a clear error before anything is charged.
Why does an address come back not found?
The Census Bureau could not locate it. A PO box, a street that is very new, a misspelled street suffix or a ZIP code that does not fit the street can all do that. The answer is found: false with a REVIEW verdict, and it costs 0 credits. Check the suffix and the ZIP and try again.
What happens when several addresses match?
The first usable match is returned in full, the next four are listed under other_matches with their matched address, tract id and county, and match_count gives how many the Census Bureau found. The verdict reads VERIFY, so a person or a rule checks the matched address. It is one lookup and one charge however many addresses match.
Why do the ids come back as text?
Because many start with a zero. Alabama's state code is 01, and a tract id such as 01001020100 would lose its first digit as a number. Every id in the API is a string with its zeros kept, and fips_codes gives the state, county and tract parts separately for joins. A spreadsheet drops leading zeros when it opens a file, so import the id columns of a bulk result as text.
Does it return income, population or other demographics?
No. It returns ids and names, and it never labels a tract as low income or anything else. The 11-digit tract id is the key that joins to Census Bureau tables such as the American Community Survey, which is where income, age and population are published.
Can I find a tract from a latitude and longitude?
No. The lookup takes an address and returns the coordinates of the match with the tract. It does not take coordinates in. If you only have coordinates, the Census Bureau's own geocoder has a coordinate search, and the comparison pages below set it beside this API.
How current is the geography, and can I ask again?
The lookup uses the Census Bureau's current address ranges and boundaries, and benchmark and vintage in the answer name them. A repeat lookup of the same address by the same user within 7 days comes from the cache at no charge.
What happens if the Census Bureau's service does not answer?
The API answers 503 with a Retry-After header, charges nothing and does not save the answer, so a retry is never a second charge.
Can I check a list of addresses at once?
Yes. Upload a CSV with an address column holding a full address on each row and you get a row per address with the tract id and name, county, state, congressional district, metro area, place, school district and coordinates. An address that is not matched becomes a row that says so, at no charge. The price stays at the same credits per address matched, however long the list is.
To check a single address before you write any code, run it through the free census tract finder.
The tract says where the address sits, and these products check the rest
Here is how finding a census tract with 1Lookup compares with the other geocoding sources
Each page sets a rival's plans and prices beside ours and says where the rival does the job better. Every figure carries its source and the date it was checked.