Zara Scraper - Prices, Sizes, Stock and Images avatar

Zara Scraper - Prices, Sizes, Stock and Images

Pricing

from $1.84 / 1,000 product returneds

Go to Apify Store
Zara Scraper - Prices, Sizes, Stock and Images

Zara Scraper - Prices, Sizes, Stock and Images

Reads Zara's own catalogue: name, price, previous price and discount, currency, every colour a garment comes in, sizes with per-size stock and SKU, the full image gallery and the product link. Search by keyword, paste category or product links, or give category ids. Works on any Zara country store.

Pricing

from $1.84 / 1,000 product returneds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

Zara Scraper: prices, sizes and stock from any Zara country store

Type a search term, paste Zara category or product links, or give category ids, and pick a country store. Each product colour comes back as a row with its name, price and markdown, currency, colours, sizes with SKU and stock, photos, reference and link. Stock is Zara's own word for each size, like in stock or sold out, never a number, because Zara publishes no count.

InputSearch terms, Zara category or product links, or category ids, plus a country
OutputOne row per product colour
Ceiling5,000 products per run. With sizes on, about 2,500 fit in the default hour
Account neededNone
Price$1.84 per 1,000 products, flat on every plan

πŸ” What Zara Scraper does

It lists products the way Zara's own grid does, once per colour. A black blazer and the same blazer in brown are two rows. Each row carries the garment's full colour list, so group on parentReference if you would rather count garments than colours.

Prices arrive as plain numbers in the store's currency. Japan, Korea, Vietnam, Chile and Iceland quote whole units, so the decimal count comes from each market rather than a guess. Seventy-one country stores are recognised, and the same shirt is often marked down in one and full price in the next.

Zara never answers "no results". Search it for something it does not sell and it sends back about 300 products picked by similarity, and they look convincing: refrigerator on the US store gives cooler boxes. Those are dropped, not charged, and you get one free note so you can fix the term. Ordinary misspellings like jeens or linnen shirt still come back as real matches, and so does a reference like 1957/102.

Zara also pins the same garment into several spots on one grid. Repeats are dropped, so a category page showing 76 tiles gives you its 51 distinct garment colours, and you pay for 51.

Thirty linen shirts with sizes took 43 seconds on a test run.

πŸ“₯ What you give it

{
"searchTerms": ["linen shirt"],
"country": "us",
"maxItems": 30
}
FieldIf you leave it outWhat it is
searchTermsnothing is searchedWhat to look for, one per line. A reference works too: 1957/102 or 01957102 returns that garment.
startUrlsnoneZara category, product or search links. Copy a category link after the page has loaded, so it carries the v1= number. A link without it still works, it just has to be looked up by name first.
categoryIdsnoneThe v1= numbers of categories, if you already have them. Not the number after -l in the link.
countryusThe country code from a Zara address: zara.com/es/es/ is es. It decides the currency and what is on sale. Links keep their own country.
languageenThe language code from the same address. Copy both from a real Zara link.
maxItems601 to 5,000, counted across everything in the run.
includeSizesonOne extra lookup per product for size names and per-size stock. Off is much faster and costs the same per row.
onlyInStockoffKeeps only items Zara marks in_stock. Anything else, low stock included, is dropped before the dataset and not charged.
includeRelatedMatchesoffKeeps Zara's look-alike suggestions when a search has no real match. They are then delivered and charged, marked related.
proxyConfigurationnot usedOnly for your own servers. Addresses you list here are tried first. Leave it alone otherwise.

The form opens with linen shirt and a cap of 60 filled in. That is an example to edit, not a setting to keep.

πŸ“€ What you get back

A real row from a real run on the US store, with the photo list cut to one:

{
"productId": "545493196",
"productReference": "C09621886121000-I2026",
"parentReference": "09621886-I2026",
"displayReference": "9621/886",
"seoProductId": "09621886",
"name": "100% LINEN CHECKED SHIRT",
"description": "Regular fit shirt made of linen fabric. Button-down collar and long sleeves with buttoned cuffs. Front button-up closure.",
"brand": "zara",
"section": "MAN",
"family": "SHIRT",
"subfamily": "Summer Shirt LS",
"productTags": [],
"price": 79.9,
"oldPrice": null,
"discountPercentage": null,
"currency": "USD",
"availability": "in_stock",
"colorId": "121",
"colorName": "Khaki",
"colorHex": "#68564A",
"allColors": [{ "name": "Khaki", "hex": "#68564A" }],
"sizes": [
{ "size": "S", "availability": "in_stock", "sku": "545493200", "price": 79.9 },
{ "size": "M", "availability": "in_stock", "sku": "545493197", "price": 79.9 },
{ "size": "L", "availability": "in_stock", "sku": "545493198", "price": 79.9 },
{ "size": "XL", "availability": "in_stock", "sku": "545493199", "price": 79.9 }
],
"sizesInStock": ["S", "M", "L", "XL"],
"sizeLookup": "ok",
"images": [
"https://static.zara.net/assets/public/d346/b06f/92e048cbbcb1/30dcbe20d0b9/09621886121-f1/09621886121-f1.jpg?ts=1785938821924&w=1024"
],
"url": "https://www.zara.com/us/en/100-linen-checked-shirt-p09621886.html?v1=545493196",
"country": "us",
"language": "en",
"store": "11719",
"categoryId": null,
"categoryPath": null,
"searchTerm": "linen shirt",
"matchType": "exact",
"position": 2,
"scrapedAt": "2026-09-20T02:35:52.941Z"
}
FieldWhat it is
productIdThis colourway's id, the v1= number in its link. Stable enough to join runs on.
parentReference, displayReferenceThe garment across all its colours, and the reference as the website prints it.
price, oldPrice, discountPercentage, currencyToday's price in the store's currency. oldPrice and discountPercentage stay null unless Zara shows a struck-through price.
availabilityZara's word for it: in_stock, low_on_stock, out_of_stock or coming_soon.
colorName, colorHex, allColorsThis row's colour, and every colour the garment comes in.
sizes, sizesInStock, sizeLookupEach size with its stock word, SKU and price. sizes is null, never an empty list, when the lookup did not come back or was switched off, and sizeLookup says which.
images, urlThe photo gallery and the product link.
searchTerm, matchType, categoryId, categoryPath, positionWhere the row came from. matchType is exact, or related for a suggestion you chose to keep.
section, family, subfamily, productTagsZara's own classification, such as MAN and SHIRT.

🧾 Reading the output

Real product rows have no charged field at all. Every free row has one, set to false, so dropping rows where charged is false leaves you with just the products.

RowHow to spot itCharged
A producta productId and no charged fieldyes
The sample_sample: trueno
A note_diagnostic: true, with an errorCode, an error and a hintno

The sample row appears when a run has no search terms, links or category ids. It shows the shape of a row and is not live data.

errorCodeWhat it means
NO_DIRECT_MATCHZara had nothing matching the term and offered look-alikes, which were dropped. Check the spelling.
NO_RESULTSThe search came back empty in that country. Try a plainer word.
UNKNOWN_MARKETZara runs no store at that country and language pair.
BAD_URL, BAD_CATEGORY_IDNot a Zara link, or a category id that is not a number.
CATEGORY_NOT_FOUNDA category link that could not be matched. Copy it again once the grid has loaded.
CATEGORY_EMPTYA menu entry with no products in it, usually a landing page.
PRODUCT_NOT_FOUNDZara no longer sells that product in this store.
SEARCH_REFUSED, BLOCKED, NETWORK, API_ERROR, BAD_JSONZara did not answer that part of the run, or answered in a shape the actor cannot read. Run it again later.
RUN_OUT_OF_TIMEThe run reached its time limit. What was written before it is yours, and what was not is not charged.

▢️ How to run it

  1. Open Zara Scraper and click Try for free.
  2. Type what you want into Search terms, or paste category or product pages into Zara links.
  3. Set Country and Language to the two codes in a Zara address, us and en for zara.com/us/en.
  4. Set Maximum products. Leave Fetch sizes and per-size stock on unless prices and photos are all you need.
  5. Click Start, then download the dataset as JSON, CSV or Excel.

πŸ’° How much does it cost?

$1.84 per 1,000 products, flat on every Apify plan, whether sizes are on or off.

Not charged: the sample row, every note above, Zara's look-alike suggestions unless you switch them on, repeated tiles, items dropped by onlyInStock, and anything a run did not get to write before its time limit.

maxItems caps the whole run, so it is also the most you can spend on products in one go.

πŸ’‘ What people use it for

  • Pricing the same garment in several countries, each in its own currency. Sale timing differs between countries too.
  • Following a category through a sale, since oldPrice and discountPercentage fill in the moment Zara strikes a price through.
  • Keeping a size-by-size stock sheet for a short list of products, on a schedule.
  • Turning a list of Zara references into full product rows, one search term per reference.

🚧 What it does not do

  • No stock counts. Zara publishes a word per size and no number behind it. Nobody can give you "7 left" from the public site.
  • No per-shop stock. This is the online catalogue, not what a particular shop has on its rails.
  • No fabric composition or care instructions. They are not collected.
  • No reviews or ratings. Zara does not publish them.
  • No price history. You get what the store shows during the run. Schedule it and compare runs.
  • Search order is Zara's own and shifts between runs. For a repeatable set, use a category.
  • Zara only. A link from another site comes back as a free BAD_URL note.
  • Editorial banners inside a grid are skipped rather than returned as empty rows.

🧭 Which fashion and retail scraper do you need?

If you wantUse
Zara products with sizes, stock and pricesThis one
Shein's catalogue: ids, titles, links and images, without pricesShein Catalog Scraper
A Shopify store's whole catalogue, variants and stockShopify Products Scraper
An alert when a product page changes price or goes out of stockProduct Price and Stock Monitor
Target products with promotions and store pickup stockTarget.com Product Scraper

❓ Questions people ask

Do I need a Zara account or an API key? No. It reads the public catalogue, signed out.

How do I get every product in a category? Paste the category link and set Maximum products above the number of items in it. With sizes on, allow about a minute for every 85 products.

Why are there two rows with the same name? They are two colours of one garment. Group on parentReference, and tell them apart with colorName or colorId.

Why is oldPrice usually null? Because most things are not on sale. It fills in when Zara shows a struck-through price.

Can I track prices over time? Yes. Run it on a schedule against the same categories and compare price between runs, joining on productId.

Is this legal? It reads public product pages and collects no personal data. Apify's write-up on the legality of web scraping is a good starting point. We are not lawyers.

πŸ†˜ If something breaks

Open the Issues tab on the actor page and send the input you used and the run ID. The note rows in the dataset usually name the reason already.