# Oscaro Products Scraper (`parsebird/oscaro-products-scraper`) Actor

Scrape Oscaro car parts by name or OE reference: price, RRP, EAN, brand, stock, promotions, cross-references, TecDoc specs and vehicle fitment count. France, Belgium, Spain, Portugal.

- **URL**: https://apify.com/parsebird/oscaro-products-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 products

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

### Oscaro Products Scraper

**Oscaro Products Scraper** extracts car parts from [Oscaro](https://www.oscaro.com/), the French online car parts shop, by part name or OE / manufacturer reference: price, recommended retail price, promotions, stock, brand, reference, EAN, images and cross-references. Detail mode adds the full specifications table and how many vehicle types each part fits. Export the data as JSON, CSV or Excel.

<table><tr>
<td style="border-left:4px solid #E30613;padding:12px 16px;font-weight:600">
Search oscaro.com, oscaro.be, oscaro.es or oscaro.pt in the shop's own language, filter by brand, TecDoc part type, stock, promotion or universal fit, and get more than 1,000 products from a single search for price monitoring, catalog building and OE cross-reference lookups.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Apify Actor: parsebird/oscaro-products-scraper. Scrapes the Oscaro car parts catalog (oscaro.com France, oscaro.be Belgium, oscaro.es Spain, oscaro.pt Portugal) by part name or OE/manufacturer reference. Call via ApifyClient: client.actor("parsebird/oscaro-products-scraper").call(run_input={"queries": ["plaquette de frein", "GDB1330"], "scrapeMode": "overview", "maxResults": 50}). Inputs: queries (array of strings: part names in the shop language or references such as GDB1330; optional when brand or genartId is set), scrapeMode ("overview" default | "detail": adds specs and vehicle_type_count), country ("fr" default | "be" | "es" | "pt"), maxResults (integer, default 100, total across all queries, shared evenly between queries; more than 1,000 per query is supported), brand (string, comma-separated manufacturer names such as BOSCH, VALEO; case-insensitive), genartId (string, comma-separated TecDoc part-type ids such as 402), available (boolean: in stock only), promo (boolean: on promotion only), universal (boolean: universal parts only). Output fields: item_id, productTitle, url, source, reference, search_reference, ean, brand, brand_id, brand_logo, genart_id, part_type, category, sub_category, price, raw_price, public_price, consign_price, currency, tax_rate, on_promotion, promotion_percentage, promotion_start_date, promotion_end_date, thumbnail, images, available, sold_as_pack, boxes_count, universal, country, equivalent_references [{manufacturer, references[]}], equivalent_references_count, search_query, scrapedAt; detail mode adds specs (object label -> value) and vehicle_type_count. Pricing: pay per product (overview) or per detail product (detail). Full API spec: https://apify.com/parsebird/oscaro-products-scraper/api. Get your token: https://console.apify.com/settings/integrations.
```

### What is Oscaro Products Scraper?

[Oscaro](https://www.oscaro.com/) sells more than a million car parts from hundreds of brands, including BOSCH, VALEO, TRW, BREMBO and FEBI BILSTEIN, with shops in France, Belgium, Spain and Portugal. Each part has a price, a recommended retail price, a stock status and a list of equivalent OE and aftermarket references.

**Oscaro Products Scraper** turns that catalog into a dataset. Enter a part name such as `plaquette de frein` or a reference such as `GDB1330`, press Start, and get every matching product with its price, brand, reference, EAN and cross-references. It works as an **Oscaro API alternative** for price monitoring, competitor analysis and parts catalog enrichment. No Oscaro account is needed.

### What can Oscaro Products Scraper do?

- 🔎 **Search by part name or reference.** Enter part names in the shop's language, or OE and manufacturer references such as `GDB1330` or `0 986 494 027`.
- 🌍 **Four Oscaro shops.** Search France (oscaro.com), Belgium (oscaro.be), Spain (oscaro.es) or Portugal (oscaro.pt), with each shop's own prices and labels.
- 🏷️ **Filters.** Limit results to one or more brands or TecDoc part types, in-stock products, products on promotion, or universal parts.
- 📦 **Whole-brand exports.** Leave the search empty and set a brand or part type to list that brand's or part type's catalog.
- 📈 **More than 1,000 results per search.** Large result sets are split by brand and part type, so one search can return thousands of products.
- 🔁 **Cross-references.** Every product lists its equivalent references, grouped by manufacturer, for OE-to-aftermarket lookups.
- 📋 **Detail mode.** Adds the full specifications table (dimensions, material, fitting position…) and how many vehicle types the part fits.
- 📅 **Scheduling and integrations.** Run daily with [Apify Schedules](https://docs.apify.com/platform/schedules) and send results to Google Sheets, Slack, Zapier, Make or a webhook with [Apify integrations](https://docs.apify.com/platform/integrations).
- 🔌 **API access.** Start runs and read results from your own code with the [Apify API](https://docs.apify.com/api/v2), in JSON, CSV, Excel, XML or HTML.

### What data can you extract from Oscaro?

| Field | Description |
|-------|-------------|
| `item_id` | Oscaro article id, the unique id of the part |
| `productTitle` / `part_type` | Part name, such as `Jeu de 4 plaquettes de frein` |
| `brand`, `brand_id`, `brand_logo` | Manufacturer name, Oscaro manufacturer id and logo |
| `reference` / `search_reference` | Manufacturer reference as shown (`0 986 494 027`) and without spaces (`0986494027`) |
| `ean` | EAN barcode |
| `genart_id` | TecDoc generic article (part type) id |
| `category` / `sub_category` | Category and sub-category, such as `Freinage` › `Plaquettes de frein` |
| `price` | Current price, VAT included |
| `raw_price` | Price before promotion, VAT included |
| `public_price` | Recommended retail price, VAT included |
| `consign_price` | Refundable core deposit (consigne), if any |
| `currency`, `tax_rate` | Currency (EUR) and VAT rate in % |
| `on_promotion`, `promotion_percentage`, `promotion_start_date`, `promotion_end_date` | Current promotion and its dates |
| `available` | Whether the product is in stock |
| `sold_as_pack`, `boxes_count`, `universal` | Pack, number of boxes and universal-fit flags |
| `thumbnail`, `images` | Product image, small and large |
| `url` | Product page on Oscaro |
| `equivalent_references` | Equivalent references: `[{manufacturer, references[]}]` |
| `equivalent_references_count` | Total number of equivalent references |
| `specs` | Detail mode: specifications table as label → value |
| `vehicle_type_count` | Detail mode: number of vehicle types the part fits (0 for universal parts) |
| `search_query`, `source`, `country`, `scrapedAt` | Search that found the product, scrape mode, shop and scrape time |

### How to scrape Oscaro

1. Open [Oscaro Products Scraper](https://apify.com/parsebird/oscaro-products-scraper) in Apify Console.
2. Enter one or more **Search queries**, such as `plaquette de frein` or `GDB1330`.
3. Pick the **Scrape mode**: Overview for price and stock data, or Detail to add specifications and vehicle fitment counts.
4. Pick the **Oscaro site** if you want Belgium, Spain or Portugal instead of France.
5. Optionally set a **Brand**, **Part-type ID** or the stock, promotion and universal filters.
6. Set **Maximum products** and click **Start**.
7. Download the results from the **Output** tab as JSON, CSV, Excel, XML or HTML, or read them through the API.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `queries` | array | No\* | — | Part names or OE / manufacturer references, one per line |
| `scrapeMode` | string | No | `overview` | `overview` or `detail` (adds `specs` and `vehicle_type_count`) |
| `country` | string | No | `fr` | Oscaro shop: `fr`, `be`, `es` or `pt` |
| `maxResults` | integer | No | `100` | Maximum products across all searches, shared evenly between queries |
| `brand` | string | No | — | Manufacturer name, such as `BOSCH`; separate several with commas |
| `genartId` | string | No | — | TecDoc part-type id, such as `402`; separate several with commas |
| `available` | boolean | No | `false` | In-stock products only |
| `promo` | boolean | No | `false` | Products on promotion only |
| `universal` | boolean | No | `false` | Universal parts only |

\* Add at least one search query, or a brand or part-type filter.

Example input:

```json
{
    "queries": ["plaquette de frein", "disque de frein"],
    "scrapeMode": "detail",
    "brand": "BOSCH",
    "available": true,
    "maxResults": 200
}
```

### Output example

A detail-mode record (cross-references and specs shortened):

```json
{
    "thumbnail": "https://oscaro.media/catalog/images/oscjpg/normal/30/1457429238_1.jpg",
    "item_id": "213933",
    "productTitle": "Filtre à huile",
    "url": "https://www.oscaro.com/filtre-a-huile-bosch-1-457-429-238-213933-7-p",
    "source": "detail",
    "reference": "1 457 429 238",
    "search_reference": "1457429238",
    "ean": "3165143543887",
    "brand": "BOSCH",
    "brand_id": "30",
    "brand_logo": "https://oscaro.media/mu/suppliers/manufacturer/png/0030001.png",
    "genart_id": "7",
    "part_type": "Filtre à huile",
    "category": "Filtres et huile",
    "sub_category": "Filtres",
    "price": 9.98,
    "raw_price": 9.98,
    "public_price": 19.32,
    "consign_price": 0.0,
    "currency": "EUR",
    "tax_rate": 20.0,
    "on_promotion": false,
    "promotion_percentage": null,
    "promotion_start_date": null,
    "promotion_end_date": null,
    "images": ["https://oscaro.media/catalog/images/oscjpg/zoom/30/1457429238_1.jpg"],
    "available": true,
    "sold_as_pack": false,
    "boxes_count": 1,
    "universal": false,
    "country": "fr",
    "equivalent_references": [
        { "manufacturer": "SogefiPro", "references": ["FA5670", "FA5670AECO"] },
        { "manufacturer": "CROSLAND", "references": ["2256"] }
    ],
    "equivalent_references_count": 92,
    "specs": {
        "type": "Cartouche papier",
        "diamètre extérieur": "65,00",
        "diamètre intérieur": "26,00",
        "Hauteur": "100,00 mm"
    },
    "vehicle_type_count": 936,
    "search_query": "filtre a huile",
    "scrapedAt": "2026-10-25T12:55:42.532Z"
}
```

Overview records have the same fields without `specs` and `vehicle_type_count`.

### Use cases

- **Price monitoring.** Track Oscaro prices, promotions and recommended retail prices for the parts you sell, on a daily schedule.
- **Competitor analysis.** Compare brands and price levels within a part type, such as all brake pad sets (`genartId` 402).
- **Cross-reference lookups.** Find the aftermarket equivalents of an OE reference, or the OE numbers behind an aftermarket part.
- **Catalog enrichment.** Add EANs, images, specifications and categories to your own parts catalog.
- **Stock tracking.** Watch which products go in and out of stock with the **In stock only** filter or the `available` field.

### How it works

1. Each search query is run against the product search of the Oscaro shop you picked, with your filters applied.
2. When a search matches more than 1,000 products and you asked for more, the results are split by brand and then by part type, so each part can be read in full.
3. Each product is saved once per run, even if several queries find it.
4. In detail mode, the specifications table is added, and the vehicle fitment lists are counted to give `vehicle_type_count`.

### How much does it cost to scrape Oscaro?

Oscaro Products Scraper uses pay-per-event pricing. You pay for each product saved. Overview mode charges a `product` event, and detail mode charges a `detail` event instead. Compute and proxy usage are included in the event price and are not billed separately.

| Event | Apify plan | Price per event | Price per 1,000 |
|-------|------------|-----------------|-----------------|
| `product` (overview) | Free | $0.00499 | **$4.99** |
| `product` (overview) | Bronze | $0.00399 | **$3.99** |
| `product` (overview) | Silver | $0.00349 | **$3.49** |
| `product` (overview) | Gold | $0.00299 | **$2.99** |
| `detail` (detail) | Free | $0.01099 | **$10.99** |
| `detail` (detail) | Bronze | $0.00999 | **$9.99** |
| `detail` (detail) | Silver | $0.00899 | **$8.99** |
| `detail` (detail) | Gold | $0.00799 | **$7.99** |

For example, 1,000 products in overview mode cost $4.99 on the Free plan, and the default prefill run of 50 products costs about $0.25. Apify's Free plan includes $5 of platform usage every month. Set a maximum cost per run in Console and the scraper stops when it is reached.

### Use the scraper with Python and JavaScript

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("parsebird/oscaro-products-scraper").call(run_input={
    "queries": ["plaquette de frein"],
    "brand": "BOSCH",
    "available": True,
    "maxResults": 200,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["reference"], item["price"], item["public_price"], item["url"])
```

**JavaScript** (`npm install apify-client`):

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('parsebird/oscaro-products-scraper').call({
    queries: ['GDB1330'],
    scrapeMode: 'detail',
    maxResults: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => console.log(item.brand, item.reference, item.price, item.vehicle_type_count));
```

See the [API tab](https://apify.com/parsebird/oscaro-products-scraper/api) for every endpoint, or the [Apify API client docs](https://docs.apify.com/api/client/python) for more options.

### Is it legal to scrape Oscaro?

Oscaro Products Scraper collects only public product information that Oscaro shows to every visitor: product names, prices, stock status, references and specifications. It doesn't log in, and it doesn't collect personal data. Check Oscaro's terms of use for how you plan to use the data, and if you are unsure, consult a lawyer. Read more in Apify's post [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### Other ParseBird automotive scrapers

| Actor | What it does |
|-------|--------------|
| [Bid.cars Scraper](https://apify.com/parsebird/bid-cars-scraper) | Copart and IAAI auction lots with VIN, damage and prices |
| [Otomoto.pl Scraper with Contacts](https://apify.com/parsebird/otomoto-scraper) | Polish car listings with prices, specs and seller contacts |
| [AutoTrader.co.uk Scraper](https://apify.com/parsebird/autotrader-scraper) | UK car listings from AutoTrader |
| [AutoTrader Canada Scraper (AutoTrader.ca)](https://apify.com/parsebird/autotrader-ca-scraper) | Canadian car listings from AutoTrader.ca |
| [che168 二手车 Autohome Scraper](https://apify.com/parsebird/che168-scraper) | Chinese used car listings from che168.com |

### FAQ

**Which language should I search in?**
Use the language of the shop: French for France and Belgium (`plaquette de frein`), Spanish for Spain (`pastillas de freno`) and Portuguese for Portugal (`pastilhas de travão`). References such as `GDB1330` work in every shop.

**How many products can one search return?**
More than 1,000. When a search matches more products than that and you ask for more, the scraper splits it by brand and part type. `maxResults` is shared evenly between your queries, so with 2 queries and `maxResults` 100 each query gets up to 50 products, and any share a query doesn't use goes to the next one.

**What is the difference between Overview and Detail?**
Both modes return price, stock, brand, reference, EAN, images and cross-references. Detail also adds the specifications table and `vehicle_type_count`, and is billed as a detail product.

**Can I find the products that fit my car?**
Not yet. The scraper searches by part name, reference, brand and part type, and `vehicle_type_count` says how many vehicle types a part fits, but it doesn't filter by vehicle.

**How do I find a part-type ID?**
Run a search once and look at the `genart_id` field of the parts you want. For example, `402` is brake pad sets on oscaro.com.

**My brand filter returns nothing.**
Use the brand name as Oscaro writes it, such as `BOSCH` or `FEBI BILSTEIN`. Case doesn't matter. When a brand isn't found, the run log suggests close matches.

**Can I schedule runs and send the results somewhere?**
Yes. Use [Apify Schedules](https://docs.apify.com/platform/schedules) to run hourly, daily or weekly, and [integrations](https://apify.com/integrations) to send results to Google Sheets, Slack, Zapier, Make, Airbyte or a webhook.

**Something doesn't work. Where do I report it?**
Open an issue in the [Issues tab](https://apify.com/parsebird/oscaro-products-scraper/issues). We read every report.

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/oscaro-products-scraper/changelog.md

# Actor input Schema

## `queries` (type: `array`):

Enter part names or OE / manufacturer references, one per line, such as <code>plaquette de frein</code>, <code>filtre à huile</code> or <code>GDB1330</code>. Leave empty to list a whole brand or part type with the filters below.

## `scrapeMode` (type: `string`):

Overview returns price, stock, brand, EAN, images and cross-references. Detail also adds the full specifications table and the number of vehicle types each part fits, and is billed as a detail product.

## `country` (type: `string`):

Pick the Oscaro shop to search. Prices, stock and labels come from that country's catalog.

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

Maximum products to save across all searches. It is shared evenly between your search queries.

## `brand` (type: `string`):

Only return parts from this manufacturer, such as <code>BOSCH</code>, <code>VALEO</code> or <code>BREMBO</code>. Separate several brands with commas.

## `genartId` (type: `string`):

Advanced. Only return one TecDoc part type, using the genart_id from a previous result, such as <code>402</code> for brake pad sets. Separate several ids with commas.

## `available` (type: `boolean`):

Only return products that are currently available.

## `promo` (type: `boolean`):

Only return products with a current promotional discount.

## `universal` (type: `boolean`):

Only return universal parts, which are not tied to specific vehicles.

## Actor input object example

```json
{
  "queries": [
    "plaquette de frein",
    "GDB1330"
  ],
  "scrapeMode": "overview",
  "country": "fr",
  "maxResults": 50,
  "available": false,
  "promo": false,
  "universal": false
}
```

# Actor output Schema

## `dataset` (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 = {
    "queries": [
        "plaquette de frein",
        "GDB1330"
    ],
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/oscaro-products-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 = {
    "queries": [
        "plaquette de frein",
        "GDB1330",
    ],
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/oscaro-products-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 '{
  "queries": [
    "plaquette de frein",
    "GDB1330"
  ],
  "maxResults": 50
}' |
apify call parsebird/oscaro-products-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/oscaro-products-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/qRBOtsT7KcjZYy0vC/builds/uoVCZRqCtFOiUsbQ4/openapi.json
