# Oscaro Product Scraper (`sian.agency/oscaro-product-scraper`) Actor

Scrape Oscaro car parts — prices (EUR), brands, references, EAN, TecDoc specs, cross-references & images. Search by part name or OE reference, no vehicle selection. Clean JSON/CSV, no code.

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

## Pricing

from $5.70 / 1,000 overview 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Oscaro Product Scraper — Prices (EUR), References & Specs 🔧

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![AutoZone Product Scraper](https://img.shields.io/badge/Store-AutoZone%20Scraper-E60000)](https://apify.com/sian.agency/autozone-product-scraper?fpr=sian) [![Advance Auto Parts Scraper](https://img.shields.io/badge/Store-Advance%20Auto%20Parts-F47B20)](https://apify.com/sian.agency/advance-auto-parts-product-scraper?fpr=sian) [![Google Shopping Price Tracker](https://img.shields.io/badge/Store-Google%20Shopping-4285F4)](https://apify.com/sian.agency/google-shopping-price-scraper?fpr=sian)

#### 🎉 Pull Oscaro car-parts prices, references, specs & cross-references — by part name or OE reference, no code
##### Built for parts resellers, garages, price analysts, and data teams who need fresh Oscaro product data on demand

---

### 📋 Overview

**Track every car-parts price, promotion, and specification on Oscaro — without writing a single line of code, and without selecting a vehicle.** This scraper turns any Oscaro search — a part name *or* an OE/manufacturer reference — into a clean, structured spreadsheet of products complete with prices in EUR, brands, EAN barcodes, full TecDoc specifications, and equivalent (cross-reference) parts.

**Why professionals choose us:**
- ✅ **Complete parts data**: 30+ fields per product — price (EUR), public price, promotions, brand, reference, EAN, category, images, availability and more
- 🔎 **Search without a vehicle**: type a part name (`plaquette de frein`) or a reference (`GDB1330`) — no make/model/year selection needed
- ⚡ **Fast search-first mode**: pull 100 products per page in seconds; scale to thousands across multiple searches
- 🔁 **Cross-references built in**: every product lists its equivalent (OE/aftermarket) references for matching across catalogs
- 💎 **Detail enrichment**: switch on the full TecDoc specifications table and the complete cross-reference list
- 💰 **Pay only for results**: charged per product you actually receive — free tier to test

---

### ✨ Features

- 🔎 **Part-name & Reference Search**: search by a French part name or by any OE/manufacturer reference
- 🏷️ **Full Pricing (EUR)**: current price, pre-promo price, manufacturer public price (RRP), core deposit, VAT rate, promotion flag and percentage
- ™️ **Brand & Identifiers**: manufacturer, reference, normalized reference, EAN/barcode and brand logo
- 📋 **TecDoc Specifications**: full structured spec table (Detail mode) — dimensions, material, technical attributes and more
- 🔁 **Cross-references**: equivalent OE/aftermarket references grouped by manufacturer
- 🗂️ **Categories**: top-level category and sub-category for clean classification
- 🚗 **Fitment Insight**: a count of how many vehicle types each part fits, plus a universal-fit flag
- 🖼️ **Product Images**: product image URLs, ready for catalogs or feeds
- 🧰 **Native Filters**: filter by brand, part type, in-stock, on-promotion or universal-fit
- 📦 **Clean Export**: results delivered as structured JSON or CSV, ready for Excel or your database
- 🚀 **No-Code Setup**: configure searches in a simple form — no scripts, no maintenance

---

### 🎬 Quick Start

Enter one or more search terms, pick a mode, and run. In under a minute you'll have a structured dataset of Oscaro products you can download as JSON or CSV. No setup, no code.

```bash
curl -X POST https://api.apify.com/v2/acts/sian.agency~oscaro-product-scraper/runs?token=YOUR_TOKEN \
-H 'Content-Type: application/json' \
-d '{"queries": ["plaquette de frein"], "scrapeMode": "overview"}'
````

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Add Your Searches

Type one or more search terms — a part name (`disque de frein`, `filtre à huile`, `amortisseur`) or an OE/manufacturer reference (`GDB1330`, `0986494027`) — one per line.

#### Step 2: Choose Your Mode

Pick **Overview** for fast search results, or **Detail** to also pull the full TecDoc specifications table and every cross-reference.

#### Step 3: Run & Download

Click **Start**, then export your results as JSON, CSV, or Excel from the Apify dataset.

***

### 📥 Input Configuration

| Field | Type | Description |
|---|---|---|
| `queries` | array | Part names or OE/manufacturer references. One per line. e.g. `plaquette de frein`, `GDB1330` |
| `scrapeMode` | enum | `overview` (fast) or `detail` (full specs + all cross-references) |
| `brand` | string | Optional — restrict to one manufacturer (e.g. `BOSCH`, `VALEO`, `BREMBO`) |
| `genartId` | string | Optional (advanced) — restrict to one TecDoc part-type id |
| `available` | boolean | Optional — only in-stock products |
| `promo` | boolean | Optional — only products on promotion |
| `universal` | boolean | Optional — only universal-fit parts |
| `maxResults` | integer | Maximum products across all searches (FREE: 25 · PAID: unlimited) |

Example input:

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

***

### 📤 Output

Each product is one clean record. Example (overview):

```json
{
  "item_id": "1780903",
  "productTitle": "Jeu de 4 plaquettes de frein",
  "brand": "BOSCH",
  "reference": "0 986 494 027",
  "ean": "4047024044036",
  "price": 22.9,
  "public_price": 74.89,
  "currency": "EUR",
  "available": true,
  "category": "Freinage",
  "sub_category": "Plaquettes de frein",
  "url": "https://www.oscaro.com/jeu-de-4-plaquettes-de-frein-bosch-0-986-494-027-1780903-402-p",
  "images": ["https://oscaro.media/oscjpg/normal/30/0986494027_1.jpg"],
  "equivalent_references": [{ "manufacturer": "TRUSTING", "references": ["3360"] }]
}
```

In **Detail** mode each record additionally carries the full TecDoc `specs` table, every `equivalent_references` entry, and `vehicle_type_count`.

***

### 💼 Use Cases & Examples

#### 1. Price Monitoring

Track Oscaro prices, public prices and promotions across the parts you sell — in EUR, with VAT rate.

#### 2. Cross-reference (OE) Lookup

Resolve an OE or manufacturer reference to every equivalent aftermarket part and its price.

#### 3. Catalog Building

Build a clean parts catalog with brand, reference, EAN, category and images — ready for a feed.

#### 4. Competitive Analysis

Compare Oscaro pricing and assortment by brand or part type against your own catalog.

#### 5. Availability Research

Filter to in-stock parts and monitor what is available across a category.

#### 6. Market Research

Survey which brands and part types dominate a category, and at what price points.

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
const res = await fetch('https://api.apify.com/v2/acts/sian.agency~oscaro-product-scraper/runs?token=YOUR_TOKEN', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ queries: ['plaquette de frein'], scrapeMode: 'overview' }),
});
```

#### Python

```python
import requests
requests.post(
    'https://api.apify.com/v2/acts/sian.agency~oscaro-product-scraper/runs?token=YOUR_TOKEN',
    json={'queries': ['GDB1330'], 'scrapeMode': 'detail'},
)
```

#### Automation Workflows (n8n / Zapier / Make)

Trigger the actor on a schedule and pipe the dataset into Sheets, Airtable, or your database.

***

### 📊 Performance & Pricing

This actor uses **pay-per-event** pricing — you pay for the products you receive, plus a small per-run base fee.

#### FREE Tier (Try It Now)

- Up to **25 products** per run
- Both Overview and Detail modes
- Full output fields

#### PAID Tier (Production Ready)

- **Unlimited** products per run
- Sweep whole categories in a single run
- Volume discounts at higher plan tiers

The primary **Overview** event is the cheap, high-volume row; **Detail** is the premium row that adds the full specification table and every cross-reference.

***

### ❓ Frequently Asked Questions

**Do I have to select a vehicle?**
No. Search works directly by part name or reference — no make/model/year is required.

**Can I search by an OE or manufacturer reference?**
Yes — paste the reference (e.g. `GDB1330` or `0986494027`) as a query and you'll get the matching parts plus their cross-references.

**What currency are prices in?**
Euros (EUR), as shown on Oscaro's French store.

**What's the difference between Overview and Detail?**
Overview returns price, brand, reference, EAN, category, images, availability and the top cross-references. Detail adds the complete TecDoc specification table and every equivalent reference.

**Which export formats are supported?**
JSON, CSV, and Excel from the Apify dataset.

***

### 🐞 Troubleshooting

- **No results for a term** — try the French part name (e.g. `plaquette de frein` rather than `brake pads`) or a precise reference.
- **Too many results** — add a `brand` or `genartId` filter, or lower `maxResults`.
- **Want specs** — switch `scrapeMode` to `detail`.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what is publicly shared. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### ⚖️ Trademark Disclaimer

Oscaro® is a trademark of Oscaro.com. This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Oscaro.com. Brand names (e.g. BOSCH, VALEO, BREMBO) are trademarks of their respective owners and are used only to identify the parts they manufacture.

***

### ⭐ Love This Tool?

If this actor saves you time, please [leave us a 5-star review](https://apify.com/sian.agency/oscaro-product-scraper/reviews) — it helps other professionals discover it and helps us keep improving.

***

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check the [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

#### More from SIÁN Agency

- 🚗 [AutoZone Product Scraper](https://apify.com/sian.agency/autozone-product-scraper?fpr=sian) — US auto-parts prices, specs & fitment
- 🔧 [Advance Auto Parts Product Scraper](https://apify.com/sian.agency/advance-auto-parts-product-scraper?fpr=sian) — US auto-parts catalog & pricing
- 🛍️ [Google Shopping Price Tracker](https://apify.com/sian.agency/google-shopping-price-scraper?fpr=sian) — track offers and price history across the web

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

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

🔍 **SEARCH:** Free-text Oscaro searches — a part name OR an OE/manufacturer reference, exactly what you'd type into the site's search bar.

📝 **EXAMPLES:** `plaquette de frein` (brake pads) · `disque de frein` (brake disc) · `filtre à huile` (oil filter) · `amortisseur` (shock absorber) · `GDB1330` (a manufacturer reference) · `0986494027` (an OE reference)

🚗 **NO VEHICLE NEEDED:** Search returns parts directly — you don't have to select a make/model first.

💡 **TIP:** Add one term per line — each runs as its own search and all results land in the same dataset.

🖊️ **BULK EDIT:** Click "Bulk edit" to paste many terms at once (one per line).

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

⚙️ **SCRAPE DEPTH:** Choose how much data to pull per product.

⚡ **Overview (fast):** Search results only — price (EUR), brand, reference, EAN, category, images, availability and the top cross-references. Fastest and cheapest path.

🔬 **Detail (full specs):** Everything in Overview PLUS the complete TecDoc specifications table, every cross-reference (equivalent) brand and the vehicle-fitment count.

💡 **TIP:** Start with Overview to scope a category, then switch to Detail when you need the complete spec sheet for feeds or comparisons.

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

™️ **BRAND FILTER (optional):** Restrict results to a single manufacturer.

📝 **EXAMPLES:** `BOSCH` · `VALEO` · `BREMBO` · `DELPHI` · `FERODO` · `TRW`

💡 **TIP:** Use the exact brand label as shown on Oscaro (UPPERCASE). Leave empty for all brands.

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

🧩 **PART-TYPE FILTER (Advanced):** Restrict results to a single TecDoc generic-article id (a precise part type, e.g. `402` = brake-pad set).

🔧 **HOW TO GET IT:** Run an Overview search first — the `genart_id` field on each result is the value to paste here.

💡 **TIP:** Leave empty unless you need to pin results to one exact part type.

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

✅ **AVAILABILITY FILTER (optional):** When enabled, returns only products currently in stock on Oscaro.

💡 **TIP:** Leave off to include out-of-stock items in the results.

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

🔥 **PROMOTION FILTER (optional):** When enabled, returns only products currently on promotion (discounted).

💡 **TIP:** Leave off to include full-price items.

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

🌐 **FITMENT FILTER (optional):** When enabled, returns only universal parts (fit any vehicle).

💡 **TIP:** Leave off to include vehicle-specific parts (the vast majority).

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

🔢 **RESULT CAP:** Maximum number of products to return across all search terms combined.

🎁 **TIER-BASED LIMITS:**

- **FREE users:** Up to 25 products per run
- **PAID users:** Unlimited — scrape entire categories in a single run

💡 **TIP:** Keep this low while you dial in your search terms, then raise it once the output looks right.

## Actor input object example

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

# Actor output Schema

## `oscaroProducts` (type: `string`):

Scraped Oscaro car parts with prices, promotions, references, specs, cross-references and images.

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/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": ["plaquette de frein"] }

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/oscaro-product-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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"
  ]
}' |
apify call sian.agency/oscaro-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=sian.agency/oscaro-product-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Oscaro Product Scraper",
        "description": "Scrape Oscaro car parts — prices (EUR), brands, references, EAN, TecDoc specs, cross-references & images. Search by part name or OE reference, no vehicle selection. Clean JSON/CSV, no code.",
        "version": "1.0",
        "x-build-id": "Twjjqz3u0u5q46eJZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~oscaro-product-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-oscaro-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/sian.agency~oscaro-product-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-oscaro-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/sian.agency~oscaro-product-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-oscaro-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "queries": {
                        "title": "🔍 Search Terms / References",
                        "type": "array",
                        "description": "🔍 **SEARCH:** Free-text Oscaro searches — a part name OR an OE/manufacturer reference, exactly what you'd type into the site's search bar.\n\n📝 **EXAMPLES:** `plaquette de frein` (brake pads) · `disque de frein` (brake disc) · `filtre à huile` (oil filter) · `amortisseur` (shock absorber) · `GDB1330` (a manufacturer reference) · `0986494027` (an OE reference)\n\n🚗 **NO VEHICLE NEEDED:** Search returns parts directly — you don't have to select a make/model first.\n\n💡 **TIP:** Add one term per line — each runs as its own search and all results land in the same dataset.\n\n🖊️ **BULK EDIT:** Click \"Bulk edit\" to paste many terms at once (one per line).",
                        "default": [
                            "plaquette de frein"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "scrapeMode": {
                        "title": "⚙️ Scrape Mode",
                        "enum": [
                            "overview",
                            "detail"
                        ],
                        "type": "string",
                        "description": "⚙️ **SCRAPE DEPTH:** Choose how much data to pull per product.\n\n⚡ **Overview (fast):** Search results only — price (EUR), brand, reference, EAN, category, images, availability and the top cross-references. Fastest and cheapest path.\n\n🔬 **Detail (full specs):** Everything in Overview PLUS the complete TecDoc specifications table, every cross-reference (equivalent) brand and the vehicle-fitment count.\n\n💡 **TIP:** Start with Overview to scope a category, then switch to Detail when you need the complete spec sheet for feeds or comparisons.",
                        "default": "overview"
                    },
                    "brand": {
                        "title": "™️ Brand Filter",
                        "type": "string",
                        "description": "™️ **BRAND FILTER (optional):** Restrict results to a single manufacturer.\n\n📝 **EXAMPLES:** `BOSCH` · `VALEO` · `BREMBO` · `DELPHI` · `FERODO` · `TRW`\n\n💡 **TIP:** Use the exact brand label as shown on Oscaro (UPPERCASE). Leave empty for all brands."
                    },
                    "genartId": {
                        "title": "🧩 Part-Type ID (Advanced)",
                        "type": "string",
                        "description": "🧩 **PART-TYPE FILTER (Advanced):** Restrict results to a single TecDoc generic-article id (a precise part type, e.g. `402` = brake-pad set).\n\n🔧 **HOW TO GET IT:** Run an Overview search first — the `genart_id` field on each result is the value to paste here.\n\n💡 **TIP:** Leave empty unless you need to pin results to one exact part type."
                    },
                    "available": {
                        "title": "✅ In Stock Only",
                        "type": "boolean",
                        "description": "✅ **AVAILABILITY FILTER (optional):** When enabled, returns only products currently in stock on Oscaro.\n\n💡 **TIP:** Leave off to include out-of-stock items in the results.",
                        "default": false
                    },
                    "promo": {
                        "title": "🔥 On Promotion Only",
                        "type": "boolean",
                        "description": "🔥 **PROMOTION FILTER (optional):** When enabled, returns only products currently on promotion (discounted).\n\n💡 **TIP:** Leave off to include full-price items.",
                        "default": false
                    },
                    "universal": {
                        "title": "🌐 Universal-Fit Only",
                        "type": "boolean",
                        "description": "🌐 **FITMENT FILTER (optional):** When enabled, returns only universal parts (fit any vehicle).\n\n💡 **TIP:** Leave off to include vehicle-specific parts (the vast majority).",
                        "default": false
                    },
                    "maxResults": {
                        "title": "🔢 Max Results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "🔢 **RESULT CAP:** Maximum number of products to return across all search terms combined.\n\n🎁 **TIER-BASED LIMITS:**\n- **FREE users:** Up to 25 products per run\n- **PAID users:** Unlimited — scrape entire categories in a single run\n\n💡 **TIP:** Keep this low while you dial in your search terms, then raise it once the output looks right.",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
