Ireland publishes two useful housing tables through the Central Statistics Office (CSO): the RTB Average Monthly Rent Report (table RIQ02) and the Residential Property Price Index (table HPM09). Both are open data under CC BY 4.0. Both come as JSON-stat cubes, which are compact but awkward to filter: one long array of values, with dimensions you have to decode before you can ask "what is the average rent for a two-bed apartment in Carlow?".
I built an Apify Actor that reads those two tables and returns one fixed row per figure, ready for a spreadsheet, a script or an AI agent: Ireland Rent and House Price Index (RTB / CSO).
Not affiliated with or endorsed by the Residential Tenancies Board (RTB) or the Central Statistics Office (CSO).
The two tables
Rent (RIQ02, quarterly). Average monthly rent by place, number of bedrooms, property type and quarter. The places run from counties down to towns and local areas. Where the source marks a cell as insufficient data, that cell is empty and the Actor leaves it out (and does not charge for it).
House price index (HPM09, monthly). The CSO's Residential Property Price Index, base 2015 = 100, monthly from January 2005, in 20 categories that combine an area and a type of home: National - houses, Dublin - apartments, Dublin City - houses, the regions and so on. No category is finer than a Dublin local authority or a region. It is an index of price changes, not the price of any one home.
Rents are averages of registered tenancies for an area, not the rent of any one home. The CSO tables are the authority, and the data is published some months after the period it covers.
Two modes
Choose the table with table (RIQ02 or HPM09) and the job with mode.
-
searchreturns rows for what you filter. For rent:locations,bedrooms,propertyTypes,quarterFromandquarterTo(for example2024Q1). For the price index: category names inlocations,statistics(index,change1m,change3m,change12m, which are the CSO's own published changes),monthFromandmonthTo. -
lookupgives the latest figure and the change on a year earlier, for 1 to 20 places (rent) or categories (price index).
Values are spelled as the table spells them, for example Carlow, Two bed, Apartment. A bedrooms or property type value the table does not have refuses the run before anything is charged.
What a row looks like
A rent lookup for Carlow, all bedrooms and all property types, run on 28 Oct 2026, returned one row. Selected fields:
| Field | Value |
|---|---|
location |
Carlow |
bedrooms |
All bedrooms |
propertyType |
All property types |
latestQuarter |
2025Q4 |
latestAverageMonthlyRentEur |
1349.13 |
yearEarlierQuarter |
2024Q4 |
changePercent |
10.3 |
table |
RIQ02 |
changePercent is worked out from the two published averages and rounded to one decimal place.
A price index lookup for Dublin - all residential properties in the same test returned a latest index of 178.4 for August 2026, against 171.8 a year earlier, with the CSO's published 12-month change of 3.9%.
How many rows a lookup returns
This is the one thing to know before you run it. A rent lookup returns one row per place, bedrooms group and property type. That is up to 42 rows per place (7 bedrooms groups x 6 property types), fewer where the source has no figure. In a test on 28 Oct 2026, a lookup of 2 places with no filters returned 68 rows.
If you want one row per place, set the filters to the totals:
{
"table": "RIQ02",
"mode": "lookup",
"locations": ["Carlow", "Carlow Town"],
"bedrooms": ["All bedrooms"],
"propertyTypes": ["All property types"]
}
A price index lookup returns one row per category.
Price
One event, row: $0.001 per row returned, from either table, flat on every Apify plan. There is no start fee and no run fee. A refused run, an empty result and a source problem are not charged. maxItems (default 100) caps the rows you can be charged for, and the run's maximum charge stops it at the last row it can pay for.
Worked examples:
- A rent lookup of 2 places with no filters: 68 rows, $0.068.
- The same lookup filtered to all bedrooms and all property types: 2 rows, $0.002.
- A price index lookup of 2 categories: 2 rows, $0.002.
Calling it from Python
With the apify-client package (3.x), set a maximum charge on the run so a wide query cannot cost more than you expect:
from decimal import Decimal
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("yappman/ireland-rent-index").call(
run_input={
"table": "RIQ02",
"mode": "lookup",
"locations": ["Carlow"],
"bedrooms": ["All bedrooms"],
"propertyTypes": ["All property types"],
},
max_total_charge_usd=Decimal("0.05"),
)
for row in client.dataset(run.default_dataset_id).iterate_items():
print(row["location"], row["latestQuarter"], row["latestAverageMonthlyRentEur"], row["changePercent"])
Each run also saves a RUN_SUMMARY record in its key-value store: the status, the table, the rows matched and returned, the empty cells left out, any places not found in a lookup, and the attribution lines below.
Limits
- One request to the CSO per run (the whole table), at most one request every 1.5 seconds, a 60-second network timeout, and reading the source stops after 5 minutes.
- A rate-limit refusal (HTTP 429 or 503) stops the run with no retry and nothing charged;
RUN_SUMMARY.retryAftersays when to try again. - The input takes no URLs, headers or query strings: the Actor builds the request itself.
- Nothing is read from the RTB website; only the CSO's published tables.
Credit
The data is CC BY 4.0, and the Actor's output carries these lines:
- Source: RTB Average Monthly Rent Report (table RIQ02), copyright Residential Tenancies Board (RTB), published by the Central Statistics Office, Ireland, licensed under Creative Commons Attribution 4.0 (CC BY 4.0). Changes were made: cells with no figure in the source (insufficient data) are not returned, and rows are filtered and reshaped.
- Source: Residential Property Price Index (table HPM09), copyright Central Statistics Office, Ireland, licensed under Creative Commons Attribution 4.0 (CC BY 4.0). Changes were made: the table is filtered and reshaped into one row per month, category and statistic; cells with no figure are not returned.
The rows hold area averages and index values: a place or category, a period, bedrooms and property type, and the figure. There are no fields for people, addresses, landlords, tenants or properties.
If you try it, the Store page is here: yappman/ireland-rent-index. Ratings and reviews there help other buyers judge whether it fits their use.
Top comments (0)