DoneDeal Scraper avatar

DoneDeal Scraper

Pricing

from $2.40 / 1,000 results

Go to Apify Store
DoneDeal Scraper

DoneDeal Scraper

Irish classified ads from donedeal.ie as clean JSON: cars first, every section on request. Price, year, mileage, county, town, seller type, photos; ad pages add make, model, attributes and features. Seller names, phones and addresses never collected. Pay per result.

Pricing

from $2.40 / 1,000 results

Rating

0.0

(0)

Developer

Lowland Data

Lowland Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

DoneDeal Scraper — Irish classified ads, cars first, GDPR-safe

Extract classified ads from donedeal.ie — Ireland's largest classifieds site and its biggest used-car market — as clean, structured JSON. Title, price, year, mileage, county, town, posting time, seller type and cover photo on every row; the description, make, model, every attribute the site lists (fuel, transmission, body, engine, colour, owners, NCT expiry, road tax), the feature list, every photo, the price drop, the dates and the view counter when you ask for the ad pages. Cars by default, and every other section of the site — motorbikes, tractors, farming, commercials, furniture, or all of them at once — from one actor. Ready for price monitoring, stock sourcing, market research and data pipelines.

No seller personal data, ever. This scraper is built GDPR-first: seller names, user ids, phone numbers, dealer addresses and coordinates never appear in the output — not as an option you have to remember to switch off, but by design. The only seller information included is whether the ad comes from a dealer or trader, or a private seller.

Quick start (30 seconds)

  1. Leave section on cars, or type another section of the site: motorbikes, tractors, farming, commercials, furniture, or all.
  2. Click Start. That's the whole minimum setup: the newest ads of the section, all of Ireland.
  3. When the run finishes, open the dataset's Overview tab for a clean table, or Export it as CSV/Excel/JSON.

Add a make and model (Toyota, Corolla), a county, price, year and mileage bands, a fuel type or transmission, keep sortBy on newest and put the run on a schedule for a daily watch.

What you can build with it

  • Source stock for a dealership. Search section: cars, sellerType: private, yearMin: 2018, mileageMaxKm: 100000, priceMaxEur: 15000 and get every matching private sale with priceCents, year, mileageKm, county and town — a sourcing list in one run, and with scrapeDetails on, the make, model, fuelType, owners and nctExpiry to rank it.
  • Watch a model for new ads. make: Toyota, model: Corolla, sortBy: newest, cap maxItems at a page, and schedule the run daily; the newest Corollas land in your sheet or Slack with the price already parsed and postedAt on every row.
  • Follow the farm machinery market. section: tractors or section: farming with a county returns every ad with its price and town, and the ad page adds the description and the site's attribute list.
  • Feed an AI agent clean data. Every field is structured, predictable and free of personal data, so an assistant or pipeline can consume it directly — no scrubbing, no compliance review before you store it.

What you get

Each ad is one dataset item:

{
"listingId": "43068453",
"url": "https://www.donedeal.ie/cars-for-sale/2016-ford-focus/43068453",
"title": "2016 ford focus",
"section": "cars",
"sectionLabel": "Cars",
"priceCents": 730000,
"currency": "EUR",
"priceDisplay": "€7,300",
"summary": ["2016", "1.0 Petrol", "73,500 km"],
"year": 2016,
"mileageKm": 73500,
"county": "Clare",
"town": "O'Briensbridge",
"postedAt": "2026-10-22T10:37:26.359Z",
"age": "0 min",
"historyVerified": true,
"sellerType": "private",
"imageUrls": ["https://media.donedeal.ie/eyJidWNrZXQi...jpg"]
}

With Fetch ad pages on (or for ads named in listingIds), each item also carries the description, make, model, trim, bodyType, fuelType, transmission, engineSize, enginePower, seats, doors, colour, owners, countryOfRegistration, imported, roadTax, nctExpiry, the full attributes record, the grouped features list, every photo in imageUrls, previousPriceCents when the site shows a drop, firstPostedAt, updatedAt, status, photoCount and views — the ad page's whole fact sheet.

Field notes, so you know exactly what you are buying:

  • priceCents is the asking price; an ad that asks for offers carries priceOnRequest: true and no priceCents. A price drop the site shows on the row arrives as previousPriceCents.
  • summary is the site's key-facts line as it prints it; year and mileageKm are parsed from it on vehicles. Other sections carry what the site prints for them.
  • county and town are locality-level: the street, the eircode and the coordinates are never collected, for dealers as for private sellers, even where the site publishes a dealer's address.
  • sellerType is professional for dealers and traders and private for private sellers.
  • historyVerified is the site's Greenlight check on the vehicle's history. spotlighted marks a paid placement.
  • attributes and features keep the site's own labels; the typed fields above are the common ones lifted out for convenience.
  • listingId is the number at the end of the ad address. listingIds takes the number or the whole address.

How much does it cost to scrape DoneDeal?

$3.00 per 1,000 ads delivered, pay-as-you-go: no subscription, and you pay per result rather than per hour. A run that finds nothing still costs the $0.005 actor start. In plain dollars:

  • 100 ads ≈ $0.30 — a daily model watch.
  • 500 ads ≈ $1.50 — a county's used-car stock.
  • A 4,000-ad crawl ≈ $12.00 — a whole section, deduplicated.

The price is all-inclusive: your runs' platform usage, including the residential proxy, is covered by it. donedeal.ie answers only requests from consumer networks, so the actor runs through an Apify residential proxy by default — that is the form's default, nothing to configure, and nothing extra on the bill.

Free-plan runs are limited to a sample of 5 items, enough to evaluate the output format against your real query.

Not technical? Let your AI assistant set it up

Copy this into ChatGPT, Claude or any AI assistant, fill in the one line, and follow the conversation:

Help me set up the "DoneDeal Scraper" actor on Apify
(https://apify.com/lowlanddata/donedeal-scraper). Guide me one step at a time.
What I want to watch: [E.G. "Toyota Corollas under 15,000 euro in Cork, 2017 or newer"]
Guide me to:
1. Propose my input values: section (cars, motorbikes, tractors, farming, all, ...),
make and model as the site spells them, county, the price, year and mileage
bands I need, fuelType or transmission, sellerType, sortBy "newest" for
monitoring, and maxItems.
2. Decide whether I need scrapeDetails (the description, make, model, attributes and
features from each ad page) or whether the search rows are enough.
3. Create a free Apify account (apify.com), open the actor page, paste the values
into the Input form, and start a run.
4. Set up a daily Schedule in the Apify Console with the same input, plus an email
or Slack integration so new results reach me automatically.
5. Show me how to export results as CSV/Excel, or read them from the API if I code.
6. If the results are what I wanted, remind me at the end to leave a quick rating on the actor page, and to report anything broken or missing on its Issues tab.

Input

FieldDescription
sectionSection path of the site: cars (default), motorbikes, tractors, farming, commercials, furniture, all, or any search page's path.
make, modelVehicle make and model as the site spells them (Toyota, Corolla); model needs make.
keywordsWords to search for, the way the site's search box takes them.
countyOne of the 32 counties as the site names them (Dublin, Cork, Antrim).
listingIdsRe-check known ads by id or address instead of searching; each read from its own page; gone ads are skipped and not billed. Up to 50.
priceMinEur, priceMaxEurPrice band in euros.
yearMin, yearMaxVehicle year band.
mileageMinKm, mileageMaxKmMileage band in kilometres.
fuelTypeAs the site names it: Petrol, Diesel, Electric, Petrol hybrid, Diesel hybrid, Plug-in hybrid.
transmissionManual or Automatic.
sellerTypeprivate or professional.
adTypefor-sale or wanted.
sortBynewest (default), oldest, price_asc, price_desc, mileage_asc, mileage_desc, relevance.
maxItemsStop after this many ads (default 1000).
scrapeDetailsRead each ad's page for the full fact sheet. One extra request per ad.

Every field is optional: an empty form returns the newest cars in Ireland. An unknown section, make, county or an inverted band fails before the run starts, with the reason in the status message.

Finding a section, make or model

Type them as the site's addresses spell them: https://www.donedeal.ie/cars/Toyota/Corolla means section: cars, make: Toyota, model: Corolla; https://www.donedeal.ie/tractors means section: tractors. Counties are their plain names (Cork, Co. Cork and cork all work).

Use it from your code

Run the actor and get items straight back with one HTTP call (fine for scoped runs up to ~5 minutes):

curl "https://api.apify.com/v2/acts/lowlanddata~donedeal-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-X POST -H "Content-Type: application/json" \
-d '{"section": "cars", "make": "Toyota", "county": "Cork", "maxItems": 100}'

Node.js:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('lowlanddata/donedeal-scraper').call({
section: 'cars',
make: 'Toyota',
county: 'Cork',
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("lowlanddata/donedeal-scraper").call(
run_input={"section": "cars", "make": "Toyota", "county": "Cork", "maxItems": 100})
items = client.dataset(run["defaultDatasetId"]).list_items().items

For large crawls, start the run asynchronously and fetch the dataset when the finished-run webhook fires. Schedules (e.g. a daily price snapshot), webhooks and the Make/Zapier/n8n integrations all work out of the box — this is a standard Apify actor.

Use it with AI agents (MCP)

Claude, Cursor and other MCP-capable agents can run this scraper as a tool through Apify's hosted MCP server: the agent fills in the search itself, starts the run and reads the results — no glue code.

Claude Code:

$claude mcp add apify --transport http "https://mcp.apify.com?actors=lowlanddata/donedeal-scraper"

Cursor or Claude Desktop (add a custom connector / MCP server with this URL):

https://mcp.apify.com?actors=lowlanddata/donedeal-scraper

Sign in with your Apify account when prompted — runs are billed to it. Setup details per client: Apify MCP docs, or start from this actor's own MCP page: apify.com/lowlanddata/donedeal-scraper/api/mcp.

Prompts that work once connected:

  • "Find the 50 cheapest automatic Toyota Corollas from 2018 on in Cork on DoneDeal and give me the price per year of age."
  • "Snapshot every private-seller car under 10,000 euro in Galway and tell me the median mileage by make."
  • "List today's newest tractors on DoneDeal and flag any in Tipperary."

Beyond the first page

donedeal.ie serves 30 ads a page and challenges a visitor who pages past the tenth page of a query, so the run takes 300 ads per query. Below that, every page comes through up to the count the site reports. Above it, when maxItems asks for more, the run splits the query by price band until every band fits the window and walks the bands one by one, so a county's whole used-car stock still comes through. Narrow queries (a make and model, a county, a price band) run in seconds; a whole section is minutes of paced pages.

Public ad data — prices, years, mileages, counties, photos — is public commercial information, and this scraper is built so that the hard part of the question never arises: no personal data enters your dataset in the first place. The Irish Data Protection Commission is strict on personal data; an output that carries none is the point of this actor, not an afterthought.

The output is produced by a whitelist: only named, non-personal fields are read from each ad; the seller block — name, user id, phone, rating, registration — and the dealer block — name, address, phone, email, website, coordinates — are never touched, and a test on every build fails if any of them appears. Requests are paced, run through a residential proxy as a visitor's would be, and nothing is done to defeat the site's access controls.

One honest limit: titles and descriptions are the seller's own words, delivered as-is. If a seller chooses to type a phone number or an address into their text, that text is not rewritten — the guarantee covers the data fields, not the content sellers publish about themselves.

Is there a DoneDeal API alternative?

donedeal.ie publishes no public API for its ads. This actor is the practical alternative: the same ads as structured JSON through one HTTP call (run-sync-get-dataset-items), on a schedule, or as an MCP tool for AI agents — with the GDPR question already answered in the data itself.

Does DoneDeal block scrapers?

donedeal.ie serves its search results and ad pages to ordinary consumer traffic, with the data embedded in the page, and answers requests from datacenter networks with a security check. This actor stays inside that welcome: it reads the pages the way a visitor does, through a residential exit, paced, with the load kept negligible. No CAPTCHA fights, no bot-wall cat-and-mouse — which is also why runs are fast and reliable enough for daily schedules. Should the site refuse a request anyway, the run retries on a fresh proxy exit a few times, then stops and says in its status how many ads it collected.

How do I monitor DoneDeal prices?

Keep sortBy: newest with your section and filters, cap maxItems to a page or two, and add a daily (or hourly) Schedule in the Apify Console with an email/Slack integration on the runs — every new ad lands in your inbox with the price already parsed. To follow particular ads over time, put their ids into listingIds: each run returns their current price and status, and a sold or withdrawn ad is reported in the log and not billed. The AI-assistant prompt above walks a non-technical user through exactly this setup.

FAQ

Can I get seller or dealer contact details? No — by design. That is the product: data you can store, share and process without a GDPR review. The output tells you only whether the ad comes from a dealer or trader, or a private seller.

Which sections does it cover? Every section of the site, chosen with section: cars by default, motorbikes, tractors, farming, commercials, furniture, and all for everything at once. Same columns everywhere; the vehicle attributes fill in where the site has them.

Can I get only the newest ads? Sort by newest and cap maxItems; every row carries postedAt, so a daily schedule with a small cap is a daily watch.

How fresh is the data? Live at run time — every run queries the site directly. For continuous freshness, schedule the actor.

Can I export to Excel or CSV? Yes — every dataset exports as CSV, Excel, JSON or XML from the Apify Console or API.

What happens on a big section? The run takes 300 ads per query, 30 a page, until maxItems; raise it above 300 and the query is split by price band so the whole section comes through. Ads without a price are reached through the plain query's own pages only, so a section where most ads invite offers is covered up to those 300 plus every priced ad.

Do I get the full fact sheet? Search rows carry title, price, year, mileage, county, town, posting time, seller type and the cover photo. Turn on scrapeDetails for the ad page's description, make, model, attributes, features, every photo, price drop, dates and view counter.

Do I need residential proxies for DoneDeal? Yes, donedeal.ie only answers requests from consumer networks. The actor's default proxy setting is already an Apify residential proxy; leave it as it is. The price covers it.

Does it work with Make, Zapier or n8n? Yes — it is a standard Apify actor; all platform integrations, webhooks and schedules apply.

Working the Irish market or the used-car trade? The same GDPR-clean guarantee, same output shape:

Troubleshooting

The actor fails fast with the reason in the run's status message:

  • "DoneDeal has no page at ..." — spell the section, make and model as the site's addresses do (cars, Toyota, Corolla; tractors).
  • "DoneDeal knows no county called ..." — use one of the 32 county names; the message lists them.
  • "DoneDeal returned no readable results before anything could be fetched." — the site refused every proxy exit tried; retry in a few minutes.
  • Fewer items than requested on a free plan — the 5-item free sample cap; run on a paid Apify plan for full results.

Support

Found an issue or missing a field you need? Open an issue on the actor's Issues tab — reports get fixed, this actor is actively maintained.

Working well for you? A rating on this page takes ten seconds and helps other buyers find a GDPR-clean option among the lookalikes — it is also the clearest signal of what we should build next.