# BrickEconomy Scraper (`normdata/brickeconomy-scraper`) Actor

Scrape BrickEconomy LEGO sets and minifigs: current value new and used, growth, annual growth, 1 and 5 year forecasts, retirement dates and predictions, eBay and BrickLink prices, UPC/EAN, regional retail prices and full price history. For LEGO investors and resellers.

- **URL**: https://apify.com/normdata/brickeconomy-scraper.md
- **Developed by:** [Norm Data](https://apify.com/normdata) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 71.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $16.00 / 1,000 set or minifigs

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

![Norm Data](https://raw.githubusercontent.com/FabriAV/normdata/refs/heads/main/assets/banner_norm2.png)

## 🧱 BrickEconomy Scraper

Extract LEGO set and minifig values from **BrickEconomy**, the price guide LEGO investors and resellers check every day. Get the **current value new and used**, **growth since release**, **annual growth**, **1 and 5 year forecasts**, **retirement dates and predictions**, **eBay and BrickLink prices**, **UPC / EAN barcodes** and **regional retail prices** for any theme, year, collection or search, in one clean table.

Each set comes with:

- **Value:** retail price, value new (sealed), value used with its range, market price for sets still in stores.
- **Growth:** since release, per year, last year and the last 90 days.
- **Forecasts:** 1 year and 5 year value with the low and high of the 5 year range.
- **Retirement:** retirement date, retiring soon flag, retirement forecast, expected pop and value after retirement.
- **Marketplaces:** eBay price and range, BrickLink lowest and highest price and the lowest seller's country.
- **Product data:** pieces, price per piece, minifigs with their own values, UPC, EAN, designer, US / UK / CA / EU / AU retail prices.
- **Community:** rating, reviews and how owned it is in its theme.
- **Optional price history:** the full value chart, the forecast curve and monthly sale prices.

### 🎯 Who uses it?

#### 📈 LEGO investors

Find the sets with the best growth, the ones retiring soon and the 5 year forecast for each, then track your collection's value over time.

#### 🛒 Resellers and BrickLink / eBay sellers

Compare value, eBay and BrickLink prices on hundreds of sets at once and spot what sells above retail.

#### 🏪 Toy shops, price comparison and deal sites

Get barcodes, retail prices in five regions and current market prices to price stock and match products.

#### 📊 Analysts, journalists and collectors

Study which themes, years and sizes of set appreciate best, or build your own LEGO price index.

### ✨ What it does

- **Sets or minifigs:** pick one, the filters adapt.
- **Search the way you think:**
  - **Search terms:** set numbers ("75192", "10179-1"), minifig numbers ("sw0001a") or words ("hogwarts castle").
  - **Themes and subthemes:** "Star Wars", "Star Wars / Ultimate Collector Series", "Technic". Typos get suggestions.
  - **Years:** every set from 2015, or 2024 and 2025.
  - **Collections:** retiring soon, new, recently retired, available soon.
  - **Nothing at all:** the whole catalog (21,000+ sets or 18,000+ minifigs).
- **Sort** by value, growth, annual growth, growth last year, 2 or 5 year forecast, used value, retail price, pieces, newest, oldest or most recently retired.
- **Every useful filter:** availability (retired, in stores, retiring soon), value range, minimum growth, minimum annual growth, pieces range.
- **Or paste BrickEconomy links:** set pages, minifig pages, theme, year or search lists. With links the filters are ignored.

### 🏆 Why this scraper

- **The investor's numbers, not just a price.** Growth, annual growth, forecasts, retirement predictions and value after retirement come in every row.
- **Sorted by the site itself.** "Highest annual growth in Star Wars" returns the real top sets in order, without reading the whole theme.
- **More per row.** Barcodes, regional retail prices, eBay and BrickLink prices and every minifig's value in the same row.
- **Minifigs too.** Value, growth, forecasts and every set a minifig appears in.
- **Fast.** About 1,000 sets in 2 to 3 minutes, and it slows down by itself if the site asks.
- **Clean data.** Prices and percents are numbers, dates are ISO, every row links to its BrickEconomy page.
- **No proxy needed.** Nothing extra to set up or pay for.

### 📦 What data you get

#### Sets

| Field | Description |
| --- | --- |
| `setNumber`, `name`, `theme`, `subtheme`, `year` | The set. |
| `releaseDate`, `retirementDate`, `availability`, `availableAtRetail`, `retiringSoon` | When it came out and retired, and whether it is still in stores. |
| `pieces`, `pricePerPiece`, `minifigCount`, `minifigsValue`, `exclusiveMinifigs` | What is in the box. |
| `retailPrice`, `valueNew`, `marketPrice`, `marketVsRetailPercent` | Retail price and current value new (sealed). |
| `growthPercent`, `annualGrowthPercent`, `lastYearGrowthPercent`, `change90DaysPercent` | Growth since release, per year, last year, last 90 days. |
| `valueUsed`, `valueUsedLow`, `valueUsedHigh` | Value used and its range. |
| `priceLevel`, `typicalPriceLow`, `typicalPriceHigh` | Whether today's price is low or high, and its usual range. |
| `ebayPrice`, `ebayLowestPrice`, `ebayHighestPrice` | eBay prices. |
| `bricklinkLowestPrice`, `bricklinkLowestCountry`, `bricklinkHighestPrice` | BrickLink prices. |
| `forecast1YearValue`, `forecast1YearPercent`, `forecast5YearValue`, `forecast5YearPercent`, `forecast5YearLow`, `forecast5YearHigh` | Value forecasts. |
| `retirementForecast`, `retirementForecastAccuracyPercent`, `retirementPopPercent`, `forecastGrowthFirstYearPercent`, `forecastGrowthSecondYearPercent` | Retirement predictions for sets still in stores. |
| `value1YearAfterRetirement`, `value1YearAfterRetirementDate`, `value5YearsAfterRetirementLow`, `value5YearsAfterRetirementHigh` | Expected value after retirement. |
| `insights` | BrickEconomy's short investment note. |
| `retailPriceUS`, `retailPriceUK`, `retailPriceCA`, `retailPriceEU`, `retailPriceAU` | Retail price per region. |
| `upc`, `ean`, `designer` | Barcodes and designer. |
| `rating`, `reviewCount`, `ownedRank`, `ownedRankIn` | Rating and how owned it is. |
| `lifespanMonths`, `subthemeSets`, `subthemeYears`, `subthemeLifespanMonths`, `subthemeAnnualGrowthPercent` | How long it stayed in stores and how its subtheme performs. |
| `minifigs` | Each minifig: number, name, sets it is in, exclusive or not, value, link. |
| `facts`, `description`, `imageUrl`, `url` | Facts, LEGO's description, picture and page. |

#### Minifigs

| Field | Description |
| --- | --- |
| `minifigNumber`, `name`, `theme`, `subtheme`, `themes`, `subthemes` | The minifig and every theme it appears in. |
| `year`, `lastYear`, `releaseDate`, `availability` | When it came out. |
| `inSets`, `exclusive`, `appearsInSets` | How many sets it is in, and which. |
| `valueNew`, `growthPercent`, `annualGrowthPercent`, `lastYearGrowthPercent`, `futureGrowthPercent` | Value and growth. |
| `ebayPrice`, `bricklinkLowestPrice`, `bricklinkLowestCountry`, `bricklinkHighestPrice` | Marketplace prices. |
| `forecast1YearValue`, `forecast5YearValue`, `forecast5YearLow`, `forecast5YearHigh` | Forecasts. |
| `rating`, `reviewCount`, `ownedRank`, `ownedRankIn`, `imageUrl`, `url` | Community and links. |

#### Price history add-on

| Field | Description |
| --- | --- |
| `valueHistory` | Value over time: `{ date, value }`. |
| `valueForecast` | The forecast curve: `{ date, value }`. |
| `monthlySalePrices` | Low, typical and high sale price per month. |
| `monthlyListingPrices`, `monthlySales` | Minifigs: listing prices and how many sold per month. |
| `error` | Only when BrickEconomy has no price history for that item yet. That row is not charged for the add-on. |

Every row also has `type` (`set` or `minifig`) and `scrapedAt`.

#### Example row (trimmed)

```json
{
  "setNumber": "10179-1",
  "name": "Ultimate Collector's Millennium Falcon",
  "theme": "Star Wars",
  "subtheme": "Ultimate Collector Series",
  "year": 2007,
  "releaseDate": "2007-10-24",
  "retirementDate": "2010-05-04",
  "availability": "Retired",
  "pieces": 5197,
  "minifigCount": 5,
  "retailPrice": 499.99,
  "valueNew": 3028.8,
  "growthPercent": 505.77,
  "annualGrowthPercent": 5.11,
  "valueUsed": 1045.33,
  "forecast5YearValue": 3795.04,
  "forecast5YearLow": 3685,
  "forecast5YearHigh": 3898,
  "ebayPrice": 2937.94,
  "bricklinkLowestPrice": 1873.52,
  "bricklinkLowestCountry": "NL",
  "upc": "673419079419",
  "ean": "5702014499874",
  "rating": 5,
  "ownedRank": 33,
  "url": "https://www.brickeconomy.com/set/10179-1/lego-star-wars-ultimate-collectors-millennium-falcon"
}
```

### 💡 Use cases

#### 💎 The most valuable Ultimate Collector Series sets

```json
{ "themes": ["Star Wars / Ultimate Collector Series"], "sortBy": "value", "maxItems": null }
```

#### ⏳ Sets retiring soon, with their forecasts

```json
{ "collection": "retiring-soon", "maxItems": null }
```

#### 🚀 Retired 2015 sets growing 10%+ a year, best first

```json
{ "years": ["2015"], "availability": ["retired"], "minAnnualGrowth": 10, "sortBy": "annualGrowth", "maxItems": null }
```

#### 🔧 Big Technic sets worth $100 to $400

```json
{ "themes": ["Technic"], "minPieces": 2000, "minValue": 100, "maxValue": 400, "maxItems": null }
```

#### 🧍 Most valuable Star Wars minifigs with price history

```json
{ "itemType": "minifigs", "themes": ["Star Wars"], "sortBy": "value", "priceHistory": true, "maxItems": 200 }
```

#### 🔢 A list of set numbers (your collection)

```json
{ "searchTerms": ["75192", "10276", "21348", "42143"], "priceHistory": true, "maxItems": null }
```

### ⚙️ How the input is organised

| Section | What it's for |
| --- | --- |
| **Maximum results** | Always first: caps the whole run (empty means no limit). |
| **What to scrape** | Sets or minifigs, search terms, themes, years, collection, sort. |
| **Filters** | Availability, value, growth and pieces. |
| **Or scrape links** | BrickEconomy links. When links are given, the search fields and filters above are ignored. |
| **Extras** | Price history add-on and proxy. |

**Links and filters are not mixed:** with links, the search fields and filters are ignored and the log says which ones.

**How themes, years and search terms combine:** themes and years alone become lists (Harry Potter sets from 2020). With search terms or a collection, themes and years work as filters on those results.

### 💰 Pricing

Pay-per-event: a one-time **0.003** when the run starts, plus a price for each kind of record the run produces. You only pay for the kinds you turn on:

| Charged for | Free | Bronze | Silver | Gold+ |
| --- | --- | --- | --- | --- |
| **Set or minifig**: One LEGO set or minifig with its value, growth, forecasts, retirement data, marketplace prices and product data | 0.022 | 0.02 | 0.018 | 0.016 |
| **Price history**: Value history, forecast curve and monthly sale prices for one result (only when the price history option is on) | 0.006 | 0.005 | 0.0045 | 0.004 |

New Apify accounts start with $5 in free credit. The Apify Free plan is limited to 10 results per run.

### 🚀 Run it

1. Create a free Apify account with $5 in credit.
2. Open the BrickEconomy Scraper.
3. Fill in the input (or keep the prefilled example), set the maximum number of results, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (`run-sync-get-dataset-items`) or the ApifyClient for JavaScript and Python, and schedule it with Apify's built-in Scheduler.

### 🤖 Use with AI agents (MCP)

Give an AI agent live LEGO prices through the Model Context Protocol:

```
claude mcp add --transport http apify "https://mcp.apify.com?tools=normdata/brickeconomy-scraper"
```

Then prompt it in plain language, for example "which Star Wars sets retiring this year have the best 5 year forecast?".

### 🔧 Troubleshooting

**A theme was not found.**
Use the name as BrickEconomy writes it ("Star Wars", "Harry Potter"). Subthemes go after a slash: "Star Wars / Ultimate Collector Series". The log suggests close names.

**A set number was not found.**
Try it with its variant ("75192-1"), or paste the set's BrickEconomy link.

**Value new looks like the retail price.**
For sets still in stores BrickEconomy uses the market price; `availableAtRetail` is true and `marketPrice` holds it.

**Some forecast or retirement fields are empty.**
BrickEconomy only predicts what it has data for: retirement predictions exist for sets still in stores, 5 year ranges for most retired sets.

**A minifig shows a different subtheme than the list I asked for.**
BrickEconomy lists some minifigs under several themes. The row keeps the minifig's own theme and lists all of them in `themes` and `subthemes`.

### ❓ FAQ

| Question | Answer |
| --- | --- |
| Do I need a BrickEconomy account? | No. Only public pages are read. |
| What currency are the prices in? | US dollars, except the UK, EU, CA and AU retail prices. |
| How fresh is the data? | Live: every run reads the current pages. |
| Can I track my collection? | Yes. Put your set numbers in search terms and schedule the run. |
| Does it need a proxy? | No. There is an optional proxy setting if the site ever slows down your runs. |

### 🛡️ Limits & responsible use

This Actor reads only public pages on BrickEconomy. It never signs in. Use the data in line with BrickEconomy's terms.

### 📧 Contact

Need a scraper for a different site, or found something wrong with this one? norm.data.scrapers@gmail.com

### 🧪 Local development

```powershell
bun install
bun run typecheck
bun test/qa.mjs
apify run
```

Local results are stored in `storage/datasets/default`.

# Actor input Schema

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

Stop after this many sets or minifigs in total. Leave empty for no limit. The Apify Free plan is always capped at 10.

## `itemType` (type: `string`):

Scrape LEGO sets or LEGO minifigures.

## `searchTerms` (type: `array`):

Set numbers ("75192" or "75192-1"), minifig numbers ("sw0001") or words ("Millennium Falcon", "Hogwarts"). Words search BrickEconomy like its search box. One per line.

## `themes` (type: `array`):

A theme like "Star Wars", or a subtheme as "Star Wars / Ultimate Collector Series". On their own they list every set of the theme; with search terms or a collection they filter those instead. One per line.

## `years` (type: `array`):

Release years like "2020". On their own (or with themes) they list the sets of those years; with search terms or a collection they filter those instead.

## `collection` (type: `string`):

One of BrickEconomy's lists. Themes and years above then filter it.

## `sortBy` (type: `string`):

Order of theme, year and search lists (the order results are saved in, so it decides which come first with a maximum). Minifig lists sort only by value, annual growth, newest and oldest.

## `availability` (type: `array`):

Keep only results with ANY of these. "Retiring soon" works for sets (for minifigs use the Retiring soon collection).

## `minValue` (type: `number`):

Keep only results worth at least this much new/sealed (sets) or new (minifigs). For sets still in stores this is the market price.

## `maxValue` (type: `number`):

Keep only results worth at most this much.

## `minGrowth` (type: `number`):

Keep only results whose value grew at least this much over the retail price, e.g. 100 for doubled. Sets still in stores have no growth yet, so they are left out.

## `minAnnualGrowth` (type: `number`):

Keep only results growing at least this much a year (CAGR), e.g. 10.

## `minPieces` (type: `integer`):

Sets only: keep sets with at least this many pieces.

## `maxPieces` (type: `integer`):

Sets only: keep sets with at most this many pieces.

## `urls` (type: `array`):

Set pages (/set/75192-1/...), minifig pages (/minifig/sw0001/...), theme or subtheme lists (/sets/theme/star-wars, /minifigs/theme/ninjago), year lists (/sets/year/2020), lists like /sets/retiring-soon, or a search (/search?query=falcon).

## `priceHistory` (type: `boolean`):

Adds the full value history (often years of data points), the forecast curve, and the price range of every month of sales (low, typical range, high). Minifigs also get monthly listing prices and the number sold each month. No extra pages are opened, so runs stay fast.

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

Optional, off by default. BrickEconomy works without one. Turn it on only if runs fail to connect. Proxy traffic is billed to your Apify account.

## Actor input object example

```json
{
  "maxItems": 10,
  "itemType": "sets",
  "themes": [
    "Star Wars / Ultimate Collector Series"
  ],
  "collection": "none",
  "sortBy": "value",
  "priceHistory": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "maxItems": 10,
    "themes": [
        "Star Wars / Ultimate Collector Series"
    ],
    "sortBy": "value",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/brickeconomy-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 = {
    "maxItems": 10,
    "themes": ["Star Wars / Ultimate Collector Series"],
    "sortBy": "value",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("normdata/brickeconomy-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 '{
  "maxItems": 10,
  "themes": [
    "Star Wars / Ultimate Collector Series"
  ],
  "sortBy": "value",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call normdata/brickeconomy-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,normdata/brickeconomy-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/Z3WvPn5qOnh6kQlHE/builds/rCuznJXtSVhhQJhPW/openapi.json
