Zara Product Scraper — Prices, Sizes & Stock avatar

Zara Product Scraper — Prices, Sizes & Stock

Pricing

from $2.25 / 1,000 scraped products

Go to Apify Store
Zara Product Scraper — Prices, Sizes & Stock

Zara Product Scraper — Prices, Sizes & Stock

Scrape Zara into a clean 58-column dataset: price, discount, currency, colours, images, description and per-SKU sizes with stock, across 200+ country stores. Sweep the catalogue, one category, the sitemap, or paste product URLs. No account, API key or proxy needed.

Pricing

from $2.25 / 1,000 scraped products

Rating

0.0

(0)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

1

Bookmarked

4

Total users

3

Monthly active users

5 days ago

Last modified

Share

Zara Product Scraper — Prices, Sizes & Stock 🛍️

SIÁN Agency Store Myntra Product Scraper Nike Product Scraper AliExpress Product Scraper

🎉 Zara's catalogue in 96 country stores, priced in each market's own currency — 58 columns per product, including per-SKU sizes, stock and Zara's own per-SKU demand signal

Built for price analysts, assortment planners, resellers and anyone who wants zara.com as clean rows instead of screenshots.

🔎 What is the Zara Product Scraper — and when should you use it?

The Zara Product Scraper turns zara.com's public catalogue into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

Use it when you need: Zara products with current price, pre-discount price, discount percentage and the market's own currency. Also colours, images, the full category path, descriptions, composition, per-SKU sizes with stock, and the merchandising slot each product held in its grid.

Use something else when: you want a different Inditex brand. Use Zara Home Product Scraper for homeware, Bershka Product Scraper for Bershka, or Inditex Product Scraper when you want several brands in one dataset with one schema.

🤖 Use with AI agents

Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/zara-product-scraper

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

I want Zara product data using the Apify Actor `sian.agency/zara-product-scraper`.
Use it when I need: Zara products with price, old price, discount, currency, colours, images, category taxonomy, description, composition, and per-SKU sizes with stock.
Don't use it when: I want a different Inditex brand — use `zara-home-product-scraper`, `bershka-product-scraper`, or `inditex-product-scraper` for several brands at once.
How to call it: `mode` is either "overview" (walks the category tree and returns every product) or "detail" (takes product URLs I paste). In overview mode set `country` to the zara.com market segment, keep `allCategories` on, and cap the run with `maxItems`. Turn on `withSizes` when I need sizes, stock and descriptions — Zara's grid does not carry them.
Start with this input:
{
"mode": "overview",
"country": "de",
"allCategories": true,
"withSizes": true,
"maxItems": 100
}
Ask me which market and how many products, then run the Actor and summarise the results as a table.

Things you can ask your agent for:

  • Compare the same Zara dress across the German, British and Japanese stores and show me the price gaps in local currency.
  • Pull the first 500 products from the Zara new-in grid and list everything that is already discounted.
  • Take these 40 Zara product URLs and give me every size with its stock state and Zara's own demand signal.

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/zara-product-scraper.md.


📋 Overview

The Zara Product Scraper reads zara.com the way zara.com reads itself. It talks to the same catalogue endpoints the website uses, so you get the real record — not whatever survived an HTML parse.

What you get:

  • 58 columns per product: price, old price, discount, currency, colours, images, taxonomy, description, composition, availability, per-SKU sizes
  • 🌍 96 country stores: every market zara.com publishes, each priced in its own currency with the right divisor applied
  • 📐 Sizes and per-SKU stock: Zara's grid carries neither — one switch fetches them and merges them into the row
  • 📊 Merchandising rank: grid_position and is_pinned tell you where Zara chose to place a product in the grid, and which tiles it pinned there
  • 🆕 Drop detection: first_visible_date is when a product entered the catalogue — diff two runs and you have the new-arrivals feed
  • 🔗 Twinned SKUs and cross-market size ids: the same physical SKU under sibling style ids, and Zara's own mapping between a German S and a US S
  • 🧾 A bill you can audit: the source column on every row says which call produced it, so your invoice reconciles against the dataset
  • 💰 $2.50 per 1,000 products on the category sweep, and the price steps down as your Apify plan tier goes up

✨ Features

  • 🗂️ Category sweep: walk the whole tree, or name one category and take just that
  • 🗺️ Sitemap sweep: pick up catalogue items no category lists, for genuine full-catalogue coverage
  • 🔗 Paste your own URLs: hand it product links or bare ?v2= ids and get one full record each
  • 🎚️ Facet filters: filter by colour, size or any facet the category publishes, one filter per line
  • 💶 Price bounds: keep only what falls between your floor and ceiling, in the market's major units
  • ↕️ Sort: catalogue order, price ascending or descending, or novelty where the category offers it
  • 🌐 Any market: de for zara.com/de, us for zara.com/us, and so on across the 96 stores in the dropdown
  • 🧹 Deduplicated: the same product reached from two categories is counted and charged once
  • 📉 Honest run summary: products pushed, duplicates skipped, ids that no longer exist, and fetches that genuinely failed — reported apart, never merged

🎬 Quick Start

Pick a market, leave the category sweep on, cap the run, and press Run. That is the whole setup.

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~zara-product-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"mode": "overview",
"country": "de",
"allCategories": true,
"maxItems": 100
}'

🚀 Getting Started (3 Simple Steps)

Step 1: Choose your market

Set Market to the first segment of a Zara URL — de for zara.com/de, us for zara.com/us, gb, jp, and so on. Prices, names and stock are per market, and the country column travels with every row so a multi-market dataset stays honest.

Step 2: Choose what to scrape

Leave Sweep All Categories on for the catalogue. Turn it off and fill Single Category to take one grid. Or switch Run Mode to detail and paste product URLs. Turn on Fetch Sizes & SKUs when you need sizes, stock and descriptions.

Step 3: Run and download

Set Max Products so the first run is cheap, press Run, and export as JSON, CSV or Excel from the dataset tab.

That's it. Within a couple of minutes you'll have:

  • Every product in your market with price, old price, discount and currency
  • Colours, full image galleries and the complete category path
  • Sizes with per-SKU stock, when you asked for them
  • A run summary telling you exactly what was and was not fetched

📥 Input Configuration

FieldTypeRequiredDescription
modestringNooverview walks the categories, detail reads the URLs you paste. Default overview
countrystringNozara.com market segment, lowercase — de, us, gb, jp. Default de
languagestringNoTwo-letter language for names and descriptions. Empty takes the market default
allCategoriesbooleanNoSweep every category. On by default, and it wins over Single Category
categorystringNoOne Zara category by numeric id or slug. Only used when the sweep is off
fromSitemapbooleanNoAlso crawl the product sitemap for anything the categories missed. Bills at the detail rate
maxItemsintegerNoStop after this many distinct products. 0 means no cap. Default 100
withSizesbooleanNoFetch per-SKU sizes, stock and the description and merge them into each row. Charges both events
productUrlsarrayNoProduct URLs or bare ?v2= ids, one per line. Required in detail mode
sortstringNodefault, price-asc, price-desc or novelty. Options vary per category
filtersarrayNoFacet filters as GROUP=VALUE, one per line. Same group OR-ed, different groups AND-ed
minPriceintegerNoDrop products below this price, in the market's major units
maxPriceintegerNoDrop products above this price, in the market's major units
jitterMsintegerNoRandom pause before each request, in milliseconds. Default 0
proxyConfigurationobjectNoLeave it off. The Actor reaches Zara directly and a proxy adds cost without adding success

Example — sweep the German store:

{
"mode": "overview",
"country": "de",
"allCategories": true,
"maxItems": 500
}

Example — one category, discounted items only, with sizes:

{
"mode": "overview",
"country": "gb",
"allCategories": false,
"category": "2546081",
"withSizes": true,
"maxPrice": 50
}

Example — specific products:

{
"mode": "detail",
"country": "us",
"productUrls": [
"https://www.zara.com/us/en/ribbed-tank-top-p04424016.html?v2=418123456",
"418123456"
]
}

📤 Output

Results are saved to the Apify dataset with 58 columns per product. Export as JSON, CSV or Excel.

FieldTypeDescription
brandstringBrand key stamped on every row. Always zara on this Actor
product_idinteger/stringCatalogue id. The only column that is never null — the join key for everything else
urlstringCanonical product page for the market you scraped
sourcestringWhich call produced the row: overview, detail, or overview+detail
url_idinteger/stringNumeric URL id used by the six shared-catalogue brands. Null on Zara
referencestringInternal style reference, stable across markets
display_referencestringThe shorter reference printed on the page and the label
seo_product_idstringId used in Zara SEO URLs
seo_keywordstringURL slug for the product
namestringProduct name in the market language
name_enstringShared-catalogue brands only, null here
product_typestringCatalogue type of the record, e.g. Product or Bundle
kindstringZara grid classification of the tile, e.g. Wear
countrystringMarket the prices and names belong to
languagestringLanguage the names and descriptions came back in
store_idinteger/stringInternal store id. Shared-catalogue brands only, null here
catalog_idinteger/stringInternal catalogue id. Shared-catalogue brands only, null here
section_namestringTop level of the catalogue tree, e.g. WOMAN
section_name_enstringShared-catalogue brands only, null here — Zara publishes the section in section_name
family_namestringProduct family in the market language
family_name_enstringShared-catalogue brands only, null here — group on family_name
subfamily_namestringSub-level of the family in the market language
subfamily_name_enstringShared-catalogue brands only, null here
categoriesarrayShared-catalogue brands only, empty here — Zara reports the scraped category in category_id / category_name
category_idinteger/stringId of the category this row was scraped from
category_namestringName of the category this row was scraped from
pricenumberCurrent price in major units, divisor already applied
old_pricenumberPre-discount price. Null when the product is not reduced
currencystringISO currency of the market, e.g. EUR, GBP, JPY
discount_pctnumberPercentage off, computed from price and old price
on_specialbooleanShared-catalogue brands only, null here — use old_price and discount_pct
main_imagestringFirst image of the shown colour, full resolution
imagesarrayEvery image URL for the shown colour, in catalogue order
descriptionstringLong product description. Grid rows carry none — turn on the size fetch
additional_infostringShared-catalogue brands only, null here
keywordsstringShared-catalogue brands only, null here
assembly_urlstringShared-catalogue brands only, null here
color_namestringName of the colour this row represents
colorsarrayColour objects with id, name, reference, price, availability and hex
available_color_namesarrayColour names the grid offers for this style
compositionarrayMaterial breakdown per garment part, with the percentage of each fibre. Grid rows carry none — turn on the size fetch
carearrayShared-catalogue brands only, empty here — Zara's care text arrives inside description
variantsarrayOne entry per colour and size — see the table below
size_guidestringSet to enabled when the product page offers a size guide. Detail records only
availabilitystringStock state of the shown colour, e.g. in_stock, low_on_stock
is_buyablebooleanShared-catalogue brands only, null here — use availability and per-SKU availability
back_soonbooleanShared-catalogue brands only, null here
visibilitystringShared-catalogue brands only, null here
availability_datestringShared-catalogue brands only, null here — see first_visible_date
first_visible_datestringWhen the product first appeared in the catalogue. Detail records only
is_continuitybooleanCarryover line versus seasonal drop. Shared-catalogue brands only, null here
is_pinnedbooleanWhether merchandising pinned the tile to a fixed slot
grid_positionintegerPosition of the tile inside the category grid — the raw merchandising rank
join_lifestringShared-catalogue brands only, null here
sustainability_showbooleanShared-catalogue brands only, null here
sustainabilityobjectShared-catalogue brands only, null here
traceabilityobjectSupply-chain traceability node. Shared-catalogue brands only, null here
certified_materialsarrayCertified material entries. Shared-catalogue brands only, null here

Inside variants — one entry per colour and size (Zara):

FieldDescription
skuStock-keeping unit id for this colour and size
color / color_idColour name and id of the SKU
size / size_idSize label as the market prints it, plus Zara's size id
price / old_priceSKU price and pre-discount price in major units
availabilityPer-SKU stock state
referencePer-SKU reference
demandZara's own sell-through signal for the SKU
equivalent_size_idCross-market size id — a German S and a US S resolve to the same value
twinned_skusThe same physical SKU under sibling style ids

Example row (trimmed):

{
"brand": "zara",
"product_id": 418123456,
"url": "https://www.zara.com/de/de/ribbed-tank-top-p04424016.html",
"source": "overview+detail",
"name": "ÄRMELLOSES RIPP-TOP",
"price": 12.95,
"old_price": 19.95,
"currency": "EUR",
"discount_pct": 35.1,
"country": "de",
"language": "de",
"family_name_en": "TOPS",
"color_name": "Ecru",
"grid_position": 7,
"first_visible_date": "2026-06-14T00:00:00Z",
"variants": [
{ "sku": 419881234, "size": "S", "availability": "in_stock", "demand": "DEMAND_REGULAR", "equivalent_size_id": 4 },
{ "sku": 419881235, "size": "M", "availability": "low_on_stock", "demand": "DEMAND_HIGH", "equivalent_size_id": 5 }
]
}

Columns to read carefully. Zara's category grid ships no detail payload at all, so description, variants, composition, size_guide and first_visible_date are filled on detail records only — a plain overview sweep returns them empty. Switch on Fetch Sizes & SKUs, or use detail mode, if any of those five is why you came. A further set of columns belongs to the six shared-catalogue brands and is always null on Zara, because zara.com's API does not publish them: url_id, store_id, catalog_id, name_en, section_name_en, family_name_en, subfamily_name_en, categories, on_special, additional_info, keywords, assembly_url, care, is_buyable, back_soon, visibility, availability_date, is_continuity, join_life, sustainability_show, sustainability, traceability and certified_materials. They are in the schema so one table fits all seven brands.

💼 Use Cases & Examples

1. Cross-market price comparison

A pricing analyst wants to know what the same garment costs in six countries.

Input: the same category id, run once per market Output: price, old price, discount and currency per market, with country on every row Use: grey-market spotting, launch pricing, currency-adjusted benchmarks

2. New-arrivals and drop detection

A trend researcher wants to know what entered the catalogue this week.

Input: a scheduled run with Fetch Sizes & SKUs on Output: first_visible_date per product Use: diff two runs, keep the new ids, and you have the drop feed without watching the site

3. Size and stock monitoring

A reseller wants to know which sizes are actually available before sourcing.

Input: product URLs in detail mode, or an overview sweep with sizes on Output: per-SKU size, stock state and Zara's own demand signal Use: sourcing decisions, restock alerts, sell-through estimates

4. Assortment and merchandising analysis

A category manager wants the shape of a competitor's range, not only its contents.

Input: a full category sweep Output: grid_position, is_pinned, family and subfamily taxonomy, colour counts Use: range width by family, what Zara pushes to the top, colour and price architecture

5. Discount and markdown tracking

A retail analyst wants to see how deep the season's markdowns run.

Input: a weekly sweep with maxItems: 0 Output: old_price and discount_pct across the catalogue Use: markdown cadence, depth by family, comparison against your own calendar

6. Catalogue enrichment

A marketplace team has Zara references and needs the rest of the record.

Input: references or URLs in detail mode Output: description, composition, images, colours, per-SKU sizes Use: filling product pages, feed enrichment, matching against your own catalogue

🔗 Integration Examples

JavaScript/Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('sian.agency/zara-product-scraper').call({
mode: 'overview',
country: 'de',
allCategories: true,
withSizes: true,
maxItems: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} products`);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('sian.agency/zara-product-scraper').call(
run_input={
'mode': 'overview',
'country': 'gb',
'allCategories': True,
'maxItems': 500,
'maxPrice': 50,
}
)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item['name'], item['price'], item['currency'])

cURL

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~zara-product-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"mode": "detail",
"country": "us",
"productUrls": ["418123456"]
}'

Automation Tool Workflows (n8n, Zapier, Make, etc.)

  1. Trigger: schedule or webhook
  2. HTTP Request: start a run and wait for the dataset
  3. Process: diff against last week's product_id and price
  4. Action: write to your warehouse, or alert on new arrivals and markdowns

📊 Performance & Pricing

💰 View current pricing

Performance

  • ~20 products per second on the category sweep
  • 512 MB memory, no proxy, no browser — direct API reads
  • Duplicates removed before anything is charged, so you pay once per distinct product

How you are billed

Three events, and the source column on every row tells you which one applied. Count the rows by source and you have rebuilt your own invoice.

What you ransource on the rowEventPrice
Run startActor start$0.005 once
Category or grid sweepoverviewScraped product$0.0025
Pasted URL, or a sitemap rowdetailScraped product detail$0.0075
Sweep row plus its SKU fetch (withSizes)overview+detailboth$0.01

Two switches move a row onto the higher-priced event. Also Crawl the Sitemap cannot use the bulk endpoint — it is one request per product, so those rows bill at $0.0075 instead of $0.0025. Fetch Sizes & SKUs genuinely costs both calls and charges both, so those rows cost $0.01. The category sweep is the default and the cheap path; use the sitemap when completeness matters more than price.

Cost examples

  • 100 products, category sweep: $0.255
  • 1,000 products, category sweep: $2.505
  • 1,000 products with sizes and descriptions: $10.005
  • 100 pasted product URLs: $0.755

Prices shown are the BRONZE tier. They step down at SILVER, GOLD, PLATINUM and DIAMOND, so heavier use costs less per row.

❓ Frequently Asked Questions

Q: Why are sizes missing from my results? A: Zara's category grid genuinely does not carry sizes or descriptions — that is the site, not the scraper. Switch on Fetch Sizes & SKUs and each row is enriched with per-SKU sizes, stock and the description.

Q: Can I search by keyword? A: No, and neither can anything else. Zara publishes no server-side search endpoint. Every "Zara search scraper" filters client-side over the category tree, so name a category or sweep them all and filter the results yourself.

Q: Which markets are supported? A: The 96 markets zara.com publishes, read from Zara's own sitemap index rather than guessed. Set Market to the first segment of a Zara URL. Prices come back in that market's own currency with the correct divisor applied. (The sibling Actors for the other Inditex brands cover ~216 markets each — those catalogues are open in far more countries than zara.com is.)

Q: Does it return customer reviews? A: No. Zara does not publish ratings or reviews on its product pages, so no scraper can return them. Any actor promising Zara reviews is promising an empty list.

Q: How do I find a category id? A: Open a Zara category page and take the numeric id from the URL, or leave Sweep All Categories on and let the Actor walk the tree for you.

Q: What does first_visible_date need? A: A detail record. Turn on Fetch Sizes & SKUs during a sweep, or use detail mode. An overview-only run leaves it null.

Q: Is the price already converted? A: It is already in the market's major units with the correct divisor applied, and currency tells you which currency. No conversion between currencies is performed — a Japanese run returns JPY.

Q: Do I need a proxy? A: No. Leave the proxy off. The Actor reaches Zara's endpoints directly from Apify, verified on the platform, and a proxy only adds cost.

Q: What output formats are available? A: JSON, CSV and Excel, exported straight from the dataset. There is also a run summary in the key-value store with the counts for the run.

🐛 Troubleshooting

Zero products returned

  • The category you named is a landing page, not a product grid — those return no ids
  • Your filters or price bounds excluded everything; widen them
  • Leave Sweep All Categories on and let the Actor find the grids

The run summary says complete: false

  • Some fetches failed for transport reasons, so the dataset is short. Re-run to fill the gap
  • Ids reported as gone are a different thing: those products no longer exist in that market

A pasted URL is rejected

  • A Zara URL without ?v2= carries only an SEO id, which no endpoint accepts. The Actor opens the page once to resolve it, so paste the full URL rather than a fragment
  • A bare number is treated as the ?v2= product id

The sort or filter option stops the run, or the sweep came back short

  • Sort options and facet groups are published per category, and many Zara categories publish none at all
  • If you named a single category and it does not offer the one you picked, the Actor stops and lists what is available there
  • During a Sweep All Categories run it skips that category instead and counts it under categoriesSkipped — so a sort or filter can quietly shrink a sweep. Check that count in the run summary before concluding the catalogue is small

Sitemap mode is slower and dearer than expected

  • That is the trade: it is one request per product instead of one per hundred, and those rows bill at the detail rate. Use the category sweep unless you need the products no category lists

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the legality of web scraping.

Trademarks. Zara is a trademark of Industria de Diseño Textil, S.A. This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Inditex or any of its brands, and it reads only publicly available catalogue pages.


🤝 Support

Telegram Support

Join our active support community

  • 🐛 Found a bug? File an issue in the Apify Console Issues tab
  • ⭐ Loving the tool? Leave a 5-star review — it helps us build more
  • Check SIÁN Agency Store for more automation tools
  • 📧 apify@sian-agency.online

Built by SIÁN Agency | More Tools