Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when a task needs real U.S. residential property data: valuation, listings, price or tax history, schools, or a zillow.com URL.
.claude/skills/sickn33-us-property-data/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 15% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -21% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -51% | 0% |
Gives Copilot a concrete, verifiable way to answer property-data questions in code instead of guessing at them.
Activate this skill when:
zillow.com URL and asks something about that propertyDo not use this skill for:
U.S. residential property facts are not derivable from a model's weights. Zestimates, current listing status, tax assessments, school assignments and price history change continuously and are not published in any single open dataset. Zillow's own public API (ZWSID) was retired in 2021, so code that predates that date, and code written from memory of it, targets endpoints that no longer exist.
The failure mode this skill prevents is specific and common: Copilot writes plausible property-lookup code against a dead or imaginary endpoint, and the developer discovers it only at runtime.
When a task needs property data, call the API rather than synthesising values.
zillow.com URL, or a zpid all resolve to the same record. Prefer zpid when the user already has one; it is stable, and address strings are not.Base URL https://api.zillapi.com. Bearer auth: Authorization: Bearer $ZILLAPI_KEY.
| Task | Call | | --- | --- | | Resolve by address | GET /v1/properties/by-address?address=... | | Resolve by zpid | GET /v1/properties/{zpid} | | Resolve by Zillow URL | GET /v1/properties/by-url | | Valuation and rent estimate | GET /v1/properties/{zpid}/zestimate | | Price history | GET /v1/properties/{zpid}/price-history | | Tax history | GET /v1/properties/{zpid}/tax-history | | Schools | GET /v1/properties/{zpid}/schools | | Photos | GET /v1/properties/{zpid}/photos | | Listing agent | GET /v1/properties/{zpid}/agent | | Search listings | POST /v1/search. The three listing endpoints are also POST: POST /v1/listings/for-sale, POST /v1/listings/for-rent, POST /v1/listings/sold | | Several properties at once | POST /v1/properties/batch |
Both property lookups take an optional fields query parameter; use it rather than fetching the whole record. Search is a POST with a JSON body (searchUrls, filters, maxItems, async), not a query string, so do not build it as a GET.
An MCP server is available at https://api.zillapi.com/mcp for agent contexts that prefer tool calls to HTTP.
401 - key missing or wrong environment. Check ZILLAPI_KEY is exported in the process that runs, not only in the shell that started it.404 - the address did not resolve. Fall back to a search rather than retrying the same string.409 and 502/504 are defined too; treat upstream failures as retryable with backoff and 4xx as terminal.429 - rate limited. Back off; do not retry in a tight loop.Ask for one real address end to end before trusting generated code. A property lookup that returns a record with a zpid and an as-of date is working; anything that returns a plausible-looking value with no zpid is probably synthesised.
For a user who pastes a Zillow URL and asks for its valuation:
text1. Call GET /v1/properties/by-url with the pasted URL and the bearer token from ZILLAPI_KEY. 2. Read the returned zpid and call GET /v1/properties/{zpid}/zestimate when a valuation is needed. 3. Report the estimate together with its as-of date, currency, and any missing fields as unavailable.
OpenAPI specification (canonical, machine-readable): https://zillapi.com/openapi.json Site: https://zillapi.com/
Declared risk: safe, with the behaviours stated rather than left to the label.
api.zillapi.com. Nothing runs locally.ZILLAPI_KEY from the environment and sends it as a bearer token. It is never written, logged or echoed by anything here.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-07 | pass→pass | 19,237 | 10,328 | -46% | 1 | 1 | 0% | 2,740 | 2,659 | -3% | 0 | 0 | — |
case-01 | fail→pass | 29,991 | 25,630 | -15% | 1 | 1 | 0% | 5,047 | 5,779 | +15% | 0 | 0 | — |
case-02 | fail→pass | 27,033 | 21,894 | -19% | 1 | 1 | 0% | 4,624 | 5,156 | +12% | 0 | 0 | — |
case-03 | fail→pass | 35,795 | 21,514 | -40% | 1 | 1 | 0% | 6,404 | 5,033 | -21% | 0 | 0 | — |
case-04 | fail→pass | 17,478 | 12,218 | -30% | 1 | 1 | 0% | 2,217 | 2,914 | +31% | 0 | 0 | — |
case-05 | fail→pass | 27,361 | 8,298 | -70% | 1 | 1 | 0% | 4,266 | 2,111 | -51% | 0 | 0 | — |
case-06 | fail→pass | 20,820 | 10,095 | -52% | 1 | 1 | 0% | 3,133 | 2,605 | -17% | 0 | 0 | — |
case-08 | fail→pass | 14,891 | 7,944 | -47% | 1 | 1 | 0% | 1,606 | 2,046 | +27% | 0 | 0 | — |
case-09 | fail→pass | 18,626 | 12,630 | -32% | 1 | 1 | 0% | 2,481 | 3,205 | +29% | 0 | 0 | — |
case-10 | fail→pass | 12,884 | 9,608 | -25% | 1 | 1 | 0% | 1,401 | 2,438 | +74% | 0 | 0 | — |
case-11 | fail→pass | 15,060 | 8,336 | -45% | 1 | 1 | 0% | 1,727 | 2,066 | +20% | 0 | 0 | — |
case-12 | pass→pass | 22,386 | 16,292 | -27% | 1 | 1 | 0% | 3,080 | 3,786 | +23% | 0 | 0 | — |
case-13 | pass→pass | 15,360 | 11,180 | -27% | 1 | 1 | 0% | 1,641 | 2,700 | +65% | 0 | 0 | — |
case-14 | pass→pass | 18,482 | 11,477 | -38% | 1 | 1 | 0% | 2,480 | 2,676 | +8% | 0 | 0 | — |
case-15 | pass→pass | 12,977 | 9,767 | -25% | 1 | 1 | 0% | 1,340 | 2,311 | +72% | 0 | 0 | — |
case-16 | fail→pass | 21,314 | 6,532 | -69% | 1 | 1 | 0% | 2,872 | 1,773 | -38% | 0 | 0 | — |
case-17 | fail→pass | 18,575 | 13,494 | -27% | 1 | 1 | 0% | 2,394 | 3,233 | +35% | 0 | 0 | — |
case-18 | pass→pass | 15,828 | 10,763 | -32% | 1 | 1 | 0% | 1,970 | 2,754 | +40% | 0 | 0 | — |
case-19 | pass→pass | 13,609 | 11,450 | -16% | 1 | 1 | 0% | 1,580 | 2,856 | +81% | 0 | 0 | — |
case-20 | pass→pass | 21,166 | 14,578 | -31% | 1 | 1 | 0% | 2,702 | 3,229 | +20% | 0 | 0 | — |
case-21 | pass→pass | 19,596 | 17,963 | -8% | 1 | 1 | 0% | 2,420 | 3,768 | +56% | 0 | 0 | — |
case-22 | pass→pass | 20,140 | 14,848 | -26% | 1 | 1 | 0% | 3,001 | 3,615 | +20% | 0 | 0 | — |
case-23 | pass→pass | 23,379 | 20,520 | -12% | 1 | 1 | 0% | 2,661 | 3,751 | +41% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +52 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.