# Oscaro Product Scraper — Prices, References & Specs (`haketa/oscaro-product-scraper`) Actor

Oscaro product scraper and automotive parts data API for product searches, category URLs and exact product pages. Export EUR prices, brands, manufacturer references, product IDs, images, availability, delivery estimates and structured technical specifications across France, Spain and Portugal.

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

## Pricing

from $3.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/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

<h1 align="center">🔧 Oscaro Product Scraper</h1>

<p align="center">
  <strong>Car-parts prices, references, technical specifications and availability — ready for analysis.</strong>
</p>

<p align="center">
  <img src="https://img.shields.io/badge/Oscaro-Auto%20Parts-FF6B00?style=for-the-badge" alt="Oscaro auto parts">
  <img src="https://img.shields.io/badge/Markets-FR%20%7C%20ES%20%7C%20PT-1976D2?style=for-the-badge" alt="France Spain Portugal">
  <img src="https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-00A67E?style=for-the-badge" alt="JSON CSV Excel">
  <img src="https://img.shields.io/badge/No%20Code-Ready-6C5CE7?style=for-the-badge" alt="No code required">
</p>

Convert Oscaro product searches, automotive references, category pages and product URLs into structured records. Track EUR prices, compare brands, build parts catalogs and monitor aftermarket assortment without maintaining your own scraping infrastructure.

> 💡 Enter a French, Spanish or Portuguese part name—or a manufacturer/OE reference—and click **Start**.

### ⚡ At a glance

| | Capability | What you receive |
|---|---|---|
| 🔎 | Part discovery | Search by part name, manufacturer reference or OE number |
| 💶 | Price intelligence | Current price, recommended price, savings and discount percentage |
| 🏷️ | Product identity | Oscaro product ID, brand, reference and canonical URL |
| 📐 | Technical data | Structured name/value specification arrays |
| 📦 | Availability | Add-to-cart availability and delivery estimate when displayed |
| 🌍 | Regional storefronts | France, Spain and Portugal |
| 📤 | Flexible exports | JSON, CSV, Excel, XML and RSS |

### 🚀 Quick start

1. Add one or more part names or references.
2. Select the Oscaro market.
3. Choose the maximum number of products.
4. Click **Start** and export the resulting dataset.

```json
{
  "queries": ["filtre à huile", "plaquettes de frein"],
  "region": "FR",
  "maxResults": 100,
  "includeDetails": false
}
```

The default input returns a useful product dataset in well under five minutes.

### 📊 What data can you extract?

The latest validation collected **150 unique Oscaro products in 41 seconds**.

| Group | Fields | Latest 150-product test |
|---|---|---:|
| 🆔 Core identity | `productId`, `title`, `productUrl` | 🟢 150/150 |
| 🏭 Manufacturer | `brand`, `reference` | 🟢 150/150 |
| 💰 Current pricing | `price`, `currency` | 🟢 150/150 |
| 🏷️ Recommended pricing | `originalPrice`, `savings`, `discountPercent` | 🟢 131/150 |
| 🖼️ Product media | `imageUrl` | 🟢 150/150 |
| 📐 Specifications | `specifications[]` | 🟢 149/150 |
| 🚚 Delivery | `deliveryEstimate` | 🟡 Display-dependent |
| 🛒 Availability | `available` | 🟢 Product cards |
| 🔍 Search context | Query, rank, market, source and timestamp | 🟢 Search records |

Fields unavailable for a product are omitted rather than filled with misleading placeholders.

### 🎯 Practical use cases

| | Use case | Business value |
|---|---|---|
| 📉 | Price monitoring | Track current and recommended prices by stable product ID |
| 🔁 | Reference matching | Resolve manufacturer references across a parts catalog |
| 🧾 | Catalog enrichment | Add brands, images, prices and technical attributes |
| 🏪 | Competitive intelligence | Compare Oscaro assortment with your own store or marketplace |
| 📊 | Brand analysis | Measure brand visibility and price positioning by part type |
| 🔔 | Promotion alerts | Detect discounts and savings during scheduled runs |
| 🌍 | Regional comparison | Compare products across French, Spanish and Portuguese stores |
| 🤖 | AI and automation | Feed clean aftermarket product records into agents and workflows |

### 🔍 Search ideas

Searches work best in the selected storefront language.

| Market | Example part names | Example references |
|---|---|---|
| 🇫🇷 France | `filtre à huile`, `amortisseur`, `plaquettes de frein` | `L343D`, `GDB1330` |
| 🇪🇸 Spain | `filtro de aceite`, `amortiguador`, `pastillas de freno` | Manufacturer or OE number |
| 🇵🇹 Portugal | `filtro de óleo`, `amortecedor`, `pastilhas de travão` | Manufacturer or OE number |

> 💡 Precise references usually return the best records for SKU matching. Broader part names are better for market and assortment research.

### 📝 Input options

| Input | Purpose | Default |
|---|---|---:|
| `queries` | Part names, manufacturer references or OE numbers | `filtre à huile` |
| `startUrls` | Oscaro search, category or exact product URLs | Empty |
| `region` | France, Spain or Portugal storefront | `FR` |
| `maxResults` | Unique products saved across every input | `50` |
| `includeDetails` | Attempt extra product-page enrichment | `false` |

#### Supported URL inputs

- Search result URLs
- Product-category and listing URLs
- Exact product pages
- A mixture of supported URLs and text searches

Products found through multiple inputs are deduplicated by Oscaro product ID.

<details>
<summary><strong>🧭 Example: category or search URLs</strong></summary>

```json
{
  "queries": [],
  "startUrls": [
    { "url": "https://www.oscaro.com/huile-moteur-1862-g" }
  ],
  "region": "FR",
  "maxResults": 200
}
```

</details>

<details>
<summary><strong>🌍 Example: Spanish market</strong></summary>

```json
{
  "queries": ["filtro de aceite", "pastillas de freno"],
  "region": "ES",
  "maxResults": 100
}
```

</details>

### 📤 Example result

```json
{
  "productId": "13644654",
  "title": "Filtre à huile PURFLUX L343D",
  "partName": "Filtre à huile",
  "brand": "PURFLUX",
  "reference": "L343D",
  "price": 7.4,
  "originalPrice": 19.21,
  "savings": 11.81,
  "discountPercent": 61,
  "currency": "EUR",
  "available": true,
  "deliveryEstimate": "Livré dès le lundi",
  "imageUrl": "https://oscaro.media/catalog/images/.../l343d.jpg",
  "specifications": [
    { "name": "Type", "value": "Cartouche papier" },
    { "name": "Hauteur [mm]", "value": "99,00 mm" }
  ],
  "productUrl": "https://www.oscaro.com/...-13644654-7-p",
  "query": "filtre à huile",
  "searchPosition": 1,
  "region": "FR",
  "scrapedAt": "2026-08-02T16:54:17.744Z"
}
```

### 💡 Overview or detail?

#### ⚡ Overview mode — recommended

Overview mode already includes prices, references, images and structured technical specifications. It is the best option for high-volume product research and price monitoring.

#### 🔬 Detail enrichment

Enable `includeDetails` only when product-page fields are essential. Detail collection requires additional requests and can increase runtime and cost significantly. If a detail page is temporarily unavailable, the Actor retains the complete overview record.

### 🔌 Connect it anywhere

Use the Actor with:

- 📊 Google Sheets and Excel
- ⚙️ Make, Zapier and n8n
- 🔔 Schedules and webhooks
- 🗄️ PostgreSQL, BigQuery and Snowflake
- ☁️ Amazon S3 and other cloud storage
- 🤖 AI agents and Apify MCP
- 💻 JavaScript, Python and HTTP APIs

<details>
<summary><strong>💻 JavaScript API example</strong></summary>

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('haketa/oscaro-product-scraper').call({
    queries: ['filtre à huile', 'amortisseur'],
    region: 'FR',
    maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

</details>

<details>
<summary><strong>🐍 Python API example</strong></summary>

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/oscaro-product-scraper").call(run_input={
    "queries": ["plaquettes de frein"],
    "region": "FR",
    "maxResults": 50,
})

items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

</details>

### ✅ Tips for better results

- Use the correct language for the selected Oscaro market.
- Use precise manufacturer or OE references for product matching.
- Combine multiple focused queries to collect 100–500 products efficiently.
- Keep detail enrichment disabled for routine price and catalog monitoring.
- Schedule consistent queries to compare price snapshots over time.
- Use the same market across a time series for comparable results.

<details>
<summary><strong>❓ FAQ</strong></summary>

#### Do I need an Oscaro account?

No. The Actor collects publicly displayed product information.

#### Can I search by a reference instead of a part name?

Yes. Manufacturer and OE references are among the most useful inputs.

#### Are prices numeric?

Yes. Price, recommended price, savings and discount percentage are normalized for analysis.

#### Are duplicate products returned?

No. Records are deduplicated by stable Oscaro product ID during each run.

#### Can I scrape multiple countries?

Select FR, ES or PT per run. Separate runs make regional price comparisons cleaner.

#### Why is the recommended price sometimes missing?

Not every product displays a recommended or pre-discount price.

#### Which export formats are supported?

Apify datasets can be downloaded as JSON, JSONL, CSV, Excel, XML or RSS.

</details>

### 🆕 Changelog

#### 1.0 — August 2026

- Added part-name and reference search.
- Added Oscaro search, category and product URL inputs.
- Added France, Spain and Portugal storefront selection.
- Added prices, recommended prices, discounts, references and technical specifications.
- Added product-ID deduplication and optional detail enrichment.
- Cloud validated 150 unique products in under one minute.

# Actor input Schema

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

Search by part name, manufacturer reference, OE number or EAN.

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

Optional Oscaro search, category or product URLs.

## `region` (type: `string`):

Choose the French, Spanish or Portuguese Oscaro storefront.

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

Maximum number of unique product records saved across all inputs.

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

Attempt additional product-page fields while retaining the rich overview record. Slower and more expensive; keep disabled for price monitoring and bulk exports.

## Actor input object example

```json
{
  "queries": [
    "filtre à huile"
  ],
  "region": "FR",
  "maxResults": 50,
  "includeDetails": 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": [
        "filtre à huile"
    ],
    "region": "FR",
    "maxResults": 50,
    "includeDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/oscaro-product-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": ["filtre à huile"],
    "region": "FR",
    "maxResults": 50,
    "includeDetails": False,
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/oscaro-product-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": [
    "filtre à huile"
  ],
  "region": "FR",
  "maxResults": 50,
  "includeDetails": false
}' |
apify call haketa/oscaro-product-scraper --silent --output-dataset

```

## MCP server setup

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