# DoneDeal Scraper (`lowlanddata/donedeal-scraper`) Actor

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.

- **URL**: https://apify.com/lowlanddata/donedeal-scraper.md
- **Developed by:** [Lowland Data](https://apify.com/lowlanddata) (community)
- **Categories:** E-commerce, Automation, Business
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 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

## 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:

```json
{
  "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:

```text
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

| Field                          | Description                                                                                                                                    |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `section`                      | Section path of the site: `cars` (default), `motorbikes`, `tractors`, `farming`, `commercials`, `furniture`, `all`, or any search page's path. |
| `make`, `model`                | Vehicle make and model as the site spells them (`Toyota`, `Corolla`); `model` needs `make`.                                                    |
| `keywords`                     | Words to search for, the way the site's search box takes them.                                                                                 |
| `county`                       | One of the 32 counties as the site names them (`Dublin`, `Cork`, `Antrim`).                                                                    |
| `listingIds`                   | Re-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`, `priceMaxEur`   | Price band in euros.                                                                                                                           |
| `yearMin`, `yearMax`           | Vehicle year band.                                                                                                                             |
| `mileageMinKm`, `mileageMaxKm` | Mileage band in kilometres.                                                                                                                    |
| `fuelType`                     | As the site names it: `Petrol`, `Diesel`, `Electric`, `Petrol hybrid`, `Diesel hybrid`, `Plug-in hybrid`.                                      |
| `transmission`                 | `Manual` or `Automatic`.                                                                                                                       |
| `sellerType`                   | `private` or `professional`.                                                                                                                   |
| `adType`                       | `for-sale` or `wanted`.                                                                                                                        |
| `sortBy`                       | `newest` (default), `oldest`, `price_asc`, `price_desc`, `mileage_asc`, `mileage_desc`, `relevance`.                                           |
| `maxItems`                     | Stop after this many ads (default 1000).                                                                                                       |
| `scrapeDetails`                | Read 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):

```bash
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:

```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:

```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:

```bash
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):

```text
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](https://docs.apify.com/platform/integrations/mcp), or start from this actor's own MCP page: [apify.com/lowlanddata/donedeal-scraper/api/mcp](https://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.

### Is it legal to scrape DoneDeal?

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.

### Related scrapers

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

- [Daft.ie Scraper](https://apify.com/lowlanddata/daft-scraper) — Ireland's property portal.
- [AutoScout24 Scraper](https://apify.com/lowlanddata/autoscout24-scraper) — used cars across eight European country sites.
- [Gumtree Scraper](https://apify.com/lowlanddata/gumtree-scraper) — the UK's classifieds site.

### 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.

# Actor input Schema

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

The site section to search, as its address spells it: <code>cars</code> (default), <code>motorbikes</code>, <code>tractors</code>, <code>farming</code>, <code>commercials</code>, <code>furniture</code>, or <code>all</code> for every section. The section path of any search page on the site works.

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

Vehicle make, spelled as the site does: <code>Toyota</code>, <code>BMW</code>, <code>Mercedes-Benz</code>. Vehicle sections only.

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

Vehicle model under the make: <code>Corolla</code>. Needs <b>make</b>.

## `keywords` (type: `string`):

Words to search for in the ads, the way the site's search box takes them.

## `county` (type: `string`):

Only ads in this county: <code>Dublin</code>, <code>Cork</code>, <code>Galway</code>, ... the 32 counties as the site names them. Leave empty for all of Ireland.

## `listingIds` (type: `array`):

Re-check ads you already know instead of searching: one per line, as the number at the end of the ad address (the <code>listingId</code> of every dataset item) or the ad's full address. Each one is read from its own page, so it carries the description, every attribute, the feature list and the dates. An ad that is gone from the site is skipped, named in the log and not billed. <b>When given, the search fields of this form are ignored</b> and the run status says which. Up to 50.

## `priceMinEur` (type: `integer`):

Only include ads priced at least this many euros.

## `priceMaxEur` (type: `integer`):

Only include ads priced at most this many euros.

## `yearMin` (type: `integer`):

Vehicles from this year on.

## `yearMax` (type: `integer`):

Vehicles up to this year.

## `mileageMinKm` (type: `integer`):

Vehicles with at least this mileage.

## `mileageMaxKm` (type: `integer`):

Vehicles with at most this mileage.

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

As the site names it: <code>Petrol</code>, <code>Diesel</code>, <code>Electric</code>, <code>Petrol hybrid</code>, <code>Diesel hybrid</code>, <code>Plug-in hybrid</code>.

## `transmission` (type: `string`):

Manual or automatic.

## `sellerType` (type: `string`):

Only private sellers, or only dealers and traders.

## `adType` (type: `string`):

Ads offering something for sale, or wanted ads.

## `sortBy` (type: `string`):

Order of results: newest (best for monitoring), oldest, price_asc, price_desc, mileage_asc, mileage_desc, or relevance (the site's own order).

## `maxItems` (type: `integer`):

Stop after this many ads. Free-plan runs are capped at 5 items. The form starts at 25 for a cheap first run - that is the form's prefill, not a cap on your plan; clear it to use the default of 1000. The site serves a window of ads per query; above it the run splits the query by price band, so a whole section comes through when you raise it.

## `scrapeDetails` (type: `boolean`):

The search row carries the title, price, year, mileage, county, town, posting time and cover photo. Turn this on to read each ad's own page for the description, make, model and every attribute (fuel, transmission, body, engine, colour, owners, NCT, road tax, ...), the feature list, every photo, the price drop, the dates and the view counter. One extra request per ad, so a run is slower. Seller names, phone numbers, dealer addresses and coordinates are never read.

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

Proxy settings. donedeal.ie answers only consumer networks, so the default is an Apify residential proxy; the price covers it. Leave it as it is.

## `reportFailures` (type: `boolean`):

When a run fails, send the developer the actor name and build, an error category, the error message (truncated) and a one-way hash of your input - so a bug can be fixed without anyone asking you to reproduce it. <b>Your input itself, your results and your identity are never sent, and successful runs send nothing at all.</b> Switch this off and the actor behaves exactly the same.

## Actor input object example

```json
{
  "section": "cars",
  "listingIds": [],
  "sortBy": "newest",
  "maxItems": 25,
  "scrapeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "reportFailures": true
}
```

# Actor output Schema

## `ads` (type: `string`):

Scraped donedeal.ie ads, one JSON object per ad.

# 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": "cars",
    "listingIds": [],
    "sortBy": "newest",
    "maxItems": 25,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("lowlanddata/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 = {
    "section": "cars",
    "listingIds": [],
    "sortBy": "newest",
    "maxItems": 25,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("lowlanddata/donedeal-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": "cars",
  "listingIds": [],
  "sortBy": "newest",
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call lowlanddata/donedeal-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lowlanddata/donedeal-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/gBXTwbRJHph1vcVFh/builds/Fch6q9iTKvkkd1nGz/openapi.json
