A First Pass At Australian Dwelling Prices

housing
cost-of-living
australia
policy
abs
A small reproducible look at ABS dwelling values, state mean prices and the housing policy questions they raise.
Author

Aydin

Published

June 11, 2026

Housing debates have a way of turning into vibes very quickly. Prices feel high, supply feels tight, first-home buyer policy gets loud, and then everyone starts arguing from their favourite chart.

So this is a small grounding exercise: use the latest ABS dwelling-value data, look at the national dwelling stock and mean prices by state, then write down the policy questions that seem worth chasing next.

Data

The main source is ABS Total Value of Dwellings, March quarter 2026. The release estimates the total value, number and mean price of Australia’s residential dwellings. I also keep Lending Indicators, Building Approvals, and Treasury’s home ownership support page in view because prices alone do not tell us whether buyers are being helped, stretched, or both.

Code
download_if_missing <- function(url, path) {
  if (!file.exists(path)) {
    download.file(url, path, mode = "wb", quiet = TRUE)
  }
  path
}

as_number <- function(x) {
  parse_number(as.character(x), na = c("", "NA", "n/a", "-"))
}

quarter_date_from_excel <- function(x) {
  as.Date(as.numeric(x), origin = "1899-12-30")
}

state_from_item <- function(item) {
  str_split_fixed(item, ";", 3)[, 2] |>
    str_squish()
}

measure_from_item <- function(item) {
  case_when(
    str_detect(item, "Value of dwelling stock; Owned by All Sectors") ~ "Total dwelling stock value",
    str_detect(item, "Mean price of residential dwellings") ~ "Mean dwelling price",
    str_detect(item, "Number of residential dwellings") ~ "Number of dwellings",
    TRUE ~ NA_character_
  )
}

workbook_path <- download_if_missing(
  source_urls$dwellings_workbook,
  file.path(raw_dir, "abs-total-value-dwellings-mar-quarter-2026.xlsx")
)

raw <- read_excel(workbook_path, sheet = "Data1", col_names = FALSE)

series_meta <- tibble(
  column = seq_along(raw),
  item = as.character(unlist(raw[1, ])),
  unit = as.character(unlist(raw[2, ])),
  measure = measure_from_item(item),
  state = state_from_item(item)
) |>
  filter(!is.na(measure), !is.na(state), state != "")

dwelling_series <- raw |>
  slice(-(1:10)) |>
  transmute(row_id = row_number(), quarter_date = quarter_date_from_excel(...1)) |>
  bind_cols(raw |> slice(-(1:10)) |> select(all_of(series_meta$column))) |>
  pivot_longer(-c(row_id, quarter_date), names_to = "column_name", values_to = "value") |>
  mutate(
    column = as.integer(str_remove(column_name, "\\.\\.\\.")),
    value = as_number(value)
  ) |>
  left_join(series_meta, by = "column") |>
  filter(!is.na(value), !is.na(quarter_date), !is.na(measure)) |>
  mutate(
    value = case_when(
      measure == "Total dwelling stock value" ~ value / 1000,
      measure == "Mean dwelling price" ~ value * 1000,
      measure == "Number of dwellings" ~ value * 1000,
      TRUE ~ value
    )
  )

latest_quarter <- max(dwelling_series$quarter_date, na.rm = TRUE)

latest_state_prices <- dwelling_series |>
  filter(measure == "Mean dwelling price", quarter_date %in% sort(unique(quarter_date), decreasing = TRUE)[1:2], state != "Australia") |>
  select(quarter_date, state, mean_price = value) |>
  pivot_wider(names_from = quarter_date, values_from = mean_price) |>
  rename(previous_price = 2, latest_price = 3) |>
  mutate(
    quarterly_change = latest_price / previous_price - 1,
    dollar_change = latest_price - previous_price
  )

What Has Happened Nationally?

Code
dwelling_series |>
  filter(measure == "Total dwelling stock value", state == "Australia", quarter_date >= as.Date("2021-03-31")) |>
  ggplot(aes(quarter_date, value)) +
  geom_line(linewidth = 0.9, colour = "#126782") +
  geom_point(size = 2, colour = "#126782") +
  scale_y_continuous(labels = dollar_format(suffix = "t", scale = 1 / 1000)) +
  labs(x = NULL, y = "Total dwelling stock value")

ABS total value of Australian residential dwelling stock.
Code
dwelling_series |>
  filter(measure == "Mean dwelling price", state == "Australia", quarter_date >= as.Date("2021-03-31")) |>
  ggplot(aes(quarter_date, value)) +
  geom_line(linewidth = 0.9, colour = "#7a4b9d") +
  geom_point(size = 2, colour = "#7a4b9d") +
  scale_y_continuous(labels = dollar) +
  labs(x = NULL, y = "Mean dwelling price")

ABS mean dwelling price for Australia.

The March quarter 2026 release puts the national mean dwelling price at over $1.1 million. That is not a typical transaction price and it is not an affordability measure, but it is a useful whole-market signal: the stock keeps getting more expensive, even before we ask who can actually buy into it.

Which States Moved Most Recently?

Code
latest_state_prices |>
  ggplot(aes(fct_reorder(state, latest_price), latest_price, fill = quarterly_change)) +
  geom_col() +
  coord_flip() +
  scale_y_continuous(labels = dollar) +
  scale_fill_gradient2(labels = percent, low = "#8c2d04", mid = "grey80", high = "#006d2c", midpoint = 0) +
  labs(x = NULL, y = "Mean dwelling price", fill = "Quarterly change")

Latest ABS mean dwelling prices by state and territory.
Code
latest_state_prices |>
  arrange(desc(quarterly_change)) |>
  transmute(
    state,
    latest_mean_price = dollar(latest_price, accuracy = 100),
    quarterly_change = percent(quarterly_change, accuracy = 0.1),
    dollar_change = dollar(dollar_change, accuracy = 100)
  ) |>
  kable()
state latest_mean_price quarterly_change dollar_change
New South Wales $11,495,200 0.5% $54,200

Policy Questions This Sets Up

Treasury says the 5% Deposit Scheme was expanded from 1 October 2025, with uncapped places, removed income caps and higher property price caps. That creates a nice empirical question, but not a simple one.

The questions I would ask next:

  • Did first-home buyer loan commitments rise after the deposit-scheme expansion, and was that concentrated in states where prices were already rising fastest?
  • Did the policy mostly pull forward demand, or did it change the composition of buyers entering the market?
  • Are building approvals moving in the same places as dwelling prices, or is supply still lagging the demand signal?
  • Are investor loans and first-home buyer loans moving together or pushing against each other?
  • If mean prices rise after access support expands, how much of the buyer benefit is eaten by price pressure?

Those need lending and building-approval data joined to this price series. This post is just the first brick.

Caveats

  • Mean dwelling price is a stock estimate, not a median sale price or a first-home buyer price.
  • State averages hide massive variation inside cities, regions and property types.
  • The latest ABS dwelling estimates are preliminary and can be revised.
  • Prices do not measure affordability on their own. We need income, rents, interest rates, deposit constraints, lending standards and supply.
  • Policy timing matters. A demand-side policy can show up in lending before it shows up in prices, and supply responses can be much slower.