238M+ US property records. RESTful JSON API with parcel search, owner intelligence, permits, deeds, and market analytics.
Include your API key in the Authorization header:
Authorization: Bearer pz_your_key_here
Requests without a key fall back to IP-based free-tier rate limits. Some endpoints (deals, market, owners) require authentication.
curl -H "Authorization: Bearer pz_your_key" \
"https://propzilla.vercel.app/api/v1/parcels/37183:0429966"import requests
resp = requests.get(
"https://propzilla.vercel.app/api/v1/parcels/37183:0429966",
headers={"Authorization": "Bearer pz_your_key"}
)
parcel = resp.json()
print(parcel["address"], parcel["total_assessed_value"])const res = await fetch(
"https://propzilla.vercel.app/api/v1/parcels/37183:0429966",
{ headers: { Authorization: "Bearer pz_your_key" } }
);
const parcel = await res.json();
console.log(parcel.address, parcel.total_assessed_value);| Tier | Per Day | Per Minute | Price |
|---|---|---|---|
| Free | 100 | 10 | $0 |
| Pro | 10,000 | 100 | $49/mo |
| API 100K | 100,000 | 1,000 | $199/mo |
Rate limit info is returned in response headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
| Method | Path | Description | Auth |
|---|---|---|---|
| GET | /api/v1/parcels/{id} | Look up a single parcel by ID | Optional |
| GET | /api/v1/parcels/{id}/owner | Owner details and portfolio summary | Optional |
| GET | /api/v1/parcels/{id}/permits | Building permits for a parcel | Optional |
| GET | /api/v1/parcels/{id}/deeds | Deed and transaction history | Optional |
| GET | /api/v1/parcels/{id}/risks | Flood, wildfire, air quality, and crime risk | Optional |
| POST | /api/v1/search | Search parcels by bounds, filters, and sorting | Optional |
| GET | /api/v1/coverage | Data coverage by state and county | Optional |
| GET | /api/v1/deals/absentee | Find absentee-owned properties | Required |
| GET | /api/v1/deals/flips | Recent flips and active flipper profiles | Required |
| GET | /api/v1/market/counties | County-level market statistics | Required |
| GET | /api/v1/market/trends | Quarterly market trends and comparisons | Required |
| GET | /api/v1/owners/search | Search property owners by name | Required |
| GET | /api/v1/owners/{name}/portfolio | Full portfolio for an owner | Required |
Errors return a JSON object with an error field:
{
"error": "Invalid API key"
}| Status | Meaning |
|---|---|
| 400 | Bad request (missing or invalid parameters) |
| 401 | Invalid or missing API key |
| 403 | API key is inactive or expired |
| 404 | Resource not found |
| 429 | Rate limit exceeded (check Retry-After header) |
| 500 | Internal server error |
The full OpenAPI 3.0 specification is available at /openapi.json. Import it into Postman, Insomnia, or any OpenAPI-compatible tool.