Overview
ZIP Demographics uses 5-year American Community Survey (ACS) estimates from the US Census Bureau, providing reliable demographic data for all 33,000+ ZIP Code Tabulation Areas (ZCTAs) in the United States.
Live Test ZIP Demographics Skill Skill →
The tool
Once your client is connected to the VerveKit server, this appears in its tool list as ZIPDemographicsSkill. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "ZIPDemographicsSkill",
"arguments": {
"zip": "90210"
}
}You do not name the tool yourself; the model picks it. Asking about 90210 in the terms this skill covers is enough for it to reach for ZIPDemographicsSkill on its own — naming it explicitly also works, and is the way to force the call.
Connecting
One server URL covers every skill in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervekit": {
"url": "https://api.vervekit.com/v1/mcp"
}
}
}https://api.vervekit.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
zipRequired | string | 5-digit US ZIP code length 5–5 |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"zip": "90210",
"name": "ZCTA5 90210",
"acsYear": 2024,
"population": {
"total": 19004,
"male": 9417,
"female": 9587,
"medianAge": 51
},
"income": {
"medianHousehold": 187801,
"perCapita": 147098
},
"housing": {
"medianHomeValue": 2000001,
"medianRent": 3251,
"totalUnits": 9531,
"occupiedUnits": 8029,
"vacantUnits": 1502,
"ownerOccupied": 5679,
"renterOccupied": 2350,
"homeOwnershipRate": 70.7
},
"education": {
"collegeEducatedPct": 68.1,
"bachelors": 4837,
"masters": 2389,
"professional": 1962,
"doctorate": 929
},
"employment": {
"laborForce": 9017,
"unemployed": 468,
"unemploymentRate": 5.2
},
"race": {
"white": {
"count": 15147,
"percent": 79.7
},
"black": {
"count": 403,
"percent": 2.1
},
"asian": {
"count": 1628,
"percent": 8.6
},
"hispanic": {
"count": 1138,
"percent": 6
}
},
"formatted": {
"medianHouseholdIncome": "$187,801",
"perCapitaIncome": "$147,098",
"medianHomeValue": "$2,000,001",
"medianRent": "$3,251"
}
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
zip | string | 90210 | ZIP Code Tabulation Area identifier |
name | string | ZCTA5 90210 | ZCTA descriptive name |
acsYear | number | 2024 | American Community Survey year used for data |
population | object | {…} | |
population.total | number | 19004 | Total population count in ZIP code |
population.malePremium | number | 9417 | Male population count |
population.femalePremium | number | 9587 | Female population count |
population.medianAgePremium | number | 51 | Median age of population in years |
income | object | {…} | |
income.medianHousehold | number | 187801 | Median household income in dollars |
income.perCapitaPremium | number | 147098 | Per capita income in dollars |
housing | object | {…} | |
housing.medianHomeValuePremium | number | 2000001 | Median home value in dollars |
housing.medianRentPremium | number | 3251 | Median rent price in dollars |
housing.totalUnitsPremium | number | 9531 | Total housing units in area |
housing.occupiedUnitsPremium | number | 8029 | Number of occupied housing units |
housing.vacantUnitsPremium | number | 1502 | Number of vacant housing units |
housing.ownerOccupiedPremium | number | 5679 | Count of owner-occupied housing units |
housing.renterOccupiedPremium | number | 2350 | Count of renter-occupied housing units |
housing.homeOwnershipRatePremium | number | 70.7 | Percentage of homes owner-occupied |
education | object | {…} | |
education.collegeEducatedPctPremium | number | 68.1 | Percentage with college degree or higher |
education.bachelorsPremium | number | 4837 | Count of people with bachelor's degree |
education.mastersPremium | number | 2389 | Count of people with master's degree |
education.professionalPremium | number | 1962 | Count of people with professional degree |
education.doctoratePremium | number | 929 | Count of people with doctorate degree |
employment | object | {…} | |
employment.laborForcePremium | number | 9017 | Total labor force population count |
employment.unemployedPremium | number | 468 | Number of unemployed persons |
employment.unemploymentRatePremium | number | 5.2 | Unemployment rate as percentage |
race | object | {…} | |
race.white | object | {…} | |
race.white.countPremium | number | 15147 | White population count |
race.white.percentPremium | number | 79.7 | White population percentage |
race.black | object | {…} | |
race.black.countPremium | number | 403 | Black or African American population count |
race.black.percentPremium | number | 2.1 | Black or African American population percentage |
race.asian | object | {…} | |
race.asian.countPremium | number | 1628 | Asian population count |
race.asian.percentPremium | number | 8.6 | Asian population percentage |
race.hispanic | object | {…} | |
race.hispanic.countPremium | number | 1138 | Hispanic or Latino population count |
race.hispanic.percentPremium | number | 6 | Hispanic or Latino population percentage |
formattedPremium | object | {…} | Human-readable formatted currency values |
formatted.medianHouseholdIncomePremium | string | $187,801 | |
formatted.perCapitaIncomePremium | string | $147,098 | |
formatted.medianHomeValuePremium | string | $2,000,001 | |
formatted.medianRentPremium | string | $3,251 |
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This skill is not part of VerveKit. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 10 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Use cases
- Market Research
- Analyze demographics for market segmentation and targeting
- Real Estate
- Evaluate neighborhoods for real estate investment and valuation
- Site Selection
- Choose business locations based on demographic profiles
- Ad Targeting
- Build demographic profiles for advertising and personalization
Other ways to use ZIP Demographics Skill
Set up ZIP Demographics Skill on VerveKit, or reach the same source a different way. Your VerveKit account and credits work on all of them — one key, one balance.
Related
More in Data Lookup: