Documentation
Real estate
Search US property records, listings, valuations, and owner information. RentCast charges per request. RealEstateAPI charges per record and offers detailed ownership and property filters. Both cover US properties 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. It 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, so 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.