Multi-criteria suburb screener (Pro+ tier)
/v1/suburbs/screen5 creditsCosts 5 credits, the most expensive read on the API: it scans every covered suburb. Returns every suburb that clears ALL of the thresholds you pass. Stack as many as you like in one call: yield, 1/3/5-year price growth, 1/5-year population growth, rent growth, median price, vacancy, inventory, market heat, days on market, distance to the CBD, unemployment, socioeconomic score, owner-occupier share, population and sales volume. **A worked screen, start to finish.** 1. Screen the suburbs. For NSW houses above 5% yield, 25% five-year growth and 1% five-year population growth: `GET /v1/suburbs/screen?state=NSW&min_yield=5&min_growth_5yr=25&min_population_growth_5yr=1` 2. Read `total_matches`. If it is 0, read `hint`: when the confidence bar is what emptied the result, the response tells you how many suburbs would match at `min_confidence=any`, so you know whether to relax the bar or a threshold. 3. Narrow or widen. `location_type=metro` or `regional` is usually the most effective single filter, because a high yield bar on its own tends to surface small rural localities; `min_population` and `max_distance_to_cbd_km` do similar work. Order the result with `sort=` (default `yield`) and page with `limit` and `offset`. 4. Get the properties. Pass each match to `/v1/properties/listings?state=NSW&suburb=<suburb>` for the individual listings, or to `/v1/suburbs/{state}/{suburb}` for the full statistics behind the row. Use `/v1/suburbs/rankings` instead when you want the top N ordered by a single metric. Use this endpoint when you want everything above a set of cutoffs. **Set `min_confidence` deliberately.** It defaults to `medium` and gates the evidence behind the filters you actually used: the median always, yield only when you filter or sort on yield, growth only when you filter or sort on growth. Screening on population growth alone is never narrowed by yield confidence. Drop to `low` or `any` to widen, and read `median_confidence`, `yield_confidence` and `growth_1yr_confidence` on each row to see what you accepted. **Check `postcode_area_figures` before acting on a row.** When true, the median and yield describe the whole postcode rather than that suburb, so several localities sharing that postcode return identical numbers and are not independent matches. These rows appear only at `min_confidence=any`. **Three data facts that should shape your thresholds.** Multi-year growth is single-source: 8,283 suburbs carry two or more independent source families on 1-year growth and none do on the 3, 5 or 10-year windows, so `min_confidence` on a multi-year period tests only that a source reported it (8,589 suburbs, against 820 with none), and `growth_1yr_confidence` is named for the one window that carries a rating. Inventory is populated for 88% of suburbs on houses but 34% on units, so `max_inventory_months` with `property_type=units` excludes most of the table. Heat score is banded rather than continuous, with 60 and 55 alone accounting for 58% of rated suburbs, so move `min_heat_score` in steps of 5. Invalid parameters return 400 naming the parameter at fault rather than falling back to a default, so a typo in a threshold fails loudly instead of returning a screen you did not ask for.
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| state | query | no | State code, e.g. NSW. Omit to screen nationally. |
| postcode | query | no | Comma-separated 4-digit postcodes to restrict to, e.g. 2480,2650. Omit for no postcode restriction. |
| location_type | query | no | metro or regional. Populated for every suburb (2,524 metro, 10,125 regional), so it is the cheapest way to keep a yield screen out of micro-localities. |
| property_type | query | no | houses (default) or units; selects which median, yield, growth, rent, inventory, heat and days-on-market columns are screened |
| min_confidence | query | no | high, medium (default), low, or any. `any` also admits unrated, single-source and postcode-area figures; suspicious-data exclusions and sanity bands still apply. Applies to every figure returned: a median, yield or growth figure whose own tier is below the bar is null (its `*_confidence` field still says why). Multi-year growth follows the 1-year tier unless you filtered or sorted on that period. |
| min_yield | query | no | Minimum gross rental yield percent. Values above 12 are treated as data artifacts and never returned. |
| max_yield | query | no | Maximum gross rental yield percent |
| min_growth_1yr | query | no | Minimum 1-year median price growth percent |
| min_growth_3yr | query | no | Minimum 3-year median price growth percent |
| min_growth_5yr | query | no | Minimum 5-year median price growth percent |
| min_population_growth_1yr | query | no | Minimum 1-year population growth percent |
| min_population_growth_5yr | query | no | Minimum 5-year population growth percent |
| min_median_price | query | no | Minimum median price for the chosen property type (AUD) |
| max_median_price | query | no | Maximum median price for the chosen property type (AUD) |
| max_vacancy_rate | query | no | Maximum vacancy rate percent |
| max_days_on_market | query | no | Maximum median days on market |
| max_distance_to_cbd_km | query | no | Maximum straight-line distance to the capital city CBD, in km |
| min_rent_growth_1yr | query | no | Minimum 1-year median rent change percent, the yield trajectory behind the current yield |
| max_inventory_months | query | no | Maximum months of inventory (supply tightness). Populated for 88% of suburbs on houses but only 34% on units, so filtering it with property_type=units excludes most of the table. |
| min_heat_score | query | no | Minimum market heat score, 0-100. Banded rather than continuous: 60 and 55 alone account for 58% of rated suburbs, so a threshold of 61 drops thousands of suburbs that 60 admits. Move it in steps of 5. |
| max_unemployment_rate | query | no | Maximum unemployment rate percent |
| min_socioeconomic_score | query | no | Minimum socioeconomic (SEIFA-derived) score, 0-100 |
| min_owner_occupied_pct | query | no | Minimum share of dwellings that are owner-occupied |
| min_population | query | no | Minimum suburb population; useful for excluding micro-localities |
| min_sales_count | query | no | Minimum trailing 12-month sales for the chosen property type (default 5) |
| sort | query | no | yield, growth_1yr, growth_3yr, growth_5yr, population_growth_1yr, population_growth_5yr, median_price, days_on_market, sales_12mo, rent_growth_1yr, heat_score, or distance_to_cbd (default yield) |
| limit | query | no | Page size (default 20, max 20; larger values are reduced to 20) |
| offset | query | no | Pagination offset (max 1000) |
Example request
curl "https://api.propradar.com.au/v1/suburbs/screen?state=NSW&min_yield=5&min_growth_5yr=25&min_population_growth_5yr=1" \
-H "X-API-Key: pr_live_..."Example response
{ "state": "NSW", "property_type": "houses",
"min_confidence": "medium", "sort": "yield",
"count": 3, "total_matches": 3,
"pagination": { "limit": 50, "offset": 0, "next_offset": null },
"results": [{ "suburb": "BROKEN HILL", "postcode": 2880,
"median_price": 250000, "yield_pct": 7.5,
"growth_1yr_pct": 4.2, "growth_5yr_pct": 94.0,
"population": 17700, "population_growth_5yr_pct": -1.2,
"vacancy_rate_pct": 1.4, "days_on_market": 62,
"sales_12mo": 310,
"rent_growth_1yr_pct": 8.1, "inventory_months": 2.4,
"heat_score": 60, "location_type": "regional",
"distance_to_cbd_km": 940.2, "unemployment_rate_pct": 3.1,
"socioeconomic_score": 25, "owner_occupied_pct": 66.2,
"median_confidence": "medium", "yield_confidence": "medium",
"growth_1yr_confidence": "limited",
"postcode_area_figures": false }] }Get an API key
Every endpoint takes an X-API-Key header. The free tier needs no credit card.
Other endpoints
- Many suburbs in one call: statistics and recent sales POST /v1/suburbs/batch
- List every suburb in the dataset (coverage index) GET /v1/suburbs
- Authenticated health probe GET /v1/health
- Account usage and credit allowance GET /v1/usage
- Resolve an address to a property_id GET /v1/properties/search
- Look up a single property GET /v1/properties/{property_id}
- Recent sold comparables (Hobby+; lat/lng mode Pro+) GET /v1/comparables
- Suburb statistics GET /v1/suburbs/{state}/{suburb}
- Trust-gated suburb rankings (Pro+ tier) GET /v1/suburbs/rankings
- Recent sold properties in a suburb GET /v1/suburbs/{state}/{suburb}/sold
- Current active listings in a suburb GET /v1/suburbs/{state}/{suburb}/listings
- Search current listings across a whole state (Pro+ tier) GET /v1/properties/listings
- Property event history GET /v1/properties/{property_id}/history
- Most recent sold record (Hobby+ tier) GET /v1/properties/{property_id}/sold_summary
- Potential sell price confidence band GET /v1/properties/{property_id}/psp_with_confidence
- Similar active listings GET /v1/properties/{property_id}/similar
- Nearby active listings GET /v1/properties/{property_id}/nearby
- Batch property lookup (Starter+ tier) POST /v1/properties/bulk
- Value an off-market address: instant estimate or enhanced valuation (Hobby+ tier) POST /v1/valuations
- Poll an off-market valuation job GET /v1/valuations/{id}
- Valuation range for a locality, no address needed (Pro+ tier) POST /v1/valuations/estimate
- 12-month outlook for house/unit price and rent (Pro+ tier) GET /v1/suburbs/{state}/{suburb}/forecast
- Development applications near a point (Pro+ tier) GET /v1/developments/nearby
- Properties currently advertised for rent in a suburb (Hobby+ tier) GET /v1/suburbs/{state}/{suburb}/rentals
- Weekly rent estimate for a locality, no address needed (Pro+ tier) POST /v1/rent/estimate
- Recently-modified event feed (Starter+ tier) GET /v1/properties/recently-modified
- Investment score + cashflow (Pro+ tier) GET /v1/properties/{property_id}/investment_analysis
- Market cycle classification (Pro+ tier) GET /v1/suburbs/{state}/{suburb}/market_cycle
- Annual price/rent/yield time-series (Pro+ tier) GET /v1/suburbs/{state}/{suburb}/price_history
- Market-heat time-series (Pro+ tier) GET /v1/suburbs/{state}/{suburb}/heat_history
- List macro regions (Growth+ tier) GET /v1/regions
- Region macro indicators (Growth+ tier) GET /v1/regions/{slug}
- Suggest addresses as the user types GET /v1/addresses/suggest
- Turn free text into suburbs GET /v1/suburbs/resolve