# 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, Business
- **Features:** Limited permissions
- **Stats:** 2 total users, 0 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/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 Product Scraper — Prices, References, EAN & Specs

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-orange?style=flat-square\&logo=apify)](https://apify.com/haketa/oscaro-product-scraper)
[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg?style=flat-square)](https://apify.com/haketa/oscaro-product-scraper)
[![Data Format](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-blue?style=flat-square)](https://apify.com/haketa/oscaro-product-scraper)
[![Markets](https://img.shields.io/badge/Storefronts-France%20%7C%20Spain%20%7C%20Portugal-blueviolet?style=flat-square)](https://apify.com/haketa/oscaro-product-scraper)
[![Pagination](https://img.shields.io/badge/Pagination-1%2C000%2B%20Products%20Unlocked-brightgreen?style=flat-square)](https://apify.com/haketa/oscaro-product-scraper)

**Automotive aftermarket spare parts data, OEM cross-references, EAN codes, technical specifications, and EUR pricing.** This high-performance **Oscaro scraper** and **Oscaro data extractor** turns keyword searches, automotive part references, category taxonomy trees, and direct product URLs across [Oscaro France (oscaro.com)](https://www.oscaro.com), [Oscaro Spain (oscaro.es)](https://www.oscaro.es), and [Oscaro Portugal (oscaro.pt)](https://www.oscaro.pt) into clean, standardized datasets.

Built with automated lazy-load card hydration and deep multi-page pagination, the Actor captures genuine OEM/OES part references, discount depth, stock availability, and full technical specifications at scale. No login, no CAPTCHA friction, and no browser infrastructure to maintain.

Export every record seamlessly to **JSON, CSV, Excel, or consume programmatically via the Apify REST API**.

> 🎯 **Built for**: Automotive parts retailers, distributor networks, marketplace repricing systems, PIM & catalog integration teams, aftermarket intelligence analysts, and fleet management software developers.

***

### ⚡ At a glance

| Capability | Specification |
|:---|:---|
| **Supported Markets** | France (`oscaro.com`), Spain (`oscaro.es`), Portugal (`oscaro.pt`) |
| **Search Modes** | Keyword search, OE/OES part number, EAN/GTIN code, Category URL, Direct Product URL |
| **Pagination & Depth** | Unlocked multi-page pagination (1,000+ items, automated `?page=N` stepping) |
| **Data Normalization**| Real-time price breakdown (`price`, `originalPrice`, `savings`), availability, specs array |
| **Hydration Engine** | Automated continuous scroll to hydrate lazy-loaded `.productbox` skeleton cards |
| **Output Formats** | Structured JSON, CSV, Excel (XLSX), HTML table, or live Apify Dataset API |
| **Proxy Architecture**| Managed Residential Proxies with geo-targeting matching storefront country |
| **Enrichment Mode** | Optional deep product page inspection (`includeDetails`) for full JSON-LD schema |

***

### 🔎 Why scrape Oscaro automotive data?

[Oscaro](https://www.oscaro.com) is Europe's premier digital retailer for **automotive replacement parts**, featuring hundreds of thousands of active listings from leading component manufacturers (Bosch, Valeo, Mann-Filter, Brembo, Ferodo, LuK, Monroe, and SKF). Every listing delivers structured technical compatibility attributes, OE cross-reference numbers, and live pricing.

However, extracting Oscaro data manually presents severe operational bottlenecks:

1. **Dynamic Lazy Loading**: Category listings render empty skeleton placeholders (`.product-placeholder`) that only hydrate upon continuous viewport scrolling.
2. **Catalog Breadth**: Major maintenance categories (brake pads, oil filters, timing belts) span dozens of pagination pages containing thousands of unique SKUs.
3. **Cross-Border Variance**: Pricing, shipping lead times, and promotional discounts diverge across the French, Spanish, and Portuguese localized storefronts.
4. **Reference Complexity**: Matching aftermarket SKUs against vehicle-specific original equipment (OE) numbers requires clean, structured attribute extraction.

This **Oscaro Product Scraper** abstracts away browser management and dynamic hydration, returning a consistent, de-duplicated data schema optimized for retail and catalog workflows.

**Primary commercial applications:**

- 💶 **Dynamic Competitive Repricing** — track live aftermarket prices, monitor recommended retail price (RRP) markdowns, and execute automated repricing.
- 🔁 **OE & Aftermarket Cross-Referencing** — map manufacturer references and EAN codes to build comprehensive auto parts compatibility databases.
- 🧾 **PIM & Catalog Enrichment** — pull verified technical specifications (`specifications[]`), high-resolution product imagery, and fitment notes.
- 🏪 **Marketplace Assortment Auditing** — identify catalog gaps by benchmarking Oscaro's brand representation against your internal inventory.
- 🌍 **European Cross-Market Arbitrage** — compare parts pricing across France, Spain, and Portugal to optimize cross-border wholesale procurement.

***

### 🏗️ Architecture & Ingestion Flow

```mermaid
flowchart TD
    A["User Input: Queries / Category URLs / Product URLs"] --> B["Select Storefront Region: FR / ES / PT"]
    B --> C["Initialize Geo-Targeted Residential Proxy Connection"]
    C --> D["Launch Anti-Detect Browser Session"]
    D --> E{"Task Type"}
    E -- "Listing / Category / Query" --> F["Navigate to Catalog Endpoint"]
    F --> G["Execute Auto-Scroll to Hydrate Real .productbox Cards"]
    G --> H["Extract Product IDs, References, Prices & Stock"]
    H --> I{"Next Page Exists & maxResults Not Reached?"}
    I -- "Yes" --> J["Advance Page: ?page=N"]
    J --> G
    I -- "No" --> K{"includeDetails Enabled?"}
    E -- "Direct Product URL" --> L["Extract Full Product Page Schema"]
    L --> K
    K -- "Yes" --> M["Enrich with Full JSON-LD Specs & EAN"]
    K -- "No" --> N["Deduplicate by Oscaro Product ID"]
    M --> N
    N --> O["Push Structured Records to Apify Dataset"]
```

***

### ⚖️ Feature Comparison: Oscaro Scraper vs Generic Alternatives

| Feature | Haketa Oscaro Scraper | Generic HTML Scraper | Manual Sourcing |
|:---|:---:|:---:|:---:|
| **Dynamic Skeleton Hydration**| ✅ Automatic lazy-load scroll | ❌ Fails on placeholder skeletons | ❌ Extremely tedious |
| **Deep Pagination** | ✅ 1,000+ items across pages | 🟡 Often breaks on query caps | ❌ Limited to first page |
| **OE & Ref Extraction** | ✅ Granular manufacturer codes | 🟡 Unstructured text dumps | 🟡 Prone to copy errors |
| **Multi-Storefront Support** | ✅ France, Spain, Portugal | ❌ Single-market only | ❌ Multi-tab manual switching |
| **Residential Geo-Proxies** | ✅ Built-in matching country | ❌ Extra proxy infrastructure needed| ❌ Blocked by Cloudflare |
| **Deduplication** | ✅ Stable productId dedup | ❌ Frequent duplicate records | ❌ High human error rate |

***

### ✨ Key Extraction Capabilities

- ✅ **Multi-Input Flexibility** — supply broad part keywords (e.g. `disque de frein`), exact part numbers (`Brembo 09.9145.11`), OE numbers, or full category URLs.
- ✅ **Automated Deep Pagination** — sweeps listing categories across multiple pages (`?page=2`, `?page=3`, etc.) with zero hard limits, retrieving 1,000+ products per execution.
- ✅ **Lazy-Load Hydration Engine** — intelligently scrolls the document until all `.productbox` components are fully populated before parsing DOM attributes.
- ✅ **Comprehensive Price Metrics** — captures current checkout price (`price`), pre-discount recommended price (`originalPrice`), calculated euro savings (`savings`), and percentage discount (`discountPercent`).
- ✅ **Technical Specifications Array** — normalizes parts specifications into structured `{ name, value }` pairs (e.g. diameter, thickness, fitting position, brake system type).
- ✅ **Regional Storefront Switching** — easily switch between French (`FR`), Spanish (`ES`), and Portuguese (`PT`) storefronts with matching regional locales and currency symbols.
- ✅ **De-duplicated Datasets** — automatically prevents duplicate entries across overlapping search queries using unique Oscaro product identifiers.

***

### 🔧 Popular Automotive Component Categories

The scraper supports comprehensive catalog sweeping across all major vehicle repair domains:

- **Braking Systems**: Brake discs, brake pads, calipers, master cylinders, brake hoses, and ABS sensors (Brembo, Ferodo, TRW, Bosch).
- **Filtration & Service**: Oil filters, air filters, cabin pollen filters, fuel filters, and transmission filters (Mann-Filter, Purflux, Mahle).
- **Suspension & Steering**: Shock absorbers, coil springs, suspension arms, ball joints, and tie rod ends (Monroe, Sachs, KYB).
- **Clutch & Transmission**: Dual-mass flywheels, clutch kits, release bearings, and drive shafts (LuK, Valeo, Sachs).
- **Engine Cooling & Heating**: Radiators, water pumps, thermostats, cooling fans, and heater cores (Valeo, Gates, Continental).
- **Ignition & Electrical**: Alternators, starter motors, spark plugs, glow plugs, and ignition coils (Bosch, NGK, Denso).
- **Exhaust & Emissions**: Catalytic converters, DPF/FAP diesel particulate filters, EGR valves, and lambda oxygen sensors.

***

### 🎯 Industry Use Cases

#### 1. Auto Parts E-Commerce & Marketplaces

Maintain competitive pricing by tracking daily price fluctuations on high-velocity maintenance components (filters, brake pads, wiper blades, spark plugs). Automatically adjust your retail prices to maximize margins and conversion rates.

#### 2. Automotive PIM & ERP Data Integration

Enrich internal product information management (PIM) systems with high-resolution parts images, comprehensive brand references, and verified EAN/GTIN barcodes.

#### 3. Spare Parts Wholesalers & Distributors

Cross-reference aftermarket part codes across competing brands (e.g. identifying the Mann-Filter equivalent of a Purflux oil filter) to suggest alternative components when primary stock is unavailable.

#### 4. Fleet Maintenance & Cost Optimization

Commercial fleet managers can audit parts replacement estimates against live consumer market prices to ensure repair facilities are billing fair market rates.

***

### 📊 Automotive Data Normalization Guide

This scraper implements structured data normalization rules to ensure seamless integration into ERP and PIM systems:

- **Monetary Units**: All price figures (`price`, `originalPrice`, `savings`) are parsed into standardized floating-point numbers in Euros, stripped of whitespace and currency glyphs.
- **Brand Consistency**: Manufacturer brand names are normalized into uppercase canonical strings (e.g., `BOSCH`, `VALEO`, `FEBI BILSTEIN`).
- **Technical Specification Attributes**: Specifications are transformed into an array of clean key-value dictionaries, decoupling dimensional values from unit descriptors.
- **Reference Sanitation**: Internal whitespace and punctuation variants in reference numbers are preserved exactly as published to ensure exact matching against OEM parts catalogs.
- **Image URL Resolution**: Relative CDN paths are resolved to high-resolution absolute image endpoints suitable for direct catalog asset downloads.

***

### 📥 Input Configuration

| Parameter | Type | Default | Description |
|:---|:---|:---|:---|
| `queries` | Array | `["filtre à huile"]` | List of part names, manufacturer part numbers, OE codes, or EANs to search. |
| `startUrls` | Array | `[]` | Direct Oscaro category, listing, or exact product URLs. |
| `region` | String | `"FR"` | Storefront market: `FR` (oscaro.com), `ES` (oscaro.es), or `PT` (oscaro.pt). |
| `maxResults` | Integer | `0` | Maximum product records to collect (0 = unlimited pagination). Prefilled to `50` for fast trial runs. |
| `includeDetails` | Boolean | `false` | Visit individual product pages to extract deep JSON-LD attributes and full image galleries. |

***

### 📤 Output Dataset Schema

Each product record is output with rich, standardized attributes:

#### 🏷️ Identity & Manufacturer Fields

| Field | Type | Coverage | Description |
|:---|:---|:---|:---|
| `productId` | String | 🟢 High | Unique permanent Oscaro catalog identifier (e.g., `456123`). |
| `title` | String | 🟢 High | Complete product headline including brand, part category, and model. |
| `brand` | String | 🟢 High | Component manufacturer brand name (e.g., `BOSCH`, `VALEO`, `BREMBO`). |
| `reference` | String | 🟢 High | Manufacturer reference number (e.g., `0 986 424 797`). |
| `ean` | String | 🟡 Conditional | 13-digit European Article Number (GTIN barcode). |
| `category` | String | 🟢 High | Primary automotive component category. |
| `productUrl` | String | 🟢 High | Direct canonical link to the item on Oscaro. |
| `imageUrl` | String | 🟢 High | Primary high-resolution component photograph URL. |

#### 💶 Pricing & Stock Attributes

| Field | Type | Coverage | Description |
|:---|:---|:---|:---|
| `price` | Number | 🟢 High | Current selling price in Euros (€). |
| `originalPrice` | Number | 🟡 Conditional | Manufacturer suggested retail price (pre-discount). |
| `savings` | Number | 🟡 Conditional | Total monetary discount in Euros. |
| `discountPercent`| Number | 🟡 Conditional | Percentage reduction from original retail price. |
| `currency` | String | 🟢 High | Currency code (`EUR`). |
| `available` | Boolean | 🟢 High | Stock availability flag (`true` if in stock). |
| `deliveryEstimate`| String| 🟡 Conditional | Estimated shipping and delivery timeframe. |

#### ⚙️ Specifications & Context

| Field | Type | Coverage | Description |
|:---|:---|:---|:---|
| `specifications`| Array | 🟢 High | Structured technical parameters as `{ name, value }` objects. |
| `region` | String | 🟢 High | Source storefront market (`FR`, `ES`, `PT`). |
| `query` | String | 🟡 Conditional | Input keyword or part code that matched the item. |
| `searchPosition`| Number | 🟢 High | Placement index within the search or category listing. |
| `scrapedAt` | String | 🟢 High | ISO 8601 UTC timestamp of data collection. |

***

### 📊 Sample Output Record

```json
{
  "productId": "3148920",
  "title": "BOSCH Filtre à huile - 0 451 103 314",
  "partName": "Filtre à huile",
  "brand": "BOSCH",
  "reference": "0 451 103 314",
  "ean": "3165141042451",
  "price": 8.45,
  "originalPrice": 14.20,
  "savings": 5.75,
  "discountPercent": 40,
  "currency": "EUR",
  "available": true,
  "deliveryEstimate": "Livraison en 24/48h",
  "category": "Filtre à huile",
  "productUrl": "https://www.oscaro.com/filtre-a-huile-bosch-0-451-103-314-3148920-7-p",
  "imageUrl": "https://az248.oscaro.com/bmp/zoom/30/0451103314.jpg",
  "specifications": [
    { "name": "Diamètre extérieur [mm]", "value": "76" },
    { "name": "Diamètre intérieur 1 [mm]", "value": "62" },
    { "name": "Filetage", "value": "3/4\" 16 UNF" },
    { "name": "Hauteur [mm]", "value": "79" },
    { "name": "Pression d'ouverture clapet de dérivation [bar]", "value": "1" }
  ],
  "region": "FR",
  "query": "filtre à huile",
  "searchPosition": 1,
  "scrapedAt": "2026-11-10T13:35:00.000Z"
}
```

***

### 💻 API Integration Examples

#### Node.js (Apify Client SDK)

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

const client = new ApifyClient({
    token: process.env.APIFY_TOKEN,
});

const input = {
    queries: ['plaquettes de frein', 'disque de frein'],
    region: 'FR',
    maxResults: 100,
    includeDetails: false,
};

const run = await client.actor('haketa/oscaro-product-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();

console.log(`Successfully scraped ${items.length} Oscaro automotive parts:`);
for (const part of items) {
    console.log(`[${part.brand}] ${part.title} -> €${part.price} (Ref: ${part.reference})`);
}
```

#### Python (Apify Client SDK)

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.getenv("APIFY_TOKEN"))

run_input = {
    "queries": ["amortisseur"],
    "region": "ES",
    "maxResults": 75,
}

run = client.actor("haketa/oscaro-product-scraper").call(run_input=run_input)
dataset_items = client.dataset(run["defaultDatasetId"]).list_items().items

print(f"Extracted {len(dataset_items)} parts from Oscaro Spain:")
for item in dataset_items:
    print(f"- {item.get('title')}: €{item.get('price')} (Available: {item.get('available')})")
```

#### Direct cURL Request

```bash
curl -X POST "https://api.apify.com/v2/acts/haketa~oscaro-product-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "queries": ["filtre à huile"],
    "region": "FR",
    "maxResults": 50
  }'
```

***

### 💡 Best Practices & Pro Tips

- 📦 **Bulk Extraction via Category URLs**: For massive catalog sweeps, pass high-level category URLs (e.g. `/fr/disque-de-frein...`) in `startUrls`. The Actor will automatically paginate through the full category hierarchy.
- 🎯 **Language Alignment**: Match your search terms to the target market language (`filtre à huile` for France, `filtro de aceite` for Spain, `filtro de óleo` for Portugal).
- ⚡ **Optimizing Runtime & Cost**: Keep `includeDetails: false` unless you specifically need secondary photo galleries or extended JSON-LD descriptions. The primary listing cards already deliver complete pricing, references, availability, and technical specs.
- 📆 **Automated Trend Tracking**: Schedule weekly runs to capture fluctuating manufacturer discounts across major component lines ahead of peak seasonal driving periods.

***

### ❓ Frequently Asked Questions (FAQ)

**Does this Actor require an Oscaro user account or login?**
No. The scraper gathers data exclusively from public storefront catalog and search pages without requiring user accounts or saved sessions.

**How does deep pagination function on Oscaro?**
Oscaro catalogs paginate via standard query parameter structures (`?page=2`, `?page=3`). The Actor automatically handles continuous scrolling to hydrate lazy-loaded DOM elements on each page, then advances through sequential pages until `maxResults` is reached or the catalog is exhausted.

**How are residential proxies managed?**
The Actor automatically provisions Apify Residential Proxies geolocated to the specific storefront selected (France, Spain, or Portugal). This ensures localized pricing and eliminates regional geo-blocking.

**Can I search directly by OE or manufacturer reference?**
Yes. You can supply exact aftermarket part numbers (e.g. `BOSCH 0 451 103 314`) or vehicle manufacturer OE codes in the `queries` input list.

**Why are some discount percentages missing?**
Certain manufacturers and aftermarket parts are sold at standard net retail prices without promotional discounts. The Actor returns `null` for `originalPrice` and `discountPercent` when no promotional markdown is active.

**Can I run large catalog sweeps with thousands of products?**
Yes. By providing broad category URLs (e.g. `/fr/plaquettes-de-frein...`) and setting `maxResults: 1000` or higher, the Actor will automatically navigate across pages, waiting for lazy-loaded products to hydrate before moving to the next page.

**What is the difference between manufacturer references and OE numbers?**
A manufacturer reference (OES) is assigned by the component supplier (e.g., Bosch `0 986 424 797`), whereas an original equipment (OE) number is assigned by the vehicle maker (e.g., Volkswagen `1K0 698 151`). Both types can be searched and extracted cleanly.

**Can I schedule automated weekly price checks?**
Yes. You can schedule the Actor using standard cron expressions in the Apify Console. Pair scheduled runs with Apify Webhooks to notify your backend or pricing engine whenever price changes are detected.

**How does the scraper handle Cloudflare or anti-bot verification?**
The Actor runs with Patchright anti-detect browser capabilities and automated session rotation over residential proxies. If a verification challenge or rate limit occurs, the session is refreshed and retried automatically.

**Does this Actor export data in CSV or Excel format?**
Yes. You can export the dataset in JSON, CSV, or Excel (XLSX) directly from the Apify Console or via the Apify Dataset API.

**How quickly does the Actor complete a typical extraction?**
A standard search query producing 50 hydrated product records completes in approximately 30 to 60 seconds. Full category sweeps with hundreds of products paginate continuously with steady data streaming.

***

### 🔗 Recommended Complementary Actors

- [AliExpress Product Scraper](https://apify.com/haketa/aliexpress-product-scraper) — Extract aftermarket electronics, accessories, and tools from global marketplaces.
- [Tokopedia Scraper](https://apify.com/haketa/tokopedia-scraper) — Scrape e-commerce listings, pricing, and seller ratings from Southeast Asia.
- [Tech Stack Detector — Website Tech, Email Provider & Leads](https://apify.com/haketa/tech-stack-detector) — Uncover the software infrastructure and contact signals of e-commerce competitors.
- [RSS Feed Reader — Parse RSS, Atom & Podcast Feeds to JSON](https://apify.com/haketa/rss-feed-reader) — Ingest automotive industry news and blog publications.

***

### 📋 Changelog

#### Version 1.2 (2026-11)

- 🚀 **Unlocked 1,000+ Deep Pagination**: Removed restrictive 5,000 caps; added support for unlimited (`maxResults: 0`) and massive multi-page pagination.
- ⚡ **Optimized Prefill Execution**: Prefill parameters configured for fast 30-to-60 second verification runs.
- 🛠️ **Hardened Dynamic Skeleton Hydration**: Improved continuous scroll logic for lazy-loaded `.productbox` cards, eliminating empty card anomalies.
- 🏷️ **Schema Validation Alignment**: Cleaned dataset schema structure and standardized output metadata templates.

#### Version 1.1

- 🌍 Added cross-market support for Oscaro Spain (`oscaro.es`) and Oscaro Portugal (`oscaro.pt`).
- 📊 Introduced structured technical specifications extraction (`specifications[]`).
- 💶 Added automated calculation of net savings and percentage discounts.

#### Version 1.0

- 📦 Initial release supporting French storefront keyword searches and direct product URL parsing.

# Changelog

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

# 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. Set to 0 for unlimited.

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

Download all scraped Oscaro automotive products

# 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/SJJzmS0REu3MMvSnr/openapi.json
