Zara Home Product Scraper — Prices, Sizes & Stock avatar

Zara Home Product Scraper — Prices, Sizes & Stock

Pricing

from $2.70 / 1,000 scraped products

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

Zara Home Product Scraper — Prices, Sizes & Stock

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

Pricing

from $2.70 / 1,000 scraped products

Rating

0.0

(0)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Zara Home Product Scraper — Prices, Sizes & Stock 🏠

SIÁN Agency Store IKEA Product Scraper Crate & Barrel Product Scraper Leroy Merlin Product Scraper

🎉 Zara Home's catalogue in 200+ country stores, priced in each market's own currency — 58 columns per product, with per-SKU stock, GTIN barcodes and promotion end dates

Built for homeware buyers, price analysts and marketplace teams who need zarahome.com as clean rows instead of screenshots.

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

The Zara Home Product Scraper turns zarahome.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 Home products with current price, pre-discount price, discount percentage and the market's own currency. Also colours, images, the full category path, descriptions, composition and care, and per-SKU sizes with stock, GTIN barcodes, dimensions and weight.

Use something else when: you want a different Inditex brand. Use Bershka Product Scraper or Zara Product Scraper for fashion, 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-home-product-scraper

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

I want Zara Home product data using the Apify Actor `sian.agency/zara-home-product-scraper`.
Use it when I need: Zara Home products with current price, pre-discount price, discount percentage and the market's own currency, plus colours, images, full category taxonomy, descriptions, composition, care, and per-SKU sizes with stock, GTIN barcodes, dimensions and weight.
Don't use it when: I want a different Inditex brand — use `bershka-product-scraper` or `zara-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 two-letter market, keep `allCategories` on, and cap the run with `maxItems`.
Start with this input:
{
"mode": "overview",
"country": "DE",
"allCategories": 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 Home product across the German, Spanish and British stores and show me the price gaps in local currency.
  • Pull 300 Zara Home products and list everything that is discounted, with the date the promotion ends.
  • Give me every Zara Home SKU in this category with its size, stock state and barcode.

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


📋 Overview

The Zara Home Product Scraper reads zarahome.com the way the site reads itself. It talks to the same catalogue endpoints, so you get the real record — not whatever survived an HTML parse. The whole product comes back from the cheap sweep, sizes and all.

What you get:

  • 58 columns per product: price, old price, discount, currency, colours, images, taxonomy, description, composition, care, per-SKU sizes
  • 🌍 218 country stores: each priced in its own currency, with the market's divisor already applied
  • 📐 Per-SKU sizes and stock in the cheap sweep: colour by size, with buyable and back-soon flags, no second request needed
  • 🏷️ GTIN barcodes: the join key to every other retail dataset
  • 🗓️ Promotion windows: per-SKU price start and end dates, so you know the date a markdown ends, not only that one is running
  • 🧾 A bill you can audit: the source column on every row says which call produced it, so your invoice reconciles against the dataset
  • 💰 $3.00 per 1,000 products on the category sweep, and the price steps down as your Apify plan tier goes up
  • 🪑 Homeware specifics: assembly and instruction sheet links, named physical dimensions and gram weight per SKU

✨ 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 ids and get one full record each
  • 🎚️ Facet filters: color=, size=, category= and discount= shortcuts, or any facet group the site publishes
  • 💶 Price bounds: keep only what falls between your floor and ceiling, in the market's major units
  • ↕️ Sort: catalogue order, price ascending or price descending
  • 🧹 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, press Run.

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~zara-home-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 a two-letter country code — DE, ES, FR, GB, JP and around 210 more. Prices, names and stock are per market, and the country column travels with every row.

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.

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
  • Per-SKU sizes with stock, barcodes, dimensions and weight
  • 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
countrystringNoTwo-letter store country, e.g. DE, ES, FR, GB, JP. Default DE
languagestringNoTwo-letter language for names and descriptions. Empty takes the store default
allCategoriesbooleanNoSweep every category. On by default, and it wins over Single Category
categorystringNoOne category by slug or numeric id. 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
productUrlsarrayNoProduct URLs or bare product ids, one per line. Required in detail mode
sortstringNodefault, price_asc or price_desc, applied over the ids the category ships
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
batchSizeintegerNoProduct ids per call. Default 100, maximum 200
jitterMsintegerNoRandom pause before each request, in milliseconds. Default 0
proxyConfigurationobjectNoLeave it off. The Actor reaches the API directly and a proxy adds cost without adding success

Example — sweep one market:

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

Example — one category, filtered by colour and price-capped:

{
"mode": "overview",
"country": "DE",
"allCategories": false,
"category": "1020447643",
"filters": ["color=Blau"],
"maxPrice": 40
}

Facet values are published per category and change with the season. discount= takes the markdown percentages that category currently carries (30, 50, …), not a yes/no flag — name a value the category does not offer and the run stops and prints the ones it does.

Example — specific products:

{
"mode": "detail",
"country": "DE",
"productUrls": [
"https://www.zarahome.com/de/-c0p123456789.html",
"123456789"
]
}

📤 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 zarahome 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 or detail
url_idinteger/stringNumeric id used in the product URL
referencestringInternal style reference, stable across markets
display_referencestringThe shorter reference printed on the page and the label
seo_product_idstringZara SEO id. Null on this brand
seo_keywordstringZara URL slug. Null on this brand
namestringProduct name in the market language
name_enstringEnglish product name, when the catalogue carries one
product_typestringCatalogue type of the record, e.g. Product or Bundle
kindstringZara grid classification. Null on this brand
countrystringMarket the prices and names belong to
languagestringLanguage the names and descriptions came back in
store_idinteger/stringInternal store id for the market
catalog_idinteger/stringInternal catalogue id for the market
section_namestringZara-only column. Null on this brand — this catalogue publishes the section in English only, in section_name_en
section_name_enstringEnglish name of the section
family_namestringProduct family in the market language
family_name_enstringEnglish product family — group on this across markets
subfamily_namestringSub-level of the family in the market language
subfamily_name_enstringEnglish sub-level of the family
categoriesarrayEvery category the product is filed under, as {id, name}
category_idinteger/stringZara-only column. Null on this brand
category_namestringZara-only column. Null on this brand
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_specialbooleanCatalogue flag for a promotional product
main_imagestringFirst image of the shown colour, full resolution
imagesarrayEvery image URL for the shown colour, in catalogue order
descriptionstringLong product description, falling back to the short one
additional_infostringExtra copy the catalogue attaches to the product. Measured empty on every product we sampled — treat it as a bonus
keywordsstringMerchandising keywords attached to the product. Measured empty on every product we sampled — treat it as a bonus
assembly_urlstringLink to an assembly or instruction sheet, where one exists
color_namestringName of the colour this row represents
colorsarrayColour objects with id, name and reference
available_color_namesarrayZara-only column. Null on this brand
compositionarrayMaterial breakdown per garment part, with the percentage of each fibre
carearrayWashing and care instructions as {id, name, description}
variantsarrayOne entry per colour and size — see the table below
size_guidestringZara-only column. Null on this brand
availabilitystringZara-only column. Null here — this brand reports stock per SKU in variants
is_buyablebooleanWhether the product can currently be added to a basket
back_soonbooleanCatalogue flag for a restock that is already scheduled
visibilitystringCatalogue visibility state, e.g. visible or hidden
availability_datestringDate the product becomes or became available
first_visible_datestringZara detail column. Null on this brand
is_continuitybooleanTrue for a carryover line, false for a seasonal drop
is_pinnedbooleanZara grid column. Null on this brand
grid_positionintegerZara grid column. Null on this brand
join_lifestringJoin Life sustainability label text, when the product carries one
sustainability_showbooleanWhether the product page shows a sustainability badge
sustainabilityobjectFull sustainability node off the shown colour
traceabilityobjectSupply-chain traceability node off the shown colour
certified_materialsarrayCertified material entries off the shown colour

Inside variants — one entry per colour and size:

FieldDescription
skuStock-keeping unit id for this colour and size
color / color_idColour name and id of the SKU
sizeSize label as the market prints it
partnumberCatalogue part number
price / old_priceSKU price and pre-discount price in major units
barcodeGTIN barcode of the SKU — the join key to other retail datasets
price_start_date / price_end_dateWhen the current price took effect and when it expires
old_price_start_date / old_price_end_dateThe same window for the pre-discount price
is_buyable / back_soonWhether this SKU can be bought now, and whether a restock is scheduled
dimensions / weightNamed physical axes and gram weight of the SKU
originManufacturing country of the SKU

Example row (trimmed):

{
"brand": "zarahome",
"product_id": 123456789,
"url": "https://www.zarahome.com/de/-c0p123456789.html",
"source": "overview",
"price": 19.99,
"old_price": 29.99,
"currency": "EUR",
"discount_pct": 33.3,
"country": "DE",
"family_name_en": "TOPS",
"is_continuity": false,
"variants": [
{ "sku": 44112233, "size": "M", "barcode": "8445123456789", "price": 19.99, "is_buyable": true,
"price_start_date": "2026-08-01T00:00:00Z", "price_end_date": "2026-08-31T23:59:59Z", "weight": 180 }
]
}

Columns that belong to other brands. first_visible_date, grid_position, is_pinned, available_color_names, seo_keyword, section_name, category_id, category_name and size_guide come from Zara and stay null here. traceability and certified_materials are in the schema and often empty — treat them as a bonus rather than a guarantee. No Inditex brand publishes ratings or reviews, so no scraper can return them.

💼 Use Cases & Examples

1. Price and markdown tracking

A retail analyst wants to see how deep and how long the markdowns run.

Input: a weekly sweep of the market Output: old_price, discount_pct, on_special, and per-SKU promotion start and end dates Use: markdown cadence and depth, and the date each promotion ends

2. Size and stock monitoring

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

Input: a category sweep, or product URLs in detail mode Output: per-SKU size, stock, buyable and back-soon flags Use: sourcing decisions, restock alerts, sell-through estimates

3. Barcode-keyed catalogue matching

A marketplace needs to match these products against its own inventory.

Input: a full sweep of one market Output: GTIN barcodes per SKU alongside price, size and stock Use: joining to any other retail dataset without fuzzy name matching

4. Cross-market price comparison

A pricing analyst wants to know what the same product costs in several countries.

Input: the same run repeated per country Output: price, old price, discount and currency per market Use: grey-market spotting, launch pricing, currency-adjusted benchmarks

5. Assortment and range analysis

A category manager wants the shape of the range, not only its contents.

Input: a full category sweep Output: family and subfamily taxonomy, colours, is_continuity, price distribution Use: range width per family, carryover versus seasonal split, price architecture

🔗 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-home-product-scraper').call({
mode: 'overview',
country: 'DE',
allCategories: 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-home-product-scraper').call(
run_input={
'mode': 'overview',
'country': 'DE',
'allCategories': True,
'maxItems': 500,
'maxPrice': 40,
}
)
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-home-product-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"mode": "detail",
"country": "DE",
"productUrls": ["123456789"]
}'

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 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

Two product events, and the source column on every row tells you which one applied. Your invoice reconciles against the dataset.

What you ransource on the rowEventPrice
Run startActor start$0.005 once
Category sweepoverviewScraped product$0.003
Pasted URL, or a sitemap rowdetailScraped product detail$0.0075

One switch moves a row onto the higher-priced event. Also Crawl the Sitemap cannot use the bulk endpoint — it is one request per product instead of one per hundred, so those rows bill at $0.0075 instead of $0.003, 2.5× the sweep price. A 1,000-product sitemap sweep costs $7.50 where the same 1,000 products from the category sweep cost $3.00. Sitemap mode buys completeness, and the category sweep is the default and the cheap path.

Cost examples

  • 100 products, category sweep: $0.305
  • 1,000 products, category sweep: $3.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: Do I need a second run to get sizes? A: No. This brand's catalogue returns colours, sizes, per-SKU stock, barcodes, dimensions and weight in the cheap category sweep. Detail mode exists for pasted URLs, not because the sweep is missing anything.

Q: Can I search by keyword? A: No, and neither can anything else. The site publishes no server-side search endpoint. Name a category or sweep them all and filter the results yourself.

Q: Which markets are supported? A: Around 210 country stores. Set Market to a two-letter country code. Prices come back in that market's own currency with the correct divisor applied.

Q: Does it return customer reviews? A: No. This brand does not publish ratings or reviews through its catalogue, so no scraper can return them.

Q: How complete is the data? A: Measured coverage on Zara Home: price, images, GTIN barcode and description all at 100%. Every column in the table above is documented with what it holds and which brands fill it.

Q: Do I need a proxy? A: No. Leave the proxy off. The Actor reaches the catalogue API 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 container rather than 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 response timed out on a large market

  • Lower Batch Size from 100. Some markets return very large product records

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 Home 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