# Fashion Retail Market Data API - Prices, Discounts, Stock (`nabeelbaghoor/fashion-retail-market-data-api`) Actor

Read product-level fashion, beauty and home retail market data: current and full price, advertised discount, stock, sell-out, colour, pattern, fabric and category for each product option, by retailer, brand, market and week. Competitor pricing and assortment intelligence. Bring your own key.

- **URL**: https://apify.com/nabeelbaghoor/fashion-retail-market-data-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** E-commerce, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 product option returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Fashion Retail Market Data API - Prices, Discounts, Stock

Pull competitor product data from thousands of fashion, beauty and home retailers: current price, full price, discount, stock and sell-out for every product option, filtered by retailer, brand, category, market and week.

### What it returns

- **One row per product option**: one product in one colourway at one retailer, for the week you choose.
- **Pricing**: current selling price, full (highest observed) price, first price, advertised discount %, deepest and first discount %, and whether it has ever been discounted.
- **Stock and demand**: in stock, sell-out % of sizes, number of sizes (SKUs), restock count, days in stock and days to majority sell-out.
- **Product attributes**: brand, gender, predominant colour and pattern, fabric composition with percentages, category path, activewear type and sport, average rating and number of reviews.
- **Links**: product page URL and image URLs.
- Every column the provider returned is kept under `attributes`, with the most used ones lifted into their own columns.
- A retailer name that matched nothing, or a query with no products, becomes its own uncharged row with a note, never a silent gap.

The data comes from the EDITED market data API, which covers 90,000 brands and more than 5 billion SKUs across apparel (with footwear and accessories), beauty and home, with weekly history for the past two years.

### Input

| Field | What it does |
| --- | --- |
| Retailers | Retailer names or slugs, one per line (Zara, H\&M, ASOS). Each is looked up, then searched separately, up to 50 options each. |
| Market | Two-letter market code such as UK, US, DE. Also picks the right country for each retailer. |
| Product category | A category name (dresses, jeans, sneakers, mascara) or numeric id. Includes everything beneath it. |
| Brands | Brand names, matched as a phrase. Up to 50. |
| Gender, Colours, Patterns, Fabric contains, Retailer tier | Dropdowns with the provider's own fixed values. |
| Product name search | Full-text search on the product name, with OR, NOT and quoted phrases. |
| Minimum / maximum price | In normal currency units. |
| Minimum discount %, Minimum sell-out % | 0 to 100. |
| In stock only, Discounted only | Checkboxes. |
| Launched on or after | New arrivals since a date. |
| Snapshot date | The week to read, up to two years back. Blank means this week. |
| Sort by, Sort order | Choose which products fill the 50 per retailer: cheapest, deepest discount, best selling. |
| Vertical, Currency | Apparel, beauty or home; any ISO currency code. |
| Maximum results | Cap across the whole run. |
| API key | Your own key. See the FAQ. |

At least one filter is required. An empty input ends the run cleanly with a message saying what to fill in.

### Example output

```json
{
  "requestedRetailer": "Zara",
  "retailerSlug": "zara",
  "snapshotDate": "2026-09-26",
  "evaluatedWindow": "2026-09-20:2026-09-26",
  "vertical": "apparel",
  "currency": "GBP",
  "found": true,
  "optionId": "a1b2c3d4e5",
  "productName": "Satin Midi Slip Dress",
  "brand": "Zara",
  "retailer": "Zara (UK)",
  "market": "UK",
  "price": 29.99,
  "fullPrice": 45.99,
  "discountPercent": 35,
  "inStock": true,
  "selloutPercent": 40,
  "productUrl": "https://www.zara.com/uk/en/...",
  "attributes": {
    "predominant_colour": "black",
    "predominant_pattern": "plain",
    "composition": "polyester 100%",
    "sku_count": 5,
    "normalised_average_rating": 4.3,
    "number_of_reviews": 18,
    "image_urls": ["https://..."]
  },
  "retrievedAt": "2026-09-26T09:14:52.118Z",
  "note": null
}
```

Values are illustrative. The `attributes` keys are the snake\_case form of the column labels the provider returns.

### FAQ

#### What is a fashion retail market data API used for?

Competitor price benchmarking, discount and markdown tracking, assortment gap analysis, new arrivals monitoring, bestseller and sell-out tracking, and range planning. A merchandiser compares dress prices at Zara and H\&M in the UK. A pricing team tracks how deep a rival's discounts go each week. A brand checks which retailers stock it and at what price.

#### Which retailers and markets does it cover?

Thousands of online retailers and brands worldwide across apparel, footwear, accessories, beauty and home, split by market (UK, US, Germany, France and many more). Retailers are separate per country, so Zara UK and Zara US are different entries; set the market to choose one.

#### How far back does the data go?

The past two years, at weekly resolution. Each product row is the weekly summary for the week containing your snapshot date, so two dates in the same week return the same data. The current week reports up to today.

#### Why do I get at most 50 products per retailer?

The provider returns up to 50 product options per search. This actor runs one search per retailer, so a list of ten retailers can return up to 500 rows. When more products match, the log says how many, and sorting (cheapest, deepest discount, best selling) chooses which 50 you get.

#### How do prices and currencies work?

Prices come back in normal currency units, converted into the currency you choose or your account default. The minimum and maximum price inputs are also in normal units; the actor converts them into the scale the provider expects.

#### Do I need an API key?

Yes. This actor is bring-your-own-key: it calls the EDITED market data API with your own key and never ships one of its own. Keys are issued by the provider to customer accounts through their account manager; there is no self-serve sign-up. Paste the key into the input or set it once as the DATA\_API\_KEY environment secret. A missing or rejected key, or data outside your plan, ends the run cleanly with a message saying which.

#### Can it change anything in my account?

No. The actor calls only three read-only search tools: product search, retailer lookup and category lookup. Nothing it sends can create, update or delete data.

#### Does it return personal data?

No. Rows describe products and retailers only. Review counts and average ratings are included; reviewer names and review text are not.

#### How is it priced?

Pay per result: one flat price per product option returned. Rows for retailer names that matched nothing, or searches with no products, are free.

### Keyword map

fashion retail market data API, retail pricing intelligence, competitor price tracking, fashion price monitoring, discount and markdown tracking, assortment analysis, apparel market data, beauty market data, homeware pricing data, sell-out tracking, bestseller tracking, new arrivals monitoring, retailer product data, fashion competitive intelligence, EDITED API, merchandising analytics.

# Actor input Schema

## `retailers` (type: `array`):

Retailer names or slugs, one per line, such as Zara, H\&M, ASOS or zara. Each is looked up with the provider's retailer search and then searched on its own, so each retailer gets up to 50 product options. A retailer trades as a separate entry in each country, so set the market to pick one country. Leave empty to search across all retailers.

## `market` (type: `string`):

Two-letter retailer market code, such as UK, US, DE, FR or ES. GB is accepted for the UK. Also narrows the retailer lookup to that country.

## `category` (type: `string`):

A category name such as dresses, jeans, sneakers, knitwear or mascara, looked up in the provider's category tree, or a numeric category id. A category includes everything beneath it, so Tops includes T-Shirts.

## `brands` (type: `array`):

Brand names, one per line, such as Nike, Levi's or Hugo Boss. Matched as a case-insensitive phrase on the brand name, which also catches brands the provider has not normalised. At most 50.

## `genders` (type: `array`):

Keep only products for these genders.

## `productNameQuery` (type: `string`):

Full-text search on the product name. Words are AND-combined; use uppercase OR and NOT, and wrap a phrase in double quotes, for example: midi OR maxi, or "wrap dress".

## `colours` (type: `array`):

Keep only products whose predominant colour is one of these.

## `patterns` (type: `array`):

Keep only products whose predominant pattern is one of these.

## `materials` (type: `array`):

Keep only products whose fabric composition contains one of these materials.

## `tiers` (type: `array`):

Keep only retailers in these market segments.

## `minPrice` (type: `number`):

Lowest current selling price, in normal currency units (49.99 means 49.99 in the chosen currency).

## `maxPrice` (type: `number`):

Highest current selling price, in normal currency units.

## `minDiscountPercent` (type: `number`):

Keep only products currently advertised at this discount or deeper, on a 0 to 100 scale (30 means 30% off).

## `minSelloutPercent` (type: `number`):

Keep only products with at least this share of their sizes sold out, on a 0 to 100 scale. Sort by sell-out to find bestsellers.

## `inStockOnly` (type: `boolean`):

Keep only products with at least one size available.

## `discountedOnly` (type: `boolean`):

Keep only products currently advertised as discounted.

## `launchedSince` (type: `string`):

Keep only products first found on or after this date, written as YYYY-MM-DD. Use it for new arrivals.

## `date` (type: `string`):

The week to read, written as YYYY-MM-DD. The provider serves one weekly summary per product, for the week containing this date, up to two years back. Leave blank for the current week.

## `sortBy` (type: `string`):

Which products come first when more match than are returned. The provider returns at most 50 per retailer, so sorting chooses which 50.

## `sortOrder` (type: `string`):

Highest first or lowest first.

## `vertical` (type: `string`):

The data segment to search. Leave on account default unless your key covers several and you want a different one.

## `currency` (type: `string`):

Three-letter ISO 4217 code, such as USD, GBP or EUR, for all prices in and out. Leave blank for your account default.

## `maxResults` (type: `integer`):

Stop after this many product options across all retailers. Each retailer returns up to 50.

## `apiKey` (type: `string`):

Your own API key for the EDITED market data API, issued by the provider to customer accounts. This actor is bring-your-own-key and never ships a key of its own. Leave blank to use the DATA\_API\_KEY environment secret instead.

## `baseUrl` (type: `string`):

Override the host the actor calls. Only useful for testing against a different environment.

## Actor input object example

```json
{
  "retailers": [
    "Zara"
  ],
  "market": "UK",
  "category": "dresses",
  "inStockOnly": false,
  "discountedOnly": false,
  "sortBy": "default",
  "sortOrder": "desc",
  "vertical": "default",
  "maxResults": 50
}
```

# Actor output Schema

## `options` (type: `string`):

One row per product option, alongside the retailer name that produced it.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "retailers": [
        "Zara"
    ],
    "market": "UK",
    "category": "dresses"
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/fashion-retail-market-data-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "retailers": ["Zara"],
    "market": "UK",
    "category": "dresses",
}

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/fashion-retail-market-data-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "retailers": [
    "Zara"
  ],
  "market": "UK",
  "category": "dresses"
}' |
apify call nabeelbaghoor/fashion-retail-market-data-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/fashion-retail-market-data-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xYtB6DRoth9vVI3ay/builds/zQftpzfl99ZrgfoTx/openapi.json
