A production-ready Zoot data scraper that collects structured fashion product data across multiple storefronts. It helps teams monitor prices, availability, and catalog changes without manual browsing, delivering clean data ready for analysis or automation.
Created by Bitbash, built to showcase our approach to Scraping and Automation!
If you are looking for easy-zoot-data-scraper you've just found your team — Let’s Chat. 👆👆
This project extracts detailed product information from Zoot fashion storefronts in a consistent, structured format. It solves the problem of manually tracking product prices, sizes, and availability across large catalogs. It’s built for developers, data teams, and e-commerce analysts who need reliable product intelligence at scale.
- Handles category pagination and individual product pages automatically
- Applies smart rate limiting to keep requests stable and predictable
- Validates inputs to prevent misconfigured runs
- Outputs clean, analytics-ready records
- Scales from small tests to large catalog crawls
| Feature | Description |
|---|---|
| Multi-storefront support | Works across multiple regional storefronts with consistent output. |
| Pagination handling | Automatically follows category pages until limits are reached. |
| Rate limiting controls | Adjustable delays and concurrency to ensure stability. |
| Structured output | Returns normalized product records ready for pipelines. |
| Flexible input schema | Easy configuration for URLs, limits, and performance tuning. |
| Field Name | Field Description |
|---|---|
| url | Direct link to the product detail page. |
| name | Product title as displayed in the store. |
| priceCurrency | Currency code used for pricing. |
| currentBestPrice | Current selling price with numeric and formatted values. |
| originalPrice | Original price before discounts, if available. |
| saleCode | Promotional or discount code applied to the product. |
| thumbnail | Primary product image URL. |
| images | Array of all available product images. |
| brand | Brand name, logo, and reference link. |
| breadcrumbs | Category hierarchy used for navigation. |
| description | Full textual product description. |
| attributes | Key-value pairs such as material or fit. |
| sizes | Available sizes with stock status. |
| available | Overall product availability flag. |
[
{
"url": "https://www.zoot.cz/polozka/1234567/stylish-jacket",
"name": "Stylish Jacket",
"priceCurrency": "CZK",
"currentBestPrice": {
"value": 2199,
"formattedPrice": "2 199 Kč"
},
"originalPrice": {
"value": 2999,
"formattedPrice": "2 999 Kč"
},
"saleCode": "WEEKEND10",
"thumbnail": "https://images.zoot.cz/fit/1908x2562/example.jpg",
"images": ["https://images.zoot.cz/img1.jpg", "https://images.zoot.cz/img2.jpg"],
"brand": {
"link": "https://www.zoot.cz/brand/only",
"logo": "https://images.zoot.cz/brands/only.png"
},
"breadcrumbs": [
{ "text": "Ženy", "url": "https://www.zoot.cz/katalog/17504/zeny" }
],
"description": "Lightweight jacket ideal for spring.",
"attributes": [
{ "key": "Material", "value": "100 % polyester" }
],
"sizes": [
{ "size": "S", "available": true, "note": null }
],
"available": true
}
]
Easy Zoot Data Scraper/
├── src/
│ ├── main.ts
│ ├── routes/
│ │ ├── categoryHandler.ts
│ │ └── productHandler.ts
│ ├── extractors/
│ │ ├── productParser.ts
│ │ └── priceUtils.ts
│ ├── validators/
│ │ └── inputSchema.ts
│ └── utils/
│ ├── delays.ts
│ └── logger.ts
├── storage/
│ └── state.json
├── config/
│ ├── default-input.json
│ └── selectors.json
├── package.json
├── tsconfig.json
└── README.md
- E-commerce analysts use it to monitor price changes, so they can react faster to market shifts.
- Retail teams use it to track stock availability, so they can spot gaps in sizing or supply.
- Data engineers use it to feed BI dashboards, so reporting stays current without manual work.
- Growth teams use it to analyze product positioning, so promotions stay competitive.
How do I limit the number of products collected? You can define a maximum item count in the input configuration, which stops the run once the threshold is reached.
Can I adjust request speed? Yes. Concurrency and delay settings let you fine-tune how fast pages are processed based on your needs.
Does it support multiple categories at once? Multiple start URLs are supported, allowing parallel extraction across categories or collections.
What happens if a page fails to load? Timeouts and retries are handled gracefully, and failed requests are logged for review.
Primary Metric: Processes an average of 35–50 product pages per minute under standard rate limits.
Reliability Metric: Maintains a success rate above 98% across long-running catalog crawls.
Efficiency Metric: Uses controlled concurrency to keep memory usage stable under sustained loads.
Quality Metric: Captures over 99% of visible product fields with consistent formatting across categories.
