# DoneDeal Scraper - Irish Car Listings & Classifieds (`studio-amba/donedeal-scraper`) Actor

Scrape car listings from DoneDeal.ie, Ireland's largest classifieds site. Extract prices, specs, mileage, fuel type, county. No login required.

- **URL**: https://apify.com/studio-amba/donedeal-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 result scrapeds

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/platform/actors/running/actors-in-store#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

## DoneDeal Scraper

Extract structured car listing data from [DoneDeal.ie](https://www.donedeal.ie), Ireland's largest classifieds marketplace with 96,000+ car listings and 9-12M monthly visits. No login or cookies required.

**Why use this scraper?**

- Get real-time Irish car market pricing data for any make, model, or budget range
- Filter by year, price, fuel type, and location to narrow results precisely
- Extract dealer vs. private seller data for competitive analysis
- Monitor price trends across Irish counties (Dublin, Cork, Galway, and more)
- Build datasets for automotive market research, price comparison tools, or inventory feeds
- No API keys, no login, no cookies needed
- Clean, flat JSON output ready for spreadsheets, databases, or downstream processing
- Handles pagination automatically across thousands of listings

### How to scrape DoneDeal data

1. **Create an Apify account** at [apify.com](https://apify.com) (free tier available).
2. **Open this actor** in the Apify Console and click "Start".
3. **Set your search parameters** -- enter a search query like "volkswagen golf" or use the make/model filters. Adjust year range, price range, or fuel type as needed.
4. **Configure max results** -- set how many listings you want (default: 100). Higher numbers take longer but give more complete market coverage.
5. **Run the actor** -- click "Start" and wait for results. A typical run of 50 listings completes in 1-2 minutes.
6. **Download your data** -- export results as JSON, CSV, or Excel from the Dataset tab. Use the Apify API to integrate directly into your workflow.

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQuery` | string | `volkswagen` | Free-text search term. Ignored when `make` is set. |
| `make` | string | - | Car manufacturer (e.g., BMW, Toyota, Volkswagen) |
| `model` | string | - | Car model (e.g., Golf, 3 Series). Requires `make`. |
| `yearFrom` | integer | - | Minimum registration year (e.g., 2018) |
| `yearTo` | integer | - | Maximum registration year (e.g., 2025) |
| `priceFrom` | integer | - | Minimum price in EUR |
| `priceTo` | integer | - | Maximum price in EUR |
| `fuelType` | string | All | Petrol, Diesel, Electric, Hybrid, or Plugin Hybrid |
| `sort` | string | Relevance | Sort order: price, year, mileage, or newest listed |
| `maxResults` | integer | `100` | Maximum listings to return (1-5000) |
| `proxyConfiguration` | object | Residential IE | Optional. Kept for compatibility; requests are routed through built-in unblocking infrastructure. |

### Output example

Each listing is returned as a flat JSON object:

```json
{
    "listingTitle": "Volkswagen Golf 2.0 TDI Style 150HP DSG",
    "make": "Volkswagen",
    "model": "Golf",
    "year": 2022,
    "price": 29950,
    "currency": "EUR",
    "mileage": 45000,
    "fuelType": "Diesel",
    "transmission": "Automatic",
    "engineSize": "2.0 TDI",
    "county": "Dublin",
    "sellerType": "dealer",
    "imageUrl": "https://img.donedeal.ie/...",
    "url": "https://www.donedeal.ie/cars-for-sale/volkswagen-golf-2-0-tdi/12345678",
    "scrapedAt": "2026-06-09T12:00:00.000Z"
}
```

### Data fields

| Field | Type | Description |
|-------|------|-------------|
| `listingTitle` | string | Full listing title as shown on DoneDeal |
| `make` | string | Car manufacturer |
| `model` | string | Car model name |
| `year` | integer | First registration year |
| `price` | number | Listing price |
| `currency` | string | EUR or GBP (Northern Ireland listings may use GBP) |
| `mileage` | integer | Odometer reading in kilometres |
| `fuelType` | string | Petrol, Diesel, Electric, Hybrid, or Plugin Hybrid |
| `transmission` | string | Automatic or Manual |
| `engineSize` | string | Engine displacement (e.g., 2.0 TDI, 1.5 TSI) |
| `county` | string | Irish county where the car is listed |
| `sellerType` | string | "dealer" or "private" |
| `imageUrl` | string | URL of the primary listing photo |
| `url` | string | Direct link to the listing on DoneDeal.ie |
| `scrapedAt` | string | ISO 8601 timestamp of when the data was collected |

### Cost estimate

Running this actor on the Apify platform costs approximately:

- **50 listings**: ~$0.05 (under 1 minute)
- **500 listings**: ~$0.25 (2-5 minutes)
- **2,000 listings**: ~$0.80 (10-15 minutes)

Costs depend on the number of pages scraped. Each page of 30 listings is fetched through unblocking infrastructure that handles DoneDeal's anti-bot protection automatically.

### Tips and advanced usage

**Search by make and model**: Set `make` to "Volkswagen" and `model` to "Golf" for precise results. The make/model path-based search is more reliable than free-text queries.

**Price monitoring**: Run the actor on a schedule (daily or weekly) with the same filters to track price changes over time. Use the Apify scheduling feature to automate this.

**Northern Ireland listings**: DoneDeal covers both the Republic of Ireland (EUR) and Northern Ireland (GBP). The `currency` field distinguishes between the two.

**Blocked requests**: The actor routes all requests through unblocking infrastructure with Irish IPs, so blocked requests are rare. Transient errors are retried automatically.

**Large exports**: For market-wide analysis, set `maxResults` to 5000. The actor handles pagination automatically and deduplicates listings across pages.

**Integration**: Use the Apify API or webhooks to pipe results directly into Google Sheets, Airtable, or your own database. The flat JSON structure maps cleanly to tabular formats.

### Frequently asked questions

**Is scraping DoneDeal legal?**
This actor scrapes publicly available data that anyone can see by visiting donedeal.ie. It does not bypass any login, paywall, or access control. Always review DoneDeal's Terms of Service and comply with applicable data protection regulations (GDPR) when using scraped data.

**Do I need a DoneDeal account?**
No. This actor scrapes publicly visible listings without any login or authentication.

**How does the actor handle anti-bot protection?**
DoneDeal.ie sits behind Cloudflare. The actor routes every request through dedicated unblocking infrastructure with Irish IPs, then reads the structured listing data embedded in each page. No browser rendering is needed, which keeps runs fast and cheap.

**How often is the data updated?**
Each run fetches live data from DoneDeal.ie in real time. Schedule recurring runs to maintain an up-to-date dataset.

**Can I scrape categories other than cars?**
This actor is optimised for car listings on DoneDeal.ie. For other categories (farming, property, furniture), a separate actor would be needed.

### About DoneDeal

[DoneDeal.ie](https://www.donedeal.ie) is Ireland's number one classifieds and car marketplace, founded in 2005. It hosts over 96,000 car listings from both dealers and private sellers across all 32 counties. With 9-12 million monthly visits, it is the dominant platform for buying and selling used cars in Ireland. DoneDeal covers all vehicle types including cars, vans, trucks, and motorbikes, along with general classifieds categories like farming, property, and furniture.

# Actor input Schema

## `searchQuery` (type: `string`):

Free-text search term (e.g., 'volkswagen', 'audi a4', 'toyota corolla'). Ignored when make is set.

## `make` (type: `string`):

Car manufacturer (e.g., Volkswagen, BMW, Toyota, Audi, Mercedes-Benz, Ford, Hyundai, Kia, Skoda, Opel).

## `model` (type: `string`):

Car model (e.g., Golf, 3 Series, Corolla). Requires make to be set.

## `yearFrom` (type: `integer`):

Minimum first registration year (e.g., 2018).

## `yearTo` (type: `integer`):

Maximum first registration year (e.g., 2025).

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

Minimum price in EUR.

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

Maximum price in EUR.

## `fuelType` (type: `string`):

Filter by fuel type.

## `sort` (type: `string`):

Sort order for results.

## `maxResults` (type: `integer`):

Maximum number of car listings to return.

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

Proxy settings. RESIDENTIAL proxies with an Irish IP are recommended for best results.

## `brightDataApiKey` (type: `string`):

Optional Bright Data API key for Web Unlocker. Used to bypass DoneDeal's Cloudflare protection. Leave empty to use the built-in key.

## Actor input object example

```json
{
  "searchQuery": "volkswagen",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IE"
  }
}
```

# 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 = {
    "searchQuery": "volkswagen",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/donedeal-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 = {
    "searchQuery": "volkswagen",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/donedeal-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchQuery": "volkswagen",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IE"
  }
}' |
apify call studio-amba/donedeal-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=studio-amba/donedeal-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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