Daft.ie Scraper - Ireland Property Listings avatar

Daft.ie Scraper - Ireland Property Listings

Pricing

from $2.50 / 1,000 listings

Go to Apify Store
Daft.ie Scraper - Ireland Property Listings

Daft.ie Scraper - Ireland Property Listings

Collect Daft.ie property listings across Ireland, including prices, beds, BER ratings, photos and available agent contacts. Pay per delivered row, plus a start fee.

Pricing

from $2.50 / 1,000 listings

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

4

Total users

2

Monthly active users

6 hours ago

Last modified

Security

Limited permissions

Share

Daft.ie Scraper

Collect Daft.ie property listings across Ireland as structured rows with prices, property details and available agent contacts.

  • Sale, rental, sharing and new-home searches.
  • Listing links, beds, baths, BER ratings, photos and advertised prices.
  • Optional detail enrichment and separate build-to-rent unit rows.
  • Dataset exports, scheduled runs, API access and AI-agent integration.
  • $2.50 per 1,000 delivered rows, plus a small start fee.

What does Daft.ie Scraper do?

Daft.ie Scraper collects property searches and individual listings from Daft.ie. Give it a location or supported Daft URLs. It returns rows for market research, price comparisons, property monitoring and spreadsheets. Check the location limitation below before using a search as a regional sample.

  • Search by location: use location and channel for sale (BUY), rent (RENT), sharing (SHARING) or new homes (NEW_HOMES).
  • Search by URL: use startUrls for sale, rent or new-home search links.
  • Specific listings: put sale or rental listing links in startUrls.
  • Detail enrichment: scrapeDetails is on by default. Additional details enrich the existing row, without another row charge.
  • Build-to-rent units: includeUnits is off by default. When enabled, each available unit with its own ID and link can add a billed row. These rows also use rowType="listing", with parentId identifying the development.

What data can you extract from Daft.ie?

All delivered rows use rowType="listing". Development-unit rows share the same fields, with parent links and their own prices and property details. Fields depend on what the listing provides.

FieldDescriptionExample
rowTypeRow classification.listing
idListing identifier, stored as a string.1234567
urlLink to the listing.https://www.daft.ie/for-sale/example-property/1234567
titleListing title or advertised address.Example Apartment, Dublin
channelSale or rental classification supplied for the listing.BUY
priceAdvertised price text, including rental period when present.€1,800 per month
priceAmountNumeric price, without currency or period.1800
numBedroomsAdvertised bedroom text.2 Bed
numBathroomsAdvertised bathroom text.1 Bath
propertyTypeProperty category.Apartment
berRatingAdvertised energy rating.B3
descriptionListing description when details are available.Example property description
addressStructured street, unit, locality, region, postal code and country.{"locality":"Dublin"}
eircodeAdvertised postal code from listing details.null
geoLatitude and longitude when available.{"lat":53.35,"lng":-6.26}
phonesPublished seller numbers and their classification.[]
emailsListing email addresses; currently returned empty.[]
personSeller name and role, where available.{"name":"Jane Doe","role":"agent"}
orgAgency or branch name and identifier.{"name":"Example Agency","id":"123"}
imagesAvailable image URLs, capped at 50.[]
facilitiesAdvertised facilities, capped at 50.[]
featuresDetail-page features, capped at 50.[]
prsBuild-to-rent development information, including available unit descriptions.{"subUnits":[]}
parentIdDevelopment ID on a separate unit row.7654321
parentTitleDevelopment title on a unit row.Example Development
parentUrlLink to that development.https://www.daft.ie/for-rent/example-development/7654321
leadSourceWhether contact details came from search or listing details.detail
leadAbsencesReasons recorded for missing contact fields.{}
scrapedAtCollection timestamp.2026-10-24T08:00:00+00:00

address.unit holds an apartment-style prefix such as Apartment 2; an ordinary house number stays in address.street. Postal codes and coordinates may be missing. Unit rows inherit address and seller context from the development. The older listingId, listingTitle and listingUrl fields remain aliases for the parent links.

How to scrape Daft.ie

  1. Open Daft.ie Scraper in Apify Console.
  2. Enter location, or paste supported links into startUrls. Clear the sample URLs when using a location.
  3. Set maxItems to 3 for a first run. Keep scrapeDetails enabled if you need addresses and descriptions.
  4. Click Start and wait for completion, including any automatic resume described below.
  5. Open the dataset and download the rows, or read them through the API.

An empty input uses the form's Dublin City sale example with maxItems=3, rather than the normal 70-row default. It is a billed example, not a free preview. Providing either target selects the Actor's single collection mode automatically; there is no mode setting to fill.

Search by location

Enter a Daft area name such as dublin-city or text such as Dublin City. Choose channel for the listing family. Location text is normalized, but strict geographic filtering is not guaranteed; check returned addresses.

Search by URL

Use supported /property-for-sale/, /property-for-rent/ or /new-homes-for-sale/ links. Search links take precedence over location and determine the listing family. Do not assume every filter in a copied URL is reproduced. Use the explicit sort setting for ordering.

Specific listing URLs

Use /for-sale/.../<id> or /for-rent/.../<id> links for known properties. Multiple links can be submitted together. Replace the illustrative link below with a current listing URL before running it.

What to fill in

FieldWhat to enterDefault
startUrlsSupported Daft search or listing URLs; strings or objects containing url.No fixed target; example prefill is Dublin City sale
locationDaft place name or area slug, when no search URL is supplied.Dublin City fallback
channelBUY, RENT, SHARING or NEW_HOMES.BUY
maxItemsMost delivered rows per URL or location; 1–2,000.70; form prefill 3
maxPagesLegacy page setting, 1–100. It is not a reliable total limit for Actor runs; use maxItems.1
scrapeDetailsAdd available listing details to search rows.true
includeUnitsAdd eligible build-to-rent unit rows; all rows share the limit.false
sortEmpty for best match, or publishDateDesc, priceAsc, priceDesc.Empty
requestDelayMillisRequest spacing in milliseconds, 0–15,000.800
maxConcurrencyConcurrent detail requests, 1–8.2

Location search:

{
"location": "dublin-city",
"channel": "BUY",
"maxItems": 3,
"scrapeDetails": true
}

Rental search URL:

{
"startUrls": [{"url": "https://www.daft.ie/property-for-rent/cork"}],
"maxItems": 3,
"includeUnits": true
}

Specific listing:

{
"startUrls": ["https://www.daft.ie/for-sale/example-property/1234567"],
"maxItems": 1
}
  • maxItems is the canonical row limit. maxResults, limit and max_results are accepted aliases.
  • Unknown fields are ignored with a note; close misspellings can be corrected. Invalid channel or sort values are ignored rather than stopping the run, so check the interpreted input.
  • Invalid targets stop before row delivery with an INVALID_INPUT: message. A foreign URL produces INVALID_INPUT: input — ... with guidance to use a Daft search or listing link. No row is charged, though the start fee still applies.
  • The INPUT_REPORT record in the default key-value store shows fields filled, normalized, corrected or ignored, and whether this was an example run.

Output example

Illustrative listing row; the property, contact name and address are placeholders:

{
"rowType": "listing",
"id": "1234567",
"url": "https://www.daft.ie/for-sale/example-property/1234567",
"source": "daft",
"channel": "BUY",
"title": "Example Apartment, Dublin",
"price": "€425,000",
"priceAmount": 425000,
"numBedrooms": "2 Bed",
"numBathrooms": "1 Bath",
"propertyType": "Apartment",
"berRating": "B3",
"address": {
"street": "Example Street, Dublin",
"unit": "Apartment 2",
"locality": "Dublin",
"region": "Dublin",
"postalCode": null,
"country": "IE",
"full": "Apartment 2, Example Street, Dublin"
},
"phones": [],
"emails": [],
"person": {"name": "Jane Doe", "role": "agent"},
"org": {"name": "Example Agency", "id": "123"},
"leadSource": "detail",
"scrapedAt": "2026-10-24T08:00:00+00:00"
}

You can export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. OUTPUT and RUN_SUMMARY contain run counts, warnings and timestamps. A failed run can also write ERROR_SUMMARY.

Why use this Daft.ie scraper?

  • Pay for delivered rows. Detail enrichment does not add a separate row charge; optional unit rows do.
  • Keep available partial results. When a collection stops early and returns partial rows, the Actor delivers them and records the reason. A forced stop can still interrupt delivery.
  • Understand missing fields. Unavailable values stay empty rather than being invented; contact absence information helps explain gaps.
  • Submit several inputs. Put several supported URLs in startUrls, with a per-input row limit and a total spending limit.
  • No proxy setup. You do not need to set up proxies or provide a Daft account or cookies.

How much does it cost to scrape Daft.ie?

The Actor uses pay-per-event pricing. The start event costs $0.005 per GB of Actor memory, with a minimum of one event. At the default 512 MB, the start charge is $0.005. Platform usage is included in these prices.

Apify planPrice per rowPrice per 1,000 rows
Free$0.0025$2.50
Starter$0.0025$2.50
Scale$0.0025$2.50
Business$0.0025$2.50
  • maxItems applies to each URL or location. The normal default is 70; larger requests are collected in parts. Development and unit rows count together.
  • Free Apify plan users can make 10 runs of this Actor, with at most 200 rows per run. These are developer-set limits.
  • The whole run stops at the Maximum cost per run you choose in run options (maxTotalChargeUsd in the API).

Example: one input delivering 3 rows at 512 MB costs 3 × $0.0025 + $0.005 = $0.0125. Empty results incur no row charge, but the start charge still applies.

What happens when the run timeout is too short

A search can take longer than the timeout you selected. The Actor can pause with the message "Queued on the collection backend; this run will resume automatically when results are ready (about Ns)." The run temporarily shows ABORTED. When results are ready, the same run resumes, reports "Resumed: delivering N rows.", writes to the same dataset and finishes as SUCCEEDED if delivery succeeds. Previously delivered rows are not delivered or charged again during this resume.

This automatic pause can happen at most 3 times per run. Keep the default timeout of 3600 seconds to reduce interruptions. A manual abort or an unrelated failure is not a promise of automatic recovery.

The synchronous endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds and can return an empty dataset while the run is paused. For longer jobs, start asynchronously and read the dataset after SUCCEEDED, or use a succeeded-event webhook. Do not launch a duplicate run just because an automatic pause appears as ABORTED.

Use with AI agents and the API

Apify MCP server (Claude, ChatGPT, Cursor, VS Code)

Add this Actor to an MCP client that supports remote servers:

https://mcp.apify.com?tools=lentic_clockss/daft-property-scraper

Sign in with Apify using OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; the agent can then read rows with get-dataset-items. Clients without remote support can use npx @apify/actors-mcp-server --tools lentic_clockss/daft-property-scraper with APIFY_TOKEN set.

Example prompt: "Run Daft.ie Scraper with location dublin-city, channel BUY and maxItems 3. Show the returned prices, addresses and links, and flag any address outside Dublin."

Apify API

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/daft-property-scraper").call(
run_input={"location": "dublin-city", "channel": "BUY", "maxItems": 3}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/daft-property-scraper').call({
location: 'dublin-city', channel: 'BUY', maxItems: 3
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

For HTTP, send input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~daft-property-scraper/runs with an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.

Integrations

Use the Actor's Integrations tab for Google Sheets, Make, Zapier, n8n, Slack, Airtable or webhooks. Apify Schedules can run the same input regularly; retain separate exports when comparing prices over time.

FAQ

Public visibility is not blanket permission to reuse data. You are responsible for checking the site's terms and applicable data-protection law. Personal data needs a lawful basis; collect only what you need and handle it appropriately.

Why did my run end as ABORTED?

Read the status message. The automatic-resume message means the same run is waiting for results. A manual abort or another error is different; inspect the run log and summary before retrying.

How many results can I get?

maxItems accepts 1–2,000 rows per input, subject to availability and the total spending limit. Free-plan runs stop at 200 rows. A limit is a maximum, not a guarantee that enough listings exist.

Why are some fields empty?

Not every listing publishes a price, BER, phone or postal code. Search-only rows usually have fewer details. Listing emails are currently empty, and web.website and web.socials are not populated. Check leadAbsences for available explanations.

Can I collect sale and rent in one run?

Yes. Supply sale and rental search URLs in startUrls. A location-based search uses one channel value per run.

Does each build-to-rent unit cost extra?

With includeUnits=true, each delivered unit is another row at the same price. Units without their own ID or link do not get separate rows. Enriching an existing listing does not add a row charge.

Why did my free-plan runs stop after 10 runs?

The developer limits free-plan use to 10 runs of this Actor. The run status explains the limit. Paid Apify plans remove that run-count restriction; row charges still apply.

Does a successful run always contain rows?

No. A completed search with no matches can succeed with an empty dataset. Review the run summary and input before concluding that an area has no properties.

Limitations

  • Collection covers supported Daft listing and search inputs, not arbitrary pages or standalone agent profiles.
  • Geographic restrictions are not guaranteed in the current collection path. Results can fall outside the requested location; verify returned addresses before regional analysis.
  • Copied search-URL filters are not all reproduced. Use documented input fields and inspect a small sample.
  • Detail enrichment can fail for individual listings; a search row may remain less complete.
  • Listing emails, seller websites and social links are not populated. The Actor does not submit contact forms.
  • Images, facilities, features and other attribute lists are capped at 50; count fields can indicate larger source totals. Large developments may have more units than the returned unit list.
  • No field-coverage percentage, fixed completion time or complete inventory is guaranteed.

More real estate and property data scrapers from the same publisher:

Browse all of our scrapers at apify.com/lentic_clockss.

Support

Report a problem or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.