Search Properties

Search and filter property listings with text queries, location filters, geo search, and more.

Search for property listings using text queries, structured filters, geographic search, and sorting.

Endpoint

POST /properties/search

Authentication: Required (API key or JWT)

Query Parameters

These are passed as URL query parameters, not in the request body.

ParameterTypeDefaultDescription
filterByOrganizationbooleanfalseWhen true, only return properties belonging to your organization
includeBrandingbooleanfalseInclude organization branding settings in results
includeAdCountbooleanfalseInclude ad creative count per property
includeAdCreativesbooleanfalseInclude full ad creative data per property

Request Body

All fields are optional. An empty body {} returns all properties with default pagination.

Text Search

FieldTypeDescription
querystringNatural language text search. Supports queries like "3 bedroom villa with pool in Dubai Marina" or structured field:value syntax like "bedrooms:3 AND hasPool:true"

ID Filter

FieldTypeDescription
idsstring[]Fetch specific properties by their UUIDs. When provided, other filters still apply but progressive filter relaxation is skipped. Useful for batch-fetching a known set of properties.

Array Filters

Each accepts a single value or an array of values to match against.

FieldTypeValues
propertyTypestring[]apartment, condominium, house_detached, house_semi_detached, house_terraced, townhouse, multi_family_home, penthouse, studio, land_residential, land_commercial, land_agricultural, land_other, office, retail, commercial_other, industrial_warehouse, industrial_other, hospitality, other
propertyCategorystring[]residential, commercial, industrial, land
listingTypestring[]sale, rent, sale_or_rent, fraction
countryCodestring[]ISO 3166-1 alpha-2 codes (e.g., ES, AE, US)
regionstring[]Region names (e.g., Costa del Sol, Dubai)
citystring[]City names (e.g., Marbella, Dubai Marina)
statusstring[]active, inactive, pending, sold, rented, deleted

Range Filters

Each range filter is an object with optional min and max fields.

FieldTypeDescription
bedrooms{ min?, max? }Number of bedrooms
bathrooms{ min?, max? }Number of bathrooms
price{ min?, max? }Price in the property's currency
livingArea{ min?, max? }Living area in the property's area unit
plotArea{ min?, max? }Plot area in the property's area unit
commission{ min?, max? }Agent commission percentage (0–100)

Feature Filters

Nest these inside a features object. Each is a boolean.

FieldTypeDescription
hasPoolbooleanSwimming pool
hasSeaViewbooleanSea or ocean view
hasGaragebooleanGarage or covered parking
hasTerracebooleanTerrace or balcony
hasGardenbooleanGarden
isFurnishedbooleanComes furnished
hasAirConditioningbooleanAir conditioning
hasLiftbooleanElevator / lift

Geographic Filters

Use one of these — not both.

Radius search (location):

FieldTypeRequiredDescription
location.latnumberYesLatitude of center point
location.lonnumberYesLongitude of center point
location.distancestringNoSearch radius (default: "10km")

Bounding box (boundingBox):

FieldTypeRequiredDescription
boundingBox.northEast.latnumberYesNorth-east corner latitude
boundingBox.northEast.lonnumberYesNorth-east corner longitude
boundingBox.southWest.latnumberYesSouth-west corner latitude
boundingBox.southWest.lonnumberYesSouth-west corner longitude

Sorting

Use either the sort array or the flat sortBy/sortOrder fields.

sort array:

{
  "sort": [{ "field": "price", "order": "asc" }]
}

Flat fields:

FieldTypeDescription
sortBystringSort field name
sortOrder"asc" or "desc"Sort direction (default: desc)

Allowed sort fields: price, createdAt, updatedAt, publishedAt, bedrooms, bathrooms, livingArea, plotArea, commission, yearBuilt, city, countryCode, referenceNumber, status, propertyType, propertyCategory, listingType

Pagination

FieldTypeDefaultDescription
pageinteger1Page number (1-indexed)
limitinteger20Results per page (1–100)

Price Distribution

Request histogram data for building price range charts.

FieldTypeDefaultDescription
priceDistribution.intervalnumber50000Bucket size
priceDistribution.minnumberMinimum price for distribution
priceDistribution.maxnumberMaximum price for distribution

Response

{
  "results": [
    {
      "id": "a1b2c3d4-...",
      "referenceNumber": "HQL-12345",
      "listingType": "sale",
      "propertyCategory": "residential",
      "propertyType": "villa",
      "city": "Marbella",
      "countryCode": "ES",
      "price": 1250000,
      "currency": "EUR",
      "bedrooms": 4,
      "bathrooms": 3,
      "livingArea": 320,
      "hasPool": true,
      "hasSeaView": true,
      "status": "active",
      ...
    }
  ],
  "total": 142,
  "priceDistribution": {
    "interval": 50000,
    "minPrice": 200000,
    "maxPrice": 5000000,
    "buckets": [
      { "key": 200000, "count": 5 },
      { "key": 250000, "count": 12 },
      ...
    ]
  },
  "relaxedFilters": ["bedrooms"]
}
FieldTypeDescription
resultsarrayArray of property listing objects
totalnumberTotal matching properties (for pagination)
priceDistributionobjectOnly present if priceDistribution was included in the request
relaxedFiltersstring[]If the search returned few results, lists which filters were progressively relaxed to find more matches

Examples

Basic Search

curl -X POST https://api.fondaro.com/properties/search \
  -H "Authorization: Bearer fondaro_pk_abc123" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "villa with pool in Marbella",
    "limit": 10
  }'

Filtered Search

curl -X POST https://api.fondaro.com/properties/search \
  -H "Authorization: Bearer fondaro_pk_abc123" \
  -H "Content-Type: application/json" \
  -d '{
    "propertyType": ["villa", "townhouse"],
    "listingType": ["sale"],
    "countryCode": ["ES"],
    "price": { "min": 500000, "max": 2000000 },
    "bedrooms": { "min": 3 },
    "features": {
      "hasPool": true,
      "hasSeaView": true
    },
    "sort": [{ "field": "price", "order": "asc" }],
    "page": 1,
    "limit": 20
  }'

Geo Radius Search

curl -X POST https://api.fondaro.com/properties/search \
  -H "Authorization: Bearer fondaro_pk_abc123" \
  -H "Content-Type: application/json" \
  -d '{
    "location": {
      "lat": 36.5101,
      "lon": -4.8824,
      "distance": "5km"
    },
    "propertyType": ["apartment"],
    "limit": 20
  }'

Batch Fetch by IDs

curl -X POST "https://api.fondaro.com/properties/search?includeBranding=true" \
  -H "Authorization: Bearer fondaro_pk_abc123" \
  -H "Content-Type: application/json" \
  -d '{
    "ids": [
      "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "b2c3d4e5-f6a7-8901-bcde-f12345678901"
    ]
  }'

Organization Properties with Branding

curl -X POST "https://api.fondaro.com/properties/search?filterByOrganization=true&includeBranding=true" \
  -H "Authorization: Bearer fondaro_pk_abc123" \
  -H "Content-Type: application/json" \
  -d '{
    "status": ["active"],
    "sort": [{ "field": "createdAt", "order": "desc" }]
  }'

Fondaro Help

Docs & support

Hi there, how can we help?

Browse popular articles or ask a question below.

Popular articles

Or ask a question