Documentation
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
| Need | Call | Price | Why |
|---|---|---|---|
| What’s for sale / for rent right now | rentcast/sale-listings · rentcast/rental-listings | 30¢ | Active listings with price, days on market, agent contacts. |
| Zip-level market stats | rentcast/market-stats | 30¢ | Prices, rents, $/sqft, DOM, with monthly history. |
| Rent estimate | rentcast/rent-estimate | 35¢ | Monthly rent + range + rental comps. |
| Find all properties WHERE … | realestateapi/property-search | 5¢ + 15¢/record | Equity, absentee/corporate owner, foreclosure stage, vacancy — 200+ filters RentCast can’t express. |
| Everything about one address | realestateapi/property-detail | 20¢ | Deeper and cheaper than rentcast/properties — prefer it for single-property lookups. |
| What is it worth | realestateapi/avm | 25¢ | One lender-grade number with a confidence score — beats rentcast/value-estimate (35¢). |
| Show me the comparable sales | realestateapi/property-comps | 5¢ + 15¢/comp | Only when the caller wants to see the comps — each comp is a billed record. |
| Who owns it and how do I reach them | realestateapi/skiptrace | 25¢ | 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 RealEstateAPIid. Run it first whenever the address is partial or unformatted, then pass theiddownstream. 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, orpolygon.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_resultsdefaults to 10, caps at 25; 3–5 comps usually answers the question at a third of the price.realestateapi/avm(25¢) —avm,avmMin/avmMax,confidence0–100.strict: truerefuses 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 formattedaddress("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/_maxpairs (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:
addressneedscity+stateorzipalongside 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 byaddress: 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
addressformat is strict:"Street, City, State, Zip".- Area searches need
zipCode,city+state(both, case-sensitive:"Austin","TX"), orlatitude+longitude(+radiusin miles, max 100). Location-less searches are rejected — upstream would silently default to Austin, TX. market-statsrequires a 5-digitzipCode— 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/squareFootageonly to override the auto-looked-up subject attributes (e.g. after a renovation);bedrooms: 0means studio.compCount5–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.