Residential Property Price Indices (RPPIs) and related housing indicators

Data - OECD

Info

source dataset .html .RData
oecd HOUSING 2025-08-25 2020-01-18

Data on housing

source dataset .html .RData
bdf RPP 2025-08-28 2025-08-24
bis LONG_PP 2025-08-28 2024-05-10
bis SELECTED_PP 2025-09-25 2025-09-25
ecb RPP 2025-08-29 2025-08-28
eurostat ei_hppi_q 2025-09-26 2025-09-26
eurostat hbs_str_t223 2025-09-26 2025-09-26
eurostat prc_hicp_midx 2025-09-26 2025-09-26
eurostat prc_hpi_q 2025-09-26 2025-09-26
fred housing 2025-09-27 2025-09-27
insee IPLA-IPLNA-2015 2025-09-26 2025-09-26
oecd housing 2025-08-25 2020-01-18
oecd SNA_TABLE5 2025-08-25 2023-10-19

SUBJECT

Code
HOUSING %>%
  left_join(HOUSING_var$SUBJECT %>%
              setNames(c("SUBJECT", "Subject")),  by = "SUBJECT") %>%
  group_by(SUBJECT, Subject) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

MEASURE

Code
HOUSING %>%
  left_join(HOUSING_var$MEASURE %>%
              setNames(c("MEASURE", "Measure")),  by = "MEASURE") %>%
  group_by(MEASURE, Measure) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
MEASURE Measure Nobs
IXOB Index 132140
GP Percentage change from previous period 88461
GY Percentage change on the same period of the previous year 85775
IXOBSA Index, sa 14691
ST Transaction 4257
AL Per thousand of the National CPI Total 3207
GPSA Percentage change from previous period, sa 820
GYSA Percentage change on the same period of the previous year, sa 786

GEO_COVERAGE

Code
HOUSING %>%
  left_join(HOUSING_var$GEO_COVERAGE %>%
              setNames(c("GEO_COVERAGE", "Geo_coverage")),  by = "GEO_COVERAGE") %>%
  group_by(GEO_COVERAGE, Geo_coverage) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
GEO_COVERAGE Geo_coverage Nobs
CN Whole country 312004
CY Capital/main city 15503
UA Urban areas 2630

FREQUENCY

Code
HOUSING %>%
  left_join(HOUSING_var$FREQUENCY %>%
              setNames(c("FREQUENCY", "Frequency")),  by = "FREQUENCY") %>%
  group_by(FREQUENCY, Frequency) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
FREQUENCY Frequency Nobs
M Monthly 197912
Q Quarterly 103284
A Annual 28941

LOCATION

Code
HOUSING %>%
  left_join(HOUSING_var$LOCATION %>%
              setNames(c("LOCATION", "Location")),  by = "LOCATION") %>%
  group_by(LOCATION, Location) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

France, United States, Germany, Japan

CPI: 04.1 - Actual rentals for housing - CP040100

Code
HOUSING %>%
  filter(LOCATION %in% c("FRA", "USA", "DEU", "JPN"),
         SUBJECT == "CP040100",
         FREQUENCY == "Q",
         MEASURE == "IXOB") %>%
  quarter_to_enddate %>%
  left_join(HOUSING_var$LOCATION %>%
              setNames(c("LOCATION", "Location")), by = "LOCATION") %>%
  ggplot(.) + geom_line() + 
  aes(x = date, y = obsValue, color = Location, linetype = Location) +
  theme_minimal() + xlab("") + ylab("CPI: 04.1 - Actual rentals") +
  scale_x_date(breaks = seq(1960, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 10)) +
  scale_color_manual(values = viridis(5)[1:4]) +
  theme(legend.position = c(0.8, 0.20),
        legend.title = element_blank())

CPI: 04.2 - Imputed rentals for housing - CP040200

Code
HOUSING %>%
  filter(LOCATION %in% c("FRA", "USA", "DEU", "JPN"),
         SUBJECT == "CP040200",
         FREQUENCY == "Q",
         MEASURE == "IXOB") %>%
  quarter_to_enddate %>%
  left_join(HOUSING_var$LOCATION %>%
              setNames(c("LOCATION", "Location")), by = "LOCATION") %>%
  ggplot(.) + geom_line() + 
  aes(x = date, y = obsValue, color = Location, linetype = Location) +
  theme_minimal() + xlab("") + ylab("CPI: 04.2 - Imputed rentals") +
  scale_x_date(breaks = seq(1960, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 10)) +
  scale_color_manual(values = viridis(5)[1:4]) +
  theme(legend.position = c(0.8, 0.20),
        legend.title = element_blank())

CPI: Housing (04.1, 04.2, 04.3) - CPGRHO01

Code
HOUSING %>%
  filter(LOCATION %in% c("FRA", "USA", "DEU", "JPN"),
         SUBJECT == "CPGRHO01",
         FREQUENCY == "Q",
         MEASURE == "IXOB") %>%
  quarter_to_enddate %>%
  left_join(HOUSING_var$LOCATION %>%
              setNames(c("LOCATION", "Location")), by = "LOCATION") %>%
  ggplot(.) + geom_line() + 
  aes(x = date, y = obsValue, color = Location, linetype = Location) +
  theme_minimal() + xlab("") + ylab("CPI: Housing (04.1, 04.2, 04.3)") +
  scale_x_date(breaks = seq(1960, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 10)) +
  scale_color_manual(values = viridis(5)[1:4]) +
  theme(legend.position = c(0.8, 0.20),
        legend.title = element_blank())

CPI: Housing excluding imputed rentals for housing (04.1, 04.3) - CPGRHO02

Code
HOUSING %>%
  filter(LOCATION %in% c("FRA", "USA", "DEU", "JPN"),
         SUBJECT == "CPGRHO02",
         FREQUENCY == "Q",
         MEASURE == "IXOB") %>%
  quarter_to_enddate %>%
  left_join(HOUSING_var$LOCATION %>%
              setNames(c("LOCATION", "Location")), by = "LOCATION") %>%
  ggplot(.) + geom_line() + 
  aes(x = date, y = obsValue, color = Location, linetype = Location) +
  theme_minimal() + xlab("") + ylab("CPI: Housing (04.1, 04.2, 04.3)") +
  scale_x_date(breaks = seq(1960, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 10)) +
  scale_color_manual(values = viridis(5)[1:4]) +
  theme(legend.position = c(0.8, 0.20),
        legend.title = element_blank())

Canada, United Kingdom, Norway, Denmark

CPI: 04.1 - Actual rentals for housing - CP040100

Code
HOUSING %>%
  filter(LOCATION %in% c("CAN", "GBR", "DNK", "NOR"),
         SUBJECT == "CP040100",
         FREQUENCY == "Q",
         MEASURE == "IXOB") %>%
  quarter_to_enddate %>%
  left_join(HOUSING_var$LOCATION %>%
              setNames(c("LOCATION", "Location")), by = "LOCATION") %>%
  ggplot(.) + geom_line() + 
  aes(x = date, y = obsValue, color = Location, linetype = Location) +
  theme_minimal() + xlab("") + ylab("CPI: 04.1 - Actual rentals") +
  scale_x_date(breaks = seq(1960, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 10)) +
  scale_color_manual(values = viridis(5)[1:4]) +
  theme(legend.position = c(0.8, 0.20),
        legend.title = element_blank())

CPI: 04.2 - Imputed rentals for housing - CP040200

Code
HOUSING %>%
  filter(LOCATION %in% c("CAN", "GBR", "DNK", "NOR"),
         SUBJECT == "CP040200",
         FREQUENCY == "Q",
         MEASURE == "IXOB") %>%
  quarter_to_enddate %>%
  left_join(HOUSING_var$LOCATION %>%
              setNames(c("LOCATION", "Location")), by = "LOCATION") %>%
  ggplot(.) + geom_line() + 
  aes(x = date, y = obsValue, color = Location, linetype = Location) +
  theme_minimal() + xlab("") + ylab("CPI: 04.2 - Imputed rentals") +
  scale_x_date(breaks = seq(1960, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 10)) +
  scale_color_manual(values = viridis(5)[1:4]) +
  theme(legend.position = c(0.8, 0.20),
        legend.title = element_blank())

CPI: Housing (04.1, 04.2, 04.3) - CPGRHO01

Code
HOUSING %>%
  filter(LOCATION %in% c("CAN", "GBR", "DNK", "NOR"),
         SUBJECT == "CPGRHO01",
         FREQUENCY == "Q",
         MEASURE == "IXOB") %>%
  quarter_to_enddate %>%
  left_join(HOUSING_var$LOCATION %>%
              setNames(c("LOCATION", "Location")), by = "LOCATION") %>%
  ggplot(.) + geom_line() + 
  aes(x = date, y = obsValue, color = Location, linetype = Location) +
  theme_minimal() + xlab("") + ylab("CPI: Housing (04.1, 04.2, 04.3)") +
  scale_x_date(breaks = seq(1960, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 10)) +
  scale_color_manual(values = viridis(5)[1:4]) +
  theme(legend.position = c(0.8, 0.20),
        legend.title = element_blank())

CPI: Housing excluding imputed rentals for housing (04.1, 04.3) - CPGRHO02

Code
HOUSING %>%
  filter(LOCATION %in% c("CAN", "GBR", "DNK", "NOR"),
         SUBJECT == "CPGRHO02",
         FREQUENCY == "Q",
         MEASURE == "IXOB") %>%
  quarter_to_enddate %>%
  left_join(HOUSING_var$LOCATION %>%
              setNames(c("LOCATION", "Location")), by = "LOCATION") %>%
  ggplot(.) + geom_line() + 
  aes(x = date, y = obsValue, color = Location, linetype = Location) +
  theme_minimal() + xlab("") + ylab("CPI: Housing (04.1, 04.2, 04.3)") +
  scale_x_date(breaks = seq(1960, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 10)) +
  scale_color_manual(values = viridis(5)[1:4]) +
  theme(legend.position = c(0.8, 0.20),
        legend.title = element_blank())