# Daft.ie Property Scraper (`parsebird/daft-ie-property-scraper`) Actor

Scrape Daft.ie property listings by search URL, location and property type, or direct property URL, with price, size, BER rating, seller, and photo data.

- **URL**: https://apify.com/parsebird/daft-ie-property-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.79 / 1,000 properties

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Daft.ie Property Scraper

Scrape [Daft.ie](https://www.daft.ie/) property listings by search URL, by location and property type, or by pasting direct property URLs — Ireland's largest property marketplace, structured into clean JSON.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search any Daft.ie location and property type, or paste specific property links, and get price, size, BER rating, seller contact, and full photo galleries for every result.
</td>
</tr></table>

<br>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this Daft.ie scraper: `parsebird/daft-ie-property-scraper` on Apify. Call it with the `ApifyClient` (Python: `ApifyClient(token).actor("parsebird/daft-ie-property-scraper").call(run_input={"propertyUrls": ["https://www.daft.ie/property-for-sale/dublin-city/houses"], "results_wanted": 50, "max_pages": 3})`) or the equivalent JS client. Key inputs: `propertyUrls` (search or direct property URLs, or use the `startUrls`/`startUrl`/`url` aliases; a single array entry may itself contain multiple URLs separated by commas, semicolons, or new lines), `location` and `propertyType` (Daft.ie slugs used to build a search when no URL is given, default "ireland"/"houses"), `keyword` (search term), `results_wanted` (default 20, a global cap across all input URLs), `max_pages` (default 5, per search URL), and `proxyConfiguration`. Output is one JSON object per unique property: `id`, `title`, `price`, `propertyType`, `numBedrooms`, `numBathrooms`, `berRating`, `propertySize`, `sellerName`, `sellerPhone`, `imageCover`, `imageGallery`, `url`, plus `sourceType` (`search` or `detail`) and `sourceUrl`. Full API reference: https://apify.com/parsebird/daft-ie-property-scraper/api. Get an API token at https://console.apify.com/account/integrations.

### What does Daft.ie Property Scraper do?

This Daft.ie scraper extracts structured property data from daft.ie without an official API. It accepts two kinds of input, freely mixed in the same run:

- 🔍 **Search URLs** — paste any `daft.ie/property-for-sale/<location>/<propertyType>` (or for-rent) search link, or let the Actor build one from `location` + `propertyType` + `keyword`. Every result page is walked up to `max_pages`.
- 🔗 **Direct property URLs** — paste a specific `daft.ie/for-sale/<slug>/<id>` link to get that one listing with its full detail: description-page BER rating, exact size, and complete photo gallery.
- 🏠 **Rich property data** — price, bedrooms/bathrooms, property type, BER rating, size, publish/update dates, featured level, and category for every result.
- 📸 **Full photo galleries** — every photo published on a direct property page; search results include a partial gallery plus the total image count.
- 🧑‍💼 **Seller info** — estate agent or seller name and phone number.
- 🧹 **Automatic deduplication** — the same property appearing via multiple search URLs, or both a search and a direct URL, is saved only once.

Because it runs on the [Apify platform](https://apify.com), you also get scheduling (track new listings and price changes daily), instant API and webhook access, and one-click export to JSON, CSV, Excel, HTML, or XML.

### What data can you extract from Daft.ie?

| Field | Description |
|-------|-------------|
| `id`, `daftShortcode` | Daft's internal listing ID and short reference code |
| `title`, `url` | Listing headline/address and the direct property URL |
| `price`, `propertyType` | Price text (e.g. `€425,000`) and property type label |
| `numBedrooms`, `numBathrooms` | Bedroom/bathroom counts as displayed on Daft |
| `propertySize`, `berRating` | Floor size (e.g. `102 m²`) and BER energy rating |
| `publishDate`, `lastUpdateDate` | Listing publish and last-update dates |
| `featuredLevel`, `category` | Promotion level and listing category |
| `sellerName`, `sellerPhone` | Estate agent / seller name and phone number |
| `imageCover`, `imageGallery`, `imageCount` | Cover photo, gallery URLs, and total image count |
| `hasVideo`, `hasVirtualTour` | Whether a video or virtual tour is attached |
| `sourceType`, `sourceUrl`, `search` | Whether the record came from a search or direct URL, the input URL, and search context (keyword/location/propertyType) |

### How to scrape Daft.ie property data

1. Click **Try for free** on the [Daft.ie Property Scraper](https://apify.com/parsebird/daft-ie-property-scraper) page (no credit card needed to start).
2. Paste one or more Daft.ie search or property URLs into `propertyUrls` — or leave it empty and set `location`, `propertyType`, and `keyword` instead.
3. Set `results_wanted` (total properties to collect) and `max_pages` (pages to walk per search URL).
4. Click **Start** and watch results land in the dataset in real time.
5. Export the finished dataset as JSON, CSV, Excel, HTML, or XML, or pull it via the [API](https://apify.com/parsebird/daft-ie-property-scraper/api) / [integrations](https://docs.apify.com/platform/integrations).

### Input / Output

Basic search collection:

```json
{
  "propertyUrls": ["https://www.daft.ie/property-for-sale/ireland/houses"],
  "results_wanted": 20,
  "max_pages": 2
}
```

Build a search from location, property type, and keyword instead of a URL:

```json
{
  "location": "dublin-city",
  "propertyType": "apartments",
  "keyword": "city centre",
  "results_wanted": 50,
  "max_pages": 5
}
```

Mix search URLs and a direct property URL in one run — duplicates are saved once:

```json
{
  "propertyUrls": [
    "https://www.daft.ie/property-for-sale/dublin-city/houses",
    "https://www.daft.ie/property-for-sale/cork-city/apartments",
    "https://www.daft.ie/for-sale/house-braemar-cottage-texas-lane-malahide-co-dublin/6538518"
  ],
  "results_wanted": 100,
  "max_pages": 3
}
```

Output example (direct property record):

```json
{
  "id": 6538518,
  "daftShortcode": "16538518",
  "title": "Braemar Cottage, Texas Lane, Malahide, Co. Dublin",
  "price": "€1,750,000",
  "propertyType": "Detached House",
  "numBedrooms": "5 Bed",
  "numBathrooms": "4 Bath",
  "propertySize": "260 m²",
  "berRating": "B2",
  "sellerName": "Example Auctioneers",
  "imageCover": "https://media.daft.ie/...",
  "imageCount": 18,
  "hasVirtualTour": true,
  "url": "https://www.daft.ie/for-sale/house-braemar-cottage-texas-lane-malahide-co-dublin/6538518",
  "sourceType": "detail",
  "sourceUrl": "https://www.daft.ie/for-sale/house-braemar-cottage-texas-lane-malahide-co-dublin/6538518"
}
```

Download results as **JSON, CSV, Excel, HTML, or XML** from the Console, or via the [Apify API](https://docs.apify.com/api/v2).

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("parsebird/daft-ie-property-scraper").call(run_input={
    "propertyUrls": ["https://www.daft.ie/property-for-sale/dublin-city/houses"],
    "results_wanted": 50,
    "max_pages": 3,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["price"])
```

#### JavaScript

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('parsebird/daft-ie-property-scraper').call({
    propertyUrls: ['https://www.daft.ie/property-for-sale/dublin-city/houses'],
    results_wanted: 50,
    max_pages: 3,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Use cases

- **Market research** — analyze prices, BER ratings, and sizes across a county, city, or property type.
- **Price monitoring** — schedule daily runs on a search URL to track new listings and price changes over time.
- **Lead generation** — pull estate agent names and phone numbers for a market segment.
- **Portfolio tracking** — paste direct property URLs for specific listings to monitor their status and price.
- **Data enrichment** — cross-reference BER ratings, floor size, and photo counts against other property datasets.

### How it works

1. The Actor opens a residential Irish session against daft.ie and reads the same server-rendered data the website itself loads — no separate API calls.
2. For a search URL, it walks result pages (up to `max_pages`) applying whatever location, property type, and keyword the URL or your input specifies.
3. For a direct property URL, it fetches that single page for the fullest available detail: complete photo gallery, exact BER rating, and size.
4. Every property is deduplicated by its Daft listing ID as it's found, so the same property listed via multiple URLs is only saved once, and pushed to the dataset immediately up to your `results_wanted` cap.

### How much does it cost to scrape Daft.ie?

This Actor uses the [Pay-Per-Event](https://docs.apify.com/platform/actors/publishing/monetize#pay-per-event-pricing-model) pricing model — you only pay for what you get, with no separate compute charge.

| Event | Free | Bronze | Silver | Gold |
|-------|------|--------|--------|------|
| Property (per 1,000) | $0.99 | $0.89 | $0.79 | $0.79 |

Collecting 1,000 unique properties costs $0.99 on the Free plan, down to $0.79 on Silver/Gold. Apify's monthly platform usage credits apply to any plan.

### Is it legal to scrape Daft.ie?

Yes — scraping publicly available data is generally legal, as confirmed in cases like *hiQ Labs v. LinkedIn*. This Actor only collects property information that's publicly visible on daft.ie to anyone browsing the site. You are responsible for how you use the collected data — always check the target site's terms of service and applicable law before reusing scraped data commercially. See Apify's [blog post on web scraping legality](https://blog.apify.com/is-web-scraping-legal/) for more detail.

### FAQ

**Does this use the official Daft.ie API?**
No — Daft.ie does not offer a public listings API. This Actor reads the same server-rendered data the daft.ie website itself loads, structured into clean JSON.

**Why do some records have a `search` field and others don't?**
Records collected from a search URL carry a `search` object with the keyword/location/propertyType context that produced them. Records from a direct property URL don't need that context, since you supplied the exact property.

**Why does `results_wanted` sometimes stop before reaching a later URL in my list?**
`results_wanted` is a hard cap on unique properties saved across *all* input URLs combined, applied in the order you listed them. If earlier search URLs already fill the cap, later URLs (including direct property URLs) may not be reached — list the URLs you care about most first, or raise `results_wanted`.

**Can I search Daft.ie rentals instead of sales?**
Yes — paste a `daft.ie/property-for-rent/...` search URL or a `daft.ie/for-rent/...` property URL directly into `propertyUrls`; the Actor handles either.

**Can I schedule this to run automatically?**
Yes. Use Apify's [Scheduler](https://docs.apify.com/platform/schedules) to run it daily, weekly, or at any interval, and combine it with [Apify's storage integrations](https://docs.apify.com/platform/integrations) (Google Sheets, Slack, Make, Zapier, webhooks) to get notified of new listings.

**I found a bug or missing field — where do I report it?**
Open an issue on the Actor's **Issues** tab in Apify Console, or use the [API](https://apify.com/parsebird/daft-ie-property-scraper/api) directly for programmatic access.

# Actor input Schema

## `propertyUrls` (type: `array`):

One or more Daft.ie search or direct property URLs. A single string is also accepted, and may contain multiple URLs separated by commas, semicolons, or new lines.

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

Accepted alias for propertyUrls, for compatibility with other scrapers.

## `startUrl` (type: `string`):

Accepted alias for providing a single target URL.

## `url` (type: `string`):

Accepted alias for providing a single target URL.

## `keyword` (type: `string`):

Search term used when the Actor builds a search from location/propertyType instead of a pasted URL.

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

Daft.ie location slug, e.g. ireland, dublin-city, cork-city.

## `propertyType` (type: `string`):

Daft.ie property type slug, e.g. houses, apartments.

## `results_wanted` (type: `integer`):

Maximum number of unique properties to save across all input URLs.

## `max_pages` (type: `integer`):

Maximum number of result pages to process for each search URL.

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

Daft.ie blocks most datacenter IPs, so Residential proxy is used by default.

## Actor input object example

```json
{
  "propertyUrls": [
    "https://www.daft.ie/property-for-sale/ireland/houses"
  ],
  "startUrls": [],
  "location": "ireland",
  "propertyType": "houses",
  "results_wanted": 20,
  "max_pages": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IE"
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "propertyUrls": [
        "https://www.daft.ie/property-for-sale/ireland/houses"
    ],
    "location": "ireland",
    "propertyType": "houses",
    "results_wanted": 20,
    "max_pages": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/daft-ie-property-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 = {
    "propertyUrls": ["https://www.daft.ie/property-for-sale/ireland/houses"],
    "location": "ireland",
    "propertyType": "houses",
    "results_wanted": 20,
    "max_pages": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/daft-ie-property-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 '{
  "propertyUrls": [
    "https://www.daft.ie/property-for-sale/ireland/houses"
  ],
  "location": "ireland",
  "propertyType": "houses",
  "results_wanted": 20,
  "max_pages": 2
}' |
apify call parsebird/daft-ie-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/daft-ie-property-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/JyKIvLQwP3cYlxvwQ/builds/ppn2agfFzYaNnBgMB/openapi.json
