{
  "data": {
    "id": "bnIPi7NeXWQiwtRsR",
    "actId": "5o3SucGekbCXdfc83",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-10-21T11:30:22.221Z",
    "finishedAt": "2026-10-21T11:30:33.974Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 11655,
      "runTimeSecs": 11.655,
      "computeUnits": 0.01295,
      "imageSizeBytes": 317913088
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Bol.com Product Search, Price & Stock Extractor Input\",\n  \"description\": \"Search, browse, look up products, or read deals from Bol.com in the Netherlands or Belgium.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to collect from Bol.com.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"productDetails\",\n        \"categoryBrowse\",\n        \"promotions\"\n      ],\n      \"enumTitles\": [\n        \"Search products by keyword\",\n        \"Look up products by URL, EAN, or product ID\",\n        \"Browse a category, brand, series, or deals page\",\n        \"Browse current promotions\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\"\n    },\n    \"searchQueries\": {\n      \"title\": \"Search queries\",\n      \"type\": \"array\",\n      \"description\": \"One or more keywords to search for (mode=search).\",\n      \"editor\": \"stringList\",\n      \"default\": [\n        \"laptop\"\n      ],\n      \"prefill\": [\n        \"laptop\"\n      ]\n    },\n    \"productUrls\": {\n      \"title\": \"Product URLs, EANs, or product IDs\",\n      \"type\": \"array\",\n      \"description\": \"Bol.com product links, EAN-8/EAN-13 barcodes, or numeric product IDs (mode=productDetails).\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"categoryUrls\": {\n      \"title\": \"Category, brand, series, or deals URLs\",\n      \"type\": \"array\",\n      \"description\": \"Bol.com listing links or numeric category IDs (mode=categoryBrowse).\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"marketplace\": {\n      \"title\": \"Marketplace\",\n      \"type\": \"string\",\n      \"description\": \"Which Bol.com shop to use for keyword searches and numeric category IDs.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"nl\",\n        \"be\"\n      ],\n      \"enumTitles\": [\n        \"Netherlands (bol.com/nl)\",\n        \"Belgium (bol.com/be)\"\n      ],\n      \"default\": \"nl\",\n      \"prefill\": \"nl\"\n    },\n    \"language\": {\n      \"title\": \"Language\",\n      \"type\": \"string\",\n      \"description\": \"Shop language for keyword searches and numeric category IDs.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"nl\",\n        \"fr\"\n      ],\n      \"enumTitles\": [\n        \"Dutch\",\n        \"French\"\n      ],\n      \"default\": \"nl\",\n      \"prefill\": \"nl\"\n    },\n    \"sortBy\": {\n      \"title\": \"Sort by\",\n      \"type\": \"string\",\n      \"description\": \"Result ordering for search and browsing. Price sorts use the emitted numeric price; RATING_ASC follows Bol's rating score, not the visible average.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"RELEVANCE\",\n        \"POPULARITY\",\n        \"PRICE_ASC\",\n        \"PRICE_DESC\",\n        \"RATING_ASC\",\n        \"NEW\",\n        \"WISHLIST\"\n      ],\n      \"enumTitles\": [\n        \"Relevance\",\n        \"Popularity\",\n        \"Price: low to high\",\n        \"Price: high to low\",\n        \"Best rated (Bol score)\",\n        \"Newest\",\n        \"Most wanted\"\n      ],\n      \"default\": \"RELEVANCE\",\n      \"prefill\": \"RELEVANCE\"\n    },\n    \"minPrice\": {\n      \"title\": \"Minimum price (EUR)\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep products at or above this price.\",\n      \"minimum\": 0\n    },\n    \"maxPrice\": {\n      \"title\": \"Maximum price (EUR)\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep products at or below this price.\",\n      \"minimum\": 0\n    },\n    \"minRating\": {\n      \"title\": \"Minimum rating\",\n      \"type\": \"number\",\n      \"description\": \"Only keep products rated at or above this value (0-5).\",\n      \"minimum\": 0,\n      \"maximum\": 5\n    },\n    \"condition\": {\n      \"title\": \"Condition\",\n      \"type\": \"string\",\n      \"description\": \"Only keep products with this offer condition.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"new\",\n        \"refurbished\",\n        \"secondhand\"\n      ],\n      \"enumTitles\": [\n        \"Any condition\",\n        \"New\",\n        \"Refurbished\",\n        \"Second-hand\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"inStockOnly\": {\n      \"title\": \"In stock only\",\n      \"type\": \"boolean\",\n      \"description\": \"Only keep products that are currently in stock.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeSponsored\": {\n      \"title\": \"Include sponsored products\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep sponsored (advertised) products in search and browse results.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeDetails\": {\n      \"title\": \"Fetch product details\",\n      \"type\": \"boolean\",\n      \"description\": \"Visit each product page to add EAN, full description, specifications, all images, rating distribution, and recent reviews. Slower, but more complete.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeOffers\": {\n      \"title\": \"Fetch seller offers\",\n      \"type\": \"boolean\",\n      \"description\": \"Add the first page of seller offers (price, shipping, condition, seller rating) for each product. Bol.com paginates offers; only the first page is returned.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxItems\": {\n      \"title\": \"Max products\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of products to return across the whole run.\",\n      \"minimum\": 1,\n      \"maximum\": 10000,\n      \"default\": 20,\n      \"prefill\": 1\n    },\n    \"maxPages\": {\n      \"title\": \"Max pages per source\",\n      \"type\": \"integer\",\n      \"description\": \"Page limit per query or listing. 0 uses the source's own page limit.\",\n      \"minimum\": 0,\n      \"maximum\": 500,\n      \"default\": 0,\n      \"prefill\": 0\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Bol.com Product Search, Price & Stock Extractor\n\nCollect live product data from **Bol.com**, the largest online retailer in the Netherlands and Belgium. Search by keyword, browse a category or brand, open a product by URL, EAN barcode, or product ID, or read the current promotions feed. Every record is real data from the public shop — prices, list prices, stock, sellers, ratings, images, and optional specifications and seller offers. No login, API key, or proxy setup is needed.\n\n## What this actor does\n\n- **Search** one or more keywords with price, rating, condition, stock, and sponsored-product filters.\n- **Browse** category, brand, series, or deals pages, with deep pagination.\n- **Look up products** by direct URL, EAN-8/EAN-13, or Bol.com product ID.\n- **Read promotions** from the deals hub and its category deals pages.\n- **Enrich on demand:** add EAN, full description, specifications, all images, rating distribution, recent reviews, and the first page of seller offers.\n- Supports the **Netherlands and Belgium** marketplaces in **Dutch and French**.\n- Empty fields are omitted from each record rather than written as `null`.\n\n## Output per product\n\n- `productId` — Bol.com product identifier\n- `ean` — EAN/GTIN barcode when the product page publishes one (details mode)\n- `title`, `shortDescription`, `description`\n- `brand`\n- `price`, `currency`\n- `listPrice` — reference price when Bol.com shows one above the current price\n- `discountAmount`, `discountPercent`\n- `rating`, `reviewCount`\n- `ratingDistribution` — star counts when details are fetched\n- `recentReviews` — up to six recent reviews when details are fetched\n- `imageUrl`, `images[]`\n- `productUrl`\n- `seller`, `sellerId`, `sellerRating`, `soldByBol`\n- `inStock`, `availability`, `condition`\n- `delivery`, `deliveryDate`, `isScarce`\n- `isSponsored`, `sponsor`\n- `promotionLabels[]`\n- `categories[]`\n- `specifications` — grouped key/value specifications when details are fetched\n- `offers[]`, `offerCount` — first page of seller offers, and that page's count, when offers are enabled\n- `marketplace`, `language`, `sourceQuery`\n- `scrapedAt` — collection timestamp\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string (select) | `search` | `search`, `productDetails`, `categoryBrowse`, or `promotions`. |\n| `searchQueries` | array | `[\"laptop\"]` | Keywords for `search`. |\n| `productUrls` | array | `[]` | Product URLs, EANs, or product IDs for `productDetails`. |\n| `categoryUrls` | array | `[]` | Category, brand, series, or deals URLs, or category IDs, for `categoryBrowse`. |\n| `marketplace` | string (select) | `nl` | `nl` or `be`. |\n| `language` | string (select) | `nl` | `nl` or `fr`. |\n| `sortBy` | string (select) | `RELEVANCE` | `RELEVANCE`, `POPULARITY`, `PRICE_ASC`, `PRICE_DESC`, `RATING_ASC`, `NEW`, or `WISHLIST`. Price sorts use the emitted numeric price; `RATING_ASC` follows Bol's rating score. |\n| `minPrice` | integer | – | Minimum price in EUR. |\n| `maxPrice` | integer | – | Maximum price in EUR. |\n| `minRating` | number | – | Minimum average rating, 0-5. |\n| `condition` | string (select) | `any` | `any`, `new`, `refurbished`, or `secondhand`. |\n| `inStockOnly` | boolean | `false` | Keep only products currently in stock. |\n| `includeSponsored` | boolean | `true` | Keep sponsored search results. |\n| `includeDetails` | boolean | `false` | Fetch product pages for EAN, description, specifications, images, and reviews. |\n| `includeOffers` | boolean | `false` | Fetch the first page of seller offers for each product. |\n| `maxItems` | integer | `20` | Overall product cap (1-10,000). |\n| `maxPages` | integer | `0` | Page limit per query/listing; `0` uses the source's own limit. |\n\n### Example: search with filters\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQueries\": [\"koptelefoon\", \"laptop\"],\n  \"marketplace\": \"nl\",\n  \"language\": \"nl\",\n  \"minPrice\": 50,\n  \"maxPrice\": 300,\n  \"minRating\": 4,\n  \"condition\": \"new\",\n  \"inStockOnly\": true,\n  \"sortBy\": \"PRICE_ASC\",\n  \"includeDetails\": true,\n  \"maxItems\": 40\n}\n```\n\n### Example: browse a category or brand\n\n```json\n{\n  \"mode\": \"categoryBrowse\",\n  \"categoryUrls\": [\n    \"https://www.bol.com/nl/nl/l/laptops/4770/\",\n    \"https://www.bol.com/be/nl/pb/hp/4997239/\"\n  ],\n  \"marketplace\": \"be\",\n  \"language\": \"nl\",\n  \"sortBy\": \"POPULARITY\",\n  \"maxItems\": 100\n}\n```\n\n### Example: product lookup by EAN or URL\n\n```json\n{\n  \"mode\": \"productDetails\",\n  \"productUrls\": [\"0199251730818\", \"https://www.bol.com/nl/nl/p/hp-omnibook-5-16-ba1751nd-intel-core-i5-i5-1334u-laptop-406-cm-2k-16-gb-lpddr5x-sdram-1-tb-ssd-wi-fi-6-windows-11-home-zilver/9300000230842700/\"],\n  \"includeOffers\": true,\n  \"maxItems\": 10\n}\n```\n\n### Example: current promotions\n\n```json\n{\n  \"mode\": \"promotions\",\n  \"marketplace\": \"nl\",\n  \"language\": \"nl\",\n  \"maxItems\": 30\n}\n```\n\n## Use cases\n\n- **Price monitoring** — track current and reference prices for a product set.\n- **Assortment research** — pull a category, brand, or search niche into a clean dataset.\n- **EAN catalog enrichment** — resolve barcodes to titles, brands, images, and specifications.\n- **Stock and seller tracking** — see availability, delivery promises, and who is selling each item.\n- **Promotion analysis** — collect the current deals feed and its category offers.\n\n## FAQ\n\n### Where does the data come from?\n\nIt is read from Bol.com's publicly accessible product, search, category, and deals pages at run time. The actor is not affiliated with Bol.com.\n\n### Can I use it for both the Netherlands and Belgium?\n\nYes. Set `marketplace` to `nl` or `be`. Both Dutch and French shop languages are supported.\n\n### Why is `ean` missing from my search results?\n\nSearch result cards do not publish barcodes. Enable `includeDetails` to visit each product page, where the EAN is read when Bol.com publishes it.\n\n### How many products can one search return?\n\nBol.com caps a single keyword result list at 10 pages (typically 24-30 products per page, about 250-270 products). For larger runs, the actor automatically splits broad searches into narrower category slices; a category or brand page also goes much deeper.\n\n### Why are some fields absent from a record?\n\nBol.com does not publish every field for every product — for example, marketplace items may have no EAN or specifications, and new products may have no reviews yet. Absent values are omitted instead of written as null.\n\n### How are results sorted?\n\n`RELEVANCE`, `POPULARITY`, `NEW`, and `WISHLIST` follow Bol.com's own ordering. `RATING_ASC` follows Bol.com's rating score, which can differ from the visible average rating. `PRICE_ASC` and `PRICE_DESC` are sorted on the emitted numeric price after duplicate products are removed.\n\n### Are sponsored products included?\n\nYes by default, with `isSponsored` and `sponsor` set. Turn `includeSponsored` off to remove them.\n\n### Are all seller offers returned?\n\nBol.com paginates its offers page. The actor returns the first page of offers for each product (currently up to 10) and `offerCount` is the count on that page, not the total across all pages.\n\n### How current are prices and stock?\n\nEach run reads the live pages, so prices, delivery promises, and availability reflect the moment of collection.\n\n### Do I need a proxy or an account?\n\nNo. The actor connects automatically; you do not configure a proxy, cookie, login, or API key.\n\n### Why is the full review list not included?\n\nBol.com's product pages expose a rating summary and a short sample of recent reviews. The actor returns the rating distribution and up to six recent reviews when details are enabled.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "bol-com-product-search-price-and-stock-extractor",
      "title": "Bol.com Product Search, Price & Stock Extractor",
      "description": "Search Bol.com products in the Netherlands and Belgium by keyword, category, EAN, or URL. Returns prices, list prices, stock, sellers, EANs, ratings, images, specs, and optional offers without login.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Bol.com Product Search, Price & Stock Extractor\n\nCollect live product data from **Bol.com**, the largest online retailer in the Netherlands and Belgium. Search by keyword, browse a category or brand, open a product by URL, EAN barcode, or product ID, or read the current promotions feed. Every record is real data from the public shop — prices, list prices, stock, sellers, ratings, images, and optional specifications and seller offers. No login, API key, or proxy setup is needed.\n\n## What this actor does\n\n- **Search** one or more keywords with price, rating, condition, stock, and sponsored-product filters.\n- **Browse** category, brand, series, or deals pages, with deep pagination.\n- **Look up products** by direct URL, EAN-8/EAN-13, or Bol.com product ID.\n- **Read promotions** from the deals hub and its category deals pages.\n- **Enrich on demand:** add EAN, full description, specifications, all images, rating distribution, recent reviews, and the first page of seller offers.\n- Supports the **Netherlands and Belgium** marketplaces in **Dutch and French**.\n- Empty fields are omitted from each record rather than written as `null`.\n\n## Output per product\n\n- `productId` — Bol.com product identifier\n- `ean` — EAN/GTIN barcode when the product page publishes one (details mode)\n- `title`, `shortDescription`, `description`\n- `brand`\n- `price`, `currency`\n- `listPrice` — reference price when Bol.com shows one above the current price\n- `discountAmount`, `discountPercent`\n- `rating`, `reviewCount`\n- `ratingDistribution` — star counts when details are fetched\n- `recentReviews` — up to six recent reviews when details are fetched\n- `imageUrl`, `images[]`\n- `productUrl`\n- `seller`, `sellerId`, `sellerRating`, `soldByBol`\n- `inStock`, `availability`, `condition`\n- `delivery`, `deliveryDate`, `isScarce`\n- `isSponsored`, `sponsor`\n- `promotionLabels[]`\n- `categories[]`\n- `specifications` — grouped key/value specifications when details are fetched\n- `offers[]`, `offerCount` — first page of seller offers, and that page's count, when offers are enabled\n- `marketplace`, `language`, `sourceQuery`\n- `scrapedAt` — collection timestamp\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string (select) | `search` | `search`, `productDetails`, `categoryBrowse`, or `promotions`. |\n| `searchQueries` | array | `[\"laptop\"]` | Keywords for `search`. |\n| `productUrls` | array | `[]` | Product URLs, EANs, or product IDs for `productDetails`. |\n| `categoryUrls` | array | `[]` | Category, brand, series, or deals URLs, or category IDs, for `categoryBrowse`. |\n| `marketplace` | string (select) | `nl` | `nl` or `be`. |\n| `language` | string (select) | `nl` | `nl` or `fr`. |\n| `sortBy` | string (select) | `RELEVANCE` | `RELEVANCE`, `POPULARITY`, `PRICE_ASC`, `PRICE_DESC`, `RATING_ASC`, `NEW`, or `WISHLIST`. Price sorts use the emitted numeric price; `RATING_ASC` follows Bol's rating score. |\n| `minPrice` | integer | – | Minimum price in EUR. |\n| `maxPrice` | integer | – | Maximum price in EUR. |\n| `minRating` | number | – | Minimum average rating, 0-5. |\n| `condition` | string (select) | `any` | `any`, `new`, `refurbished`, or `secondhand`. |\n| `inStockOnly` | boolean | `false` | Keep only products currently in stock. |\n| `includeSponsored` | boolean | `true` | Keep sponsored search results. |\n| `includeDetails` | boolean | `false` | Fetch product pages for EAN, description, specifications, images, and reviews. |\n| `includeOffers` | boolean | `false` | Fetch the first page of seller offers for each product. |\n| `maxItems` | integer | `20` | Overall product cap (1-10,000). |\n| `maxPages` | integer | `0` | Page limit per query/listing; `0` uses the source's own limit. |\n\n### Example: search with filters\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQueries\": [\"koptelefoon\", \"laptop\"],\n  \"marketplace\": \"nl\",\n  \"language\": \"nl\",\n  \"minPrice\": 50,\n  \"maxPrice\": 300,\n  \"minRating\": 4,\n  \"condition\": \"new\",\n  \"inStockOnly\": true,\n  \"sortBy\": \"PRICE_ASC\",\n  \"includeDetails\": true,\n  \"maxItems\": 40\n}\n```\n\n### Example: browse a category or brand\n\n```json\n{\n  \"mode\": \"categoryBrowse\",\n  \"categoryUrls\": [\n    \"https://www.bol.com/nl/nl/l/laptops/4770/\",\n    \"https://www.bol.com/be/nl/pb/hp/4997239/\"\n  ],\n  \"marketplace\": \"be\",\n  \"language\": \"nl\",\n  \"sortBy\": \"POPULARITY\",\n  \"maxItems\": 100\n}\n```\n\n### Example: product lookup by EAN or URL\n\n```json\n{\n  \"mode\": \"productDetails\",\n  \"productUrls\": [\"0199251730818\", \"https://www.bol.com/nl/nl/p/hp-omnibook-5-16-ba1751nd-intel-core-i5-i5-1334u-laptop-406-cm-2k-16-gb-lpddr5x-sdram-1-tb-ssd-wi-fi-6-windows-11-home-zilver/9300000230842700/\"],\n  \"includeOffers\": true,\n  \"maxItems\": 10\n}\n```\n\n### Example: current promotions\n\n```json\n{\n  \"mode\": \"promotions\",\n  \"marketplace\": \"nl\",\n  \"language\": \"nl\",\n  \"maxItems\": 30\n}\n```\n\n## Use cases\n\n- **Price monitoring** — track current and reference prices for a product set.\n- **Assortment research** — pull a category, brand, or search niche into a clean dataset.\n- **EAN catalog enrichment** — resolve barcodes to titles, brands, images, and specifications.\n- **Stock and seller tracking** — see availability, delivery promises, and who is selling each item.\n- **Promotion analysis** — collect the current deals feed and its category offers.\n\n## FAQ\n\n### Where does the data come from?\n\nIt is read from Bol.com's publicly accessible product, search, category, and deals pages at run time. The actor is not affiliated with Bol.com.\n\n### Can I use it for both the Netherlands and Belgium?\n\nYes. Set `marketplace` to `nl` or `be`. Both Dutch and French shop languages are supported.\n\n### Why is `ean` missing from my search results?\n\nSearch result cards do not publish barcodes. Enable `includeDetails` to visit each product page, where the EAN is read when Bol.com publishes it.\n\n### How many products can one search return?\n\nBol.com caps a single keyword result list at 10 pages (typically 24-30 products per page, about 250-270 products). For larger runs, the actor automatically splits broad searches into narrower category slices; a category or brand page also goes much deeper.\n\n### Why are some fields absent from a record?\n\nBol.com does not publish every field for every product — for example, marketplace items may have no EAN or specifications, and new products may have no reviews yet. Absent values are omitted instead of written as null.\n\n### How are results sorted?\n\n`RELEVANCE`, `POPULARITY`, `NEW`, and `WISHLIST` follow Bol.com's own ordering. `RATING_ASC` follows Bol.com's rating score, which can differ from the visible average rating. `PRICE_ASC` and `PRICE_DESC` are sorted on the emitted numeric price after duplicate products are removed.\n\n### Are sponsored products included?\n\nYes by default, with `isSponsored` and `sponsor` set. Turn `includeSponsored` off to remove them.\n\n### Are all seller offers returned?\n\nBol.com paginates its offers page. The actor returns the first page of offers for each product (currently up to 10) and `offerCount` is the count on that page, not the total across all pages.\n\n### How current are prices and stock?\n\nEach run reads the live pages, so prices, delivery promises, and availability reflect the moment of collection.\n\n### Do I need a proxy or an account?\n\nNo. The actor connects automatically; you do not configure a proxy, cookie, login, or API key.\n\n### Why is the full review list not included?\n\nBol.com's product pages expose a rating summary and a short sample of recent reviews. The actor returns the rating distribution and up to six recent reviews when details are enabled.\n",
      "input": {
        "title": "Bol.com Product Search, Price & Stock Extractor Input",
        "description": "Search, browse, look up products, or read deals from Bol.com in the Netherlands or Belgium.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to collect from Bol.com.",
            "editor": "select",
            "enum": [
              "search",
              "productDetails",
              "categoryBrowse",
              "promotions"
            ],
            "enumTitles": [
              "Search products by keyword",
              "Look up products by URL, EAN, or product ID",
              "Browse a category, brand, series, or deals page",
              "Browse current promotions"
            ],
            "default": "search",
            "prefill": "search"
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "One or more keywords to search for (mode=search).",
            "editor": "stringList",
            "default": [
              "laptop"
            ],
            "prefill": [
              "laptop"
            ]
          },
          "productUrls": {
            "title": "Product URLs, EANs, or product IDs",
            "type": "array",
            "description": "Bol.com product links, EAN-8/EAN-13 barcodes, or numeric product IDs (mode=productDetails).",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "categoryUrls": {
            "title": "Category, brand, series, or deals URLs",
            "type": "array",
            "description": "Bol.com listing links or numeric category IDs (mode=categoryBrowse).",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "marketplace": {
            "title": "Marketplace",
            "type": "string",
            "description": "Which Bol.com shop to use for keyword searches and numeric category IDs.",
            "editor": "select",
            "enum": [
              "nl",
              "be"
            ],
            "enumTitles": [
              "Netherlands (bol.com/nl)",
              "Belgium (bol.com/be)"
            ],
            "default": "nl",
            "prefill": "nl"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Shop language for keyword searches and numeric category IDs.",
            "editor": "select",
            "enum": [
              "nl",
              "fr"
            ],
            "enumTitles": [
              "Dutch",
              "French"
            ],
            "default": "nl",
            "prefill": "nl"
          },
          "sortBy": {
            "title": "Sort by",
            "type": "string",
            "description": "Result ordering for search and browsing. Price sorts use the emitted numeric price; RATING_ASC follows Bol's rating score, not the visible average.",
            "editor": "select",
            "enum": [
              "RELEVANCE",
              "POPULARITY",
              "PRICE_ASC",
              "PRICE_DESC",
              "RATING_ASC",
              "NEW",
              "WISHLIST"
            ],
            "enumTitles": [
              "Relevance",
              "Popularity",
              "Price: low to high",
              "Price: high to low",
              "Best rated (Bol score)",
              "Newest",
              "Most wanted"
            ],
            "default": "RELEVANCE",
            "prefill": "RELEVANCE"
          },
          "minPrice": {
            "title": "Minimum price (EUR)",
            "type": "integer",
            "description": "Only keep products at or above this price.",
            "minimum": 0
          },
          "maxPrice": {
            "title": "Maximum price (EUR)",
            "type": "integer",
            "description": "Only keep products at or below this price.",
            "minimum": 0
          },
          "minRating": {
            "title": "Minimum rating",
            "type": "number",
            "description": "Only keep products rated at or above this value (0-5).",
            "minimum": 0,
            "maximum": 5
          },
          "condition": {
            "title": "Condition",
            "type": "string",
            "description": "Only keep products with this offer condition.",
            "editor": "select",
            "enum": [
              "any",
              "new",
              "refurbished",
              "secondhand"
            ],
            "enumTitles": [
              "Any condition",
              "New",
              "Refurbished",
              "Second-hand"
            ],
            "default": "any",
            "prefill": "any"
          },
          "inStockOnly": {
            "title": "In stock only",
            "type": "boolean",
            "description": "Only keep products that are currently in stock.",
            "default": false,
            "prefill": false
          },
          "includeSponsored": {
            "title": "Include sponsored products",
            "type": "boolean",
            "description": "Keep sponsored (advertised) products in search and browse results.",
            "default": true,
            "prefill": true
          },
          "includeDetails": {
            "title": "Fetch product details",
            "type": "boolean",
            "description": "Visit each product page to add EAN, full description, specifications, all images, rating distribution, and recent reviews. Slower, but more complete.",
            "default": false,
            "prefill": false
          },
          "includeOffers": {
            "title": "Fetch seller offers",
            "type": "boolean",
            "description": "Add the first page of seller offers (price, shipping, condition, seller rating) for each product. Bol.com paginates offers; only the first page is returned.",
            "default": false,
            "prefill": false
          },
          "maxItems": {
            "title": "Max products",
            "type": "integer",
            "description": "Maximum number of products to return across the whole run.",
            "minimum": 1,
            "maximum": 10000,
            "default": 20,
            "prefill": 1
          },
          "maxPages": {
            "title": "Max pages per source",
            "type": "integer",
            "description": "Page limit per query or listing. 0 uses the source's own page limit.",
            "minimum": 0,
            "maximum": 500,
            "default": 0,
            "prefill": 0
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Bol.com Product Search, Price & Stock Extractor Output",
        "description": "Bol.com products with current price, list price, availability, seller, EAN, rating, images, specifications, reviews, and optional seller offers.",
        "properties": {
          "products": {
            "type": "string",
            "title": "Bol.com products",
            "description": "Dataset containing all scraped Bol.com products.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Bol.com Products",
              "transformation": {
                "fields": [
                  "title",
                  "brand",
                  "price",
                  "rating",
                  "reviewCount",
                  "inStock",
                  "productUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {},
      "defaultRunOptions": {
        "build": "latest",
        "memoryMbytes": 1024,
        "timeoutSecs": 3600
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "12560c4f3dd6bc677265e5b9e093f33f719261cd45a48e7b13697d9c0ca925f9",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.01295
    }
  }
}