# Bank of Lamps Scraper: Wholesale Lighting Prices, EAN & Alerts (`getascraper/bankoflamps-scraper`) Actor

Bank of Lamps scraper: EAN, MPN, brand, list price, stock status, lead time, lighting specs, datasheets and pack sizes. Start from category or brand links, EAN lists or brand names. Track price drops, stock changes, discontinued and removed products. One flat price per product.

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

## Pricing

from $1.40 / 1,000 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 💡 Bank of Lamps Scraper: Wholesale Lighting Prices, EAN & Alerts

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#FFFBEB;border:1px solid #FDE68A;border-top:4px solid #D97706;color:#1C1917;border-radius:10px 10px 0 0">
<span style="font-size:23px;font-weight:800;color:#78350F;line-height:1.3">The Bank of Lamps lighting catalog as a clean table, keyed by EAN barcode.</span><br>
<span style="font-size:15px;color:#334155;line-height:1.6">Pull lamps, tubes, luminaires and electrical parts from the public Bank of Lamps store: EAN, MPN, brand, list price in euros, stock status, lead time, pack sizes and lighting specs. Schedule the same run to see price drops, stock changes, discontinued and removed products.</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FDE68A;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 0 10px">
<strong style="color:#B45309;font-size:15px">🔢 EAN-keyed rows</strong><br>
<span style="color:#334155;font-size:12px">Every row carries EAN, MPN and brand, so it joins straight onto your own price list.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FDE68A;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<strong style="color:#B45309;font-size:15px">📦 Stock and lead time</strong><br>
<span style="color:#334155;font-size:12px">In stock, incoming, order only or not available, with lead time and discontinued flag.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FDE68A;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<strong style="color:#B45309;font-size:15px">💡 Lighting specs</strong><br>
<span style="color:#334155;font-size:12px">Watts, lumens, Kelvin, IP rating, lamp base, dimensions, energy class and datasheet links.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FDE68A;border-left:none;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 10px 0">
<strong style="color:#B45309;font-size:15px">🔔 Change alerts</strong><br>
<span style="color:#334155;font-size:12px">Price drops and rises, back in stock, out of stock, discontinued, new and removed.</span>
</td>
</tr>
</table>

Know what Bank of Lamps lists, at what price and in what stock, today and next week. This Actor reads the public store pages and returns one row per product with the EAN barcode and a link back to the page. Start from a category or brand link, paste a list of EAN barcodes, or type brand names. Prices are the public list prices in euros excluding VAT. Anything the store does not publish is left out, never guessed.

### 👥 Who uses it

- **I run a lighting shop or an electrical wholesale business** and need to compare my cost and sell prices with a large European lighting catalog.
- **I buy for an installer or a contractor** and want a weekly alert when a luminaire or lamp I specify goes out of stock or is discontinued.
- **I manage a product feed or marketplace listing** and need EAN, MPN, brand, pack size and datasheet links to fill gaps in my catalog.
- **I track lighting brands** such as OSRAM or Schneider Electric and want to see new products, price moves and lead times in one table.

### 🚀 How it works

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0;margin-bottom:0">
<tr>
<td style="padding:16px 14px;width:33%;background:#FFFBEB;border:1px solid #FDE68A;border-radius:10px 0 0 10px;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#D97706;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#78350F">Choose what to collect</span><br>
<span style="font-size:12px;color:#334155">Paste category or brand links from the store, a list of EAN barcodes, or brand names.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFFBEB;border:1px solid #FDE68A;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#D97706;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#78350F">Set your filters</span><br>
<span style="font-size:12px;color:#334155">A price range, in stock only, hide discontinued, and full product pages for specs.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFFBEB;border:1px solid #FDE68A;border-left:none;border-radius:0 10px 10px 0;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#D97706;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#78350F">Export or schedule</span><br>
<span style="font-size:12px;color:#334155">Download Excel, CSV or JSON, or schedule the run and receive only what changed.</span>
</td>
</tr>
</table>

### 🔍 What does it do?

- Returns one row per product: EAN, MPN, name, brand, price, price unit, stock status, lead time, pack sizes, discontinued flag, price valid until and image.
- Lists a whole category, a brand page or a brand within a category, looks up exact products from EAN barcodes, or collects the catalog of the brands you name.
- Filters before saving, so you only pay for products that match.
- With full product pages switched on, adds technical specifications, typed lighting fields (watts, lumens, Kelvin, IP rating, lamp base, dimensions, energy class), description, categories, all images, datasheet, manual and energy label links, country of origin, customs code and ETIM class.
- Keeps a named history of a list and marks every product as new, price drop, price increase, back in stock, out of stock, discontinued, updated, unchanged or removed.
- Reads public store pages only. No account, no login and no trade prices.

Prices are the public list prices excluding VAT. Individual trade prices need a customer account and are not part of the public pages. The store does not show stock quantities, so availability is the status label the store shows.

### 💡 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| Category, brand or product links | array of URLs | No | Links from bankoflamps.com: a category, a brand page, a brand within a category or a single product page. |
| EAN barcodes | array of strings | No | Exact products by EAN or GTIN barcode. Barcodes the store does not know are listed in the run summary. |
| Brand names | array of strings | No | Collect the catalog of these brands, for example OSRAM or Schneider Electric. |
| Minimum price / Maximum price | number | No | Price range in euros, excluding VAT. |
| In stock only | boolean | No | Keep only products shown as in stock. |
| Hide discontinued products | boolean | No | Skip products that carry the Discontinued badge. |
| Read full product pages | boolean | No | Adds specifications, lighting fields, documents and the other detail fields. EAN lookups always include them. |
| Track changes between runs | boolean | No | Compares with the previous run of the same monitor and labels every product. |
| Monitor name | string | No | Keeps the history of one monitor. Use one name per list you track. |
| Only save changes | boolean | No | Skips unchanged products so you pay for changes only. |
| Maximum products | integer | No | How many products to check in this run. Free plans are limited to 25. |

### 📊 Data table

| Field | Type | Description |
| --- | --- | --- |
| `ean`, `gtin14`, `mpn`, `productId`, `title`, `brand`, `manufacturerName`, `url` | string | Barcode, manufacturer part number, product number, name, brand and store page. |
| `price`, `currency`, `priceBasis`, `priceUnit`, `priceOnRequest` | number, string, boolean | List price in euros excluding VAT, and the unit it applies to. |
| `priceValidUntil`, `priceValidity` | string | Date until which the price is valid, when the store states one. |
| `moq`, `packageQty`, `boxQty`, `palletQty`, `splitBoxPrice` | number | Minimum order, package, box and pallet sizes, and the price when a box is split. |
| `availability`, `inStock`, `stockLabels`, `discontinued` | string, boolean, array | Stock status label, flags and the Discontinued badge. |
| `leadTime`, `leadTimeWeeksMin`, `leadTimeWeeksMax`, `deliveryEstimates` | string, number, array | Lead time as shown, in weeks, and delivery estimates (full product pages). |
| `wattage`, `luminousFluxLm`, `colourTemperatureK`, `colourRenderingIndex`, `ipRating`, `ikRating`, `lampBase`, `voltage`, `beamAngle`, `dimmable`, `energyClass`, `efficacyLmPerW`, `lifespanHours`, `lampShape` | number, string, boolean | Typed lighting attributes (full product pages). |
| `lengthMm`, `widthMm`, `heightMm`, `depthMm`, `diameterMm` | number | Dimensions in millimetres. |
| `specs`, `description` | array, string | All technical specification rows and the product text (full product pages). |
| `categories`, `categoryTree`, `countryOfOrigin`, `hsCode`, `etimClass`, `eprelId`, `eprelUrl` | various | Classification, origin, customs code and EU energy label registry link. |
| `imageUrl`, `images`, `documents`, `datasheetUrl`, `manualUrl`, `energyLabelUrl`, `packingGtins`, `similarProducts` | string, array | Images, documents, packing barcodes and related products. |
| `changeType`, `changedFields`, `previousPrice`, `priceChange`, `priceChangePercent`, `previousAvailability`, `previousDiscontinued`, `previousPriceValidUntil`, `firstSeenAt`, `changeDetectedAt`, `missingReason` | various | Change tracking fields, present when tracking is on. |
| `source`, `scrapedAt` | string | Which page type was read and when. |

### 🔄 Change tracking

Switch on "Track changes between runs", pick a monitor name and schedule the same input daily or weekly. The first run records a baseline and marks every product **new**. Later runs mark each product **price drop** or **price increase** (with the previous price and the percent change), **back in stock** or **out of stock**, **discontinued**, **updated** (for example a new price valid until date), **unchanged** or **removed**. A product is marked removed right away when its page is gone, and otherwise only after two complete runs in which it no longer appears. Turn on "Only save changes" to save and pay for changes only.

### 💰 Pricing

Pricing is pay per product row, with no subscription and no start fee of our own. Full product pages, lighting fields and change tracking are part of the row, with no extra charge. Empty runs cost nothing, and the discount tiers on your Apify plan apply automatically.

### ⭐ Enjoying Bank of Lamps Scraper?

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:20px 24px 14px;background:#FFFBEB;border:1px solid #FDE68A;border-left:5px solid #D97706;border-radius:10px 10px 0 0;color:#1C1917">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#78350F">Got a price and stock list you can use straight away?</span><br>
<span style="font-size:14px;color:#334155">A rating takes 10 seconds and helps other lighting and electrical teams find a reliable Bank of Lamps data feed.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#A85C03;border:1px solid #A85C03;border-left:5px solid #A85C03;border-top:none;border-radius:0 0 10px 10px;text-align:center;color:#1C1917">
<a href="https://apify.com/getascraper/bankoflamps-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ✨ Tips

- **Start with one brand.** Type a brand name, run 20 products, check the columns, then raise the limit.
- **Match your own list.** Paste your EAN barcodes to get current price, stock and lead time for exactly those products.
- **Read the specs.** Turn on full product pages to filter by watts, lumens, Kelvin or IP rating in your spreadsheet.
- **Follow a shortlist.** Paste the EANs you buy, switch on change tracking and schedule it daily.

### ❓ FAQ

##### Which products can I collect?

Everything on the public store: lamps, tubes, luminaires, drivers, cables, switches and other electrical parts. Use category or brand links for whole sections, brand names for a brand's catalog, or EAN barcodes for exact products.

##### Are these the prices I would pay?

They are the public list prices in euros excluding VAT. Trade prices that need a customer account are not collected. Use the list price as a reference and compare it with your own conditions.

##### Do I get stock quantities?

No. The store shows a status label such as in stock, incoming stock, order only or not available, and that label is what you get, together with lead time and the discontinued flag.

##### What happens if the store does not answer?

The run finishes with a clear message and saves nothing for the missing pages, so you are not charged for rows that were not collected.

### 🔗 Other actors

- [Drogasil Scraper: Preço de Remédios, Ofertas e Monitor de Preço](https://apify.com/getascraper/drogasil-scraper) ↗ - Track Brazilian pharmacy prices, EAN codes and stock with a change monitor.
- [Made-in-China Scraper 中国制造网: Products, Suppliers, Price Changes](https://apify.com/getascraper/made-in-china-catalog-scraper) ↗ - Collect wholesale products, suppliers and price changes.
- [Toocle Scraper 生意宝: China B2B Products, Suppliers & Prices](https://apify.com/getascraper/toocle-b2b-sourcing-scraper) ↗ - Collect Chinese B2B products, suppliers and prices.

# Changelog

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

# Actor input Schema

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

Public links from bankoflamps.com: a category (for example /lamps or /fluorescent-tubes-t8), a brand page (for example /osram), a brand within a category, the stock deals page or a single product page. Category and brand links list every product on them. The example link is ignored when you give barcodes or brand names.

## `eans` (type: `array`):

Look up exact products by EAN or GTIN barcode, for example 5999097600932. Each barcode returns the full product page data. Barcodes the store does not know are reported in the run summary.

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

Collect the catalog of these brands, for example OSRAM or Schneider Electric. Each name opens that brand's page on the store. Names the store does not list are reported in the run summary.

## `minPrice` (type: `number`):

Keep products priced at or above this amount in euros, excluding VAT. Leave empty for no minimum.

## `maxPrice` (type: `number`):

Keep products priced at or below this amount in euros, excluding VAT. Leave empty for no maximum.

## `inStockOnly` (type: `boolean`):

Keep only products the store shows as in stock. Items that are order only, incoming or not available are skipped.

## `hideDiscontinued` (type: `boolean`):

Skip products that carry the store's Discontinued badge.

## `includeProductDetails` (type: `boolean`):

Adds technical specifications, typed lighting fields, description, categories, all images, datasheet and manual links, country of origin, customs code, delivery days and similar products to category and brand results. Product links and barcodes always return the full page data.

## `monitor` (type: `boolean`):

Compares each product with the previous run of the same monitor and labels it new, price drop, price increase, back in stock, out of stock, discontinued, updated or removed.

## `monitorName` (type: `string`):

Name that keeps the history of one monitor. Use a different name for each set of links and filters you track.

## `onlyChanges` (type: `boolean`):

Save only products that are new, changed or removed since the previous run. Unchanged products are skipped and not charged.

## `maxItems` (type: `integer`):

Highest number of products to check in this run. Free plans are limited to 25.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://bankoflamps.com/lamps"
    }
  ],
  "eans": [],
  "brands": [],
  "inStockOnly": false,
  "hideDiscontinued": false,
  "includeProductDetails": false,
  "monitor": false,
  "monitorName": "default",
  "onlyChanges": false,
  "maxItems": 10
}
```

# Actor output Schema

## `products` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://bankoflamps.com/lamps"
        }
    ],
    "eans": [],
    "brands": [],
    "inStockOnly": false,
    "hideDiscontinued": false,
    "includeProductDetails": false,
    "monitor": false,
    "monitorName": "default",
    "onlyChanges": false,
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/bankoflamps-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 = {
    "startUrls": [{ "url": "https://bankoflamps.com/lamps" }],
    "eans": [],
    "brands": [],
    "inStockOnly": False,
    "hideDiscontinued": False,
    "includeProductDetails": False,
    "monitor": False,
    "monitorName": "default",
    "onlyChanges": False,
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/bankoflamps-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://bankoflamps.com/lamps"
    }
  ],
  "eans": [],
  "brands": [],
  "inStockOnly": false,
  "hideDiscontinued": false,
  "includeProductDetails": false,
  "monitor": false,
  "monitorName": "default",
  "onlyChanges": false,
  "maxItems": 10
}' |
apify call getascraper/bankoflamps-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/bankoflamps-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/wC0ignYi7RCSA7ivb/builds/TsemeT9Lt7k9wNrPl/openapi.json
