Skip to main content

Migration Data and History

Retrieve domestic inflows, outflows, and net migration for a given geography and quarter, broken down by demographics. This endpoint covers U.S. domestic migration only — international moves are not included.

Supported geography types: zip, fips, block_group, point, address, polygon.

Retrieve migration data and history for a geography

get /migration/
Security api_key and username
GET https://api.censai.com/v3/migration/

Request

Provides domestic inflows, outflows, and net migration for a geography and quarter, broken down by demographics. International migration is not covered by this endpoint.

query Parameters
geography_type required string The type of geography being queried. Limit one value per call.
Accepted values: zip, fips, block_group, point, address, polygon
geography_name required string The identifier for the geography being queried. Limit one value per call. Format depends on geography_type.
Examples: 22201 (zip), 51013 (fips), 550630004023 (block_group), (38.88,-77.09) (point), "2300 Clarendon Blvd, Arlington, VA 22201" (address)
quarter required string or array of strings The quarter or range of quarters to query. Provide a single quarter or a start/end pair to define a range. There are no limits on the number of quarters; the only limit is the range CENSAI has processed (2018Q1 to today).
Examples: 2025Q3, [2021Q1, 2025Q3], [2018Q1, 2025Q3]
demographics array of strings Demographic dimensions to break down the response. Multiple demographics can be requested in one call.
Basic demographics (one token total): age, income, gender, education.
Premium demographics (one token each): wealth, affinity, marital_status, owner_renter, race, children_in_hh.
Cross tabs (e.g. wealth x age, income x age) cost two tokens each.
See the CENSAI Data Dictionary for the complete list and bucket definitions.
Caveat: owner_renter is not reported for property or address-level queries, since all results would be classified as renter.

Responses

200 migration data retrieved successfully
400 improperly configured request
401 authorization failure
500 internal server error

Retrieve top 10 origins and destinations for a geography

get /origin-destination/
Security api_key and username
GET https://api.censai.com/v3/origin-destination/

Request

Returns the top 10 origin and top 10 destination geographies for moves involving the target geography. Origins and destinations are calculated against the full quarter range supplied (a single set of 10, not 10 per quarter).

query Parameters
geography_type required string The type of the target geography. Limit one value per call.
Accepted values: zip, fips, cbsa
Caveat: origin / destination data is not provided for property or block group geographies. Zip-level routes can still be returned for a property query.
geography_name required string The identifier for the target geography.
Examples: 22201, 51013
quarter required string or array of strings A single quarter or range of quarters. There are no limits on the number of quarters; the only limit is the range CENSAI has processed (2018Q1 to today).
Examples: 2025Q3, [2021Q1, 2025Q3]
od_geography_type string Geography type to use for the returned origins and destinations. Can differ from the target geography_type. If omitted, defaults to the target's geography type.
Accepted values: zip, fips, cbsa

Responses

200origin/destination data retrieved successfully
400improperly configured request
401authorization failure
500internal server error

Retrieve current population for a geography

get /population/
Security api_key and username
GET https://api.censai.com/v3/population/

Request

Returns today's point-in-time population count for a geography, broken down by demographics if requested.

query Parameters
geography_type required string The type of geography being queried.
Accepted values: zip, fips, cbsa, block_group, point, address, polygon
geography_name required string The identifier for the geography being queried.
Examples: 22201, 51013, 550630004023, (38.88,-77.09), "2300 Clarendon Blvd, Arlington, VA 22201"
demographics array of strings Demographic dimensions to break down the population count. Multiple demographics can be requested in one call. See the CENSAI Data Dictionary for accepted values and bucket definitions.
Caveat: owner_renter is not reported for property or address-level queries.

Responses

200population data retrieved successfully
400improperly configured request
401authorization failure
500internal server error

Retrieve current scores for a geography

get /scores/
Security api_key and username
GET https://api.censai.com/v3/scores/

Request

Returns the requested current scores for a geography. Historic scores are not supported.

query Parameters
geography_type required string The type of geography being queried.
Accepted values: zip, fips, cbsa
geography_name required string The identifier for the geography being queried.
Examples: 22201, 51013
scores required array of strings The list of scores to retrieve. All three available scores can be requested in a single call.
Accepted values: "Rental Affordability", "Mortgage Affordability", "Investability"

Responses

200scores retrieved successfully
400improperly configured request
401authorization failure
500internal server error

Retrieve top 10 lookalike geographies

get /lookalikes/
Security api_key and username
GET https://api.censai.com/v3/lookalikes/

Request

Returns the top 10 geographies that look most similar to the queried geography, mirroring the platform's lookalikes functionality.

query Parameters
geography_type required string The type of geography being queried.
Accepted values: zip, fips, cbsa
geography_name required string The identifier for the geography being queried.
Examples: 22201, 51013
distance integer Distance buffer in miles. If omitted, lookalikes are returned nationwide with no distance constraint.
Examples: 50, 100, 500
buffer_direction string Whether to return lookalikes within or beyond the supplied distance. Defaults to "Within" if not provided.
Accepted values: "Within", "Beyond"

Responses

200lookalikes retrieved successfully
400improperly configured request
401authorization failure
500internal server error

Retrieve median income of inflows and outflows

get /migration-median-income/
Security api_key and username
GET https://api.censai.com/v3/migration-median-income/

Request

Returns the median income of inflows and the median income of outflows for a geography across the supplied quarter range.

Caveat: not available at the address or property level.
query Parameters
geography_type required string The type of geography being queried.
Accepted values: zip, fips, cbsa, block_group, point, polygon
geography_name required string The identifier for the geography being queried.
Examples: 22201, 51013, 550630004023, (38.88,-77.09)
quarter required string or array of strings A single quarter or range of quarters. There are no limits on the number of quarters; the only limit is the range CENSAI has processed (2018Q1 to today).
Examples: 2025Q3, [2021Q1, 2025Q3]

Responses

200median income data retrieved successfully
400improperly configured request
401authorization failure
500internal server error

CENSAI Data Dictionary

The demographics below are reportable on both the migration and population endpoints. For bucketed demographics, records that don't meet the listed values are returned as "Unknown".

genderstring Not bucketed. Values: Male, Female.
marital_statusstring Not bucketed. Values: Married, Single.
incomenumeric (bucketed) Buckets: <$25K, $25K-$50K, $50K-$75K, $75K-$100K, $100K-$200K, $200K+.
wealthstring (bucketed) Buckets: $2.084M+, $1.062M-2.084M, $540K-1.062M, $195K-540K, $69K-195K, <$69K.
owner_renterstring (bucketed) Values: Renter, Homeowner. Not reported for property or address-level queries.
affinitystring (bucketed) Buckets: Liberal (0–0.3), Swing (0.3–0.7), Conservative (0.7–1).
educationstring (bucketed) Values: Bachelors, No Bachelors.
racestring Modeled race; values come directly from the race field. Empty values are returned as Unknown.
ageinteger (bucketed) Buckets: 18-29, 30-44, 45-54, 55-64, 65+.
children_in_hhstring Values: Children Present, No Children Present.
median_incomeaggregate Migration endpoint returns separate median income values for inflows and outflows. Population endpoint returns a single median income for the geography.
household_countaggregate Population endpoint only. Returns the count of households in the geography.

Pricing and Limits

Tokens are calculated per call as: (# of geographies) × (# of quarters) × (# of demographics). Only one geography is allowed per call. Cross tabs (e.g. wealth × age) cost two tokens each.

Lowest geography Credits Subscription Additional calls
Zip code 40,000 Starter: $499/month 6¢/call
Block group 250,000 Developer: $799/month 2¢/call
Property and trade area 300,000 Scale: $899/month 2¢/call
headphone icon

CENSAI simplifies your role by helping you discover market opportunities and make smarter real estate investment decisions.

How can we assist you today?