# Myntra Scraper — Fashion Products, Prices, Sizes & Ratings (`logiover/myntra-scraper`) Actor

Myntra scraper: export fashion products from myntra.com by search words, category, brand or product id — price, MRP, discount, rating, per-size stock, colours, images, seller, description. Fast JSON, no login, 10k+ products per run. Not affiliated with Myntra.

- **URL**: https://apify.com/logiover/myntra-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** E-commerce, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.30 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Myntra Scraper — Fashion Products, Prices, Sizes & Ratings from myntra.com

> **Not affiliated with, endorsed by or connected to Myntra Designs Pvt. Ltd. or Flipkart.** "Myntra" is a trademark of its owner and is used here only to say which public website this Actor reads. The Actor collects information that Myntra shows to every visitor without an account.

**Myntra Scraper** turns myntra.com into a clean table. Give it search words ("men tshirts", "women kurta sets", "nike running shoes"), a Myntra category link, a brand, or a list of product ids, and it returns one row per product: name, brand, gender, category, **price, MRP, discount percent**, rating and rating count, colour, every size with **per-size stock**, images, **seller name and address**, description, material and care, return policy, badges and offers. It is a Myntra API alternative for people who need fashion product data from India's largest fashion marketplace and do not have an official feed: scrape myntra.com without login, export Myntra products to CSV, Excel or JSON, and push them to Google Sheets, a database or your own app. One run can carry **more than 12,000 unique products**; the Actor cuts Myntra's own 599-products-per-search limit apart by brand, colour, gender, price band and discount band, so a single search such as "men tshirts" is not stuck at the first few pages.

The data is what shoppers see: **Myntra product data for price tracking, discount monitoring, assortment analysis, brand benchmarking and catalogue enrichment**. Typical uses are a Myntra price tracker that records the selling price every day, a Myntra discount list ("sabse zyada discount wale products"), a size-availability watcher ("kaunsa size stock mein hai"), competitor analysis for D2C fashion brands, a fashion dataset for machine learning, and a product feed for comparison sites. Search phrases people use for this job: *Myntra scraper, Myntra API, Myntra product scraper, scrape Myntra data, Myntra price scraper, Myntra data extraction, Myntra fashion dataset, Myntra sale tracker, myntra se product data kaise nikaale, मिंत्रा प्रोडक्ट डेटा, मिंत्रा स्क्रैपर, मिंत्रा डिस्काउंट डेटा.*

### Table of contents

1. [At a glance](#at-a-glance)
2. [What you get](#what-you-get)
3. [Who uses it: 16 workflows](#who-uses-it-16-workflows)
4. [Cookbook: 16 ready-made inputs](#cookbook-16-ready-made-inputs)
5. [Quick start in the Apify Console](#quick-start-in-the-apify-console)
6. [Quick start through the API](#quick-start-through-the-api)
7. [Input reference](#input-reference)
8. [Data dictionary](#data-dictionary)
9. [Real output sample](#real-output-sample)
10. [How deep and how fast: measurements](#how-deep-and-how-fast-measurements)
11. [What you pay](#what-you-pay)
12. [Integrations](#integrations)
13. [Performance tips](#performance-tips)
14. [Troubleshooting and status messages](#troubleshooting-and-status-messages)
15. [Honest limits](#honest-limits)
16. [Compared with the other ways to get Myntra data](#compared-with-the-other-ways-to-get-myntra-data)
17. [FAQ](#faq)
18. [Glossary](#glossary)
19. [Legality and responsibility](#legality-and-responsibility)
20. [Changelog](#changelog)
21. [Support](#support)

### At a glance

| | |
|---|---|
| **Site** | myntra.com (India), public pages, no login |
| **Modes** | search words, category / search / filtered listing links, brand names, product ids and product links |
| **Filters** | brand, gender, colour, size, minimum and maximum price, minimum discount, minimum rating, sort order |
| **Rows** | one per Myntra product id (each colourway has its own id); de-duplicated by `productId` |
| **Columns** | 56 (grouped below); every one filled or documented as conditional with a measured rate |
| **Depth proven** | **12,000 unique products in one run on 29 Oct 2026**, 0 duplicates, 7.8 minutes |
| **Speed** | 30 products with full details in about 10 s (first row after 2.2 s); 1,000 products with details in about 40 s |
| **Per-size stock** | yes: units in stock per size and seller (product page data) |
| **Price** | pay per result, from $2.00 per 1,000 down to $1.30 per 1,000 on higher Apify plans; a maximum cost per run keeps you in control |
| **Proxy** | Apify datacenter proxy by default; the Actor moves to Indian residential traffic by itself if the datacenter route is refused |
| **Output** | Apify dataset: JSON, CSV, Excel, XML, RSS, HTML table; API and webhooks |

### What you get

Every row is one Myntra product page. The columns come in groups; the full list with types and measured fill rates is in the [data dictionary](#data-dictionary).

**Identity.** `productId`, `url`, `name`, `brand`, `gender`, `category` (article type such as Tshirts, Kurtas, Casual Shoes), `subCategory`, `masterCategory`, `descriptor`.

**Price.** `price` (selling price in rupees), `mrp`, `discountPercent`, `discountAmount`, `currency`, plus the coupon Myntra advertises beside the price: `couponCode`, `couponDiscount`, `priceWithCoupon`, `couponValidUntil`.

**Reputation.** `rating`, `ratingCount`, `reviewCount`, and `ratingDistribution` (how many 1, 2, 3, 4 and 5 star ratings).

**Variants and stock.** `colour`, `colourVariants` (the other colourways with their ids, names, links and pictures), `sizes`, and `sizeOptions`: for every size the SKU id, whether it can be bought, the **units in stock**, the lowest price, the sellers offering it and the garment measurements (chest, length, shoulder...) where Myntra publishes them. `inStock` says whether any size is available.

**Seller and legal.** `sellerName`, `sellerCity`, `sellerState`, `sellers` (every seller with legal name, address, city, state, PIN code), `manufacturer` and `countryOfOrigin` as printed on the product page.

**Content.** `description`, `sizeAndFit`, `materialAndCare`, `styleNote` and `attributes` (fabric, neck, pattern, sleeve length, fit, occasion... the names depend on the category), `images`, `imageUrl`.

**Policy and badges.** `isReturnable`, `isExchangeable`, `returnDays`, `codAvailable`, `tryAndBuy`, `offers` and `tags` (merchandising badges such as "Best Seller", "Deal of the Day", "Just Launched").

**Catalogue.** `season`, `year`, `listedAt`, and the run fields `query`, `detailsFetched`, `scrapedAt`.

Switch **Include sizes with stock, seller, description and specifications** off and the Actor returns only what the listing pages carry (price, MRP, discount, rating, sizes list, colours, images, badges, coupon). That is about six times faster and is the right choice for pure price monitoring of very large lists.

### Who uses it: 16 workflows

1. **D2C fashion founders** benchmark their prices against the same article type on Myntra: search "women kurta sets", filter 500 to 1,500 rupees, sort by popularity, and compare `price`, `discountPercent` and `rating` with their own catalogue every week.
2. **Marketplace pricing analysts** run a daily search per category and keep `price`, `mrp` and `discountPercent` with `scrapedAt`, building a price history that Myntra itself does not export.
3. **Brand managers** list every product of their brand (`brands: ["Roadster"]`) to see which colours and sizes are listed, how they are rated, and which sellers carry them.
4. **Sellers on Myntra** check whether their size runs are sold out (`sizeOptions[].inventory`) next to competitors' and how the "default seller" badge is distributed in `sellers`.
5. **Deal and coupon sites** read the highest `discountPercent` per category, the advertised `couponCode` and `priceWithCoupon`, and publish "Myntra 70% off" pages.
6. **Resellers and arbitrage shops** compare Myntra `price` with other marketplaces for the same brand and model.
7. **Data scientists** build fashion datasets: titles, attributes (`attributes` holds fabric, fit, pattern), images and ratings for classification, recommendation or visual-search training.
8. **Market researchers** measure assortment: how many products per brand, gender, colour, price band; the Actor's splitting walks those slices anyway.
9. **Trend teams** sort by "What's new" and track `listedAt`, `season`, `year` and the badges to see what Myntra pushes this week.
10. **Size-and-fit researchers** use the `measurements` inside `sizeOptions` (garment chest, length, shoulder) to compare size charts across brands.
11. **Compliance and sourcing teams** read `manufacturer`, `countryOfOrigin` and the seller's registered address printed on every product page.
12. **Catalogue managers** enrich their own SKU list: give `productIds`, get the full specification, images and description back.
13. **Influencer and affiliate marketers** pick products with high `ratingCount` and `rating` and a healthy discount, and link to `url`.
14. **Investors and analysts** follow the share of discounted products, the average discount and the brand mix of a category over time.
15. **Logistics and returns analysts** compare `returnDays`, `isExchangeable`, `codAvailable` across categories and brands.
16. **AI agent builders** give an LLM agent a tool that answers "what is the cheapest black cotton kurta above 4 stars on Myntra" with live rows.

### Cookbook: 16 ready-made inputs

Paste any of these into the Input tab (JSON view). All of them were run against the live site before this README was written.

**1. The 30-row smoke test (the default).**

```json
{ "searchQueries": ["men tshirts"], "maxResults": 30 }
```

**2. One category, as many products as you want.**

```json
{ "searchQueries": ["women kurta sets"], "maxResults": 5000 }
```

**3. A brand's whole catalogue.**

```json
{ "brands": ["Roadster"], "maxResults": 3000 }
```

**4. A brand inside one category.**

```json
{ "searchQueries": ["men jeans"], "brands": ["Roadster", "H&M"], "maxResults": 1000 }
```

**5. Cheap and deeply discounted, cheapest first.**

```json
{ "searchQueries": ["women kurtas"], "minPrice": 500, "maxPrice": 999, "minDiscount": 50, "sortBy": "priceLow", "maxResults": 500 }
```

**6. Size and gender filters (shoes).**

```json
{ "searchQueries": ["sneakers"], "genders": ["women"], "sizes": ["UK 6"], "maxResults": 500 }
```

**7. Colour and rating.**

```json
{ "searchQueries": ["tshirts"], "genders": ["men"], "colours": ["Maroon"], "minRating": 4, "sortBy": "rating", "maxResults": 300 }
```

**8. Paste a Myntra link with its filters.**

```json
{ "startUrls": [{ "url": "https://www.myntra.com/men-jeans?f=Brand%3ARoadster&rf=Price%3A500.0_999.0_500.0%20TO%20999.0&sort=price_asc" }], "maxResults": 200 }
```

**9. Exact products by id or link.**

```json
{ "productIds": ["12027436", "https://www.myntra.com/Lounge-Tshirts/Levis/Levis-Men-Soft-Pure-Cotton-Round-Neck-Half-Sleeve-Tshirt/12027432/buy"] }
```

**10. Fast price-only list (no product pages).**

```json
{ "searchQueries": ["men tshirts"], "includeDetails": false, "maxResults": 5000, "maxConcurrency": 30 }
```

**11. Several searches in one run (the budget is shared fairly).**

```json
{ "searchQueries": ["saree", "lehenga", "kurta set", "anarkali"], "maxResults": 2000 }
```

**12. Hindi search words work too.**

```json
{ "searchQueries": ["लहंगा"], "maxResults": 100, "includeDetails": false }
```

**13. Newest arrivals of a category.**

```json
{ "searchQueries": ["men shirts"], "sortBy": "new", "maxResults": 500 }
```

**14. A very large export (the Actor splits the search).**

```json
{ "searchQueries": ["men tshirts"], "maxResults": 12000 }
```

**15. Daily price watch of a fixed list (schedule this).**

```json
{ "productIds": ["12027436", "42122809", "25260156"], "includeDetails": true }
```

**16. Capped spend: stop at 2,000 results whatever the search finds.**

```json
{ "searchQueries": ["women dresses"], "maxResults": 2000 }
```

Set **Max cost per run** in the Run options to put a hard dollar ceiling on top of `maxResults`.

### Quick start in the Apify Console

1. Open the Actor, press **Try for free**, and stay on the **Input** tab.
2. Type your search words in **Search words** (one per line), or paste Myntra links into **Myntra URLs**, or product ids into **Product ids**.
3. Optional: add **Brands**, **Gender**, **Colours**, **Sizes**, price and discount limits, and an **Order**.
4. Set **Maximum products**. The default is 1,000; the prefill is 30 so that a first test is quick and cheap.
5. Press **Start**. The first rows appear within seconds; the status line shows progress and, at the end, a sentence explaining how the run ended.
6. Open the **Output** or **Storage** tab, choose a view (Overview, Sizes, stock & seller, Content & offers), and export JSON, CSV, Excel, XML or HTML.

### Quick start through the API

Start a run and wait for it (replace `YOUR_TOKEN`):

```bash
curl -s -X POST "https://api.apify.com/v2/acts/logiover~myntra-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["men tshirts"],"maxResults":50}'
```

Node.js with the official client:

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('logiover/myntra-scraper').call({
    searchQueries: ['women kurta sets'],
    minDiscount: 40,
    maxResults: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0].name, items[0].price, items[0].discountPercent);
```

Python:

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("logiover/myntra-scraper").call(run_input={
    "brands": ["Roadster"], "genders": ["men"], "maxResults": 200,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["productId"], item["name"], item["price"], item["mrp"])
```

The run's key-value store holds a `SUMMARY` record with the outcome, counts, timings and per-request statistics.

### Input reference

Every field is optional; if you give nothing, the Actor collects "men tshirts". The table is generated from the Actor's input schema, so it always matches the Input tab.

| Field | Type | Default | What it does |
|---|---|---|---|
| `searchQueries` — Search words | array | `["men tshirts"]` | What to look for on Myntra, exactly as you would type it in the search box: "men tshirts", "women kurta sets", "nike running shoes", "saree", "lehenga", "kids school bag". Category names such as "men-jeans" work too. One search per line. |
| `startUrls` — Myntra URLs (optional) | array | — | Paste myntra.com category or search pages (for example https://www.myntra.com/men-tshirts?f=Brand%3ARoadster), brand store pages (https://www.myntra.com/shop/...) or product pages (.../buy). The filters in the link (brand, colour, size, price, discount, sort) are applied. Product links return that one product. |
| `productIds` — Product ids (optional) | array | — | Myntra product ids (the number before /buy in a product link, e.g. 12027436) or full product links. Every id returns one row with the full product page data: sizes with stock, seller, description, specifications. |
| `brands` — Brands | array | — | Only products of these brands, e.g. Roadster, HRX by Hrithik Roshan, Nike, Levis, Libas. Spelling and case are matched to Myntra's brand list. With no search words, every brand is collected on its own. |
| `genders` — Gender | array | — | Only these target groups: men, women, boys, girls (lower case, as in Myntra's Gender filter). Leave empty for all. Some category pages are already limited to one group. |
| `colours` — Colours | array | — | Only these colours, named as in Myntra's Colour filter: Black, White, Navy Blue, Red, Maroon, Olive, Pink, Grey Melange... |
| `sizes` — Sizes | array | — | Only products offered in one of these sizes, written as in Myntra's Size filter: S, M, L, XL, 3XL, 28, 30, UK 8, 2-3Y... |
| `minPrice` — Minimum price (INR) | integer | — | Lowest selling price in rupees. |
| `maxPrice` — Maximum price (INR) | integer | — | Highest selling price in rupees (included). |
| `minDiscount` — Minimum discount (%) | integer | — | Only products discounted by at least this many percent off MRP (Myntra's "50% and above" filter). |
| `minRating` — Minimum rating | number | — | Only products rated at least this value (Myntra's "Rated 4.0+" filter). Unrated products are excluded when set. |
| `sortBy` — Order | string | `relevance` | Order of the results when fewer products are requested than exist. Recommended is Myntra's default ranking. |
| `includeDetails` — Include sizes with stock, seller, description and specifications | boolean | `True` | Open every product page for per-size availability and stock, seller name and address, description, material and care, specifications, return and exchange policy, rating split and the current price. Switch off for a faster list-only export (about 6 times faster). |
| `splitLargeSearches` — Go beyond 599 per search | boolean | `True` | Myntra shows at most 599 products for one set of filters. When more are requested, the Actor splits the search by brand, colour, gender, price band and discount band to reach the rest. |
| `maxResults` — Maximum products | integer | `1000` | Stop after this many products (across all searches). You are charged per product saved. |
| `maxConcurrency` — Parallel sessions | integer | `20` | Number of parallel browser-like sessions (each uses its own proxy address). 20 reads about 1,000 products with full details in a minute or two; lower it if you share a proxy plan. |
| `proxyConfiguration` — Proxy | object | `{"useApifyProxy": true}` | Apify datacenter proxy works and is the default. If Myntra refuses these addresses, the Actor falls back to a small amount of Indian residential traffic by itself. |

**How the inputs combine.** Search words, links, brands-only searches and product ids can be used together. All filters (brands, gender, colours, sizes, prices, discount, rating, order) apply to every search word and every link; filters written inside a pasted link (`f=` and `rf=` in the address) are kept and the fields above are added on top. With no search words, each brand in **Brands** is searched on its own, restricted to exactly that brand. The budget in **Maximum products** is shared fairly: with four search words and 2,000 products, each search first gets 500, and what a small search leaves unused goes to the others.

**Spelling of filter values.** Write them as you would on the site; the Actor looks the words up in Myntra's own filter lists and uses Myntra's spelling: `h&m` becomes `H&M`, `navy blue` becomes `Navy Blue`, `UK 6` becomes `UK6`, `Women` becomes `women`. Values it cannot find are passed through as typed (so a brand that Myntra spells unusually still works if you type it exactly).

**Price and discount semantics.** Myntra's range filters are half-open on the upper end; the Actor adds one rupee to your **Maximum price** so the maximum is included. **Minimum discount** and **Minimum rating** mirror Myntra's own "50% and above" and "Rated 4.0+" filters.

### Data dictionary

One row per product. Fill rate means the share of rows with a non-empty value in the 12,000-product proof run of 29 Oct 2026 (men's t-shirts, full details on). Columns marked *listing only* or *product page only* depend on the **Include sizes with stock, seller, description and specifications** switch; with the switch on, the product-page columns are filled for every product Myntra still serves.

| Column | Type | Meaning | Fill rate | Example |
|---|---|---|---|---|
| `productId` | number | **Identity.** Myntra style id (productId). Unique per product and colourway; the key used for de-duplication. | 100 % | 42281182 |
| `url` | string | **Identity.** Absolute product page URL on myntra.com. | 100 % | "https://www.myntra.com/Tshirts/Imsa+Moda/Imsa-Moda-Men-Henley-Neck... |
| `name` | string | **Identity.** Full product name as Myntra prints it (brand + descriptive title). | 100 % | "Imsa Moda Men Henley Neck T-shirt" |
| `brand` | string | **Identity.** Brand name, spelled as in Myntra's Brand filter. | 100 % | "Imsa Moda" |
| `gender` | string | **Identity.** Target group: Men, Women, Boys, Girls or Unisex. | 100 % | "Men" |
| `category` | string | **Identity.** Article type, e.g. Tshirts, Kurtas, Casual Shoes, Watches. | 100 % | "Tshirts" |
| `subCategory` | string | **Identity.** Sub-category, e.g. Topwear, Bottomwear, Shoes. | 100 % | "Topwear" |
| `masterCategory` | string | **Identity.** Master category: Apparel, Footwear, Accessories, Personal Care... | 100 % | "Apparel" |
| `descriptor` | string | **Identity.** Short style descriptor from the listing (for example "Solid Lounge T-shirt"). Listing data only. *(listing only)* | 100 % | "Men Henley Neck T-shirt" |
| `price` | number | **Price.** Current selling price in rupees. With product pages on it is the price the product page shows; otherwise the listing price. | 100 % | 283 |
| `mrp` | number | **Price.** Maximum retail price in rupees (the struck-through price). | 100 % | 1999 |
| `discountPercent` | number | **Price.** Discount off MRP in percent, rounded like Myntra's "(52% OFF)" label. | 100 % | 86 |
| `discountAmount` | number | **Price.** MRP minus price, in rupees. | 100 % | 1716 |
| `currency` | string | **Price.** Always INR. | 100 % | "INR" |
| `couponCode` | string | **Price.** Coupon code the listing advertises next to the price (listing data; empty when no coupon is shown). *(listing only)* | 88.4 % | "MYNTRAHALFPRICE" |
| `couponDiscount` | number | **Price.** Rupees the advertised coupon takes off. *(listing only)* | 88.4 % | 142 |
| `priceWithCoupon` | number | **Price.** The "Best Price" Myntra shows with the coupon applied. *(listing only)* | 88.4 % | 141 |
| `couponValidUntil` | string | **Price.** ISO 8601 end of the coupon campaign. *(listing only)* | 88.4 % | "2026-11-30T18:29:00.000Z" |
| `rating` | number | **Ratings.** Average customer rating, 1 to 5 (null while the product has no ratings). | 56.7 % | 4.27 |
| `ratingCount` | number | **Ratings.** Number of ratings. | 100 % | 14292 |
| `reviewCount` | number | **Ratings.** Number of written reviews (product page only). *(product page only)* | 75.8 % | 3025 |
| `ratingDistribution` | object | **Ratings.** Ratings per star, e.g. {"5": 23101, "4": 7172, ...} (product page only). *(product page only)* | 56.7 % | {"1": 1056, "2": 436, "3": 1033, "4": 2820, "5": 8947} |
| `colour` | string | **Variants.** Base colour of this product. | 100 % | "Cream" |
| `colourVariants` | array | **Variants.** Other colourways of the same style: productId, colour name, url, hex, imageUrl (names and links come from the product page). | 100 % | \[{"productId": 42122809, "colour": "Black", "hex": null, "url": "ht... |
| `sizes` | array | **Variants.** Size labels, e.g. \["S","M","L","XL"] or \["UK 7","UK 8"]. With product pages on: every size the style is made in. | 100 % | \["S", "M", "L", "XL", "XXL"] |
| `sizeOptions` | array | **Variants.** Per size: size, skuId, available, inventory units, lowest price, sellers and garment measurements (product page only). *(product page only)* | 100 % | \[{"size": "S", "skuId": 135036664, "available": true, "inventory": ... |
| `inStock` | boolean | **Variants.** True when at least one size can be bought (product page only). *(product page only)* | 100 % | true |
| `imageUrl` | string | **Media.** Main product picture (https). | 100 % | "https://assets.myntassets.com/assets/images/2026/MAY/18/eZLXgFYu_3... |
| `images` | array | **Media.** All product pictures (https URLs). | 100 % | \["https://assets.myntassets.com/assets/images/2026/MAY/18/eZLXgFYu\_... |
| `videoUrls` | array | **Media.** Product video files when the listing carries them. *(listing only)* | 3.1 % | \["https://videos.myntassets.com/assets/videos/2025/9/22/f8356b70-2d... |
| `brandLogoUrl` | string | **Media.** Brand logo picture when the listing carries one. *(listing only)* | 30.2 % | "https://assets.myntassets.com/assets/images/2020/7/7/8d2db9db-e27c... |
| `sellerId` | number | **Seller.** Seller partner id of the default (buy-button) seller. | 100 % | 22684 |
| `sellerName` | string | **Seller.** Name of the default seller as shown on the product page ("Sold by"). *(product page only)* | 100 % | "Shalimar Clothing" |
| `sellerCity` | string | **Seller.** City of the default seller. *(product page only)* | 100 % | "Delhi" |
| `sellerState` | string | **Seller.** State of the default seller. *(product page only)* | 100 % | "DELHI" |
| `sellers` | array | **Seller.** Every seller offering the style: sellerId, name, legalName, address, city, state, pincode. *(product page only)* | 100 % | \[{"sellerId": 22684, "name": "Shalimar Clothing", "legalName": "Sha... |
| `manufacturer` | string | **Seller.** Manufacturer / packer name and address printed on the product page (legal metrology). *(product page only)* | 99.3 % | "Shalimar Clothings& B-31 Zakir Nagar New Delhi-110025" |
| `countryOfOrigin` | string | **Seller.** Country of origin. *(product page only)* | 100 % | "India" |
| `description` | string | **Content.** Product description as plain text. *(product page only)* | 100 % | "- Cream-coloured Tshirt for Men\n- Self Design\n- Regular length\n... |
| `sizeAndFit` | string | **Content.** Size and fit note (for example the model's height and worn size). *(product page only)* | 99.7 % | "Regular Fit\nThe model (height 6') is wearing a size M" |
| `materialAndCare` | string | **Content.** Material and care instructions as plain text. *(product page only)* | 100 % | "Hand Wash" |
| `styleNote` | string | **Content.** Style note / "Complete the look" text. *(product page only)* | 19 % | "Designed by the team at Levis, you're definitely in for a style tr... |
| `attributes` | object | **Content.** Specifications such as Fabric, Neck, Pattern, Sleeve Length, Fit, Occasion (names depend on the category). *(product page only)* | 100 % | {"Add-Ons": "NA", "Body or Garment Size": "Garment Measurements in"... |
| `isReturnable` | boolean | **Policies.** Whether Myntra accepts returns for the style. *(product page only)* | 100 % | true |
| `isExchangeable` | boolean | **Policies.** Whether exchanges are accepted. *(product page only)* | 100 % | true |
| `returnDays` | number | **Policies.** Return window in days. *(product page only)* | 100 % | 7 |
| `codAvailable` | boolean | **Policies.** Whether pay on delivery is offered for the style. *(product page only)* | 100 % | true |
| `tryAndBuy` | boolean | **Policies.** Whether the style is part of Myntra's try-and-buy programme. *(product page only)* | 100 % | false |
| `offers` | array | **Tags.** Offer texts printed on the product page. *(product page only)* | 98.3 % | \["EMI option available"] |
| `tags` | array | **Tags.** Merchandising badges such as "Bestseller", "Deal of the Day", "Just Launched". | 83.4 % | \["Seen on Insta", "Deal of the Day", "Diwali Price Drop", "Crazy De... |
| `season` | string | **Catalogue.** Season of the collection (Summer, Winter, Fall, Spring). | 98.8 % | "summer" |
| `year` | number | **Catalogue.** Year of the collection. | 98.8 % | 2026 |
| `listedAt` | string | **Catalogue.** ISO 8601 catalogue date of the style. | 100 % | "2026-05-18T17:17:55.000Z" |
| `query` | string | **Run.** The search words, URL or id list this row was collected for. | 100 % | "men tshirts" |
| `detailsFetched` | boolean | **Run.** True when the product page was read for this row. | 100 % | true |
| `scrapedAt` | string | **Run.** ISO 8601 time the row was collected. | 100 % | "2026-10-29T10:33:53.840Z" |

Notes on a few columns:

- `price` is the price the product page shows (the buy-button seller's price for the first size sold). In list-only mode it is the listing price; on the 14 products compared by hand both were identical.
- `discountPercent` is `(mrp - price) / mrp`, rounded to a whole percent. Myntra sometimes prints a rupee amount instead of a percent, or rounds down, so its label can differ by one point.
- `rating` is empty while a product has no ratings; `ratingCount` is then 0.
- `sizes` for shoes are Myntra's UK sizes without the prefix ("6", "7", "8"); in the filter you can write `UK6` or `UK 6`.
- `sizeOptions[].inventory` is the live unit count Myntra's product page holds for that size, summed over sellers; `sellers` inside each size says which seller holds how many and at what price.
- `sellerState` and `sellerCity` are copied as the seller registered them ("DELHI" and "Delhi" both occur).
- `tags` are merchandising badges, `offers` are the offer lines of the product page (for example "EMI option available"). Both are conditional.
- `listedAt` is Myntra's catalogue date of the style, not a launch announcement.

### Real output sample

A real row from the proof run of 29 Oct 2026 (trimmed lists are marked with `...`):

```json
{
  "productId": 42281182,
  "url": "https://www.myntra.com/Tshirts/Imsa+Moda/Imsa-Moda-Men-Henley-Neck-T-shirt/42281182/buy",
  "name": "Imsa Moda Men Henley Neck T-shirt",
  "brand": "Imsa Moda",
  "gender": "Men",
  "category": "Tshirts",
  "subCategory": "Topwear",
  "masterCategory": "Apparel",
  "descriptor": "Men Henley Neck T-shirt",
  "price": 283,
  "mrp": 1999,
  "discountPercent": 86,
  "discountAmount": 1716,
  "currency": "INR",
  "couponCode": "MYNTRAHALFPRICE",
  "couponDiscount": 142,
  "priceWithCoupon": 141,
  "couponValidUntil": "2026-11-30T18:29:00.000Z",
  "rating": 4.27,
  "ratingCount": 14292,
  "reviewCount": 3025,
  "ratingDistribution": {
    "1": 1056,
    "2": 436,
    "3": 1033,
    "4": 2820,
    "5": 8947
  },
  "colour": "Cream",
  "colourVariants": [
    {
      "productId": 42122809,
      "colour": "Black",
      "hex": null,
      "url": "https://www.myntra.com/Tshirts/Imsa+Moda/Imsa-Moda-Men-Henley-Neck-T-shirt/42122809/buy",
      "imageUrl": "https://assets.myntassets.com/assets/images/2026/MAY/13/54zGGFC0_9146ac915af8477bb0a7e5d621f212db.jpg"
    },
    {
      "productId": 42122810,
      "colour": "Off White",
      "hex": null,
      "url": "https://www.myntra.com/Tshirts/Imsa+Moda/Imsa-Moda-Men-Henley-Neck-T-shirt/42122810/buy",
      "imageUrl": "https://assets.myntassets.com/assets/images/2026/MAY/13/0jUrSw8w_6bdcfc6059a242138c7ceb4bc0caa785.jpg"
    },
    "..."
  ],
  "sizes": [
    "S",
    "M",
    "L",
    "XL",
    "XXL"
  ],
  "sizeOptions": [
    {
      "size": "S",
      "skuId": 135036664,
      "available": true,
      "inventory": 19331,
      "price": 283,
      "mrp": 1999,
      "sellers": [
        {
          "sellerId": 22684,
          "sellerName": "Shalimar Clothing",
          "inventory": 19331,
          "price": 283,
          "mrp": 1999
        }
      ],
      "measurements": {
        "Chest": "36.0in",
        "Front Length": "26.0in"
      }
    },
    {
      "size": "M",
      "skuId": 135036668,
      "available": true,
      "inventory": 18451,
      "price": 283,
      "mrp": 1999,
      "sellers": [
        {
          "sellerId": 22684,
          "sellerName": "Shalimar Clothing",
          "inventory": 18451,
          "price": 283,
          "mrp": 1999
        }
      ],
      "measurements": {
        "Chest": "38.0in",
        "Front Length": "27.0in"
      }
    },
    "..."
  ],
  "inStock": true,
  "imageUrl": "https://assets.myntassets.com/assets/images/2026/MAY/18/eZLXgFYu_3c5cda53fd8c4cbb88c7c32729c69966.jpg",
  "images": [
    "https://assets.myntassets.com/assets/images/2026/MAY/18/eZLXgFYu_3c5cda53fd8c4cbb88c7c32729c69966.jpg",
    "https://assets.myntassets.com/assets/images/2026/MAY/18/PK8B4Hso_424be107bba3478dbfe3c1e1b5c3f4af.jpg",
    "https://assets.myntassets.com/assets/images/2026/MAY/18/U2eCruZp_787aa32754c145b6b8558512cd8cf9ee.jpg"
  ],
  "videoUrls": null,
  "brandLogoUrl": null,
  "sellerId": 22684,
  "sellerName": "Shalimar Clothing",
  "sellerCity": "Delhi",
  "sellerState": "DELHI",
  "sellers": [
    {
      "sellerId": 22684,
      "name": "Shalimar Clothing",
      "legalName": "Shalimar Clothing",
      "address": "A-137, Shaheen Bagh, Okhla, New Delhi, 2nd FloorShaheen BaghDelhi , DELHI - 110025",
      "city": "Delhi",
      "state": "DELHI",
      "pincode": "110025"
    }
  ],
  "manufacturer": "Shalimar Clothings& B-31 Zakir Nagar New Delhi-110025",
  "countryOfOrigin": "India",
  "description": "- Cream-coloured Tshirt for Men\n- Self Design\n- Regular length\n- Henley Neck\n- Long, Regular Sleeves\n- Cotton fabric\n- Button closure",
  "sizeAndFit": "Regular Fit\nThe model (height 6') is wearing a size M",
  "materialAndCare": "Hand Wash",
  "styleNote": null,
  "attributes": {
    "Add-Ons": "NA",
    "Body or Garment Size": "Garment Measurements in",
    "Care for me": "NA",
    "Character": "NA",
    "Closure": "Button",
    "Fabrics": "Cotton",
    "Fashion Trends": "New Basics",
    "Fit": "Regular Fit",
    "Length": "Regular",
    "Multipack Set": "Single",
    "Neck": "Henley Neck",
    "Net Quantity": "1",
    "Net Quantity Unit": "Piece",
    "Number of Items": "1",
    "Number of Pockets": "NA",
    "Occasions": "Casual",
    "Package Contains": "1 Tshirt",
    "Pattern Coverage": "All-Over",
    "Patterns": "Self Design",
    "Players": "NA",
    "Print or Pattern Types": "Self Design",
    "Sleeve Length": "Long Sleeves",
    "Sleeve Styling": "Regular Sleeves",
    "Sport": "NA",
    "Sport Team": "NA",
    "Technology": "NA",
    "Wash Care": "Hand Wash"
  },
  "isReturnable": true,
  "isExchangeable": true,
  "returnDays": 7,
  "codAvailable": true,
  "tryAndBuy": false,
  "offers": [
    "EMI option available"
  ],
  "tags": [
    "Seen on Insta",
    "Deal of the Day",
    "Diwali Price Drop",
    "Crazy Deal",
    "Reviews with Images",
    "Reviews with Videos",
    "..."
  ],
  "season": "summer",
  "year": 2026,
  "listedAt": "2026-05-18T17:17:55.000Z",
  "query": "men tshirts",
  "detailsFetched": true,
  "scrapedAt": "2026-10-29T10:33:53.840Z"
}
```

CSV columns in the export, in order: `productId`, `url`, `name`, `brand`, `gender`, `category`, `subCategory`, `masterCategory`, `descriptor`, `price`, `mrp`, `discountPercent`, `discountAmount`, `currency`, `couponCode`, `couponDiscount`, `priceWithCoupon`, `couponValidUntil`, `rating`, `ratingCount`, `reviewCount`, `ratingDistribution`, `colour`, `colourVariants`, `sizes`, `sizeOptions`, `inStock`, `imageUrl`, `images`, `videoUrls`, `brandLogoUrl`, `sellerId`, `sellerName`, `sellerCity`, `sellerState`, `sellers`, `manufacturer`, `countryOfOrigin`, `description`, `sizeAndFit`, `materialAndCare`, `styleNote`, `attributes`, `isReturnable`, `isExchangeable`, `returnDays`, `codAvailable`, `tryAndBuy`, `offers`, `tags`, `season`, `year`, `listedAt`, `query`, `detailsFetched`, `scrapedAt`. Lists and objects are written as JSON text inside the cell.

### How deep and how fast: measurements

All numbers below were measured on the Apify platform on 29 Oct 2026 with the default proxy, 1 GB of memory and 20 parallel sessions.

| Test | Result |
|---|---|
| Prefill run (30 products, full details) | 10 s from start to finish; first row after 2.2 s |
| 1,000 products with full details, "men tshirts" | 40 s |
| 1,000 products with full details, "women kurta sets" | 40 s |
| **Proof run: 12,000 unique products, "men tshirts", full details** | **466 s (7.8 min), 26 products per second, 0 duplicates, status SUCCEEDED** |
| Hand check against Myntra's own product pages | 14 products, 304 of 308 field comparisons identical |

**Build note.** The proof ran on build 1.0.3. Builds 1.0.4 and 1.0.5 changed only this README, the spelling lookup for filter values (brand, colour, size, gender), the threshold for the residential fallback and the wording of the time-limit status; the code that reads, splits and maps products is identical.

**The hand check.** For 14 products picked at random from two earlier runs (men's t-shirts and women's kurta sets) the product page of myntra.com was fetched separately and compared field by field: name, brand, MRP, price (also as printed on the page), rating and count, category, gender, colour, size labels, which sizes are available, units in stock per size, seller names, default seller, manufacturer, country of origin, return days and the number of pictures. Of 308 comparisons, 304 were identical. The rest were live changes or notation: three stock counts that moved by 1 to 4 units in the minutes between the run and the check (Myntra sells while you read), and one product where the page prints a rupee amount ("Rs. 3710 OFF") instead of a percent.

**Why a plain scraper stops early, and what this one does.** Myntra shows at most **599 products for one set of filters**: the search answers pages up to offset 499 with at most 100 products each and refuses everything beyond (HTTP 400). "men tshirts" has 433,787 products on 29 Oct 2026 and "women kurta sets" has 277,878, so a page loop would end after 599 rows. The Actor reads the filter lists that come with every answer, which carry exact counts, and cuts the search into slices of at most about 540 products: by brand (small brands are packed together into one OR filter), colour, gender, article type, country of origin, then price bands and discount bands, and as a last resort the same slice in six different sort orders. Rows are de-duplicated by `productId`, because the site's total drifts by a few dozen between calls. The measured result is above: 12,000 different products from one search word.

**What limits the speed.** Each run opens up to 20 browser-like sessions. A session needs one home-page visit to receive the cookies the JSON gateway insists on (about 100 KB); after that one session answered 40 consecutive 100-product pages in a test without a refusal. A product page costs about 7 KB on the wire and answers in about half a second, so with details on, the proof run averaged 26 products per second; list-only runs are several times faster.

**About the proxy.** Myntra answers the platform's own address with a "Site Maintenance" page and refuses a large share of datacenter addresses the same way (measured on the day: between 36 and 85 percent of new datacenter sessions, varying with the moment). The Actor treats that as normal: a refused address costs under 500 bytes and is replaced at once. Only if sixty openings in a row fail does it switch to Indian residential traffic, and it returns to datacenter addresses as soon as they answer again.

### What you pay

You pay per result: one result is one product row saved to the dataset. Rates per 1,000 results depend on your Apify plan:

| Plan tier | Per 1,000 results | 1,000 results | 10,000 results | 100,000 results |
|---|---|---|---|---|
| Free | $2.00 | $2.00 | $20.00 | $200.00 |
| Bronze | $1.77 | $1.77 | $17.70 | $177.00 |
| Silver | $1.53 | $1.53 | $15.30 | $153.00 |
| Gold, Platinum, Diamond | $1.30 | $1.30 | $13.00 | $130.00 |

There is no start fee and no extra charge for product pages: a product with sizes, stock, seller and specifications costs the same as a list-only row. Duplicates are skipped before a row is saved, so one product id is never charged twice within a run.

**Maximum cost per run.** In the Run options you can set a dollar ceiling. The Actor reads it before it starts, never plans more products than the ceiling pays for, stops cleanly when it is reached and says so in the status line ("Saved N products - this run's maximum cost per run covers N results"). Combined with **Maximum products** you always know the most a run can cost. Test runs with a handful of results are practically free.

### Integrations

**Apify Console and API.** Every run has a dataset URL such as `https://api.apify.com/v2/datasets/<id>/items?format=csv&clean=true`. Replace `format` with `json`, `xlsx`, `xml`, `html` or `rss`. Add `&fields=productId,name,brand,price,mrp,discountPercent` to export only the columns you need, or `&view=overview` for the Overview view.

**curl, Node.js, Python.** See the quick-start chapters; the same `run-sync-get-dataset-items` endpoint returns rows directly for small runs, while big runs are best started with `POST /v2/acts/logiover~myntra-scraper/runs` and read when finished.

**Make (Integromat).** Use the Apify module "Run an Actor", pick this Actor, paste the input JSON, then "Get dataset items" and iterate: every row can feed a Google Sheets, Airtable, Slack or e-mail module.

**Zapier.** "Run Actor" action followed by "Get Dataset Items"; trigger it from a schedule ("Every Day") and append rows to a sheet or a database.

**n8n.** The Apify node runs the Actor and returns the dataset; a Function node can compare `price` with yesterday's value and send an alert when `discountPercent` crosses a limit.

**Google Sheets.** Use the Apify integration "Export to Google Sheets" on the run's Integrations tab, or a Make/Zapier scenario. Keep `productId` as the key column and update prices with a lookup.

**Airtable and Notion.** Import the CSV export or push rows through Make; `productId` is the unique key, `url` the link field, `imageUrl` an attachment URL.

**Webhooks.** Add a webhook on `ACTOR.RUN.SUCCEEDED` to call your own endpoint with the run id; read the dataset from there. The `SUMMARY` record in the key-value store tells you whether the run was complete or partial.

**Schedules.** In Apify Schedules choose "Every day at 06:00 IST" with the input of your price-watch list. Because the dataset keeps `scrapedAt`, appending runs to one table gives a price history.

**MCP and AI agents.** Apify's MCP server exposes Actors as tools; add `logiover/myntra-scraper` and an agent can answer "show black cotton kurtas under 800 rupees with 4+ stars" by running the Actor with `searchQueries`, `colours`, `maxPrice`, `minRating`. Keep `maxResults` small for interactive use.

**Data warehouses.** Load the JSON or CSV into BigQuery, Snowflake, Postgres or ClickHouse; flatten `sizeOptions` into a child table keyed by `productId` and `size` for stock analytics.

### Performance tips

- **Match the switch to the job.** Pure price monitoring of thousands of products does not need product pages: set **Include sizes with stock...** off and the run is about six times faster. Stock, seller, specifications and the exact current price need it on.
- **Raise parallel sessions for big list-only runs** (up to 30); keep 20 when details are on.
- **Filter on the site's side.** Brand, gender, colour, size, price band and minimum discount are applied by Myntra, so you pay only for matching rows and the Actor does not have to split a huge search.
- **Give narrower searches.** "men slim fit jeans" returns fewer than 599 products and needs no splitting; "jeans" returns hundreds of thousands and is cut into slices.
- **Use product ids for watch lists.** A list of ids is one product-page call each, with no search at all: ideal for a daily price-and-stock watch.
- **Sort when you take less than everything.** With `maxResults` below the search size, **Order** decides which products you get: "What's new", "Better discount", "Price, low to high".
- **Schedule at the same hour.** Prices move during sales; a daily run at a fixed time makes the history comparable.
- **Keep the default proxy.** Datacenter addresses work and cost the least; the Actor calls in residential traffic only when they are refused completely.

### Troubleshooting and status messages

A run always ends with a status message that starts with its outcome. The same text is in the `SUMMARY` record.

| Status message | Meaning and what to do |
|---|---|
| `COMPLETED: Saved N products.` | Everything requested was collected. |
| `COMPLETED: Saved N products - this is everything Myntra exposes for these settings (the requested M could not be reached).` | The search has fewer products than **Maximum products**, even after splitting. Widen the words or filters. |
| `COMPLETED: Saved N products; K of them are listed by Myntra but their product page is gone ...` | Myntra listed products whose page no longer opens (removed between listing and page). Those rows carry listing data only (`detailsFetched` is false). |
| `PARTIAL: Saved N products; the run reached its time limit before M were collected.` | The run hit its timeout. Start again with a smaller **Maximum products**, list-only mode, or a longer timeout. |
| `PARTIAL: Saved N products; K product page(s) could not be read ...` | Some product pages failed after retries; those rows have list data only. Run again for the missing ids. |
| `PARTIAL: Saved N products before an error stopped the run: ...` | An unexpected error after rows were saved. The saved rows are valid. |
| `EMPTY_RESULT: Myntra answered but no product matched these words and filters ...` | The site answered with zero products. Check spelling, relax brand, size, price, discount or rating filters. |
| `MAX_COST: Saved N products - this run's maximum cost per run covers N results ...` | The ceiling you set was reached; raise **Max cost per run** to collect more. (Shown as a normal finish.) |
| `BLOCKED: No products collected: no Myntra page could be fetched ...` | Every address, including the residential fallback, was refused. The run fails. Try again later or set the proxy to Residential, country India. |
| `FETCH_FAILED: No products collected and some requests failed ...` | Requests failed and an empty result cannot be confirmed. The run fails; retry. |
| `INVALID_INPUT: None of the inputs is a Myntra search, listing or product ...` | The links were not myntra.com pages. Use search words, myntra.com links, or product ids. |

Other things you may see:

- **Few rows although the site shows many.** The site's total is the size of the whole search; the run is limited by **Maximum products** (default 1,000).
- **A brand returns zero.** Check the spelling against the site's Brand filter, or search the brand name as a search word instead.
- **Two rows with the same name.** Each colourway has its own product id and its own row.
- **Prices differ from the app.** Myntra shows personalised coupons and bank offers in the app; this Actor reports the public price and the generic coupon the listing advertises.

### Honest limits

- **India storefront only.** The Actor reads myntra.com as an anonymous visitor; it does not select a delivery pincode, so delivery dates and pincode-specific serviceability are not collected.
- **No review text.** Rating, rating count, review count and the star distribution are collected; the written reviews are not.
- **No login-only data.** Wishlists, carts, order history, personalised coupons and member prices need an account and are out of scope.
- **Stock counts are snapshots.** `sizeOptions[].inventory` is what the product page holds at the moment of the request and changes as people buy.
- **599 per slice.** One filter set shows at most 599 products; deeper results come from splitting. Splitting by brand, colour and price band reaches very large parts of a category, but a run cannot promise the whole catalogue of a search with hundreds of thousands of products; it promises the number of unique products you ask for (proven above for 12,000).
- **Colourways are separate products.** The same shirt in five colours is five rows.
- **Prices change.** Myntra reprices during sales; a row is the state at `scrapedAt`.
- **Pictures are links.** Image files are not downloaded.
- **Datacenter addresses are refused at random** by the site; the Actor works around it, which is why start-up takes a few seconds.

### Compared with the other ways to get Myntra data

| Way | Good for | Trade-offs |
|---|---|---|
| **This Actor** | Search- and brand-wide exports, price and stock watching, 10,000+ rows, scheduled runs, API and no-code integrations | Pay per row; public data only; India storefront |
| **Copy and paste from the site** | A handful of products | Hours of work for hundreds; no stock counts; no history |
| **A generic browser-extension scraper** | One listing page at a time | Stops at the visible page, no splitting beyond the site's limit, no per-size stock, runs on your laptop |
| **Myntra's seller or affiliate feeds** | Your own listings, or approved partners | Needs a contract; not available for competitor research |
| **Writing your own script** | Full control | You must solve the cookie bootstrap, the 599-row limit, the refused-address problem and the splitting yourself, and maintain it when the site changes |

### FAQ

#### Is there an official Myntra API?

Myntra offers partner and seller integrations, but no public product-data API for researchers. This Actor reads the same JSON the myntra.com pages load and returns it as a clean dataset, which makes it a practical Myntra API alternative.

#### How do I scrape Myntra without login?

Nothing to do: the Actor never logs in. It opens the home page like a visitor, receives the cookies, and calls the same product and search JSON the website uses.

#### How many products can I scrape from Myntra in one run?

The proof run collected 12,000 unique products from one search word on 29 Oct 2026 in 7.8 minutes. The ceiling is your **Maximum products** setting and, for pay-per-result, your **Max cost per run**.

#### Why does Myntra's own search stop at a few hundred products?

Myntra shows at most 599 products for one set of filters. The Actor gets past it by slicing the search by brand, colour, gender, price band and discount band, then merging and de-duplicating the slices.

#### How do I export Myntra products to Excel or CSV?

Run the Actor, open the dataset and choose Excel or CSV in the export menu, or add `?format=xlsx` or `?format=csv` to the dataset URL.

#### How do I track Myntra prices every day?

Put your product ids in **Product ids**, schedule the Actor daily and append the results. Each row has `price`, `mrp`, `discountPercent` and `scrapedAt`.

#### Can I get the size availability of a product?

Yes. With product pages on, `sizeOptions` lists every size with `available`, the units in stock, the lowest price and the sellers offering it. `inStock` and `sizes` summarise it.

#### Can I see who the seller is?

Yes: `sellerName`, `sellerCity`, `sellerState` for the default seller and `sellers` with the registered legal name and address of every seller, as printed on the product page.

#### How do I get all products of one brand?

Put the brand in **Brands** with no search words, or add it to a search word. "Roadster" returns the brand's whole catalogue, split automatically beyond 599 products.

#### Can I scrape a Myntra category link?

Yes. Paste links like `https://www.myntra.com/men-jeans` or a filtered link into **Myntra URLs**. The filters in the link (`f=` brand, colour, gender; `rf=` price and discount ranges; `sort=`) are applied.

#### Can I scrape by product id or product link?

Yes. Put ids or full product links into **Product ids**. Every id gives one row from the product page.

#### What does "Include sizes with stock, seller, description and specifications" do?

It opens every product page. Off: only listing data (price, MRP, discount, rating, sizes list, colours, images, badges, coupon). On: stock per size, sellers and addresses, description, material and care, specifications, return and exchange policy, rating split, and the current price.

#### Why is `price` lower than `mrp`?

`mrp` is the maximum retail price printed on the product; `price` is what Myntra sells it for now. `discountPercent` and `discountAmount` give the difference.

#### How is `discountPercent` calculated?

`(mrp - price) / mrp` rounded to a whole number. Myntra's own label can round down or print a rupee amount, so it may differ by one point.

#### Why are some `rating` values empty?

New products have no ratings yet. `rating` is then empty and `ratingCount` is 0. In the proof run the rating column was filled for 56.7 percent of men's t-shirts.

#### Why do I get fewer rows than I asked for?

Either the search has fewer products (the status message says so), the time limit was reached (PARTIAL), or the **Max cost per run** was reached (MAX_COST).

#### Can I filter by size?

Yes, in **Sizes**: S, M, L, XL, 3XL, 28, 30, UK6, UK 7, 2-3Y. The Actor matches your spelling to Myntra's filter list.

#### Can I filter by price range?

Yes: **Minimum price** and **Maximum price** in rupees. The maximum is included.

#### Can I get only discounted products?

Set **Minimum discount**, for example 50 for "50% and above". Sort by "Better discount" to see the deepest cuts first.

#### Can I get the newest arrivals?

Choose **Order: What's new**. `listedAt` and the "Just Launched" badge in `tags` help you check.

#### Do you support Hindi search words?

Yes. Myntra understands Hindi and Hinglish queries such as "लहंगा"; the recipe above returned thousands of matches. Fields stay in the language Myntra uses (English).

#### Does it work for other countries?

Only myntra.com (India). Prices are in rupees.

#### Is it legal to scrape Myntra?

The Actor reads public pages that any visitor can open. What you may do with the data depends on your country, the site's terms and what you collect; see the legality chapter. Product data contains no personal data except business seller names and addresses printed on the product page.

#### Does it use residential proxies?

Not by default. It starts with Apify datacenter addresses and switches to Indian residential traffic only if the datacenter route is refused completely, then switches back.

#### How fast is it?

Prefill: 10 seconds for 30 products with full details. 1,000 products with details: about 40 seconds. Proof run: 26 products per second over 7.8 minutes.

#### What if Myntra blocks the run?

Refused addresses are replaced within a second. If everything is refused, the status is BLOCKED and the run fails, so you are not charged for nothing.

#### Does it download images?

No, it returns picture links (`imageUrl`, `images`). Download them with your own tool if you need the files.

#### Can I get reviews?

Not the review texts. You get `rating`, `ratingCount`, `reviewCount` and `ratingDistribution`.

#### What is the difference between `productId` values of the same shirt in different colours?

Myntra gives each colourway its own style id. `colourVariants` lists the sibling ids so you can group them.

#### How do I avoid paying for duplicates?

You never do: rows are de-duplicated by `productId` inside a run before they are saved.

#### How do I stay under a budget?

Set **Maximum products** and **Max cost per run**. The Actor plans only what the ceiling pays for and finishes cleanly.

#### Can I run it from Python or Node.js?

Yes, see the quick-start chapters. The Apify client libraries start the run, wait and iterate the dataset.

#### Can I use it in Make, Zapier or n8n?

Yes, through the Apify modules; see the integrations chapter.

#### Does it keep or share my data?

The Actor stores nothing outside your run's dataset and key-value store. You own the results.

#### What does "Site Maintenance" in the log mean?

It is what myntra.com answers to addresses it dislikes. The Actor counts it as a refused address and uses another one; you only see it in the `SUMMARY` statistics.

#### How does the Actor treat products that were removed after listing?

The row is kept with listing data and `detailsFetched` false, and the status message tells you how many.

#### Can I search by brand and size at the same time?

Yes. Filters combine: for example brand "Puma", colour "navy blue", gender "women" and size "UK 6" returned only matching shoes in a test.

### Glossary

- **Myntra** — India's largest online fashion marketplace (myntra.com), part of the Flipkart group.
- **Style id / product id (`productId`)** — Myntra's number for one product in one colour; the number before `/buy` in a product link.
- **MRP** — maximum retail price (अधिकतम खुदरा मूल्य), the struck-through price printed on the product.
- **Discount / छूट** — the reduction from MRP; `discountPercent` and `discountAmount`.
- **Article type** — Myntra's product type such as Tshirts, Kurtas, Casual Shoes (`category`).
- **Kurta, kurti, saree (साड़ी), lehenga (लहंगा), dupatta** — Indian garments; search words work in English or Hindi.
- **Colourway** — the same style in another colour; separate product id.
- **SKU** — one size of one product (`sizeOptions[].skuId`).
- **Seller (विक्रेता)** — the company that sells the product on Myntra; its legal name and address are printed on the page.
- **COD** — cash on delivery (`codAvailable`).
- **Facet** — a filter list (Brand, Colour, Size...) with counts that the site returns with every search.
- **EORS** — "End of Reason Sale", Myntra's big sale event; sale badges appear in `tags`.
- **DPDP Act 2023** — India's Digital Personal Data Protection Act.

### Legality and responsibility

The Actor collects information that Myntra shows to every visitor without an account: product names, prices, ratings, stock, and the business names and registered addresses of sellers that the product page prints for legal-metrology and consumer-protection reasons. It does not log in, bypass a login or collect shopper data (no reviewer names, no customer accounts).

You are responsible for how you use the data. Check Myntra's terms of use for your case, respect copyright on pictures and descriptions, and do not republish them as your own. If your data set contains personal data, for example an individual seller's name, handle it under the rules that apply to you: the Digital Personal Data Protection Act, 2023 in India, the GDPR in the EU/UK, or local law. Keep request volumes reasonable; the default settings are tuned to be gentle and the Actor stops by itself when the site refuses. This section is information, not legal advice.

### Changelog

- **1.0 (29 Oct 2026)** — First release: search words, Myntra links with filters, brands, product ids; filters for brand, gender, colour, size, price, discount, rating and order; product-page details with per-size stock and seller addresses; automatic splitting beyond Myntra's 599-products-per-search limit; maximum-cost guard; SUMMARY record with outcome and statistics.

### Support

Questions, a missing field or a feature wish? Open an issue from the Actor page or write through the Apify Console; we reply within 24 hours. When you report a problem, include the run id and the `SUMMARY` record, which already contains the statistics we need.

# Changelog

This Actor's version history is a separate document: https://apify.com/logiover/myntra-scraper/changelog.md

# Actor input Schema

## `searchQueries` (type: `array`):

What to look for on Myntra, exactly as you would type it in the search box: "men tshirts", "women kurta sets", "nike running shoes", "saree", "lehenga", "kids school bag". Category names such as "men-jeans" work too. One search per line.

## `startUrls` (type: `array`):

Paste myntra.com category or search pages (for example https://www.myntra.com/men-tshirts?f=Brand%3ARoadster), brand store pages (https://www.myntra.com/shop/...) or product pages (.../buy). The filters in the link (brand, colour, size, price, discount, sort) are applied. Product links return that one product.

## `productIds` (type: `array`):

Myntra product ids (the number before /buy in a product link, e.g. 12027436) or full product links. Every id returns one row with the full product page data: sizes with stock, seller, description, specifications.

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

Only products of these brands, e.g. Roadster, HRX by Hrithik Roshan, Nike, Levis, Libas. Spelling and case are matched to Myntra's brand list. With no search words, every brand is collected on its own.

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

Only these target groups: men, women, boys, girls (lower case, as in Myntra's Gender filter). Leave empty for all. Some category pages are already limited to one group.

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

Only these colours, named as in Myntra's Colour filter: Black, White, Navy Blue, Red, Maroon, Olive, Pink, Grey Melange...

## `sizes` (type: `array`):

Only products offered in one of these sizes, written as in Myntra's Size filter: S, M, L, XL, 3XL, 28, 30, UK 8, 2-3Y...

## `minPrice` (type: `integer`):

Lowest selling price in rupees.

## `maxPrice` (type: `integer`):

Highest selling price in rupees (included).

## `minDiscount` (type: `integer`):

Only products discounted by at least this many percent off MRP (Myntra's "50% and above" filter).

## `minRating` (type: `number`):

Only products rated at least this value (Myntra's "Rated 4.0+" filter). Unrated products are excluded when set.

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

Order of the results when fewer products are requested than exist. Recommended is Myntra's default ranking.

## `includeDetails` (type: `boolean`):

Open every product page for per-size availability and stock, seller name and address, description, material and care, specifications, return and exchange policy, rating split and the current price. Switch off for a faster list-only export (about 6 times faster).

## `splitLargeSearches` (type: `boolean`):

Myntra shows at most 599 products for one set of filters. When more are requested, the Actor splits the search by brand, colour, gender, price band and discount band to reach the rest.

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

Stop after this many products (across all searches). You are charged per product saved.

## `maxConcurrency` (type: `integer`):

Number of parallel browser-like sessions (each uses its own proxy address). 20 reads about 1,000 products with full details in a minute or two; lower it if you share a proxy plan.

## `proxyConfiguration` (type: `object`):

Apify datacenter proxy works and is the default. If Myntra refuses these addresses, the Actor falls back to a small amount of Indian residential traffic by itself.

## Actor input object example

```json
{
  "searchQueries": [
    "men tshirts"
  ],
  "sortBy": "relevance",
  "includeDetails": true,
  "splitLargeSearches": true,
  "maxResults": 30,
  "maxConcurrency": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All Myntra products collected in this run.

# 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 = {
    "searchQueries": [
        "men tshirts"
    ],
    "maxResults": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/myntra-scraper").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 = {
    "searchQueries": ["men tshirts"],
    "maxResults": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/myntra-scraper").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 '{
  "searchQueries": [
    "men tshirts"
  ],
  "maxResults": 30
}' |
apify call logiover/myntra-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/myntra-scraper"
        }
    }
}
```

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/efz9tDv5zfYnoAZhb/builds/wbyMPjgSYXongzujq/openapi.json
