Site report
The site report describes the area around each place: who lives and works there, what they earn, and the businesses nearby, compared with the county, the state and the US. Use it to choose and compare sites, such as where to open a store or a clinic.
What's in it
| Group | Measures |
|---|---|
| Population and age | Population, People under 5, People 5 to 17, People 18 to 24, People 25 to 34, People 35 to 44, People 45 to 54, People 55 to 64, People 65 to 74, People 75 to 84, People 85 and over, Median age |
| Households | Households |
| Education | Bachelor's degree or higher |
| Household income | Median household income, Average household income, Income per person |
| Poverty | Poverty rate |
| Jobs in the area | Jobs, Jobs paying $1,250 a month or less, Jobs paying $1,251 to $3,333 a month, Jobs paying more than $3,333 a month, Jobs in farming, forestry and fishing, Jobs in mining, oil and gas, Jobs in utilities, Jobs in construction, Jobs in manufacturing, Jobs in wholesale trade, Jobs in retail, Jobs in transportation and warehousing, Jobs in information and media, Jobs in finance and insurance, Jobs in real estate and rental, Jobs in professional, scientific and technical services, Jobs in management of companies, Jobs in administrative support and waste services, Jobs in education, Jobs in health care and social assistance, Jobs in arts, entertainment and recreation, Jobs in hotels and food service, Jobs in other services, Jobs in public administration |
| Residents at work | Labor force, Unemployment rate |
| Places and amenities | Grocery stores, Restaurants, Coffee shops, Bars, Pharmacies, Gas stations, Banks and credit unions, Gyms, Hotels and motels, Convenience stores |
Compared with: each number for its county, its state and the US, and for rates and medians, where the place ranks among census tracts (neighborhood-sized areas of about 4,000 people).
Usual area: a 10-minute drive-time area around each place (everywhere you can reach by car in 10 minutes). You can choose another.
Cost: 8 credits a place for its 8 groups, plus 2 to draw the drive-time area: 10 credits a place.
Run it in Kadrin Batch
Choose New request, pick your file of places, and choose Site report. Batch suggests a 10-minute drive around each place: change it if your customers come from nearer or farther. The Batch quickstart goes through it step by step.
Run it with the API
Send "preset": "site_report" to /enrich, with the area around each place. Up to 100 places go in one request. Here are two stores, each with a 10-minute drive-time area:
curl https://api.kadrindata.com/v1/enrich \
-H "Authorization: Bearer $KADRIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"areas": [
{"id": "downtown-crossing",
"geometry": {"type": "isochrone", "center": [-71.0605, 42.3555], "mode": "drive", "minutes": 10}},
{"id": "kendall-square",
"geometry": {"type": "isochrone", "center": [-71.0862, 42.3625], "mode": "drive", "minutes": 10}}
],
"preset": "site_report"
}'
import os
import requests
stores = {"downtown-crossing": [-71.0605, 42.3555], "kendall-square": [-71.0862, 42.3625]}
r = requests.post(
"https://api.kadrindata.com/v1/enrich",
headers={"Authorization": f"Bearer {os.environ['KADRIN_API_KEY']}"},
json={
"areas": [{"id": store, "geometry": {"type": "isochrone", "center": center, "mode": "drive", "minutes": 10}}
for store, center in stores.items()],
"preset": "site_report",
},
)
r.raise_for_status()
for place in r.json()["results"]:
if "error" in place:
print(f"{place['id']}: {place['error']['detail']}")
continue
income = place["values"]["income.household.median"]
print(f"{place['id']}: median household income ${income['value']:,.0f}, "
f"the county's ${income['benchmarks']['county']:,.0f}")
const stores = { "downtown-crossing": [-71.0605, 42.3555], "kendall-square": [-71.0862, 42.3625] };
const r = await fetch("https://api.kadrindata.com/v1/enrich", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.KADRIN_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
areas: Object.entries(stores).map(([store, center]) => ({
id: store,
geometry: { type: "isochrone", center, mode: "drive", minutes: 10 },
})),
preset: "site_report",
}),
});
if (!r.ok) throw new Error(await r.text());
for (const place of (await r.json()).results) {
if (place.error) {
console.log(`${place.id}: ${place.error.detail}`);
continue;
}
const income = place.values["income.household.median"];
console.log(`${place.id}: median household income $${income.value.toLocaleString()}, ` +
`the county's $${income.benchmarks.county.toLocaleString()}`);
}
With a live key this costs 20 credits, 10 for each place. For a whole spreadsheet of places, send it as a file: see Send a file of places.
Reading it
- Each number is for the area around the place, with its margin of error (how far the true number could reasonably be from our estimate) where it's a survey estimate.
benchmarksgives the same number for the county and state holding most of the area's people, and for the US.percentiles, for rates and medians, says where the area ranks among census tracts (neighborhood-sized areas of about 4,000 people) in the county, the state and the US: 80 means higher than 80% of them.- Jobs are counted where people work, not where they live. Businesses are counted inside the area.
- A drive-time area is drawn on roads from OpenStreetMap. Wherever you show one, credit "© OpenStreetMap contributors".