New: PropData now supports coordinate-based parcel lookup and AI assistant access through MCP connectors for ChatGPT and Claude. See what changed
Sources Pricing Docs Real Estate API Use Cases vs RentCast Start Free Trial â†'
PROPDATA API Reference v1 20 ENDPOINTS · 16 SOURCES · 166M+ PARCELS BASE: propdata-api-worker.sales-fd3.workers.dev

Overview

PropData is a real estate market intelligence API that aggregates 16 data sources into a single REST interface. One call to /v1/market returns rent trends, market velocity, affordability metrics, macroeconomic data, and AI-computed investor signals. One call to /v1/property returns owner name, assessed value, sale history, and equity estimate from the 166M+ parcel pipeline â€" with the Miss Flywheel self-enriching pipeline firing on every miss.

3-day free trial on all plans. Cancel before day 3 â€" pay nothing. Start your trial â†'

What you get in one call

  • Market intelligence â€" Zillow ZORI rent trends, HUD Fair Market Rents by bedroom, Realtor.com DOM + inventory, Redfin sale-to-list ratio, FHFA home price appreciation, Census ACS affordability, FRED live mortgage rates, AI investor signals
  • Property + parcel â€" 166M+ county assessor records (own pipeline), owner name, mailing address, assessed/market/land value, annual tax, sale history, beds/baths/sqft, equity estimate, absentee owner flag, vacant land flag, FEMA flood zone
  • Intelligence â€" ZIP-level AI investment summary (Claude-powered BUY/HOLD/PASS), state friction + risk index, neighborhood Census ACS profile
  • Leads â€" Pre-foreclosure leads with auction dates, default amounts, lender, trustee; skip trace (owner phones + email)
  • Change feeds â€" Property delta and pre-foreclosure delta since any ISO 8601 timestamp, with cursor pagination

The Miss Flywheel

When /v1/property misses the production parcel database, PropData fires a live enrichment pipeline: government ArcGIS source query â†' field-level confidence scoring (≥85 required for production write) â†' Supabase + Cloudflare KV edge cache write. The repeat lookup returns in under one second. Coverage compounds with every search. No fabricated fields â€" owner name, beds, baths, sqft stay blank until source-verified from a government record.

Authentication

All endpoints except /v1/health, /v1/stats, and /v1/changelog require an API key. Pass it as a header or query parameter.

Header (recommended)

x-api-key: YOUR_API_KEY

Query parameter

GET /v1/market?zip=55104&api_key=YOUR_API_KEY
Keep your key private. Don't expose it in client-side JavaScript. Use environment variables or a backend proxy in production.

Rate Limits

Rate limits are enforced per API key per hour. Exceeding the limit returns HTTP 429.

PlanReq/hrReq/minReq/monthPrice
Starter5006010,000$79/mo
Builder1,500120100,000$199/mo
ScaleUnlimitedUnlimited500,000$499/mo
EnterpriseUnlimitedUnlimitedUnlimited$1,499/mo
RapidAPI plans: BASIC maps to Starter (500 rph), PRO maps to Builder (1,500 rph), ULTRA/MEGA map to internal (unlimited).
Skip trace (/v1/skip-trace) requires Builder tier or above. Nationwide delta queries without zip/state filter require Builder tier or above.

Base URL

https://propdata-api-worker.sales-fd3.workers.dev

All endpoints are prefixed with /v1/. HTTPS only. The API runs on Cloudflare's global edge network â€" responses served from the nearest data center, typically under 50ms.

RapidAPI subscribers use: https://propdata-real-estate-market-intelligence-api.p.rapidapi.com

CORS enabled. All origins allowed. Use header-based auth in production.

/v1/market

Full market profile. Returns rent, listing velocity, demand signals, affordability, home price appreciation, FRED macro context, and computed investor signals â€" from 7 sources in one call.

GET /v1/market Full market snapshot
ParameterTypeDescription
zipoptional5-digit ZIP. e.g. 55104
stateoptional2-letter state. e.g. MN
metrooptionalMetro name. e.g. Minneapolis
One of zip, state, or metro is required.
const res = await fetch(
  'https://propdata-api-worker.sales-fd3.workers.dev/v1/market?zip=55104',
  { headers: { 'x-api-key': 'YOUR_KEY' } }
);
const d = await res.json();
d.snapshot.median_rent;         // 1534
d.macro.mortgage_rate_30yr;     // 6.75
d.snapshot.investor_signal;     // "watchlist"
d.snapshot.gross_yield_pct;     // 5.75
import requests

r = requests.get(
  'https://propdata-api-worker.sales-fd3.workers.dev/v1/market',
  params={'zip': '55104'},
  headers={'x-api-key': 'YOUR_KEY'}
)
d = r.json()
print(d['snapshot']['median_rent'], d['macro']['mortgage_rate_30yr'])
curl "https://propdata-api-worker.sales-fd3.workers.dev/v1/market?zip=55104" \
  -H "x-api-key: YOUR_KEY"

/v1/rent

Rent-focused endpoint. Returns Zillow ZORI asking rent + HUD Fair Market Rents by bedroom. Lighter than /v1/market when you only need rent data.

GET /v1/rent ZORI + HUD FMR rent data
ParameterTypeDescription
zipoptional5-digit ZIP
stateoptional2-letter state
metrooptionalMetro name

Returns: estimated_rent, zori, fmr_2br, median_rent, history[] (12 months), source attribution.

/v1/estimate

Proprietary weighted rent AVM. Returns low/mid/high range with confidence score and full model weight transparency. Full estimate engine docs â†'

GET /v1/estimate Weighted rent estimate
ParameterTypeDescription
zipoptional5-digit ZIP (required if no state)
stateoptional2-letter state
bedsoptional0=Studio, 1â€"4. Default: 2
const res = await fetch(
  'https://propdata-api-worker.sales-fd3.workers.dev/v1/estimate?zip=55104&beds=2',
  { headers: { 'x-api-key': 'YOUR_KEY' } }
);
const { estimate } = await res.json();
estimate.monthly_low;     // 1482
estimate.monthly_mid;     // 1609
estimate.monthly_high;    // 1738
estimate.confidence_pct;  // 85

Model weights

SourceWeightWhy
Zillow ZORI40%Current asking rent â€" strongest market signal
Census ACS25%Actual renter-paid rent â€" affordability anchor
HUD FMR20%Government bedroom benchmark
Assessor cap rate15%Implied from sale price â€" investor sanity check

/v1/listing

Active listing market data from Realtor.com Research. Returns median listing price, active inventory, and median days on market.

GET /v1/listing Active inventory + DOM
ParameterTypeDescription
zipoptional5-digit ZIP
stateoptional2-letter state
metrooptionalMetro name

/v1/zip-intel

ZIP-level investment intelligence with Claude-powered AI narrative. Returns AVM value, gross yield, YoY change, vacancy rate, FEMA flood zone, walkability score, crime index, school score, opportunity zone flag, USDA rural eligibility, and a 3-sentence BUY/HOLD/PASS investment summary.

GET /v1/zip-intel AI investment intelligence per ZIP
ParameterTypeDescription
ziprequired5-digit ZIP. e.g. 55104
const res = await fetch(
  'https://propdata-api-worker.sales-fd3.workers.dev/v1/zip-intel?zip=55104',
  { headers: { 'x-api-key': 'YOUR_KEY' } }
);
const d = await res.json();
d.market.gross_yield;          // 5.75
d.scores.walkability;          // 72
d.scores.school_score;         // 7
d.market.is_opportunity_zone;  // false
d.ai_analysis;                // "HOLD. This ZIP..."
AI narrative is generated by Claude Haiku with prompt caching. Cached at edge for 2 hours per ZIP.

/v1/state-intel

State-level market signal. Returns BUY / HOLD / CAUTION / AVOID based on seller friction index and state risk index, plus top 5 metros with ZHVI and 12-month forecast.

GET /v1/state-intel State market signal + risk index
ParameterTypeDescription
staterequired2-letter state abbreviation. e.g. TX
const res = await fetch(
  'https://propdata-api-worker.sales-fd3.workers.dev/v1/state-intel?state=TX',
  { headers: { 'x-api-key': 'YOUR_KEY' } }
);
const d = await res.json();
d.signal;              // "BUY"
d.market.friction_score;// 28
d.market.grade;        // "A"
d.top_metros;          // [{name, zhvi, forecast_12m}]

/v1/neighborhood

Census ACS neighborhood profile by ZIP or city/state. Returns population, median income, vacancy rate, poverty rate, college degree %, and median gross rent.

GET /v1/neighborhood Census ACS neighborhood profile
ParameterTypeDescription
zipoptional5-digit ZIP
cityoptionalCity name. Use with state.
stateoptional2-letter state
limitoptionalMax results. Default 20, max 50.
One of zip or city + state is required.

/v1/property

County assessor parcel lookup with live self-enriching Miss Flywheel pipeline. Returns owner name, mailing address, market/assessed/land/improvement value, annual tax, last sale price/date, beds/baths/sqft/year built, equity estimate, absentee owner flag, vacant land flag, FEMA flood zone.

GET /v1/property Parcel lookup + live enrichment
ParameterTypeDescription
addressoptionalStreet address. City/state/ZIP can be embedded. e.g. 123 Main St, Saint Paul MN 55104
zipoptional5-digit ZIP â€" returns parcels in that ZIP
stateoptional2-letter state
parceloptionalParcel ID / APN. Prefix with FIPS: 27053-123456
county_fipsoptional5-digit county FIPS code
enrichoptionalSet to full for comps, rent estimate, and listing context (Builder+)
include_geometryoptionalSet to 1 to attach GeoJSON boundary (parcel ID lookups only)
limitoptionalMax results. Default 10, max 25.
const res = await fetch(
  'https://propdata-api-worker.sales-fd3.workers.dev/v1/property?address=123+Main+St&zip=55104&state=MN',
  { headers: { 'x-api-key': 'YOUR_KEY' } }
);
const { properties } = await res.json();
const p = properties[0];
p.owner_name;              // "SMITH JAMES"
p.market_value;            // 389000
p.equity.estimated_equity; // 187000
p.flags.is_absentee_owner; // false
p.enrichment_status;       // "complete" | "live_enriched" | "queued"
import requests

r = requests.get(
  'https://propdata-api-worker.sales-fd3.workers.dev/v1/property',
  params={'zip': '55104', 'state': 'MN', 'limit': '25'},
  headers={'x-api-key': 'YOUR_KEY'}
)
props = r.json()['properties']
for p in props:
  print(p['owner_name'], p['market_value'])
curl "https://propdata-api-worker.sales-fd3.workers.dev/v1/property?zip=55104&state=MN" \
  -H "x-api-key: YOUR_KEY"

Enrichment status values

StatusMeaning
completeAll fields present in production DB
live_enrichedMiss Flywheel fired and returned a production-safe result
review_neededCandidate found but confidence below 85 â€" preserved for review
queuedEnrichment pipeline running â€" retry in 10 seconds
blockedRate limit hit or repeated failures â€" paused for 7 days
When enrichment_status is queued, the response includes retry_after_seconds: 10. Poll once and the cache usually has the result.

/v1/property/delta

Property change feed. Returns all parcels updated in the county_assessor database since the provided ISO 8601 timestamp. Cursor pagination supported for large result sets.

GET /v1/property/delta Parcels updated since timestamp
ParameterTypeDescription
sincerequiredISO 8601 timestamp. e.g. 2026-06-01T00:00:00Z
zipoptionalFilter by ZIP
stateoptionalFilter by state
cursoroptionalPagination cursor from previous next_cursor
limitoptionalMax results. Default 100, max 1000.
Nationwide queries (no zip or state) require Builder tier or above.
const res = await fetch(
  'https://propdata-api-worker.sales-fd3.workers.dev/v1/property/delta?since=2026-06-01T00:00:00Z&state=MN',
  { headers: { 'x-api-key': 'YOUR_KEY' } }
);
const { properties, has_more, next_cursor } = await res.json();
// Use next_cursor in subsequent calls to paginate

/v1/comps

Comparable sales from the 166M+ parcel database. Returns up to 25 comps with sale price, sale date, beds, baths, sqft, year built, and address. Filter by bedroom count.

GET /v1/comps Comparable sales engine
ParameterTypeDescription
ziprequired5-digit ZIP
stateoptional2-letter state
bedsoptionalFilter by bedroom count
limitoptionalMax results. Default 10, max 25.

/v1/geocode

Converts a US address to lat/lng + ZIP, city, state, county, county FIPS, and state FIPS. Useful for enriching leads before passing to /v1/property or /v1/market.

GET /v1/geocode Address â†' coordinates + FIPS
ParameterTypeDescription
addressrequiredFull or partial US address
zipoptional5-digit ZIP to assist resolution

/v1/parcel-geometry

GeoJSON parcel boundaries from county ArcGIS sources. Returns polygon geometry, centroid lat/lng, and bounding box. Successful lookups are cached. Returns geometry_available: false when the county source is not yet configured.

GET /v1/parcel-geometry GeoJSON parcel boundary (beta)
ParameterTypeDescription
parcelrequiredParcel ID or APN. Aliases: parcel_id, apn
county_fipsrequired5-digit county FIPS. Alias: fips
const res = await fetch(
  'https://propdata-api-worker.sales-fd3.workers.dev/v1/parcel-geometry?county_fips=27053&parcel=1234567890',
  { headers: { 'x-api-key': 'YOUR_KEY' } }
);
const d = await res.json();
d.geometry_available;  // true | false
d.geometry;            // GeoJSON Feature object
d.centroid;            // { lat: 44.95, lon: -93.09 }
d.bbox;                // [minLon, minLat, maxLon, maxLat]
Beta: County coverage expands as ArcGIS sources are verified and registered. Also available via /v1/property?parcel=&include_geometry=1.

/v1/skip-trace

Owner phone numbers (up to 3), email, equity estimate, loan balance, ARV, vacancy flag, and owner-occupancy flag. Requires Builder tier or above.

GET /v1/skip-trace Owner phones + email (Builder+)
ParameterTypeDescription
addressoptionalStreet address
zipoptional5-digit ZIP â€" returns all records in ZIP
stateoptional2-letter state
Requires Builder plan or above. Starter tier receives HTTP 403.

/v1/preforeclosure

Active pre-foreclosure leads with auction dates, default amounts, lender, trustee, case numbers, assessed value, and absentee owner flag.

GET /v1/preforeclosure Pre-foreclosure leads
ParameterTypeDescription
zipoptional5-digit ZIP
stateoptional2-letter state
limitoptionalMax results. Default 20, max 100.
One of zip or state is required.

/v1/preforeclosure/delta

Pre-foreclosure change feed. Returns leads updated since the provided ISO 8601 timestamp. Filter by status. Cursor pagination supported.

GET /v1/preforeclosure/delta Pre-foreclosure change feed
ParameterTypeDescription
sincerequiredISO 8601 timestamp. e.g. 2026-06-01T00:00:00Z
zipoptionalFilter by ZIP
stateoptionalFilter by state
statusoptionalFilter by filing status. e.g. new
cursoroptionalPagination cursor from previous response
limitoptionalMax results. Default 100, max 1000.
Nationwide queries (no zip or state) require Builder tier or above.

/v1/usage

GET /v1/usage API key usage stats

Returns requests this hour, hourly limit for your tier, and reset timestamp.

curl https://propdata-api-worker.sales-fd3.workers.dev/v1/usage \
  -H "x-api-key: YOUR_KEY"

// { "tier": "pro", "requests_this_hour": 47, "limit_per_hour": 500, "reset_at": "..." }

/v1/health

GET /v1/health API + source pipeline status

Returns uptime status for all 16 data sources, active feature flags, and RapidAPI plan map. No authentication required.

curl https://propdata-api-worker.sales-fd3.workers.dev/v1/health

/v1/stats

GET /v1/stats Live parcel count

Returns live parcel count in the county_assessor database, formatted label, and last updated timestamp. Cached for 5 minutes. No authentication required.

curl https://propdata-api-worker.sales-fd3.workers.dev/v1/stats

// { "count": 166000000, "label": "166.0M+", "updated_at": "..." }

/v1/changelog

GET /v1/changelog Versioned API updates

Returns versioned changelog of all API updates with version, title, type, status, date, summary, details, and affected endpoints. No authentication required.

curl https://propdata-api-worker.sales-fd3.workers.dev/v1/changelog

Error Codes

CodeStatusMeaning
400Bad RequestMissing required parameter or invalid value
401UnauthorizedMissing or invalid API key
403ForbiddenEndpoint requires a higher tier (e.g. skip-trace requires Builder+)
404Not FoundEndpoint does not exist
429Too Many RequestsRate limit exceeded for your tier. Resets each hour.
500Server ErrorInternal error â€" contact support if persistent

All errors return JSON: {"error": "message", "status": 400}

Data Sources

PropData aggregates 16 live sources. Data is ingested and cached â€" endpoints do not make real-time upstream calls on every request.

  • Zillow ZORI â€" Zillow Observed Rent Index. Monthly median asking rent at ZIP, state, and metro level.
  • HUD Fair Market Rents â€" Annual bedroom-level rent benchmarks for every US county.
  • Realtor.com Research â€" Monthly ZIP/state/metro listing data: DOM, inventory, list price.
  • Redfin â€" Sale-to-list ratio, % above list, homes sold, months of supply.
  • US Census ACS â€" 5-year American Community Survey. Vacancy rate, renter %, median income.
  • FHFA HPI â€" Federal Housing Finance Agency quarterly Home Price Index. State and metro appreciation.
  • FRED / St. Louis Fed â€" Live 30yr mortgage rate, shelter CPI YoY, national vacancy rate, housing starts.
  • Own county assessor pipeline â€" 166M+ parcels ingested directly from government ArcGIS layers. No licensing from ATTOM or CoreLogic.
  • ArcGIS county GIS â€" Live source-of-truth enrichment for the Miss Flywheel pipeline. Hennepin MN, Miami-Dade FL, Madison AL confirmed + expanding.
  • FEMA flood + hazard data â€" Flood zone per property, Natural Hazard Risk across 18 hazard types.
  • Seller friction index â€" Proprietary state-level friction and market grade score.
  • State risk index â€" Property crime, vacant risk score, owner and rental vacancy by state.
  • Zillow Metro Stats â€" ZHVI, YoY, 12-month forecast, inventory by metro.
  • Pre-foreclosure filing data â€" Active filings with auction dates, lender, trustee, case numbers.
  • Parcel geometry sources â€" County ArcGIS FeatureServer/MapServer polygon boundaries.
  • ZIP/county crosswalk â€" FIPS resolution for ZIP-to-county lookups used in enrichment routing.
Government records only. The Miss Flywheel pipeline exclusively sources from verified public county assessor and GIS records. No fabricated fields. No paid data reseller layer.
New Platform Release

AI-ready property intelligence with coordinate-to-parcel lookup.

PropData is now more than a traditional real estate API. Developers and supported AI assistants can query live property intelligence, market data, parcel records, rent estimates, comps, geometry, and coordinate-based parcel lookup through source-backed PropData tools.

Coordinate-based parcel lookup

Send latitude and longitude to /v1/property/by-location. PropData resolves the county/FIPS, queries a verified county parcel GIS layer, and returns the parcel that contains the point when coverage is configured.

Point-in-polygon matching

Successful coordinate matches are labeled match_level: point_in_polygon and coverage_status: matched, avoiding forced address-string matches.

ChatGPT and Claude MCP access

PropData now has an OAuth-protected MCP connector so supported AI assistants can call live PropData tools using each subscriber's own PropData API key.

GET /v1/property/by-location?lat=25.8990225371643&lng=-80.237689454084&include_geometry=1

MCP Connector:
https://propdata-mcp.sales-fd3.workers.dev/mcp

Built for map-based workflows

Ideal for platforms where a geocoded map address does not match the legal situs address or assessor record.

Self-enriching Miss Flywheel

When valid property searches miss production coverage, PropData can trigger source-backed live evidence enrichment, confidence scoring, and edge-cached learned results.

Transparent data integrity

PropData labels match level, coverage status, enrichment state, confidence, source names, and review candidates. No forced bad parcel matches.