# AutoTrack Netherlands Car Scraper (`mrdoe/autotrack-car-scraper-nl`) Actor

Extracts used car listings from AutoTrack.nl, a major Dutch car marketplace, including price, mileage, full specifications, dealer details, and photos.

- **URL**: https://apify.com/mrdoe/autotrack-car-scraper-nl.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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?

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

**Turn AutoTrack.nl listings into structured data in minutes** - no coding, no manual copy-pasting. Get price, mileage, full specifications, dealer details, and photos for used cars listed on AutoTrack.nl, a major Dutch car marketplace.

### What does AutoTrack Netherlands Car Scraper do?

AutoTrack Netherlands Car Scraper collects used car listings from [AutoTrack.nl](https://www.autotrack.nl). Give it one or more listing URLs (by brand, body type, fuel type, and more) and it pages through every result, then visits each listing's own page to pull the full specification table (engine, dimensions, history, warranty), every photo, and the license plate where the seller publishes it.

### Why use AutoTrack Netherlands Car Scraper?

- **Sourcing** - build a shortlist of cars matching your criteria from dealers nationwide.
- **Market research** - track pricing, mileage, and spec trends by make and model.
- **Trade buying** - find dealers in a specific area with matching stock.
- **Data enrichment** - pull full structured listing data into your own valuation tool or CRM.

### How to use AutoTrack Netherlands Car Scraper

1. On [AutoTrack.nl](https://www.autotrack.nl), browse to `/aanbod/merk/{brand}` or apply AutoTrack's own filters (body type, fuel type, price, etc.) and copy the URL.
2. Paste it into **Start URLs** in the Input tab. Add as many as you like, or paste a direct listing URL (`autotrack.nl/a/...`).
3. Leave **Enrich with detail pages** on to collect the full spec table per listing (recommended), or turn it off for a faster search-only run.
4. Set **Max items** / **Max pages** if you want to cap the run, or leave empty to collect everything.
5. Click **Start** and wait for the run to finish.
6. Open the **Dataset** tab to preview, filter, and export your results.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `startUrls` | Array | AutoTrack.nl listing URLs or direct detail URLs. **Required.** |
| `includeDetails` | Boolean | Visit each listing's own page for the full spec table and photos (default: `true`). |
| `maxItems` | Integer | Maximum listings to collect across all start URLs (default: unlimited). |
| `maxPages` | Integer | Safety cap on result pages per start URL (default: unlimited). |
| `useCache` | Boolean | Skip listings already collected by a previous run (default: `true`). |
| `proxyConfiguration` | Object | Proxy settings. Residential proxy is used by default. |

Example input:

```json
{
    "startUrls": [{ "url": "https://www.autotrack.nl/aanbod/merk/bmw" }],
    "includeDetails": true,
    "maxItems": 300
}
```

### Output

Each listing is saved as one item in the dataset, for example:

```json
{
    "listingId": "59900855",
    "title": "BMW 1-Serie Benzine [H-381-TL]",
    "url": "https://www.autotrack.nl/a/bmw-1-serie-benzine-2020-59900855",
    "make": "BMW",
    "model": "1-Serie",
    "year": "2020",
    "price": 17995,
    "currency": "EUR",
    "mileage": 139623,
    "mileageUnit": "KMT",
    "color": "Wit",
    "bodyType": "Hatchback",
    "fuelType": "Benzine",
    "transmission": "AUTOMATISCH",
    "doors": 5,
    "dealerName": "Goedman Automotive",
    "sellerLocation": "Boskoop, Zuid-Holland",
    "attributes": { "specifications": { "Kenteken": "H-381-TL", "Versnellingen": "7", "...": "..." } },
    "images": ["https://cdn.autotrack.nl/59900855/0-...jpg", "..."],
    "source": "autotrack.nl",
    "scrapedAt": "2026-08-21T00:00:00.000Z"
}
```

#### Field reference

| Field | Description |
| --- | --- |
| `listingId` / `id`, `url` | AutoTrack's listing ID and its own detail page |
| `make`, `model`, `year`, `bodyType`, `color`, `doors`, `seats` | Vehicle identification |
| `price`, `currency`, `vehicleStatus` | Asking price and availability |
| `mileage`, `mileageUnit`, `fuelType`, `transmission`, `driveType` | Core spec |
| `dealerName`, `dealerUrl`, `sellerLocation` | The dealer listing the car and a link to their full stock |
| `images` | Every listing photo |
| `attributes.specifications` | AutoTrack's full spec table (license plate, engine, dimensions, history, warranty, and more), flattened to key/value pairs |
| `attributes.specGroups` | The same data grouped by section as AutoTrack itself organizes it (e.g. "Motor", "Onderstel") |
| `source`, `sourceUrl`, `scrapedAt` | Provenance |

Fields with no public data for a given listing are returned as `null` (or `[]`/`{}` for arrays/objects) - never fabricated or guessed. License plates are included only where the seller publicly displays them on the listing.

### Detail-page enrichment

Search-result pages carry price, mileage, fuel type, and basic identification. The full specification table (engine, dimensions, warranty, history), every photo, and the license plate only exist on the listing's own page. With **Enrich with detail pages** on (default), the Actor visits each new listing's page once to fill these in. Turn it off for a cheaper, faster run if search-result-level data is enough.

### Pagination

The Actor pages through each start URL's results (30 listings per page) until it reaches the last page, `maxPages`, or `maxItems` - whichever comes first.

### Cache behavior

With `useCache` on (default), every successfully collected listing's ID is stored permanently in the Actor's key-value store - no expiration, no TTL. Re-running the Actor with the same or overlapping start URLs will skip listings already collected and only return new ones. Disable `useCache` to re-collect everything.

### Cost / performance

The Actor makes one lightweight HTTP request per search page and per enriched listing - no browser is launched. Combined with the permanent cache, this keeps cost low per result.

### Troubleshooting

**A run returns 0 listings.** Double-check the start URL is a valid `autotrack.nl/aanbod/...` listing page or `autotrack.nl/a/...` detail URL copied directly from the site.

**Why did some fields come back empty?** Not every listing includes every field (e.g. some dealers omit certain spec sections). The Actor returns `null` for anything that isn't available for a given car.

### FAQ / Disclaimer

**Is this legal?** This Actor only collects publicly visible listing data. You are responsible for using the data in accordance with AutoTrack.nl's Terms of Service and applicable law in your jurisdiction.

**Found a bug or have a feature request?** Please use the Issues tab on this Actor's page - feedback directly shapes future updates.

# Actor input Schema

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

AutoTrack.nl listing URLs (e.g. <code>autotrack.nl/aanbod/merk/bmw</code>), optionally with AutoTrack's own filters applied, or direct listing URLs (<code>autotrack.nl/a/...</code>).

## `includeDetails` (type: `boolean`):

Visit each listing's own page to collect the full specification table, all photos, and additional vehicle details. Turn off for a faster, cheaper run that only returns search-result data.

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

Maximum number of listings to scrape across all start URLs. Leave empty to collect every listing the search URLs return.

## `maxPages` (type: `integer`):

Safety cap on how many result pages to page through per start URL (30 listings per page). Leave empty to page through all results.

## `useCache` (type: `boolean`):

Skip listings already collected by a previous run of this Actor (matched by AutoTrack's listing ID). The cache is stored permanently and never expires. Disable to re-collect everything.

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

Residential proxy is used by default for reliability.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.autotrack.nl/aanbod/merk/morgan"
    }
  ],
  "includeDetails": true,
  "useCache": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `listings` (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 = {
    "startUrls": [
        {
            "url": "https://www.autotrack.nl/aanbod/merk/morgan"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/autotrack-car-scraper-nl").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 = {
    "startUrls": [{ "url": "https://www.autotrack.nl/aanbod/merk/morgan" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/autotrack-car-scraper-nl").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 '{
  "startUrls": [
    {
      "url": "https://www.autotrack.nl/aanbod/merk/morgan"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call mrdoe/autotrack-car-scraper-nl --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdoe/autotrack-car-scraper-nl"
        }
    }
}

```

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/iP2bSeFuuhiG5uDs0/builds/rHkhAD4DvbqFqgI4h/openapi.json
