Documentation

vaaya / docs / reference

Real estate

US property intelligence from two vendors with different shapes: RentCast is flat-priced per request and listing-first; RealEstateAPI is metered per record and ownership-first, with a 200+ filter compound search, lender-grade valuations, and owner skip-trace. Both are US-only.

When to use which

NeedCallPriceWhy
What’s for sale / for rent right nowrentcast/sale-listings · rentcast/rental-listings30¢Active listings with price, days on market, agent contacts.
Zip-level market statsrentcast/market-stats30¢Prices, rents, $/sqft, DOM, with monthly history.
Rent estimaterentcast/rent-estimate35¢Monthly rent + range + rental comps.
Find all properties WHERE …realestateapi/property-search5¢ + 15¢/recordEquity, absentee/corporate owner, foreclosure stage, vacancy — 200+ filters RentCast can’t express.
Everything about one addressrealestateapi/property-detail20¢Deeper and cheaper than rentcast/properties — prefer it for single-property lookups.
What is it worthrealestateapi/avm25¢One lender-grade number with a confidence score — beats rentcast/value-estimate (35¢).
Show me the comparable salesrealestateapi/property-comps5¢ + 15¢/compOnly when the caller wants to see the comps — each comp is a billed record.
Who owns it and how do I reach themrealestateapi/skiptrace25¢Phones (with DNC flag), emails, current + previous addresses.

Not covered by either vendor: commercial real estate, short-term/vacation rental rates, HOA data, non-US properties. For those, fall back to web search or scraping.

RealEstateAPI

Pricing model
metered per property record returned
Method
POST
Coverage
US only

On this service the record count is the cost, not the call count. Two habits follow: survey before you buy, and ask for the fewest records that answer the question.

Actions

  • realestateapi/autocomplete (1¢) — messy address/city/zip string → canonical values + the RealEstateAPI id. Run it first whenever the address is partial or unformatted, then pass the id downstream. Cheap enough to never guess an address format.
  • realestateapi/property-search (5¢ + 15¢/record) — compound criteria → filtered list, 110+ fields per record. Location is required: state, zip, address, latitude+longitude+radius, or polygon.
  • realestateapi/property-detail (20¢) — the full record for one property: owner + mailing address, mortgages with balance/rate/lender, tax + deed history, equity, flood zone, MLS status. Deliberately no comps flag — use property-comps.
  • realestateapi/property-comps (5¢ + 15¢/comp) — subject, a derived AVM, and ranked comparable sales. max_results defaults to 10, caps at 25; 3–5 comps usually answers the question at a third of the price.
  • realestateapi/avm (25¢) — avm, avmMin/avmMax, confidence 0–100. strict: true refuses a fuzzy match rather than valuing the wrong house.
  • realestateapi/skiptrace (25¢) — owner contact data. Only for genuine owner outreach.
  • realestateapi/address-verify (5¢ + 15¢/address) — batch up to 10 addresses to normalized records + ids; matches only at confidence ≥ 0.88. Priced on addresses submitted, so send only what needs resolving; for a single messy string prefer autocomplete at 1¢.
  • realestateapi/parcel (20¢) — parcel boundary as GeoJSON for mapping.

Survey first, then pull records

property-search with count: true returns the matching total, summary: true the lead-type aggregates, ids_only: true the IDs — each costs 2¢ and bills no records. Only then pull records with size (default 5, max 25), paging with resultIndex. A 25-record page is $3.80 — know the count before running it.

# 1) survey — 2¢, no records billed
curl -X POST https://vaaya.ai/api/run/realestateapi/property-search \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"zip": "78244", "high_equity": true, "absentee_owner": true, "count": true}'

# 2) pull the first 10 records — 5¢ + 10 × 15¢
curl -X POST https://vaaya.ai/api/run/realestateapi/property-search \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"zip": "78244", "high_equity": true, "absentee_owner": true, "size": 10}'
curl -X POST https://vaaya.ai/api/run/realestateapi/avm \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"address": "5500 Grand Lake Dr, San Antonio, TX, 78244", "strict": true}'

Request gotchas

  • Identify one property by id (best — from autocomplete/search), a formatted address ("5500 Grand Lake Dr, San Antonio, TX, 78244"), house+street+state, or apn+fips. Requests that name no property are rejected.
  • Filters are snake_case with _min/_max pairs (beds_min, value_max, equity_percent_min) — not range strings like RentCast.
  • Lead-type flags are booleans: absentee_owner, out_of_state_owner, corporate_owned, high_equity, free_clear, vacant, pre_foreclosure, foreclosure, auction, reo, tax_lien, inherited, cash_buyer, investor_buyer, mls_active/mls_pending/mls_sold, pool.
  • Skip-trace address inputs travel in peers: address needs city+state or zip alongside it, or the call 400s.
  • For “what’s listed” questions, use RentCast — listings are its lane.

RentCast

Pricing model
flat per request — 1 row or 100, same price
Method
GET-style params
Coverage
US only
  • rentcast/properties (30¢) — property records by address: attributes, tax assessment + history, sale history, owner names. Not listings.
  • rentcast/value-estimate (35¢) — estimated price + low/high range + the ranked comps used.
  • rentcast/rent-estimate (35¢) — monthly rent + range + rental comps.
  • rentcast/sale-listings / rentcast/rental-listings (30¢) — active listings; status: "Inactive" for historical listings.
  • rentcast/market-stats (30¢) — avg/median prices and rents, price per sqft, days on market, listing counts, by property type and bedroom count, with monthly history.
curl -X POST https://vaaya.ai/api/run/rentcast/market-stats \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"zipCode": "78704"}'

Request gotchas

  • address format is strict: "Street, City, State, Zip".
  • Area searches need zipCode, city+state (both, case-sensitive: "Austin", "TX"), or latitude+longitude (+radius in miles, max 100). Location-less searches are rejected — upstream would silently default to Austin, TX.
  • market-stats requires a 5-digit zipCode — it cannot aggregate a whole city.
  • Numeric filters take range syntax as strings: bedrooms: "2-4", price: "300000-500000", yearBuilt: "2015-2026"; comma lists work too ("2,3"). Plain numbers are exact-match.
  • Value/rent estimates: pass bedrooms/bathrooms/squareFootage only to override the auto-looked-up subject attributes (e.g. after a renovation); bedrooms: 0 means studio. compCount 5–25.
  • Listings and records page via limit (default 50, max 100) + offset.
  • Market history lookback: sale stats from Jan 2024, rental stats from Apr 2020 — don’t promise longer.