Every deal site tells you it’s a deal.
I built BricksDeal to answer the question underneath: is this actually cheap?
A discount badge only means something next to older prices. BricksDeal matches the same LEGO set across retailers, keeps every price it has seen, and shows whether today’s offer is genuinely good or just marked down from a number nobody paid.
Open BricksDeal- 67
- retailers compared
- 17,221
- sets tracked
- 2× daily
- price and stock refresh
Live product checked 20 July 2026
The price problem
A discount label does not know what the set cost last month.
Most shop pages give you today’s price and an RRP. That leaves out everything I actually wanted to know. Was it cheaper in May? Who still has it in stock? How old is that price? And is the other set on my shortlist a better use of the same money?
So this could not be a list of affiliate links. Every set needed one fixed record, with a history of offers moving around it.
RRP €649.99
- 01
The set stays fixed
Number, name and product details hold still while the offers around them change.
- 02
Offers keep moving
Price, stock and the time of the last check each drift on their own schedule.
- 03
Country changes the market
A comparison is only useful with the retailers and prices that region can actually buy from.
- 04
Commission cannot set the order
Affiliate revenue pays for the thing. It does not get to pick what ranks first.
The product model
Every offer resolves to one LEGO set.
The set record holds still. An offer can change price, stock and check time without spawning a second product. Every check joins the history that the deal list, the set page and the comparison all read from.
- 01
Set record
The set number anchors its name, theme and product details.
- 02
Retailer offer
A shop contributes its current price, stock and latest check.
- 03
Price observation
Every check enters the history. Rejected data stays auditable but can never become the current price.
- 04
Decision context
Current offers and “lowest ever” only count accepted observations from the shopper’s own region.
One live set
Here is what that looks like on one set.
On 20 July 2026, BricksDeal compared eight retailers for LEGO set 75367. The lowest offer was €469.99, which is 28% below the €649.99 RRP. The page showed stock, the price curve and when each figure was last checked. So “28% off” is something you can check instead of take on faith.
- €469.99
- lowest current offer
- €649.99
- recommended retail price
- 8
- retailers compared
- 28%
- below RRP
The reader journey
What happens after someone spots a deal.
Spotting the deal is the start, not the end. From there someone has to find the right set, clear away the offers that do not apply, look at the history, and then decide: buy now, or keep watching.
Find a set
Search by set, browse a theme or start from a collecting interest.
Narrow the list
Sort current deals and filter by price, availability or theme.
Check the history
See retailer offers, stock, earlier prices and the latest update in one place.
Compare candidates
Put two sets beside each other before deciding where the money goes.
Keep watching
Set an alert or keep BricksDeal nearby through the browser extension.
Responsive decisions
At 430 pixels, the order matters more than the layout.
Desktop has room to put comparisons side by side. On a phone the same information becomes a single reading order: the offer, then the details that back it up, then the price history. Most of the responsive work here was deciding what comes first.
Mobile protects the next decision
Discovery
Most shoppers do not arrive with a set number.
Theme pages, collecting interests, retiring-set overviews and guides are all part of the product. Their job is to get someone from “I want a Star Wars set” to one specific set worth checking.
- 01
Theme
Start inside a LEGO world you already know.
- 02
Interest
Browse by the kind of thing you like building.
- 03
Budget
Turn an open search into a price range.
- 04
Guide
Editorial judgement, with today’s prices attached.
At the retailer
The decision usually happens on someone else’s page.
By the time you are ready to buy, you have left. The browser extension recognises the set or EAN on supported retailers and stays quiet unless there is a comparison worth interrupting for.
See the extension
Under the surface
The site stays simple. The data work runs beside it.
Laravel renders the public catalogue from SQLite. Scraping, translation and SEO run in a separate Python pipeline that publishes through a protected API. None of that work sits between a reader and the page.
- 01Data jobs
Collect
Python pipelineRetailer scraping, translation and SEO jobs run outside the storefront.
- 02Publish boundary
Publish
Protected APIWorkers hand prepared data to Laravel instead of writing straight into the live database.
- 03Public runtime
Render
Laravel + SQLiteThe public app renders the catalogue on the server from a compact local database.
- 04Cache policy
Cache by risk
Public / privateCatalogue pages can use shared caching. Accounts, sessions and alerts are always no-store.
Live product · checked 20 July 2026
Where the catalogue stood on 20 July 2026.
- 67retailers
- Current retailer coverage on the Dutch market.
- 17,221tracked sets
- Set records held with current price and stock data.
- 31,224live price drops
- Current price drops shown across the product.
- 2× dailyrefresh cycle
- Prices and stock are checked twice each day.
English public sitemap
- 4,541
- set routes
- 510
- theme routes
- 106
- guides
- 68
- retailer routes
- 17
- interest routes
The product counts carry a date because stock and catalogue data move. Route counts come from the English public sitemap on that same date, and they are not the same thing as the larger historical set database. Data method Public sitemap