Skip to main content
Validate

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 lookupOnly charged on a matchSame credits as every other product
1Lookup Census Tract Lookup API showing a fictional street address, 100 Example St in Sampletown, Illinois, returned as census tract 17999990001, Sample County and Congressional District 99, beside a small map of tract boundaries with the address pinned in one of them

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.

One fictional street address drawn inside nested boundaries, state, county, census tract and block group, beside the names and ids returned for it: Illinois, Sample County, tract 17999990001 and block group 179999900011, and the congressional district, metro area, place and school district it also sits in

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

01

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.

request

$ POST /api/v1/census-tract-lookup

"address": "100 Example St,

Sampletown, IL 62999"

02

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.

processing

Address checked

Census Bureau map read

Boundaries named

Ids kept as text

03

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.

200 OK

tract17999990001

countySample County, IL

districtCongressional 99

school district named2 credits, 0 if not matched

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.

POST /v1/census-tract-lookup
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" }'
200 OK
{
  "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.

addresses.csvYou upload
  1. 1address
  2. 2100 example st, sampletown, il 62999
  3. 3250 sample ave, testville, tx 79999
  4. 49 nowhere ln, faketown, oh 43999
census-tract-results.csvYou download
addressFoundMatched AddressTract IDCountyStateCongressional DistrictCredits Used
100 example st, sampletown, il 62999Yes100 EXAMPLE ST, SAMPLETOWN, IL, 6299917999990001Sample CountyILCongressional District 992
250 sample ave, testville, tx 79999Yes250 SAMPLE AVE, TESTVILLE, TX, 7999948999990100Example CountyTXCongressional District 982
9 nowhere ln, faketown, oh 43999No0

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.

app.1lookup.io/api/v1Matched
  • 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
200 OK, 2 credits
{
  "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.

Three results of a census tract lookup: an address that matches once returns its tract, county and congressional district and is billed, an address with several possible matches returns the first in full and lists the others for one charge, and an address the Census Bureau cannot locate returns not found and is not charged

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.

Look up a few addresses you work with and see what comes back

Start a free trial, and your credits work across every product in the catalog.