crewai-zillapi
CrewAI tools for Zillapi, a REST API for Zillow property data.
Give a CrewAI agent the ability to look up a property by address, zpid or Zillow URL, pull valuations, price history, tax history, schools, photos and comparable homes, and search for sale, for rent or sold listings inside a geographic area.
Install
pip install crewai-zillapi
Get an API key
Create a key at zillapi.com. You get 100 credits at signup, no card, one time. Paid plans start at $5 per month. See pricing.
Set the key in your environment:
export ZILLAPI_KEY="zk_your_key_here"
Quick start
from crewai import Agent
from crewai_zillapi import (
ZillapiPropertyByAddressTool,
ZillapiPropertyDetailTool,
ZillapiListingSearchTool,
)
analyst = Agent(
role="Real estate analyst",
goal="Answer questions about properties and local markets with real data",
backstory="You research homes and neighborhoods using live Zillow data.",
tools=[
ZillapiPropertyByAddressTool(),
ZillapiPropertyDetailTool(),
ZillapiListingSearchTool(),
],
)
Use a single tool directly:
import json
from crewai_zillapi import ZillapiPropertyByAddressTool
result = json.loads(
ZillapiPropertyByAddressTool().run(address="350 5th Ave, New York NY 10118")
)
print(result["data"]["zpid"])
Tools
| Tool | What it does | Credit cost |
|---|---|---|
ZillapiPropertyByAddressTool |
Resolve a street address to a full property record | 3 per successful call |
ZillapiPropertyByZpidTool |
Full property record for a known zpid | 1 per successful call |
ZillapiPropertyDetailTool |
One detail section for a zpid | 1 per successful call |
ZillapiPropertyByUrlTool |
Resolve a Zillow URL to a property or building | 1 per record returned |
ZillapiListingSearchTool |
Search listings inside a bounding box | 1 per listing returned |
ZillapiJobTool |
Poll an async job and read its results | 0, free |
ZillapiAccountTool |
Plan, remaining credit balance, recent usage | 0, free |
Failed calls are never charged.
ZillapiPropertyDetailTool sections: zestimate, price-history, tax-history, schools,
photos, agent, nearby, open-houses, facts.
Searching an area
A listing search needs a real bounding box in decimal degrees. A place name on its own is not accepted, so convert the place to coordinates first.
import json
from crewai_zillapi import ZillapiListingSearchTool
result = json.loads(
ZillapiListingSearchTool().run(
west=-73.99, south=40.74, east=-73.98, north=40.75,
status="for_sale", beds_min=2, price_max=2_000_000, max_items=25,
)
)
Because a search costs 1 credit per listing returned, keep max_items tight. Asking for more
than 50 listings runs the search asynchronously and returns a job_id, which you poll with
ZillapiJobTool until its status is succeeded, then read with action="results".
Response shape
Every tool returns a JSON string with a stable envelope, and the tools never raise from execution. An agent can always parse the result.
{
"success": true,
"data": { "zpid": "1234567", "price": 1250000 },
"request_id": "req_abc123"
}
{ "success": false, "error": { "code": "invalid_filters", "message": "..." } }
data is the payload itself, so you never have to reach through a second wrapper.
request_id is worth logging if you need to ask about a specific call. List endpoints
also return a meta object alongside data.
Match on code, never on message.
| Code | Meaning |
|---|---|
missing_api_key |
ZILLAPI_KEY is not set |
invalid_api_key |
The key was rejected |
out_of_credits |
No credits left, top up to continue |
invalid_filters |
A search was sent without a bounding box |
invalid_search_url |
The Zillow search URL was not usable |
missing_input |
A required argument was absent |
not_found |
Nothing matched the address, zpid or URL |
job_not_ready |
The async job has not finished yet |
rate_limited |
Too many requests, respect Retry-After |
service_unavailable |
The data provider is temporarily unavailable |
timeout |
The request timed out |
network |
The API could not be reached |
Coverage
These tools cover the synchronous, agent friendly surface of the API. The full REST API also offers batch property jobs, chained search with details, building unit extraction and outbound webhooks. See the API documentation and the OpenAPI spec.
Zillapi is also available as an MCP server for MCP compatible clients.
Notes
Zillapi is an independent service and is not affiliated with, endorsed by, or sponsored by Zillow, Inc. Zillow is a trademark of its respective owner. Use of the data is subject to the Zillapi terms.
License
MIT
Metadata
Release files for crewai-zillapi 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| crewai_zillapi-0.1.1.tar.gz | 13.5 kB | Without provenance | Details for crewai_zillapi-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| crewai_zillapi-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for crewai_zillapi-0.1.1-py3-none-any.whl |
Total release size: 25.7 kB
Release files / crewai_zillapi-0.1.1.tar.gz
| Download URL | crewai_zillapi-0.1.1.tar.gz |
|---|---|
| Size | 13.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4df9dcd1ce08986667e024c0284152a2ee51a421989a67f3632dcef2f0ef6957
|
|
BLAKE2b-256 checksum How to use checksums |
bb08c6e76d511008695f8176a4bb0b81be9a2bf4d27cb7d2f8ffacaf144bb0ff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / crewai_zillapi-0.1.1-py3-none-any.whl
| Download URL | crewai_zillapi-0.1.1-py3-none-any.whl |
|---|---|
| Size | 12.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
67856712c712a9a975b253010df09e4b65f1b42f5e88877129876e62f87062c3
|
|
BLAKE2b-256 checksum How to use checksums |
ada7086e8eddbd0c3054f63247f1aa191fb9cd263414cb25a1a7763d15952a46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Security for crewai-zillapi 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.