NSW Rent Prices by Postcode (Official Bond Data) avatar

NSW Rent Prices by Postcode (Official Bond Data)

Pricing

from $4.00 / 1,000 rent rows

Go to Apify Store
NSW Rent Prices by Postcode (Official Bond Data)

NSW Rent Prices by Postcode (Official Bond Data)

Get median weekly rents for any New South Wales postcode or suburb from NSW Fair Trading's official rental bond lodgements: unit, house or townhouse by bedrooms and month, with quartiles and year-over-year change. No API key; JSON via API/MCP, $4 per 1,000 rows.

Pricing

from $4.00 / 1,000 rent rows

Rating

0.0

(0)

Developer

Japan Open Data

Japan Open Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Get median weekly rents for any New South Wales (Australia) postcode or suburb from the official NSW Fair Trading rental bond data: units, houses and townhouses by number of bedrooms and month, with quartiles, bond counts and year-over-year change. It reads the monthly rental bond lodgement files NSW Fair Trading publishes (every new residential lease in NSW, about 27,000 a month) and returns flat JSON, one row per postcode x dwelling type x bedrooms x month, for $4 per 1,000 rows.

  • Actual agreed rents, not asking prices. Every row is built from the bonds lodged for new leases, so it shows what tenants signed for, not what was advertised.
  • Any NSW postcode or suburb name: 2000, 2010, Surry Hills, Parramatta, Bondi Beach, or all for every postcode in the state (about 530 with new leases each month).
  • Monthly back to January 2022, with the newest month as soon as NSW Fair Trading publishes it (usually in the first weeks of the following month).
  • Median, lower quartile (25th percentile), upper quartile (75th percentile) and count per group, plus the median per month, the 3-month rolling median and the % change on the same month a year earlier.
  • Small samples are flagged: lowCount: true when a row is based on fewer than 5 bonds.
  • Built for pipelines and AI agents: flat camelCase fields, a status on every row, plain-English errors that are never charged. No API key, no login.

Why use this instead of Rent Check or a paid report?

NSW Rent Check (free website)Paid postcode reports (e.g. SQM Research)This Actor
DataOfficial bonds, last 3 months, one rangeAsking (advertised) rents and listingsOfficial bonds: what tenants actually signed
Many postcodes at onceOne postcode and one property type per searchOne report per postcode, or a monthly subscriptionUp to 1,000 postcodes, or all, in one run
HistoryRecent quarter onlyYesEvery month since January 2022
Quartiles, counts, year-over-yearRange onlyVariesYes, per month, plus a 3-month median
FormatWeb pageWeb pages / PDFFlat JSON, CSV, Excel; API, schedules and MCP
PriceFreeAbout A$50 per postcode report, or about A$100 a month$4 per 1,000 rows, no subscription (every NSW postcode for one month is about $16)

What can you do with it?

  • Property investors and buyer's agents - check the real rent for a 2-bedroom unit in a postcode before you buy, and the gross yield it supports.
  • Property managers and landlords - set or review a rent against what new leases in the same postcode, type and size signed last month.
  • Proptech and data teams - feed a rent model or dashboard with every NSW postcode, every month, on a schedule.
  • Relocation, corporate housing and HR - budget housing allowances by suburb.
  • Analysts and journalists - track rent growth by suburb and dwelling type, year over year.
  • AI agents - answer "what does a 2-bedroom unit rent for in Surry Hills?" with one tool call and a source link.

How to use

  1. Click Try for free. The default input returns the last 3 months for postcode 2000 (Sydney CBD): one row per dwelling type and bedroom count, plus one all-properties row per month, in about 10 seconds.
  2. Replace 2000 with your postcodes or suburb names (one per line). A suburb is looked up to its postcode, because NSW publishes the data by postcode.
  3. Optionally narrow Dwelling types (unit, house, townhouse, other) and Bedrooms (0 = studio ... 5+), and set Number of months (1 to 36).
  4. For a past period, set Last month to YYYY-MM (for example 2025-12).

Run it on a schedule

NSW Fair Trading publishes each month's file in the following month. A monthly Schedule in Apify Console (for example on the 20th, with "months": 1) gives you the newest month for your postcodes; add a webhook or an integration (Google Sheets, Slack, your database) to receive the rows.

Input

FieldTypeDefaultWhat it does
postcodeslist of text (required)["2000"]NSW postcodes ("2010") or suburb names ("Surry Hills", "Mt Druitt", "Parramatta NSW 2150"). "all" = every NSW postcode. Up to 1,000 entries.
dwellingTypeslist["unit", "house", "townhouse"]unit (flat / apartment), house, townhouse (terrace, townhouse, semi-detached), other (rooms, garages, car spaces...).
bedroomslistall"0" (studio / bedsit), "1", "2", "3", "4", "5+".
monthsinteger3Number of monthly periods, counting back from the latest month published (or from endMonth). 1 to 36.
endMonthYYYY-MMlatestThe most recent month to return, from 2022-01.
includeTotalsbooleantrueAdds one row per postcode and month with dwellingType: "all", bedrooms: "all" pooling every bond that matches your filters (skipped when you ask for a single type and bedroom count, since it would repeat that row).
includeYearOverYearbooleantrueAdds the median a year earlier and the % change. Turn off for slightly faster runs.
includeLodgementsbooleanfalseAlso returns the individual bonds behind the statistics (lodgement date, postcode, type, bedrooms, weekly rent), one row each with recordType: "lodgement".
maxLodgementsinteger1000Upper limit on lodgement rows per run (newest first).

Input examples

{ "postcodes": ["Surry Hills", "Newtown", "2026"], "dwellingTypes": ["unit"], "bedrooms": ["1", "2"], "months": 6 }
{ "postcodes": ["all"], "months": 1, "includeYearOverYear": true }
{ "postcodes": ["2150"], "dwellingTypes": ["house"], "bedrooms": ["3", "4"], "months": 12, "endMonth": "2025-12" }

Output

One row per postcode x dwelling type x bedrooms x month (recordType: "summary"):

{
"status": "ok",
"recordType": "summary",
"query": "Surry Hills",
"suburb": "Surry Hills",
"postcode": "2010",
"postcodeShareOfSuburb": 1.0,
"postcodeSuburbs": "Surry Hills; Darlinghurst",
"dwellingType": "unit",
"bedrooms": "2",
"month": "2026-08",
"bondsLodged": 66,
"lowCount": false,
"medianWeeklyRent": 1025,
"lowerQuartileWeeklyRent": 952.5,
"upperQuartileWeeklyRent": 1200,
"medianMonthlyRent": 4442,
"medianWeeklyRent3Months": 1077.5,
"bondsLodged3Months": 168,
"medianWeeklyRentYearAgo": 1000,
"bondsLodgedYearAgo": 56,
"yearOverYearChangePct": 2.5,
"sourceFileUrl": "https://www.nsw.gov.au/sites/default/files/noindex/2026-09/rentalbond_lodgements_august_2026.xlsx",
"fetchedAt": "2026-10-02T07:49:01Z",
"source": "NSW Fair Trading rental bond lodgement data (nsw.gov.au), CC BY 4.0, (c) State of New South Wales; suburb names: ABS ASGS 2021, CC BY 4.0. Not affiliated with the NSW Government."
}

A free row tells you what to change when nothing matched or an entry was wrong:

{ "status": "error", "query": "Sury Hills", "error": "\"Sury Hills\" is not a known NSW suburb or postcode (did you mean Surry Hills?), so use a 4-digit NSW postcode such as \"2000\" or an NSW suburb name such as \"Surry Hills\"." }

Output fields

FieldMeaning
statusok, not_found (no bond matched; free) or error (wrong input or source unavailable; free)
recordTypesummary (statistics) or lodgement (one bond, only with includeLodgements)
queryThe entry from your input that produced the row
suburbThe suburb you asked for, when you gave a suburb name
postcodeNSW postcode
postcodeShareOfSuburbWhen a suburb spans several postcodes: the share of the suburb's dwellings in this postcode (2021 Census)
postcodeSuburbsThe main suburbs in the postcode, largest first
dwellingTypeunit, house, townhouse, other, or all for the all-properties row
bedrooms0 (studio) to 4, 5+, or all
monthMonth the bonds were lodged, YYYY-MM
bondsLodgedNumber of new bonds (new leases) in the group
lowCounttrue when bondsLodged is below 5: treat the figures with care
medianWeeklyRentMedian weekly rent, A$
lowerQuartileWeeklyRent / upperQuartileWeeklyRent25th and 75th percentile weekly rent, A$
medianMonthlyRentmedianWeeklyRent x 52 / 12, rounded, A$
medianWeeklyRent3Months / bondsLodged3MonthsMedian and count over this month and the two before it (null when one of them is not available)
medianWeeklyRentYearAgo / bondsLodgedYearAgoSame group, same month a year earlier
yearOverYearChangePct% change of the median on a year earlier (null when either month has fewer than 5 bonds)
lodgementDate / weeklyRentLodgement rows only: the date the bond was lodged and the weekly rent, A$
sourceFileUrlThe NSW Fair Trading file the row was computed from
errorPlain-English reason on free rows

Quartiles use linear interpolation between ranks (the same as Excel QUARTILE.INC). Bonds with an unknown type, bedroom count or rent, and rents under A$20 a week (data-entry errors), are left out.

How much does it cost?

Pay per event, no subscription:

EventPriceWhen
Rent row$0.004 ($4.00 per 1,000)Each returned row with status: "ok" (a summary row or, if you ask for them, a lodgement row)
Actor start$0.001Once per run

not_found and error rows are always free. The Pricing tab shows the current price.

UseRowsCost per run
Default input (postcode 2000, 3 months)about 25-30about $0.11
One postcode, one type and bedroom count, 12 months12about $0.05
10 postcodes, units and houses by bedrooms, latest monthabout 60-100about $0.25-0.40
Every NSW postcode, latest month, all types and bedroomsabout 4,000about $16
Every NSW postcode, 36 months, all types and bedroomsabout 143,000about $570 - set a cost cap
Wrong input or nothing found0 (one free row)$0.001

Big runs add up quickly: "all" with many months returns one row per postcode, type, bedroom count and month. Set Maximum cost per run in the run options to cap any run; the Actor stops cleanly when the cap is reached. For a monthly feed of every postcode, run "all" with "months": 1 once a month (about $16).

Use via API & MCP (AI agents)

REST API (synchronous, returns the rows):

curl -X POST "https://api.apify.com/v2/acts/japan-open-data~nsw-rental-bond-rents/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"postcodes": ["Surry Hills"], "dwellingTypes": ["unit"], "bedrooms": ["2"], "months": 3}'

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("japan-open-data/nsw-rental-bond-rents").call(
run_input={"postcodes": ["2150", "Newtown"], "dwellingTypes": ["house"], "bedrooms": ["3"], "months": 12})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row["status"] == "ok":
print(row["postcode"], row["month"], row["medianWeeklyRent"], row["bondsLodged"], row["lowCount"])

MCP: add the Apify MCP server (https://mcp.apify.com) to Claude, Cursor or any MCP client and enable the tool japan-open-data/nsw-rental-bond-rents.

Recommended settings for agents:

  • For "what does a 2-bedroom unit rent for in X?", use {"postcodes": ["X"], "dwellingTypes": ["unit"], "bedrooms": ["2"], "months": 3} and quote medianWeeklyRent3Months (more stable than one month), bondsLodged3Months and the lower and upper quartiles.
  • Australian rents are quoted per week; medianMonthlyRent is provided for readers used to monthly rents.
  • If lowCount is true, say the sample is small, or widen the period with a larger months.
  • Keep runs small: name the postcodes or suburbs you need and narrow dwellingTypes and bedrooms. Avoid "all" with many months unless the user asked for a full dataset (each ok row is billed).
  • Quote month and sourceFileUrl, and say the figures are rents agreed in new leases (bond lodgements), not asking rents.

Summary for AI assistants: This tool returns official New South Wales (Australia) rents from NSW Fair Trading's rental bond lodgements, by postcode or suburb, dwelling type (unit, house, townhouse), number of bedrooms and month since 2022: number of new bonds, median and quartile weekly rent in A$, a 3-month rolling median and the year-over-year change, as flat JSON rows.

Privacy

The NSW files contain no names and no street addresses: only the lodgement date, postcode, dwelling type, bedrooms and weekly rent. This Actor returns the same or less: statistics by postcode, and (only if you ask) the individual bonds with those five fields. No personal data is collected or returned.

FAQ

How fresh is the data?

Every run reads the NSW Fair Trading page and uses the newest monthly file published there, so new months appear automatically. NSW usually publishes a month's file during the following month.

Is a "bond lodged" the same as a new lease?

Almost: in NSW, when a landlord or agent takes a rental bond for a residential tenancy it must be lodged with NSW Fair Trading, so bond lodgements are the standard official measure of new-lease rents. Tenancies where no bond is taken are not included.

Why do some suburbs give several postcodes?

NSW publishes the data by postcode. When a suburb is split between postcodes, you get one set of rows per postcode, with postcodeShareOfSuburb (share of the suburb's dwellings in the 2021 Census). The statistics always describe the whole postcode.

Why is a month missing for my postcode?

Rows are only returned for groups with at least one bond in the month. Small postcodes, or a narrow type and bedroom filter, can have months with none; widen months or remove a filter.

Can I get the median rent for every NSW postcode at once?

Yes. Use {"postcodes": ["all"], "months": 1} for the latest month: about 4,000 rows (every postcode with new leases, by dwelling type and bedrooms, plus an all-properties row), about $16 per run.

Does it cover Victoria, Queensland or other states?

No, only New South Wales. Other states publish rent data in different forms (mostly quarterly medians); open an issue if you need one of them.

Yes. NSW Government material is licensed under Creative Commons Attribution 4.0 (CC BY 4.0), which allows commercial use with attribution. Each row carries the attribution in source.

Is this an official NSW Government service?

No. It is an independent tool that reads the NSW Government's open data. It is not affiliated with or endorsed by NSW Fair Trading.

Troubleshooting

  • "... is not a known NSW suburb or postcode" - check the spelling, or give the 4-digit postcode. The message suggests close matches.
  • "... matches N NSW suburbs" - the name exists in several council areas; use the qualified name shown (for example Back Creek (Tweed)) or the postcode.
  • not_found for a postcode - no bond matched your filters in the period, or the postcode is not in NSW.
  • An error row saying nsw.gov.au could not be reached - the NSW website was unavailable. Nothing is charged for that row; run again later.

Known limitations

  • Data is by postcode only (NSW does not publish suburb or street detail). Suburb names are mapped to postcodes with the ABS 2021 suburb and postal area boundaries.
  • Monthly files start in January 2022. Earlier years are published only as yearly files and are not included.
  • Dwelling type and bedrooms are as reported by the agent or landlord; "other" mixes rooms, garages and car spaces.
  • The 3-month median and the year-ago figures need the earlier months; they are null for the first months of 2022.

Data source and licence

More from Japan Open Data

Feedback

Found a wrong figure, a suburb that maps to the wrong postcode, or a month that is missing? Open an issue on the Issues tab — it will be read.