# Autodoc Scraper — Car Parts with OEM Numbers & EAN (`studio-amba/autodoc-scraper`) Actor

Scrape car parts from autodoc.de: names, brands, prices, OEM cross-reference numbers, EAN codes, manufacturer part numbers, vehicle compatibility, specs, ratings, and stock. Crawls the category tree and product pages. Works across Autodoc's EU storefronts (.de, .co.uk, .fr, .es, .it and more).

- **URL**: https://apify.com/studio-amba/autodoc-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Features:** Limited permissions
- **Stats:** 32 total users, 4 monthly users, 100.0% runs succeeded, 1 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/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

## Autodoc Scraper — Car Parts with OEM Numbers & EAN

Match an aftermarket car part to its OEM cross-reference numbers, EAN barcode, and current price on Autodoc, Europe's largest online car-parts retailer, without cross-referencing manufacturer catalogs by hand. Also pulls names, brands, technical specs, ratings, and vehicle compatibility from the same product pages.

### What is Autodoc Scraper?

Autodoc sells millions of car parts across roughly 27 European storefronts (autodoc.de, autodoc.co.uk, auto-doc.fr, autodoc.es, autodoc.nl, and more) that all run on the same platform. Its product pages carry the data that matters in the automotive aftermarket: the OEM cross-reference numbers that map an aftermarket part to the original equipment numbers of VW, BMW, Mercedes and every other vehicle maker, plus EAN barcodes, manufacturer part numbers, and full spec tables.

This actor crawls Autodoc's category tree, harvests product links, and extracts the complete data set from each product page. One `domain` input switches the same actor between country storefronts.

- **Part cross-referencing** — Map aftermarket parts (Bosch, Brembo, ATE, Febi, ...) to OEM numbers per vehicle manufacturer
- **Price monitoring** — Track aftermarket part prices across European markets and against your own catalog
- **Catalog enrichment** — Pull EAN codes, part numbers, and spec tables to enrich a parts database or marketplace listing
- **Assortment analysis** — See which brands and product lines Autodoc pushes per category
- **Cross-country comparison** — Run the same category on .de, .fr, and .co.uk to compare pricing per market

### What data does Autodoc Scraper extract?

- **Product name** — Full title including brand and part number
- **Brand** — Parts manufacturer (BOSCH, BREMBO, ATE, ZIMMERMANN, TEXTAR, ...)
- **Price & currency** — Current price in the storefront's currency
- **OEM cross-reference numbers** — Original equipment numbers with vehicle-manufacturer attribution (the flagship field)
- **EAN barcode** — For matching against other catalogs
- **SKU & MPN** — Manufacturer part number, with and without separators
- **Vehicle compatibility** — Common vehicle models the part fits (up to 50 per product)
- **Technical specs** — Full attribute table (diameter, thickness, fitting position, surface, ...)
- **Availability** — InStock / OutOfStock status
- **Ratings & reviews** — Customer rating value and rating count
- **Product image** — Main image URL
- **Category & URL** — Category the product was found under and its canonical product URL

### How to scrape Autodoc data

1. Pick one or more category URLs from the `/autoteile/` tree, for example `https://www.autodoc.de/autoteile/bremsscheibe-10132` (brake discs).
2. Set `maxResults` and run. The actor walks subcategories automatically when a single category page does not carry enough products.
3. Export the dataset as JSON, CSV, or Excel from the Apify Console or via API.

Autodoc runs a Cloudflare challenge on every request; this actor comes with its own Bright Data Web Unlocker access built in, already folded into the per-result price below, so there's nothing to configure. `brightDataApiKey` is only there if you'd rather route requests through your own Bright Data account.

Keyword search URLs (`/search`) are not supported — drive the scraper with category URLs instead. Every category on the site has one, and the actor discovers subcategories on its own.

#### Input

| Field | Type | Description |
|-------|------|-------------|
| `categoryUrls` | Array | Category pages from the `/autoteile/` tree to scrape |
| `domain` | String | Storefront to scrape (default `www.autodoc.de`; also `www.autodoc.co.uk`, `www.auto-doc.fr`, `www.autodoc.es`, `www.autodoc.nl`, ...) |
| `fetchDetails` | Boolean | Fetch each product page for OEM/EAN/specs/compatibility (default `true`). Set `false` for fast listing-only data |
| `maxResults` | Integer | Maximum products to return (default: 100) |
| `brightDataApiKey` | String | Optional — your own Bright Data Web Unlocker API key, if you'd rather not use the built-in access |
| `proxyConfiguration` | Object | Not used — all requests go through Bright Data |

#### Example input

```json
{
    "categoryUrls": [
        { "url": "https://www.autodoc.de/autoteile/bremsscheibe-10132" }
    ],
    "maxResults": 100,
    "fetchDetails": true
}
```

### Example output

```json
{
    "name": "BREMBO Prime 09.9772.11 Bremsscheibe",
    "brand": "BREMBO",
    "price": 47.49,
    "currency": "EUR",
    "sku": "09977211",
    "mpn": "09.9772.11",
    "ean": "8020584018286",
    "oemNumbers": [
        { "oemNumber": "5Q0615301F", "manufacturer": "VW / AUDI / SKODA / SEAT / CUPRA" },
        { "oemNumber": "1K0615301AA", "manufacturer": "VW / AUDI / SKODA / SEAT" },
        { "oemNumber": "JZW615301H", "manufacturer": "VW / SKODA / SEAT" }
    ],
    "compatibility": [
        "Golf 7 Bremsscheiben",
        "Golf 5 Bremsscheiben",
        "Audi A3 8P Bremsscheiben",
        "Tiguan 5N Bremsscheiben"
    ],
    "availability": "InStock",
    "inStock": true,
    "rating": 4,
    "reviewCount": 115,
    "imageUrl": "https://media.autodoc.de/360_photos/1657592/h-preview.jpg",
    "specs": {
        "Einbauposition": "Vorderachse",
        "Durchmesser": "312",
        "Bremsscheibenart": "innenbelüftet",
        "Oberfläche": "beschichtet"
    },
    "articleId": "1657592",
    "category": "Auto Bremsscheiben hinten und vorne",
    "url": "https://www.autodoc.de/brembo/1657592",
    "scrapedAt": "2026-07-11T10:32:18.512Z"
}
```

### How many results per run?

Each product's detail page is fetched individually (that is where the OEM and EAN data lives), at roughly 2–5 seconds per product with light concurrency. A 100-product run finishes in a few minutes; catalogue-scale runs take hours. The actor persists its crawl state, so long runs survive platform migrations and never push the same product twice.

With `fetchDetails: false` you get about 20 products per category page fetch — much faster and cheaper, but without OEM numbers, EAN, specs, or compatibility.

### Multi-country support

All Autodoc storefronts share one platform. To scrape another country, set `domain` and use category URLs from that domain:

```json
{
    "domain": "www.autodoc.co.uk",
    "categoryUrls": [{ "url": "https://www.autodoc.co.uk/car-parts/brake-disc-10132" }]
}
```

Prices come back in the local currency (EUR, GBP, ...).

A category URL already names its storefront, so `domain` can be left out when `categoryUrls` is set. With only `domain` set, the run starts from that storefront's brake-disc category. France is `www.auto-doc.fr` (with a hyphen).

You can also pass product URLs (`https://www.autodoc.de/bosch/1158582`) in `categoryUrls` to get exactly those products. A URL that is not a category on the storefront ends the run with 0 results and a status message that says so.

### Cost estimate

This actor is billed $0.04 per run plus $0.005 per result — **100 products cost about $0.54**. That covers the Bright Data Web Unlocker access needed to get past Autodoc's Cloudflare challenge; there's no separate proxy bill. Usage cost only settles once a run reports **SUCCEEDED** — reading a dataset mid-run will show a cost far below the real total.

### Limitations

- **Cloudflare-protected site.** Autodoc's Cloudflare protection blocks direct requests and datacenter proxies, which is why this actor routes through Bright Data's Web Unlocker instead — already included in the price above.
- **No keyword search.** The site's `/search` endpoint is not crawlable — use category URLs. The category tree covers the full catalog.
- **Category pages show top products only.** Each category page lists around 20 products; the actor compensates by walking subcategories. For full-catalogue coverage, seed multiple deep categories.
- **Compatibility list is capped at 50 vehicles** per product to keep items compact.

### Related Scrapers

- [Car Parts Price Matrix](https://apify.com/studio-amba/car-parts-price-matrix) — runs this scraper alongside Mister-Auto and kfzteile24, matches parts by MPN/EAN/OEM, and flags the cheapest source
- [Leroy Merlin Scraper](https://apify.com/jelle.desramaults/leroymerlin-scraper) — French DIY & home improvement products
- [Idealo Scraper](https://apify.com/jelle.desramaults/idealo-scraper) — German price comparison across categories
- [AutoTrader UK Scraper](https://apify.com/jelle.desramaults/autotrader-uk-scraper) — UK used-car listings

### FAQ

**Do I need an Autodoc account or cookies?**
No. Everything comes from public product pages.

**Can I scrape a single product?**
Seed the category the product sits in and set a low `maxResults`, or run with `fetchDetails: true` and filter the output by `articleId`.

**Is scraping Autodoc legal?**
This actor extracts publicly available product-page data (prices, part numbers, availability). You are responsible for how you use the data; check the terms that apply to your use case.

**Why do a few products come back without OEM numbers?**
Universal parts and accessories have no OEM cross-references on their pages. The field is populated whenever the site shows it.

# Actor input Schema

## `categoryUrls` (type: `array`):

Autodoc category pages to scrape (the /autoteile/ tree, e.g. https://www.autodoc.de/autoteile/bremsscheibe-10132), or single product URLs (e.g. https://www.autodoc.de/bosch/1158582). The scraper harvests product links from each category and walks its subcategories for breadth. A URL from another storefront (autodoc.co.uk, auto-doc.fr) switches the run to that storefront. Keyword search URLs (/search) are not supported; a URL that is not a category returns 0 results.

## `domain` (type: `string`):

Which Autodoc storefront to scrape. Country domains share the same platform: www.autodoc.de, www.autodoc.co.uk, www.auto-doc.fr (France uses the hyphen), www.autodoc.es, www.autodoc.nl, and more. With no category URL, the run starts from the brake-disc category of this storefront. A category URL from another storefront overrides this field.

## `fetchDetails` (type: `boolean`):

When enabled (recommended), every product page is fetched to extract OEM cross-reference numbers, EAN codes, full specs, and vehicle compatibility. When disabled, only the cheap listing-tile data (name, brand, price, rating) is returned — faster, but without the OEM/EAN data.

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

Maximum number of products to return. Detail pages take a few seconds each, so size long runs accordingly.

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

Your Bright Data API key for the Web Unlocker zone. Optional. The actor uses its built-in Bright Data access when this is empty. Set your own Web Unlocker API key to run on your own Bright Data account.

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

Not used — all requests go through Bright Data Web Unlocker. Kept for compatibility.

## Actor input object example

```json
{
  "categoryUrls": [
    {
      "url": "https://www.autodoc.de/autoteile/bremsscheibe-10132"
    }
  ],
  "domain": "www.autodoc.de",
  "fetchDetails": true,
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "categoryUrls": [
        {
            "url": "https://www.autodoc.de/autoteile/bremsscheibe-10132"
        }
    ],
    "domain": "www.autodoc.de",
    "fetchDetails": true,
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/autodoc-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 = {
    "categoryUrls": [{ "url": "https://www.autodoc.de/autoteile/bremsscheibe-10132" }],
    "domain": "www.autodoc.de",
    "fetchDetails": True,
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/autodoc-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 '{
  "categoryUrls": [
    {
      "url": "https://www.autodoc.de/autoteile/bremsscheibe-10132"
    }
  ],
  "domain": "www.autodoc.de",
  "fetchDetails": true,
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/autodoc-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/autodoc-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/Lm0RQ93ieAUB60a6H/builds/zxyyalZey5OARWel1/openapi.json
