# Ireland Rent and House Price Index (RTB / CSO) (`yappman/ireland-rent-index`) Actor

Average monthly rent in Ireland (RTB rent index) by place, bedrooms, property type and quarter, plus the CSO Residential Property Price Index by area and type of home. Irish rent statistics and property price data; one row per figure, CC BY 4.0.

- **URL**: https://apify.com/yappman/ireland-rent-index.md
- **Developed by:** [Russell Yapp](https://apify.com/yappman) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Ireland Rent Index: average rents and the house price index from CSO tables

Not affiliated with or endorsed by the Residential Tenancies Board (RTB) or the Central Statistics Office (CSO).

Average monthly rent in Ireland by place, number of bedrooms, property type and quarter (RTB Average Monthly Rent Report, CSO table RIQ02), and the CSO's monthly Residential Property Price Index by area and type of home (table HPM09). One fixed row per figure, ready for a spreadsheet, a script or an AI agent.

### When to use it, and when not to

Use it to compare rents between places, bedroom counts and property types over time, to follow the change on the same quarter a year earlier, or to track the price index for Dublin, its local authorities and the regions.

Do not use it as the rent or the value of any one home. Rents are averages of registered tenancies for an area; the price index measures price changes, not prices. The CSO tables are the authority, and the data is published some months after the period it covers.

### Modes

Choose the table with `table` (`RIQ02`, the default, or `HPM09`) and the job with `mode`.

#### Rent (RIQ02, quarterly)

- `search`: rows for the places, bedrooms, property types and quarters you filter, newest quarter first. Filter with `locations`, `bedrooms`, `propertyTypes`, `quarterFrom` and `quarterTo` (for example `2024Q1`).
- `lookup`: for each place (1 to 20 in `locations`), the latest average rent and the change on the same quarter a year earlier. It returns one row per place, bedrooms group and property type: up to 42 rows per place (7 bedrooms groups x 6 property types), fewer where the source has no figure (34 per place in a run on 28 Oct 2026). To get one row per place, set `bedrooms` to `["All bedrooms"]` and `propertyTypes` to `["All property types"]`.

Place, bedrooms and property type values are spelled as the table spells them (capitals do not matter), for example `Carlow`, `Two bed`, `Apartment`. A bedrooms or property type value the table does not have refuses the run before anything is charged, and so does an unknown place in search. In lookup, places not in the table are listed in `RUN_SUMMARY.notFound` and the rest are returned; the run is refused only if none is found.

#### House price index (HPM09, monthly)

The CSO's index of residential property prices (base 2015 = 100; monthly from January 2005) in 20 categories that combine an area and a type of home, for example `National - houses`, `Dublin - apartments`, `Dublin City - houses` and the regions. No category is finer than a Dublin local authority or a region.

- `search`: one row per month, category and statistic. Choose `statistics` from `index`, `change1m`, `change3m` and `change12m` (the CSO's own published changes; default `index`), a `monthFrom` and `monthTo` (for example `2024-01`), and category names in `locations`. Each statistic is a separate row.
- `lookup`: for each category (1 to 20 in `locations`), one row with the latest index, the index a year earlier and the CSO's published 1-, 3- and 12-month changes for the latest month. The percentages are the CSO's figures and are not recalculated.

`bedrooms`, `propertyTypes` and the quarter fields do not apply to HPM09 and refuse the run if set.

### What you get

| Table and mode | Fields |
|---|---|
| RIQ02 search | `quarter`, `location`, `bedrooms`, `propertyType`, `averageMonthlyRentEur`, `table`, `sourceUpdated` |
| RIQ02 lookup | `location`, `bedrooms`, `propertyType`, `latestQuarter`, `latestAverageMonthlyRentEur`, `yearEarlierQuarter`, `yearEarlierAverageMonthlyRentEur`, `changePercent`, `table`, `sourceUpdated` |
| HPM09 search | `month`, `category`, `area`, `propertyGroup`, `statistic`, `value`, `table`, `sourceUpdated` |
| HPM09 lookup | `category`, `area`, `propertyGroup`, `latestMonth`, `latestIndex`, `yearEarlierMonth`, `yearEarlierIndex`, `change1mPercent`, `change3mPercent`, `change12mPercent`, `table`, `sourceUpdated` |

A cell the source leaves empty is not returned and not charged: in RIQ02 that is the RTB's "insufficient data" (counted as `insufficientDataCells`), in HPM09 a cell with no figure (counted as `noFigureCells`). In HPM09 a value of 0 is a real value (for example a 0% change) and is returned. `changePercent` in an RIQ02 lookup is worked out from the two published averages, rounded to one decimal place; it is null when the year-earlier figure is missing.

### Personal data

Rows hold area averages and index values only: a place or area-and-type category, a period, bedrooms and property type, and the figure. There are no fields for people, addresses, landlords, tenants or properties; the source publishes area averages and index values only. The smallest areas in RIQ02 are towns and local areas; a cell the source marks as insufficient data is empty and left out.

### Pricing

| Event | When | Price |
|---|---|---|
| `row` | Each row returned, from either table | $0.001 |

The price is 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 through the API, 10 in the Console form; search at most 100,000, lookup at most 2,000) caps the rows you can be charged for, and the run's maximum charge stops it at the last row it can pay for.

Examples: a lookup of 2 places with no filters returned 68 rows ($0.068) on 28 Oct 2026; the same lookup with `bedrooms` `["All bedrooms"]` and `propertyTypes` `["All property types"]` returns 2 rows ($0.002). An HPM09 lookup of 2 categories returns 2 rows ($0.002).

### Run summary

Each run saves `RUN_SUMMARY` in its key-value store: the status (`ok`, `refused`, `stopped` or `failed`), the table, mode, latest quarter or month and the source's update time, rows matched and returned, the empty cells left out, `notFound` places in a lookup, `truncatedByMaxItems`, whether the charge limit was reached, the request count, and the attribution line below. A refused run saves the status and the reason; a stopped run saves the status, the reason, `retryAfter` and the request count.

### 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.retryAfter` says when to try again.
- The input takes no URLs, headers or query strings: the Actor builds the request itself.

### Data and licence

- Rent: 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.
- House price index: 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.
- Licence text: `creativecommons.org/licenses/by/4.0/`
- Read from the CSO's published tables only; nothing is read from the RTB website.

Ratings and reviews on the Store page help other buyers judge whether this Actor fits their use, whatever your experience.

### About

From Yappman Data. Contact: info@yappman.com.

# Actor input Schema

## `mode` (type: `string`):

search: rows for the places, bedrooms, property types and quarters you filter. lookup: for each place (give locations), the latest average rent and the change on the same quarter a year earlier, one row per place, bedrooms group and property type: up to 42 rows ($0.042) per place unless you filter bedrooms and propertyTypes ("All bedrooms" and "All property types" give one row per place). For HPM09: search returns one row per month, category and statistic; lookup returns the latest index, the index a year earlier and the CSO's published changes.

## `table` (type: `string`):

The CSO table. RIQ02 is the quarterly average monthly rent report. HPM09 is the monthly Residential Property Price Index (for HPM09, locations are the table's category names such as "Dublin - houses"; bedrooms, propertyTypes and the quarter fields do not apply).

## `locations` (type: `array`):

Place names exactly as the table spells them (any capitals). Search: optional, up to 50. Lookup: required, 1 to 20.

## `bedrooms` (type: `array`):

Values of the table's bedrooms dimension, as spelled there. Optional.

## `propertyTypes` (type: `array`):

Values of the table's property type dimension, as spelled there. Optional.

## `quarterFrom` (type: `string`):

A quarter such as 2024Q1. Search mode only.

## `quarterTo` (type: `string`):

A quarter such as 2025Q4. Search mode only.

## `maxItems` (type: `integer`):

The most rows returned, and so the most you can be charged for ($0.001 a row). The Console form starts at 10; through the API the default is 100. Search: at most 100,000. Lookup: at most 2,000. Cells the source marks as insufficient data are not returned and not charged.

## `statistics` (type: `array`):

HPM09 search only. Any of: index, change1m, change3m, change12m (the index and the CSO's own 1-, 3- and 12-month percentage changes). Default: index. Each statistic is a separate row.

## `monthFrom` (type: `string`):

A month such as 2024-01. HPM09 search only.

## `monthTo` (type: `string`):

A month such as 2026-08. HPM09 search only.

## Actor input object example

```json
{
  "mode": "search",
  "table": "RIQ02",
  "maxItems": 10
}
```

# Actor output Schema

## `rows` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("yappman/ireland-rent-index").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("yappman/ireland-rent-index").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxItems": 10
}' |
apify call yappman/ireland-rent-index --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yappman/ireland-rent-index"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/kbKNOygortNlNep1Q/builds/DYFx7k9zzIlpKNknT/openapi.json
