# Daft.ie Scraper | Irish Property Listings + Agents (`haketa/daft-scraper`) Actor

Daft.ie scraper & API for Ireland real estate: search property for sale, rent and sharing and export address, price, beds, baths, BER energy, Eircode, type, agent, photos and coordinates. Ireland property market data and real-estate lead generation — fast, no login.

- **URL**: https://apify.com/haketa/daft-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Real estate, Lead generation
- **Features:** Limited permissions
- **Stats:** 19 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Daft.ie Scraper 🇮🇪🏠 — Irish Property Listings, BER, Eircode, Geo & Agent Data

**The most complete way to scrape Daft.ie**, Ireland's #1 real-estate portal. This **Daft.ie scraper** extracts every property listing from any [daft.ie](https://www.daft.ie) search into a clean, structured dataset — giving you the **asking price (`priceMin` / `priceMax`), bedrooms & bathrooms, floor area (`m²`), BER energy rating (`A1`–`G`), Irish Eircode, exact GPS coordinates (`latitude` / `longitude`), listing estate agent profile (including PSRA licence number)** and high-resolution photo gallery. No login, no coding, no browser tabs.

Bulk export every result to **JSON, CSV, Excel, or API** with **1,000+ results pagination** across all **for-sale**, **for-rent**, **sharing (rooms)**, **new homes** and **commercial** sections in every Irish county.

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-00b04f?style=flat-square\&logo=apify)](https://apify.com/haketa/daft-scraper)
[![Market](https://img.shields.io/badge/Market-Ireland%20🇮🇪-169b62?style=flat-square)](https://apify.com/haketa/daft-scraper)
[![Sections](https://img.shields.io/badge/Sections-Sale%20%7C%20Rent%20%7C%20Share%20%7C%20Commercial-blue?style=flat-square)](https://apify.com/haketa/daft-scraper)
[![Scale](https://img.shields.io/badge/Pagination-1%2C000%2B%20Properties-ff883e?style=flat-square)](https://apify.com/haketa/daft-scraper)
[![Leads](https://img.shields.io/badge/B2B%20Leads-Agent%20%2B%20PSRA%20Licence-purple?style=flat-square)](https://apify.com/haketa/daft-scraper)
[![Export](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel%20%7C%20API-2b7489?style=flat-square)](https://apify.com/haketa/daft-scraper)

> Built for **Irish estate agents** benchmarking competition, **PropTech & valuation teams** building housing indices, **mortgage & lending analysts**, **property investors** sourcing BER retrofit deals, **B2B lead generation teams** prospecting PSRA-licensed agencies, and **relocation / buyer's agents**.

***

### ⚡ At a glance

| Feature | Details |
|---|---|
| **Target Portal** | [Daft.ie](https://www.daft.ie) — Republic of Ireland's primary residential & commercial property marketplace |
| **Sections Supported** | `property-for-sale`, `property-for-rent`, `sharing`, `new-homes-for-sale`, `commercial-properties-for-sale`, `commercial-properties-for-rent` |
| **Geographic Coverage** | All 26 ROI counties + major cities (`dublin`, `dublin-city`, `cork`, `galway`, `limerick`, `waterford`, `kildare`, `wicklow`, `meath`…) + custom town/district slugs |
| **Core Data Extracted** | `propertyId`, Title/Address, `priceRaw` + `priceMin`/`priceMax`, Bedrooms & Bathrooms, **`berRating`**, `floorArea` (`m²`/acres), `dateOfConstruction`, **`eircode`**, `city`, `county`, GPS (`latitude`/`longitude`), Agent Profile (`agentId`, `agentName`, `agentBranch`, `agentLicenceNumber`), Up to 12 Photos, Optional Full Description & Features |
| **Pagination & Scale** | Automatic multi-page traversal (`maxPages: 0` = unlimited governed by `maxRecords`) + multi-area scaling supporting **1,000+ properties** per run |
| **Deduplication** | 100% deduplicated by `propertyId` (`0 duplicates`) |
| **Export Formats** | Bulk export to **JSON, CSV, Excel (XLSX), HTML, XML, or REST API** |

***

### 🔎 Why scrape Daft.ie?

[Daft.ie](https://www.daft.ie) is the undisputed centre of the Irish property market — virtually every residential home for sale, apartment to let, student room share, new-build development and commercial unit in Ireland is listed on Daft.ie first. It holds the richest public dataset on Irish housing: asking prices, bedroom counts, **Building Energy Ratings (BER)**, 7-character **Eircodes**, point geometry coordinates, and the **PSRA-licensed estate agency** handling each instruction.

However, Daft.ie provides no public bulk-export API. Copying listings manually across dozens of search pages is slow and error-prone, raw seller addresses are inconsistently formatted, and automated scripts using standard datacenter IPs immediately hit Daft.ie's security interstitial.

This **Daft.ie scraper** (`daft-scraper`) handles all of that automatically. Select a section and county (or paste any filtered Daft.ie search URL), press **Start**, and it walks the paginated search results, normalizes Irish addresses into clean `city`, `county` and `eircode` columns, extracts numeric prices and floor areas, deduplicates every record, and delivers an analysis-ready dataset in seconds.

**Common reasons teams use this Daft.ie data extractor:**

- 📊 **Irish housing market & price-per-m² analytics** — benchmark asking prices, `floorArea` (`€/m²`), bedroom mix and `berRating` across Dublin postal districts and all 26 counties.
- 🤝 **Estate agent B2B lead generation & market-share tracking** — extract `agentId`, `agentName`, `agentBranch`, `agentType` and PSRA `agentLicenceNumber` on every listing to map agency instruction volume and build B2B prospect lists.
- 🌱 **Green-mortgage & BER retrofit investment sourcing** — filter for `D`, `E`, `F`, and `G` BER-rated homes or `EXEMPT` protected structures that qualify for SEAI retrofit grants and value-add refurbishment.
- 📈 **Rental yield & Build-to-Rent (BTR) modeling** — compare `property-for-rent` and `sharing` monthly rates against `property-for-sale` capital values by Eircode routing key (`D02`, `D04`, `D06W`, `T12`, `H91`).
- 🏦 **Mortgage, banking & valuation underwriting** — feed live comparable asking prices, construction years (`dateOfConstruction`) and geo-coordinates into automated valuation models (AVMs).
- ⏱️ **Time-on-market & inventory velocity tracking** — schedule daily or weekly runs and diff `propertyId` and `priceMin` to spot new instructions, price drops, and withdrawn/sold stock.

***

### ✨ What this Daft.ie scraper does

- ✅ **All 6 Daft.ie market sections** — `property-for-sale`, `property-for-rent`, `sharing` (room shares), `new-homes-for-sale`, `commercial-properties-for-sale`, and `commercial-properties-for-rent`.
- ✅ **Point-and-click county & city dropdown** — choose **All Ireland (nationwide)**, any of the 26 counties, or major city markets (`dublin-city`, `cork-city`, `galway-city`, `limerick-city`, `waterford-city`), or pass any town/district slug in `locationCustom` (e.g. `dublin-2-dublin`, `blackrock-cork`, `maynooth-kildare`).
- ✅ **Unlocked 1,000+ deep pagination** — with `maxPages: 0` (default), the Actor automatically walks page after page (`20 listings per page`) up to your `maxRecords` target, with resilient multi-attempt page retries and automatic county expansion when `500+` or `1,000+` records are requested.
- ✅ **Irish address, County & Eircode parser** — automatically mines 7-character **Irish Eircodes** (including Dublin `D6W` routing keys) from titles and URLs, and splits seller address chains into clean `city` and `county` columns.
- ✅ **Normalized BER energy ratings & floor areas** — standardizes `berRating` (`A1` through `G`, plus `EXEMPT` for `SI_666` protected structures) and formats `floorArea` into human-readable `"125 m²"` or `"2 acres"`.
- ✅ **Exact map coordinates** — extracts `latitude` and `longitude` (WGS84) on ~100% of listings for instant GIS mapping in QGIS, Mapbox, Tableau, or Power BI.
- ✅ **Complete estate agent & PSRA profile** — every row includes `agentId`, `agentName`, `agentBranch`, `agentType`, `agentLicenceNumber` (PSRA licence), `agentLogoUrl`, and `premierPartner`.
- ✅ **Fast list mode + optional deep description enrichment** — list-only mode (`scrapeDescription: false`, default) captures 40+ fields straight from the search state at high speed; flipping `scrapeDescription: true` fetches each property's full `description`, `features` array, and `lastUpdateDate` using a parallel worker pool (`detailConcurrency`).

***

### 🎯 Use cases & B2B intelligence workflows

#### 1. Estate Agency Competitive Intelligence & Instruction Tracking

Residential and commercial agencies across Dublin, Cork, Galway and the Greater Dublin Area (Kildare, Meath, Wicklow, Louth) run scheduled daily scrapes to monitor which competing branches (`Sherry FitzGerald`, `Savills`, `Lisney`, `DNG`, `Hooke & MacDonald`, `Quillsen`) win new instructions, what price brackets they target, and which listings use `FEATURED` or `premierPartner` promotion.

#### 2. PropTech, AVM & Economic Research

Economists, housing policy researchers, and PropTech platforms combine `priceMin`, `floorArea`, `numBedroomsMin`, `berRating`, `dateOfConstruction`, `eircode`, and `latitude`/`longitude` to build hedonic price indices, energy-efficiency price-premium studies, and commuter-belt affordability heatmaps.

#### 3. Property Investment, PRS & Retrofit Deal Sourcing

Private equity funds, approved housing bodies (AHBs), and value-add investors filter Daft.ie exports to identify high-yielding multi-unit buildings (`subUnitCount`), low-BER refurbishment candidates (`berRating` in `E1`–`G`), or under-priced family homes per square metre.

#### 4. B2B SaaS, ConTech & Financial Services Lead Generation

Vendors selling CRM software, property photography, BER assessment services, conveyancing, or bridging finance aggregate listings by `agentId`, `agentBranch`, and `agentLicenceNumber` to build a complete, verified directory of active Irish auctioneers and letting agents.

***

### 📥 Input parameters

Select a **Section** and **Location** from the dropdowns and click **Start** — no coding or URLs required. All fields have sensible defaults.

| Field | Type | Default | Description |
|---|---|---|---|
| `section` | `string` | `"property-for-sale"` | Market section to scrape: `"property-for-sale"`, `"property-for-rent"`, `"sharing"`, `"new-homes-for-sale"`, `"commercial-properties-for-sale"`, `"commercial-properties-for-rent"`. |
| `location` | `string` | `""` (prefill `"dublin"`) | County or city dropdown (`""` = All Ireland nationwide, `"dublin"`, `"dublin-city"`, `"cork"`, `"cork-city"`, `"galway"`, `"limerick"`, `"kildare"`, `"wicklow"`, `"meath"`, etc.). |
| `locationCustom` | `string` | `""` | Optional advanced slug for a specific town, suburb or Dublin postal district (e.g. `"dublin-2-dublin"`, `"blackrock-cork"`, `"maynooth-kildare"`). Overrides `location`. |
| `startUrls` | `array` | `[]` | Optional ready-made Daft.ie search URLs (e.g. `https://www.daft.ie/property-for-sale/cork-city?priceFrom=300000&priceTo=500000&numBeds_from=3`). Overrides `section`, `location` and filters. |
| `priceFrom` | `integer` | `0` | Minimum price in EUR (€). For rental sections, this is monthly rent. `0` = no minimum. |
| `priceTo` | `integer` | `0` | Maximum price in EUR (€). For rental sections, this is monthly rent. `0` = no maximum. |
| `minBeds` | `integer` | `0` | Minimum number of bedrooms (`0` = no filter). |
| `scrapeDescription` | `boolean` | `false` | When `true`, fetches each listing's detail data to add full `description` text, `features` array, and `lastUpdateDate`. Keep `false` (default) for fast, low-cost runs since price, beds, BER, Eircode, geo and agent are already extracted from search pages. |
| `detailConcurrency` | `integer` | `5` | Number of parallel detail fetches (`1–8`) when `scrapeDescription: true`. |
| `maxRecords` | `integer` | `100` (prefill `60`) | Maximum total properties to collect (`0` = unlimited). Supports `maxItems` alias via API. |
| `maxPages` | `integer` | `0` | Maximum search pages to walk per search (`0` = auto/unlimited governed by `maxRecords`). |
| `requestDelay` | `integer` | `1000` | Delay in milliseconds between page requests (`300–10000`, default `1000`). |
| `proxyConfiguration` | `object` | IE Residential | Proxy configuration. **Defaults to Apify `RESIDENTIAL` + country `IE`**, which is required to pass Daft.ie's anti-bot check reliably. |

#### Example input (Dublin family homes for sale)

```json
{
  "section": "property-for-sale",
  "location": "dublin",
  "priceFrom": 300000,
  "priceTo": 650000,
  "minBeds": 3,
  "scrapeDescription": false,
  "maxRecords": 500,
  "maxPages": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IE"
  }
}
```

#### Example input (1,000+ nationwide Irish property harvest)

```json
{
  "section": "property-for-sale",
  "location": "",
  "maxRecords": 1200,
  "maxPages": 0
}
```

#### Example input (Cork & Galway rental yield comparison)

```json
{
  "section": "property-for-rent",
  "location": "cork",
  "priceTo": 2500,
  "minBeds": 2,
  "maxRecords": 300
}
```

***

### 🗺️ Irish Markets, Eircode Keys & Section Reference

| Market / County (`location`) | Key Sub-Areas & Eircode Routing Keys | Primary Sections Scraped |
|---|---|---|
| `dublin` / `dublin-city` | Dublin 1–24 (`D01`–`D24`, `D6W`), Swords (`K67`), Malahide (`K36`), Blackrock (`A94`), Dun Laoghaire (`A96`), Balbriggan (`K32`) | Residential Sales, PRS Rentals, Sharing, New Homes, Commercial |
| `cork` / `cork-city` | Cork City (`T12`, `T23`), Ballincollig (`P31`), Douglas, Midleton (`P25`), Kinsale (`P17`), Mallow (`P51`) | Residential Sales, Student/City Rentals, New Homes, Agricultural/Sites |
| `galway` / `galway-city` | Galway City (`H91`), Salthill, Oranmore (`H91`), Athenry (`H65`), Tuam (`H54`), Ballinasloe (`H53`) | Residential Sales, City Rentals, Sharing, Holiday/Coastal Homes |
| `limerick` / `limerick-city` | Limerick City (`V94`), Castletroy, Dooradoyle, Raheen, Adare (`V94`), Newcastle West (`V42`) | Residential Sales, Rentals, Student Sharing, Commercial |
| `kildare` / `meath` / `wicklow` | Naas (`W91`), Maynooth (`W23`), Newbridge (`W12`), Navan (`C15`), Ashbourne (`A84`), Bray (`A98`), Greystones (`A63`) | Greater Dublin Commuter Belt New Homes (`new-homes-for-sale`) & Family Sales |

***

### 📤 Output schema & sample data

Each property is saved as a single structured row in the Apify Dataset. Here is a real record from a live `property-for-sale` / `dublin` run:

```json
{
  "propertyId": "6701323",
  "daftShortcode": "16701323",
  "title": "12 Castleland Park Avenue, Balbriggan, Co. Dublin, K32 A253",
  "category": "Buy",
  "propertyType": "Semi-D",
  "priceRaw": "€528,000",
  "priceMin": 528000,
  "priceMax": 528000,
  "priceCurrency": "EUR",
  "pricePeriod": null,
  "numBedrooms": "4 Bed",
  "numBedroomsMin": 4,
  "numBedroomsMax": 4,
  "numBathrooms": "3 Bath",
  "berRating": "A1",
  "floorArea": "125 m²",
  "dateOfConstruction": "2013",
  "address": "12 Castleland Park Avenue, Balbriggan, Co. Dublin, K32 A253",
  "eircode": "K32 A253",
  "city": "Balbriggan",
  "county": "Dublin",
  "country": "Ireland",
  "latitude": 53.599249,
  "longitude": -6.178495,
  "featuredLevel": "FEATURED",
  "publishDate": "2026-11-01",
  "firstPublishDate": null,
  "lastUpdateDate": null,
  "description": null,
  "features": null,
  "agentId": "582",
  "agentName": "Chris White",
  "agentBranch": "Sherry Fitzgerald Cumisky Kelly",
  "agentType": "BRANDED_AGENT",
  "agentLicenceNumber": "002340",
  "agentLogoUrl": "https://media.daft.ie/...",
  "premierPartner": true,
  "showContactForm": true,
  "imageUrl": "https://media.daft.ie/...",
  "images": [
    "https://media.daft.ie/...",
    "https://media.daft.ie/..."
  ],
  "imageCount": 9,
  "subUnitCount": null,
  "listingUrl": "https://www.daft.ie/for-sale/12-castleland-park-avenue-balbriggan-co-dublin/6701323",
  "searchSection": "property-for-sale",
  "searchLocation": "dublin",
  "searchUrl": "https://www.daft.ie/property-for-sale/dublin",
  "scrapedAt": "2026-11-10T02:35:00.000Z"
}
```

#### Output field reference

**Coverage key:** 🟢 High (~92–100% on residential sales) · 🟡 Conditional (depends on section, listing type, or `scrapeDescription: true`)

##### 🏠 Property Identity, Specs & Energy Rating

| Field | Type | Coverage | Description |
|---|---|---|---|
| `propertyId` | `string` | 🟢 High | Unique numeric Daft.ie listing ID (used for 100% deduplication). |
| `daftShortcode` | `string` | 🟢 High | Daft.ie short reference code displayed on the listing. |
| `title` | `string` | 🟢 High | Full property headline / address string as published on Daft.ie. |
| `category` | `string` | 🟢 High | Market category (`Buy`, `Rent`, `Share`, `New Homes`, `Commercial`). |
| `propertyType` | `string` | 🟢 High | Property style (`Semi-D`, `Detached`, `Terrace`, `Apartment`, `Duplex`, `Bungalow`, `Site`, `Studio`). |
| `numBedrooms` | `string` | 🟢 High | Raw bedroom label (`"4 Bed"`, `"1, 2 & 3 bed"`, `"Studio"`). |
| `numBedroomsMin` / `numBedroomsMax` | `integer` | 🟢 High | Parsed integer minimum and maximum bedroom counts (`0` for Studio). |
| `numBathrooms` | `string` | 🟢 High | Bathroom count label (`"3 Bath"`). |
| `berRating` | `string` | 🟢 High | Irish Building Energy Rating (`A1`–`G`, or `EXEMPT` for protected structures). |
| `floorArea` | `string` | 🟢 High | Normalized floor or site area (`"125 m²"`, `"2.5 acres"`). |
| `dateOfConstruction` | `string` | 🟡 Conditional | Year of construction when published by the agent (e.g. `"2013"`). |
| `subUnitCount` | `integer` | 🟡 Conditional | Number of sub-units for PRS / multi-unit development parent listings. |

##### 💶 Pricing & Rental Terms

| Field | Type | Coverage | Description |
|---|---|---|---|
| `priceRaw` | `string` | 🟢 High | Raw price string (`"€528,000"`, `"€2,450 per month"`, `"Price on Application"`). |
| `priceMin` / `priceMax` | `number` | 🟢 High | Numeric price in EUR (equal for single-price listings; min/max for ranges; `null` for POA). |
| `priceCurrency` | `string` | 🟢 High | ISO currency code (`"EUR"`, or `"GBP"` on cross-border NI listings). |
| `pricePeriod` | `string` | 🟡 Conditional | `"month"`, `"week"`, or `"year"` on rental/sharing listings; `null` on sales. |

##### 📍 Location, Eircode & GIS Coordinates

| Field | Type | Coverage | Description |
|---|---|---|---|
| `address` | `string` | 🟢 High | Full published address line. |
| `eircode` | `string` | 🟢 High | 7-character Irish postcode (`"K32 A253"`, `"D06 YW72"`, `"T12 HD21"`), ~92% fill on sales. |
| `city` | `string` | 🟢 High | Parsed town, suburb or locality name (`"Balbriggan"`, `"Drumcondra"`, `"Blackrock"`). |
| `county` | `string` | 🟢 High | Normalized Irish county name (`"Dublin"`, `"Cork"`, `"Galway"`). |
| `country` | `string` | 🟢 High | Always `"Ireland"`. |
| `latitude` / `longitude` | `number` | 🟢 High | Exact WGS84 GPS coordinates from Daft.ie's point geometry (~100% fill). |

##### 🧑‍💼 Estate Agent & B2B Lead Profile

| Field | Type | Coverage | Description |
|---|---|---|---|
| `agentId` | `string` | 🟢 High | Unique Daft.ie seller/agency ID. |
| `agentName` | `string` | 🟢 High | Individual negotiator or seller name (`"Chris White"`). |
| `agentBranch` | `string` | 🟢 High | Estate agency brand and branch (`"Sherry Fitzgerald Cumisky Kelly"`). |
| `agentType` | `string` | 🟢 High | Seller tier (`"BRANDED_AGENT"`, `"UNBRANDED_AGENT"`, `"PRIVATE_USER"`). |
| `agentLicenceNumber` | `string` | 🟢 High | Official PSRA (Property Services Regulatory Authority) licence number (`"002340"`). |
| `agentLogoUrl` | `string` | 🟡 Conditional | Agency logo URL when branded. |
| `premierPartner` | `boolean` | 🟢 High | Whether the agency is a Daft.ie Premier Partner (`true` / `false`). |
| `showContactForm` | `boolean` | 🟢 High | Whether the listing exposes a direct enquiry form. |

##### 🖼️ Media, Dates, Detail Enrichment & Provenance

| Field | Type | Coverage | Description |
|---|---|---|---|
| `imageUrl` | `string` | 🟢 High | Primary cover photo URL (`720x480`). |
| `images` | `array<string>` | 🟢 High | Up to 12 high-resolution gallery photo URLs. |
| `imageCount` | `integer` | 🟢 High | Total number of photos on the listing. |
| `featuredLevel` | `string` | 🟢 High | Daft.ie promotion tier (`"FEATURED"`, `"STANDARD"`, `"PREMIER"`, etc.). |
| `publishDate` | `string` | 🟢 High | Date the listing was published/refreshed (`YYYY-MM-DD`). |
| `firstPublishDate` / `lastUpdateDate` | `string` | 🟡 Conditional | Populated when `scrapeDescription: true` (or when present on the card). |
| `description` | `string` | 🟡 Conditional | Full plain-text property description (**populated when `scrapeDescription: true`**). |
| `features` | `array<string>` | 🟡 Conditional | Bullet list of property features/facilities (**populated when `scrapeDescription: true`**). |
| `listingUrl` | `string` | 🟢 High | Canonical URL to the property on Daft.ie. |
| `searchSection` / `searchLocation` / `searchUrl` | `string` | 🟢 High | Provenance metadata showing which search produced the record. |
| `scrapedAt` | `string` | 🟢 High | ISO-8601 UTC timestamp of extraction. |

***

### 🔁 Pagination & 1,000+ scale

Daft.ie serves **20 property listings per search page** via `?page=N` on location routes (`/property-for-sale/dublin?page=2`). With `maxPages: 0` (the default), the **Daft.ie scraper**:

1. Walks sequentially through pages `1, 2, 3, …` until `totalSaved` reaches your `maxRecords` (or `maxItems`) target.
2. Uses a **5-attempt retry ladder per page** with automatic Irish residential IP rotation, plus tolerance for transient page hiccups so a single slow page never aborts a deep 1,000-record run.
3. **Automatic multi-county expansion for 1,000+ runs:** If you request `500+` or `1,000+` records (or `maxRecords: 0` unlimited) without custom `startUrls`, and your initial county/area has fewer listings than your target, the Actor automatically continues across nationwide and major county queues (`ireland`, `dublin`, `cork`, `galway`, `limerick`, `kildare`, `wicklow`, `meath`, `waterford`, `louth`) while deduplicating globally by `propertyId`.
4. Note that Daft.ie's backend caps any single query at ~167 pages (~3,340 listings); to extract the entire ~15,000+ nationwide inventory, either run per county or shard large counties by `priceFrom` / `priceTo` bands.

***

### 💻 API usage examples

#### Python (`apify-client`)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("haketa/daft-scraper").call(run_input={
    "section": "property-for-sale",
    "location": "dublin",
    "minBeds": 3,
    "maxRecords": 500,
    "maxPages": 0,
})

for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{row['propertyId']} | {row['eircode']} | {row['priceRaw']} | BER: {row['berRating']} | {row['agentBranch']}")
```

#### Node.js (`apify-client`)

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('haketa/daft-scraper').call({
    section: 'property-for-rent',
    location: 'cork',
    maxRecords: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Saved ${items.length} Cork rental listings`);
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/haketa~daft-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"section":"property-for-sale","location":"dublin","maxRecords":100}'
```

***

### 💡 Best practices & pro tips

- **Keep Irish Residential Proxy (`IE`) enabled:** Daft.ie challenges datacenter IPs within 1–2 requests. The Actor defaults to `RESIDENTIAL` + `IE` so pagination runs smoothly.
- **Keep `scrapeDescription: false` for fast market sweeps:** All core valuation and lead fields (`priceMin`, `numBedroomsMin`, `berRating`, `floorArea`, `eircode`, `latitude`/`longitude`, `agentName`, `agentBranch`, `agentLicenceNumber`) are already extracted in list-only mode at ~20 properties per second! Only enable `scrapeDescription: true` when you specifically need the long-form brochure text.
- **Deduplicate by `agentId` for an instant B2B directory:** Grouping a 1,000-record county sweep by `agentId` + `agentBranch` + `agentLicenceNumber` gives you a ranked leaderboard of every active estate agency in that region.
- **Use `startUrls` for advanced Daft.ie filters:** Apply any combination of filters on daft.ie in your browser (e.g. auction-only, specific BER range, added in last 14 days), copy the URL from the address bar, and paste it into `startUrls`.

***

### ❓ Frequently asked questions

**How fast is the Daft.ie scraper?**
In list-only mode (`scrapeDescription: false`), each page of 20 properties takes ~1.5–2 seconds. A 60-property prefill run finishes in **~10–15 seconds**, a 400-property run takes **~75 seconds**, and a **1,000-property run completes in ~3 minutes**.

**Why is `berRating` null on some rental or commercial properties?**
Certain historical buildings (`EXEMPT`) and some room-share or commercial listings do not publish a BER grade on Daft.ie. On residential `property-for-sale` listings, `berRating` populates at **>99%**.

**How accurate is the `eircode` extraction?**
The Actor uses a dedicated Irish Eircode regular expression (supporting both standard routing keys like `K32`, `T12`, `H91` and three-character Dublin routing keys like `D6W`) across both the published address and the URL slug, achieving **~92% Eircode coverage** on residential sales.

**Can I pass `maxItems` instead of `maxRecords` via API?**
Yes — the Actor accepts `maxRecords`, `maxItems`, `maxResults`, or `maxListings` interchangeably.

***

### ⚠️ Limitations

- Daft.ie limits any single search query to ~167 pages (~3,340 results); use county or price-band sharding for nationwide 10,000+ exports.
- Full text `description` and `features` arrays require `scrapeDescription: true`, which visits each property individually and increases runtime and residential proxy transfer.
- Residential proxy access (`IE`) is required; running without proxies will trigger Daft.ie's security check.

***

### 🔗 Related scrapers

Building a cross-border European or global real-estate intelligence pipeline? Pair this **Daft.ie scraper** with:

- [AutoTrader UK Scraper](https://apify.com/haketa/autotrader-scraper) — UK automotive marketplace data and dealer leads.
- [ImmobilienScout24 Scraper](https://apify.com/haketa/immobilienscout24-scraper) — Germany's #1 property portal (Kaltmiete, rooms, area, energy class).
- [Boliga Scraper – Danish Real Estate](https://apify.com/haketa/boliga-scraper) — Danish property listings and historical sold prices.
- [Realtor.ca Scraper](https://apify.com/haketa/realtor-ca-scraper) — Canadian MLS property listings, geo coordinates and agent profiles.
- [Domain.com.au Property Scraper](https://apify.com/haketa/domain-com-au-scraper) — Australian for-sale, rental and sold property data.
- [Housing.com Scraper](https://apify.com/haketa/housing-scraper) — Indian property listings, developer projects and seller contacts.

***

### 📋 Changelog

- **v1.2 (2026-11-10)** — **Unlocked 1,000+ deep pagination & multi-county resilience:** ensured `maxPages: 0` (auto/unlimited governed by `maxRecords` / `maxItems`) walks seamlessly through 1,000+ listings, increased per-page retry resilience to 5 attempts with tolerance for transient page failures, added automatic multi-county fallback expansion for 500+ / 1,000+ runs, and tuned fast 60-item prefill execution.
- **v1.1 (2026-11-01)** — **Parallel detail enrichment & Irish address/Eircode improvements:** added `detailConcurrency` worker pool for `scrapeDescription: true`, improved `D6W`-style Eircode extraction, normalized `SI_666` BER codes to `EXEMPT`, and formatted `floorArea` units (`m²`, `acres`).
- **v1.0 (2026-05-18)** — **Initial release:** Daft.ie property scraper across all 6 market sections and 26 Irish counties with price, beds/baths, BER, Eircode, GPS coordinates and PSRA estate agent profiles.

# Changelog

This Actor's version history is a separate document: https://apify.com/haketa/daft-scraper/changelog.md

# Actor input Schema

## `section` (type: `string`):

Which part of the Daft.ie market to pull — sale, rent, sharing, new homes or commercial.

## `location` (type: `string`):

Choose a county or city. Pick 'All Ireland' to scan the whole country. Need a specific town or Dublin postal district not listed here? Use the 'Custom location' box below.

## `locationCustom` (type: `string`):

Optional. Type an exact Daft.ie area slug for a town or district not in the dropdown, e.g. 'dublin-2-dublin', 'blackrock-cork', 'maynooth-kildare'. When filled, this overrides the Location dropdown above.

## `startUrls` (type: `array`):

Optional. Paste ready-made Daft.ie search URLs (e.g. 'https://www.daft.ie/property-for-sale/cork-city?price=300000-500000\&numBeds_from=3'). When provided, these override the section, location and filters above.

## `priceFrom` (type: `integer`):

Optional minimum price. For rent searches, this is per month. 0 = no minimum.

## `priceTo` (type: `integer`):

Optional maximum price. For rent searches, this is per month. 0 = no maximum.

## `minBeds` (type: `integer`):

Only return listings with at least this many bedrooms. 0 = no filter.

## `scrapeDescription` (type: `boolean`):

Visit each property's detail page to pull the full description, feature list and last-update date. This adds one extra request per listing, so it noticeably increases run time and cost — leave it off for fast, low-cost list-only scraping, since most data (price, beds, BER, geo coords, agent) is already on the search page.

## `detailConcurrency` (type: `integer`):

How many detail pages to fetch in parallel when 'Scrape Full Description' is on. Higher finishes faster and costs less compute; lower is gentler on the site. Only applies with descriptions enabled.

## `maxRecords` (type: `integer`):

Cap on total properties returned. Set 0 for unlimited. Each search page has 20 listings and Daft.ie caps at ~167 pages (~3,300 results) per query.

## `maxPages` (type: `integer`):

Cap on listing pages walked per search. 0 = unlimited (bounded by Max Records).

## `requestDelay` (type: `integer`):

Delay between page requests. 800–1500 ms keeps the run smooth and reliable.

## `proxyConfiguration` (type: `object`):

Runs with RESIDENTIAL Irish IPs by default for the most reliable results. Keep this on for best coverage.

## Actor input object example

```json
{
  "section": "property-for-sale",
  "location": "dublin",
  "locationCustom": "",
  "startUrls": [],
  "priceFrom": 0,
  "priceTo": 0,
  "minBeds": 0,
  "scrapeDescription": false,
  "detailConcurrency": 5,
  "maxRecords": 60,
  "maxPages": 0,
  "requestDelay": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IE"
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

All extracted Daft.ie property records for this run.

## `overviewTable` (type: `string`):

A clean, human-readable table of the scraped properties.

# 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 = {
    "section": "property-for-sale",
    "location": "dublin",
    "locationCustom": "",
    "startUrls": [],
    "scrapeDescription": false,
    "detailConcurrency": 5,
    "maxRecords": 60,
    "maxPages": 0,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/daft-scraper").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 = {
    "section": "property-for-sale",
    "location": "dublin",
    "locationCustom": "",
    "startUrls": [],
    "scrapeDescription": False,
    "detailConcurrency": 5,
    "maxRecords": 60,
    "maxPages": 0,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/daft-scraper").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 '{
  "section": "property-for-sale",
  "location": "dublin",
  "locationCustom": "",
  "startUrls": [],
  "scrapeDescription": false,
  "detailConcurrency": 5,
  "maxRecords": 60,
  "maxPages": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IE"
  }
}' |
apify call haketa/daft-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,haketa/daft-scraper"
        }
    }
}
```

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/f9Imo61OungN8uIEF/builds/enkjpVc4OpZU6oeSx/openapi.json
