# Tienda Solar Catalog Scraper (`rastriq/tienda-solar-catalog-scraper`) Actor

Scrape the full tienda-solar.es catalog (solar panels, inverters, batteries, kits) in 6 languages with per-market prices. Filter by category and brand. Clean JSON-LD, no proxy.

- **URL**: https://apify.com/rastriq/tienda-solar-catalog-scraper.md
- **Developed by:** [Rastriq — Structured data from the world](https://apify.com/rastriq) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

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

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

## Tienda Solar Catalog Scraper

Extract the **complete product catalog of [tienda-solar.es](https://tienda-solar.es)** — Spain's
specialist solar-energy store — as clean, structured data. Get solar panels, inverters, batteries,
charge controllers, EV chargers, mounting structures and full kits, with **per-market prices** across
the store's **6 language storefronts** (Spanish, English, French, German, Italian, Portuguese).

Around **1,060 products per language (~6,360 records for the full run)**, scraped in a few minutes,
with no browser and no proxy required.

> Ideal for **price monitoring, competitive intelligence, market research, catalog/PIM sync,
> reselling, and lead generation** in the photovoltaic sector.

---

### ✨ Features

- **Whole catalog or filtered** — scrape everything, or only the categories and brands you care about.
- **6 languages with real per-market pricing** — the same product can cost €934.96 on the German
  storefront and €1,150 on the Portuguese one. Capture each market separately.
- **35 product categories** and **71 brands** selectable from dropdowns (see lists below).
- **Structured, normalized output** — 22 fields per product, parsed from the site's `schema.org`
  JSON-LD, including SKU, MPN, GTIN, brand, price, currency, stock status and images.
- **Fast & cheap** — pure HTTP with TLS impersonation, ~0.04 s per product page, 512 MB,
  no residential proxies, no CAPTCHA services.
- **Stable across languages** — categories resolved via the product's internal id, so a category
  filter returns the matching products in every selected language.
- **Export anywhere** — JSON, CSV, Excel, or via the Apify API and integrations.

---

### 📦 What you get — output fields

| Field | Type | Description |
|-------|------|-------------|
| `url` | string | Product page URL |
| `language` | string | Storefront language (`es`, `en`, `fr`, `de`, `it`, `pt`) |
| `id_product` | integer | Internal product id (stable across all languages) |
| `name` | string | Product name |
| `sku` | string | Stock keeping unit / reference |
| `mpn` | string | Manufacturer part number |
| `gtin` | string | GTIN/EAN barcode (when published) |
| `brand` | string | Manufacturer / brand |
| `price` | number | Price as published in JSON-LD |
| `currency` | string | ISO currency code (EUR) |
| `availability` | string | Normalized stock: `in_stock`, `preorder`, `out_of_stock`, … |
| `availability_raw` | string | Raw schema.org availability URL |
| `price_valid_until` | string | Price validity date |
| `condition` | string | Item condition when published |
| `category` | string | Localized breadcrumb path (product excluded) |
| `category_full` | string | Full localized breadcrumb (product included) |
| `category_slug` | string | Canonical Spanish category slug — matches the category filter |
| `description` | string | Product description text |
| `image_main` | string | Main image URL |
| `images` | array | All image URLs |
| `image_count` | integer | Number of images |
| `scraped_at` | string | UTC extraction timestamp |

#### Example output (one record)

```json
{
  "url": "https://tienda-solar.es/microinversores/1394-microinversor-enphase-iq7plus",
  "language": "es",
  "id_product": 1394,
  "name": "Microinversor ENPHASE IQ7PLUS",
  "sku": "IQ7PLUS",
  "mpn": "IQ7PLUS",
  "gtin": "1514051410125",
  "brand": "ENPHASE",
  "price": 82.28,
  "currency": "EUR",
  "availability": "preorder",
  "price_valid_until": "2026-06-18",
  "category": "Inversores Solares > Microinversores",
  "category_slug": "microinversores",
  "image_main": "https://cdn.tienda-solar.es/6755-home_default/microinversor-enphase-iq7plus.jpg",
  "image_count": 1,
  "scraped_at": "2026-06-03T20:41:32Z"
}
````

***

### 🚀 Quick start

1. Leave **Languages** on *Spanish* and set **Max products** to `10`.
2. Click **Start**.
3. Open the **Output** tab and export as CSV / Excel / JSON.

To scrape the whole catalog, clear **Max products** and select the languages you need.

***

### ⚙️ Input

| Field | Description | Default |
|-------|-------------|---------|
| **Languages** | Which storefronts to scrape (`es` / `en` / `fr` / `de` / `it` / `pt`). | `["es"]` |
| **Max products** | Cap across all selected languages and filters. Empty = everything. | prefill `10` |
| **Categories** | One or more of 35 categories (labels are *English / Español* + product count). Empty = all. | `[]` |
| **Brands** | One or more brands (select or type; case-insensitive). Empty = all. | `[]` |
| **Max concurrency** | Parallel page fetches. 8 is safe and fast. | `8` |
| **Proxy configuration** | Optional. Not required — enable only for very large jobs. | off |

**Filters are language-independent and combine with AND.** Selecting *Microinverters* + *ENPHASE*
with languages `es, de` returns ENPHASE microinverters on both the Spanish and German storefronts.

#### Example input

```json
{
  "languages": ["es", "de"],
  "categories": ["microinversores", "inversores-hibridos"],
  "brands": ["ENPHASE", "Victron"],
  "maxProducts": 200
}
```

***

### 🗂️ Categories (35)

Solar Inverters, Hybrid Inverters, Grid-Connected Inverters, Off-Grid Inverters, Microinverters,
Inverter Chargers; Lithium / AGM / Gel / EFB / Lead-Carbon / Stationary batteries and Batteries
(general); Solar Panels, Photovoltaic Panels; Charge Controllers & Solar Charge Controllers,
Optimisers; Solar Kits, Balcony Kits, Mounting Structures; EV Chargers, Electrical Equipment,
DC/DC Converters, UPS/SAI, Air Conditioning, Solar Water Heating, Solar Pumping, LED Lighting,
Energy Efficiency, Accessories, and more. Each option in the dropdown shows the live product count.

### 🏷️ Brands (71)

Victron, Fronius, SolarEdge, SMA, GoodWe, Huawei, SolaXPower, Deye, Studer, Pylontech, BYD, ENPHASE,
SUNGROW, Trina Solar, LONGi Solar, JA Solar, Jinko, Kostal, Growatt, Solis, FoxESS, APSystems, SAJ,
Voltronic Power, Enersys, Trojan, Dyness, Tesla, LG, Canadian Solar, Wallbox, Ingeteam, Salicru,
Morningstar, Victron, and many more — or type any brand name.

***

### 🔍 How it works

tienda-solar.es is a **PrestaShop** store protected by **Cloudflare's managed challenge**. That
challenge is TLS-fingerprint based and is satisfied by **TLS impersonation alone** (a Chrome
fingerprint via `curl_cffi`) — so this Actor needs **no headless browser, no residential proxies and
no CAPTCHA solver**. Every product page ships clean `schema.org/Product` + `BreadcrumbList` JSON-LD,
so the Actor:

1. Reads each language sitemap (`/1_<lang>_0_sitemap.xml`).
2. Keeps real product URLs (`/<category>/<id>-<slug>`), excluding manufacturer/CMS pages.
3. Fetches each page with Chrome TLS impersonation (8 in parallel).
4. Parses the JSON-LD into a normalized record, taking `id_product` from the URL (the page HTML also
   lists cross-sell product ids, which are not the product itself).

***

### 📊 Performance & cost

| Metric | Value |
|--------|-------|
| Speed | ~0.04 s per product page (8 concurrent) |
| Full Spanish catalog (~1,060) | ~1 minute |
| All 6 languages (~6,360) | a few minutes |
| Memory | 512 MB |
| Proxy | none required |

A 10-product test run uses well under 0.01 compute units.

***

### 🔄 Integrations & scheduling

- **Schedule** daily/weekly runs from the Apify Console for automated price monitoring.
- Push results to **Google Sheets, Supabase, a database, or a webhook** via Apify integrations.
- Call the Actor and read the dataset through the **Apify API** from any stack.

Result views included: **Overview**, **Pricing & stock**, **Media**, and **By category & brand**.

***

### ⚠️ Limitations & notes

- Prices and availability reflect what the storefront publishes in JSON-LD and may differ from the
  final checkout price (taxes/shipping/login-based pricing are not computed).
- `gtin` is only present when the store publishes it (not all products).
- A few categories are generic buckets ("Misc Products", "Featured Products") where the store files
  products without a specific subcategory.
- Product counts shift as the store adds or removes items.

### 📜 Legal & responsible use

This Actor collects only **publicly available** catalog pages via the store's own sitemap and the
structured data the store publishes for search engines; it does not log in, place orders, or access
private data. You are responsible for using the data in compliance with the site's Terms of Service
and applicable laws (including GDPR where relevant). Use reasonable rates and do not overload the
source site.

### ❓ FAQ

**Do I need a proxy?** No. The site is reached with TLS impersonation from a single IP. Proxy is an
optional advanced setting for very large jobs.

**Why scrape multiple languages?** Prices and product names are localized per market — multi-language
runs capture true per-country pricing.

**Can I get just one category or brand?** Yes — use the Categories and Brands filters. They work
together and across all selected languages.

**What export formats are supported?** JSON, CSV, Excel, JSONL, plus the Apify API and integrations.

### 🗒️ Changelog

- **0.2** — Category and brand filters (language-independent), bilingual category labels with counts,
  `category_slug` field, fixed `id_product` (now taken from the URL), excluded non-product pages.
- **0.1** — Initial release: full 6-language catalog via sitemap + JSON-LD.

# Actor input Schema

## `languages` (type: `array`):

Which language storefronts to scrape. Prices and product names differ per market. Each language holds ~1,060 products.

## `maxProducts` (type: `integer`):

Maximum number of products to extract across all selected languages and filters. Use a low value (5-10) for your first test run. Leave empty to scrape everything.

## `categories` (type: `array`):

Select one or more product categories to scrape. Labels show <b>English / Español</b> and the product count. Leave empty for all categories. Category is resolved from the Spanish storefront so it applies to every selected language.

## `brands` (type: `array`):

Select or type one or more manufacturer brands to keep. Leave empty for all brands. Matching is case-insensitive. You can type a brand that is not in the list.

## `maxConcurrency` (type: `integer`):

Number of product pages fetched in parallel. 8 is safe and fast.

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

Optional. The site does not require a proxy; enable only for very large jobs to spread requests across IPs.

## Actor input object example

```json
{
  "languages": [
    "es"
  ],
  "maxProducts": 10,
  "categories": [],
  "brands": [],
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

All scraped products in the run's default dataset

# 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 = {
    "languages": [
        "es"
    ],
    "maxProducts": 10,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rastriq/tienda-solar-catalog-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 = {
    "languages": ["es"],
    "maxProducts": 10,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("rastriq/tienda-solar-catalog-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 '{
  "languages": [
    "es"
  ],
  "maxProducts": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call rastriq/tienda-solar-catalog-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=rastriq/tienda-solar-catalog-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tienda Solar Catalog Scraper",
        "description": "Scrape the full tienda-solar.es catalog (solar panels, inverters, batteries, kits) in 6 languages with per-market prices. Filter by category and brand. Clean JSON-LD, no proxy.",
        "version": "0.2",
        "x-build-id": "R9eavxMhGfXILpnAx"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/rastriq~tienda-solar-catalog-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-rastriq-tienda-solar-catalog-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/rastriq~tienda-solar-catalog-scraper/runs": {
            "post": {
                "operationId": "runs-sync-rastriq-tienda-solar-catalog-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/rastriq~tienda-solar-catalog-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-rastriq-tienda-solar-catalog-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": {
                    "languages": {
                        "title": "Languages",
                        "type": "array",
                        "description": "Which language storefronts to scrape. Prices and product names differ per market. Each language holds ~1,060 products.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "es",
                                "en",
                                "fr",
                                "de",
                                "it",
                                "pt"
                            ],
                            "enumTitles": [
                                "Spanish",
                                "English",
                                "French",
                                "German",
                                "Italian",
                                "Portuguese"
                            ]
                        },
                        "default": [
                            "es"
                        ]
                    },
                    "maxProducts": {
                        "title": "Max products",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of products to extract across all selected languages and filters. Use a low value (5-10) for your first test run. Leave empty to scrape everything."
                    },
                    "categories": {
                        "title": "Categories",
                        "type": "array",
                        "description": "Select one or more product categories to scrape. Labels show <b>English / Español</b> and the product count. Leave empty for all categories. Category is resolved from the Spanish storefront so it applies to every selected language.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "inversores-solares",
                                "baterias-de-litio",
                                "accesorios",
                                "inversores-hibridos",
                                "baterias",
                                "instalacion-fotovoltaica-aislada",
                                "paneles-solares",
                                "regulador-solar",
                                "placas-fotovoltaicas",
                                "baterias-agm",
                                "inversores-conexion-a-red",
                                "microinversores",
                                "reguladores-de-carga-solar",
                                "productos",
                                "kit-solar",
                                "estructura-paneles-solares",
                                "material-electrico",
                                "cargadores-electricos",
                                "acumuladores-estacionarios",
                                "baterias-de-gel",
                                "sai-ups",
                                "optimizadores",
                                "aire-acondicionado",
                                "kits-para-balcon",
                                "calentadores-de-agua-solar",
                                "baterias-efb",
                                "eficiencia-energetica",
                                "iluminacion-led",
                                "bombeo-solar",
                                "baterias-de-plomo-carbono",
                                "convertidores-dc-dc",
                                "accesorios-controladores",
                                "cargadores-baterias",
                                "inversores-cargadores-48v-230v",
                                "productos-destacados"
                            ],
                            "enumTitles": [
                                "Solar Inverters / Inversores Solares (292)",
                                "Lithium Batteries / Baterías de Litio (89)",
                                "Accessories / Accesorios (84)",
                                "Hybrid Inverters / Inversores Híbridos (81)",
                                "Batteries / Baterías (58)",
                                "Off-Grid Inverters / Instalación Aislada (45)",
                                "Solar Panels / Paneles Solares (44)",
                                "Charge Controllers / Reguladores (43)",
                                "Photovoltaic Panels / Placas Fotovoltaicas (40)",
                                "AGM Batteries / Baterías AGM (39)",
                                "Grid-Connected Inverters / Inversores Conexión a Red (38)",
                                "Microinverters / Microinversores (20)",
                                "Solar Charge Controllers / Reguladores de Carga Solar (19)",
                                "Misc Products / Productos varios (18)",
                                "Solar Kits / Kit Solar (18)",
                                "Mounting Structures / Estructuras para Paneles (18)",
                                "Electrical Equipment / Material Eléctrico (17)",
                                "EV Chargers / Cargadores Eléctricos (16)",
                                "Stationary Batteries / Acumuladores Estacionarios (15)",
                                "Gel Batteries / Baterías de GEL (15)",
                                "UPS / SAI (10)",
                                "Optimisers / Optimizadores (9)",
                                "Air Conditioning / Aire Acondicionado (6)",
                                "Balcony Kits / Kits para Balcón (6)",
                                "Solar Water Heating / Calentadores de Agua Solar (4)",
                                "EFB Batteries / Baterías EFB (3)",
                                "Energy Efficiency / Eficiencia Energética (2)",
                                "LED Lighting / Iluminación LED (2)",
                                "Solar Pumping / Bombeo Solar (2)",
                                "Lead-Carbon Batteries / Baterías de Plomo-Carbono (2)",
                                "DC/DC Converters / Convertidores DC/DC (1)",
                                "Controller Accessories / Accesorios de Controladores (1)",
                                "Battery Chargers / Cargadores de Baterías (1)",
                                "Inverter Chargers 48V-230V / Inversores Cargadores 48V-230V (1)",
                                "Featured Products / Productos Destacados (1)"
                            ]
                        },
                        "default": []
                    },
                    "brands": {
                        "title": "Brands",
                        "type": "array",
                        "description": "Select or type one or more manufacturer brands to keep. Leave empty for all brands. Matching is case-insensitive. You can type a brand that is not in the list.",
                        "items": {
                            "type": "string",
                            "enumSuggestedValues": [
                                "Victron",
                                "TIENDA SOLAR",
                                "SolaXPower",
                                "Fronius",
                                "Kaise",
                                "SolarEdge",
                                "SMA",
                                "GoodWe",
                                "Huawei",
                                "Studer",
                                "Deye",
                                "PVSTAR",
                                "SAJ",
                                "Pylontech",
                                "Voltronic Power",
                                "V TAC",
                                "Weidmüller",
                                "LONGi Solar",
                                "BYD",
                                "ENPHASE",
                                "Trina Solar",
                                "Enersys",
                                "SUNGROW",
                                "JA Solar",
                                "Jinko",
                                "Salicru",
                                "Steca",
                                "Kostal",
                                "Fischer",
                                "TBS",
                                "Dyness",
                                "Solis",
                                "Growatt",
                                "APSystems",
                                "FQS Battery",
                                "FoxESS",
                                "Trojan",
                                "Mitsubishi",
                                "SunEnergy XT",
                                "Tongwei Solar",
                                "POWER",
                                "Sunwoda",
                                "AIKO",
                                "Morningstar",
                                "Ingeteam",
                                "LG",
                                "Hyundai Energy Solutions",
                                "TESLA",
                                "SolarSpace",
                                "Outback",
                                "Solahart",
                                "EFERGY",
                                "Simon",
                                "Wallbox",
                                "Azzurro ZCS",
                                "FuturaSun",
                                "EPSolar",
                                "TS",
                                "Danfoss",
                                "Canadian solar",
                                "Risen Energy",
                                "LEAPTON",
                                "BMZ",
                                "Tigo Energy",
                                "Jinergy",
                                "Halo",
                                "Shurflo",
                                "Cegasa",
                                "BSLBatt",
                                "TBB Power",
                                "HANERSUN"
                            ]
                        },
                        "default": []
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Number of product pages fetched in parallel. 8 is safe and fast.",
                        "default": 8
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional. The site does not require a proxy; enable only for very large jobs to spread requests across IPs."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
