Skip to main content

BatchData Property Search Request Body Reference

Authoritative quick reference for building POST /property/search request bodies — building filter field names, property type enumerations, quicklists, and time-window examples. Read this before generating a request body.

Written by Charles Parra

This is the authoritative quick reference for building a POST /property/search request body. Use it whenever you generate a request body from a natural-language prompt. Validate every field name and every enum value against the tables below before emitting.


Building filters — exact field names

The searchCriteria.building object accepts these fields and only these fields. Use the names below verbatim.

Field

Type

Use for prompts mentioning...

bedroomCount

integer range

"bedrooms", "beds", "BR"

bathroomCount

integer range

"bathrooms", "baths", "BA"

calculatedBathroomCount

integer range

calculated bathroom count

livingAreaSquareFeet

integer range

"square feet", "sqft", "sf", "size", "living area"

totalBuildingAreaSquareFeet

integer range

"total area", "gross area" (only when explicitly asked)

yearBuilt

integer range

"year built", "built in", "built between"

storyCount

integer range

"stories", "floors"

roomCount

integer range

"rooms"

unitCount

integer range

"units"

residentialUnitCount

integer range

"residential units"

garageParkingSpaceCount

integer range

"garage spaces", "parking spaces"

For "square feet" / "sqft" / "sf" / "size" prompts, use livingAreaSquareFeet (heated/cooled space). Use totalBuildingAreaSquareFeet only if the prompt explicitly asks for total building area including non-living space (garage, porch, basement).

Range values use { "min": <number>, "max": <number> }; either bound may be omitted.

{
"building": {
"bedroomCount": {
"min": 4
},
"livingAreaSquareFeet": {
"min": 1800
},
"yearBuilt": {
"min": 1950,
"max": 1959
}
}
}


Property type filters — exact enum values

general.propertyTypeCategory and general.propertyTypeDetail are exact-match enumerated string filters. Use inList (multiple values) or equals (single value).

propertyTypeCategory values

Residential, Commercial, Industrial, Agricultural.

Residential propertyTypeDetail values — copy these verbatim

Single FamilySingle Family Residential (Assumed)Multi-FamilyMulti-Family DwellingResidential Income (Multi-Family)DuplexTriplexQuadruplexApartmentsApartment House (5+ Units)Apartment House (100+ Units)Highrise ApartmentGarden Apartment, Court Apartment (5+ Units)Cooperative BuildingCooperative UnitCondominium UnitCondominium BuildingResidential Condominium DevelopmentTownhouseMobile HomeVacant Land

The value Garden Apartment, Court Apartment (5+ Units) is a single enum value that contains a comma — keep it as one string.

Concept → exact propertyTypeDetail.inList expansion

When a prompt mentions a concept rather than a specific enum value, emit the full inList of every value below. Always include every value in the expansion; never collapse to a single representative value.

"single family" / "SFR" / "single-family home" / "house" / "home" (when used as a property type):

"propertyTypeDetail": {
"inList": [
"Single Family",
"Single Family Residential (Assumed)"
]
}

"multi-family" / "multifamily" / "multi family":

"propertyTypeDetail": {
"inList": [
"Multi-Family",
"Multi-Family Dwelling",
"Residential Income (Multi-Family)",
"Duplex",
"Triplex",
"Quadruplex",
"Apartments",
"Apartment House (5+ Units)",
"Apartment House (100+ Units)",
"Highrise Apartment",
"Garden Apartment, Court Apartment (5+ Units)",
"Cooperative Building",
"Cooperative Unit"
]
}

"condo" / "condominium" / "condos":

"propertyTypeDetail": {
"inList": [
"Condominium Unit",
"Condominium Building",
"Residential Condominium Development"
]
}

"townhouse" / "townhome":

"propertyTypeDetail": {
"equals": "Townhouse"
}

"mobile home" / "manufactured home":

"propertyTypeDetail": {
"equals": "Mobile Home"
}

"vacant land" / "land":

"propertyTypeDetail": {
"equals": "Vacant Land"
}

When the prompt does not name a property type, omit general.propertyTypeCategory and general.propertyTypeDetail entirely. Do not add filters the user did not request.

Unit-count prompts use building.unitCount, not propertyTypeDetail

When the user specifies a number of units ("2+ unit residential", "3-unit", "4 or more units", "buildings with at least 5 units"), encode the count as a numeric range on building.unitCount (or building.residentialUnitCount if the prompt is residential-specific). propertyTypeDetail is an exact-match enum of named property types — it does not accept count-style values, and a unit-count expression belongs in the building filters, not the property-type filter.

{
"building": {
"unitCount": {
"min": 2
}
}
}

If the user mentions both a unit count and a property-type concept ("2+ unit residential properties"), pair the building.unitCount filter with the multi-family propertyTypeDetail expansion above.


Quicklists — valid named filters

Use quickLists (AND semantics) or orQuickLists (OR semantics). Prefix with not- to negate (e.g. not-owner-occupied).

Quicklist

Meaning

owner-occupied

Owner resides at property

absentee-owner

Owner does not reside at property (umbrella — covers in-state and out-of-state)

in-state-absentee-owner

Absentee owner with mailing address in same state

out-of-state-absentee-owner

Absentee owner with mailing address in different state

out-of-state-owner

Owner resides out of state

same-property-and-mailing-address

Property and mailing address match

corporate-owned

Owned by corporate entity

trust-owned

Owned by a trust

inherited

Property was inherited

senior-owner

Owner is 65+ or has senior exemption

cash-buyer

Last purchase was all cash

fix-and-flip

Bought and sold within 12 months

tired-landlord

SFR owned 10+ years, built 30+ years ago

free-and-clear

No mortgage on property

high-equity

Owner has >20% equity

low-equity

Owner has <20% equity

unknown-equity

Equity cannot be determined

notice-of-default

Loan default notice filed

notice-of-sale

Foreclosure sale notice filed

notice-of-lis-pendens

Pending lawsuit on property

preforeclosure

Property in pre-foreclosure

tax-default

In tax default for 3+ years

active-auction

Property has upcoming auction date

involuntary-lien

Has involuntary lien

active-listing

Property has active listing

pending-listing

Property has pending listing

expired-listing

Property listing has expired

canceled-listing

Property listing was canceled

failed-listing

Listing was canceled or expired without sale

for-sale-by-owner

FSBO listing

listed-below-market-price

Listed below estimated market value

on-market

Property is available for sale

recently-sold

Sold within last 12 months

vacant

USPS flagged as vacant

vacant-lot

Likely a vacant lot

mailing-address-vacant

Owner's mailing address is vacant

has-hoa

Part of HOA

has-hoa-fees

Has HOA fees

Use the umbrella absentee-owner when the user says "absentee" without specifying in-state vs out-of-state. The in-state and out-of-state variants are subsets — picking only one of them silently drops the other half.

Required quicklists for canonical phrasings

When the user's prompt contains one of the phrasings below, always emit the corresponding quicklist. These mappings are mandatory: omitting the quicklist drops the user's intent.

User phrasing

Required quicklist

"owner-occupied" / "owner occupied" / "occupied by owner" / "owner-occupant" / "owner is the resident"

owner-occupied

"absentee" / "absentee owner" / "owner does not live there"

absentee-owner (umbrella)

"vacant" / "unoccupied property" / "USPS-vacant"

vacant

"high equity" / "lots of equity" / ">20% equity" / "equity-rich"

high-equity

"low equity" / "<20% equity" / "underwater" / "thin equity"

low-equity

"free and clear" / "no mortgage" / "paid off" / "mortgage-free"

free-and-clear

"cash buyer" / "purchased with cash"

cash-buyer

"corporate-owned" / "LLC-owned" / "owned by a company"

corporate-owned

"trust-owned" / "owned by a trust"

trust-owned

"inherited" / "passed down" / "estate property"

inherited

"preforeclosure" / "pre-foreclosure"

preforeclosure

"tax default" / "tax-delinquent for 3+ years"

tax-default

"fix and flip" / "flipped within 12 months"

fix-and-flip

"tired landlord"

tired-landlord

"FSBO" / "for sale by owner"

for-sale-by-owner

"listed below market" / "below market price"

listed-below-market-price

"senior owner" / "owner is 65+"

senior-owner

"has HOA" / "HOA property"

has-hoa

"involuntary lien" / "has a lien"

involuntary-lien

These are independent of any other filters in the prompt. For example, "owner-occupied homes in Austin with high equity" requires both owner-occupied and high-equity in quickLists. Do not drop a required quicklist because another filter (property type, location, range filter) is also present.

Quicklists that cannot be combined

These groups describe contradictory states. Pick one quicklist per group; combining them in quickLists matches zero records.

  • Owner occupancy: pick exactly one of owner-occupied / absentee-owner / in-state-absentee-owner / out-of-state-absentee-owner / out-of-state-owner.

  • Equity: pick exactly one of high-equity / low-equity / unknown-equity / free-and-clear.

  • Listing state: pick exactly one of active-listing / pending-listing / expired-listing / canceled-listing / failed-listing.

  • Market state: pick exactly one of on-market / recently-sold.

If the user's prompt itself contradicts (e.g. "owner-occupied absentee owner"), pick the more specific filter; do not emit both.


Time-window prompts — pair the quicklist with a date range

When a prompt mentions a time window for a foreclosure, listing, or sale event ("notice of default in last 90 days", "auction in March", "sold this year", "listed Jan 1 to Jan 31"), the quicklist alone is not enough. You must:

  1. Resolve the window to absolute minDate / maxDate values from today's date in YYYY-MM-DD format.

  2. Emit the corresponding quicklist.

  3. Emit the matching DateRange filter on the correct field.

Phrasing

Quicklist

DateRange field

"notice of default" + window

notice-of-default

foreclosure.recordingDate

"notice of sale" + window

notice-of-sale

foreclosure.recordingDate

"lis pendens" + window

notice-of-lis-pendens

foreclosure.recordingDate

"auction" + window

active-auction

foreclosure.auctionDate

"sold" / "recently sold" + window

recently-sold

sale.lastSaleDate

"active listing" / "on market" + window

active-listing or on-market

listing.listingDate

"sold on MLS" / "MLS sold" + window

recently-sold

listing.soldDate

"failed listing" / "canceled listing" / "expired listing" + window

failed-listing (or the more specific canceled-listing / expired-listing)

listing.failedListingDate

"pending listing" + window

pending-listing

listing.listingDate

Example: notice of default in last 90 days (assuming today is 2026-04-22)

{
"searchCriteria": {
"query": "Miami, FL",
"quickLists": [
"owner-occupied",
"notice-of-default"
],
"building": {
"livingAreaSquareFeet": {
"min": 1800
}
},
"foreclosure": {
"recordingDate": {
"minDate": "2026-01-22",
"maxDate": "2026-04-22"
}
}
}
}

Compute minDate / maxDate from the actual current date when generating a body — never use placeholder or training-cutoff dates.


Worked examples

Multi-family in Boston, low equity, 4+ bedrooms, built in 1950s

{
"searchCriteria": {
"query": "Boston, MA",
"quickLists": [
"low-equity"
],
"general": {
"propertyTypeCategory": {
"equals": "Residential"
},
"propertyTypeDetail": {
"inList": [
"Multi-Family",
"Multi-Family Dwelling",
"Residential Income (Multi-Family)",
"Duplex",
"Triplex",
"Quadruplex",
"Apartments",
"Apartment House (5+ Units)",
"Apartment House (100+ Units)",
"Highrise Apartment",
"Garden Apartment, Court Apartment (5+ Units)",
"Cooperative Building",
"Cooperative Unit"
]
}
},
"building": {
"bedroomCount": {
"min": 4
},
"yearBuilt": {
"min": 1950,
"max": 1959
}
},
"valuation": {
"estimatedValue": {
"min": 50000,
"max": 2000000
}
}
}
}

Condos in Nashville, free and clear, 3+ bedrooms, built 1980-2000

{
"searchCriteria": {
"query": "Nashville, TN",
"quickLists": [
"free-and-clear"
],
"general": {
"propertyTypeCategory": {
"equals": "Residential"
},
"propertyTypeDetail": {
"inList": [
"Condominium Unit",
"Condominium Building",
"Residential Condominium Development"
]
}
},
"building": {
"bedroomCount": {
"min": 3
},
"yearBuilt": {
"min": 1980,
"max": 2000
}
},
"valuation": {
"estimatedValue": {
"min": 50000,
"max": 2000000
}
}
}
}

Notice of sale in Atlanta, valued $150K-$400K, 1500+ sqft

{
"searchCriteria": {
"query": "Atlanta, GA",
"quickLists": [
"notice-of-sale"
],
"valuation": {
"estimatedValue": {
"min": 150000,
"max": 400000
}
},
"building": {
"livingAreaSquareFeet": {
"min": 1500
}
}
}
}

When the prompt does not name a property type, do not add general.propertyTypeCategory or general.propertyTypeDetail — leave them out, as in this example.

Related Resources

  • Text Search Grammar Best Practices — guidance on choosing the right text-search operator (equals, contains, startsWith, endsWith, inList, notInList, matches) for each Property Search field, including the field-specific restrictions on legal.subdivisionName.

Did this answer your question?