Free practice site

Somewhere safe to point a scraper.

A fictional shop, built to be scraped. Nothing on it is real, nothing is rate-limited, and there is no login and no bot detection. Use it with any tool — a browser extension, Python, Scrapy, Playwright, curl, whatever you are learning.

Start with the catalogue No sign-up. Scrape it as hard as you like.

Why not just practise on a real site?

Because a real shop will rate-limit you, ban your IP, or quietly serve you different markup once it decides you are a bot — and none of that teaches you anything about scraping. You end up debugging someone's defences instead of your selector.

There is also the question of whether you should be pointing a half-finished script at a business's servers at all. Here, that question does not arise.

Four problems, one shop

Each page is a different thing that breaks scrapers. Expected results are listed so you can tell whether yours is right.

01

Paginated card grid

Products in <article> cards, not a table — nine per page, six pages, a Next button at the bottom. Tests detection on repeated markup and following pagination.
Expected: 54 rows across 6 pages.

02

A plain HTML table

A real <table> with a <thead>. The easy case, and a good first target for anything you are writing from scratch.
Expected: 50 rows, 7 columns, one page.

03

Infinite scroll

Eight rows on load, then more appended each time you reach the bottom, five batches before it stops. Tests whether your scraper scrolls, waits, and knows when to give up.
Expected: 8 rows on load, 40 after scrolling to the end.

04

A value outside the table

A discount that applies to every row but is written once, above the table, and never repeated inside it. No amount of automatic detection can infer that — it is what manual selection is for.
Expected: 10 rows, plus one discount no row contains.

A three-level link chain

One hop proves nothing. This one goes three deep on purpose.

LevelPageFields only found there
The listCatalogueName, maker, price, rating, stock
→ oneProduct pageSKU, material, made in, weight, lead time, warranty
→ twoMaker pageFounded, based in, workshop, typical lead time, minimum order
→ threeSourcing pagePrimary material, sourced from, certification, recycled content, last audited

Every product links to its maker through an identically-worded “About the maker →”, not through the maker's name. That is deliberate, and it is how real shops label such links: a chain you confirm on one row only works on the rest if the label is the same everywhere. If your scraper works on row one and fails on row two, that is usually why.

120 product pages, 8 makers, 8 sourcing pages. Enough that a full run takes long enough to be worth pacing.

Fair use

Take what you like. It is a static site with no database behind it and no bill attached to traffic. If you are load-testing something enormous, a moment's delay between requests is polite rather than necessary.

It was built to demonstrate the Magic Scraper extension, but it is not restricted to it and never will be. A practice site that only works with one tool is not a practice site.

Northwind Supply is invented. The products, makers, prices, SKUs and audit dates are all generated, and any resemblance to a real business is coincidental.