---
name: domain-group-listing-search
title: Search Domain listings and enquire on one
description: Run a residential, commercial or business listing search across domain.com.au, page through
  the results correctly, pull the full listing and its agency/agent, and submit an enquiry.
api: openapi/domain-group-listings-api-openapi.yml
apis:
- openapi/domain-group-listingsearch-api-openapi.yml
- openapi/domain-group-listings-api-openapi.yml
- openapi/domain-group-agencies-api-openapi.yml
- openapi/domain-group-agents-api-openapi.yml
- openapi/domain-group-enquiries-api-openapi.yml
operations:
- Listings_ResidentialSearch
- Listings_DetailedResidentialSearch
- Listings_DetailedSoldResidentialSearch
- Listings_DetailedCommercialSearch
- Listings_DetailedBusinessSearch
- ListingLocations_Search
- Listings_Get
- Agencies_Get
- Agents_Get
- Enquiries_Post
- Enquiries_Get
scopes:
- api_listings_read
- api_agencies_read
- api_enquiries_write
- api_enquiries_read
generated: '2026-10-21'
method: generated
source: openapi/ per-API documents + https://developer.domain.com.au/docs/latest/apis/pkg_agents_listings
---

# Search Domain listings and enquire on one

This is the surface granted automatically on signup (Agents & Listings +
Properties & Locations), so it is the fastest path to a working integration.

## Before you start

- Base URL `https://api.domain.com.au/`. JSON over HTTPS only; request and
  response bodies are camelCase.
- Scopes: `api_listings_read`, `api_agencies_read`. Submitting an enquiry needs
  `api_enquiries_write`.
- The search operations are **POST, not GET** — Domain routes read endpoints with
  many optional parameters through POST to avoid URI length limits. Pagination
  parameters therefore go in the JSON body, not the query string.

## Steps

1. **Narrow the geography first.** `ListingLocations_Search`
   (`GET /v1/listings/locations`) resolves suburb / region names to the location
   objects the search criteria expect. Searching on raw strings produces noisy
   results.

2. **Search.** Pick the operation that matches the asset class:
   - `Listings_ResidentialSearch` (`POST /v1/listingSearch/residential/search`)
     — for-sale and for-rent residential.
   - `Listings_DetailedSoldResidentialSearch`
     (`POST /v1/listingSearch/residential/searchSold`) — sold results.
   - `Listings_DetailedResidentialSearch`
     (`POST /v1/listings/residential/_search`) — the detailed residential search.
   - `Listings_DetailedCommercialSearch` (`POST /v1/listings/commercial/_search`)
     and `Listings_DetailedBusinessSearch` (`POST /v1/listings/business/_search`).

   Put `pageNumber` and `pageSize` in the POST body:
   `{"pageNumber": 1, "pageSize": 50}`. Pages start at **1**; the default page
   size is 20 and the maximum is 100. A `pageNumber` of 0 or a negative value
   silently returns page 1 — do not treat that as an error, and do not use it as
   a loop terminator.

3. **Page to the end.** Read the `X-Total-Count` response header to size the
   result set. **It is not always present**: when Domain cannot produce a
   reliable count the header is omitted and pages past the last one come back
   empty. Terminate on an empty page, not only on a count.

4. **Fetch the detail.** `Listings_Get` (`GET /v1/listings/{id}`) for the full
   listing record.

5. **Resolve who is selling it.** `Agencies_Get` (`GET /v1/agencies/{id}`) and
   `Agents_Get` (`GET /v1/agents/{id}`) for the agency and agent behind the
   listing. `Agencies_GetListings` and `Agents_GetListings` walk the other way.

6. **Enquire.** `Enquiries_Post` (`POST /v1/enquiries`) submits an enquiry
   against a listing; `Enquiries_Get` (`GET /v1/enquiries/{id}`) reads one back.
   Requires `api_enquiries_write`.

## Rules

- **No idempotency.** Domain documents no idempotency key and none of the three
  OpenAPI documents contain one. `Enquiries_Post` is a real side effect —
  retrying a timed-out enquiry can double-submit it to the agent. Track your own
  submission state; do not blind-retry writes.
- **Rate limits are two-dimensional**: 1000–3000 requests/minute (by plan, even
  on Unlimited) *and* a per-package daily quota that resets at 10am AEST. Watch
  `X-Quota-PerMinute-Remaining` and `X-Quota-PerDay-Remaining` and slow down
  before you hit 429.
- **Attribution.** Listing data must be displayed under Domain's Attribution and
  Usage Policies.
- Full conventions: `conventions/domain-group-conventions.yml`.
