Skip to main content
Thirdwatchthirdwatch
E-commerce & products

Scrape Myntra Products for India Fashion Research (2026)

Pull the Myntra catalogue using Thirdwatch — brand, price, MRP, discount, rating, sizes, colour variants. India's largest fashion marketplace. Python recipes.

May 12, 2026 · 5 min read · 1,221 words
See the scraper →

Thirdwatch's Myntra Scraper returns Myntra search and category results — product_name, brand, price, original_price (MRP), discount_percent, rating, rating_count, sizes, primary_colour, color_variants_count, image_url and url. Built for India fashion researchers building trend datasets, brand teams tracking unauthorised resellers, ops teams monitoring competitor pricing, and dropshippers scoping catalogue opportunities.

Why scrape Myntra for India fashion research

Myntra is India's largest dedicated fashion marketplace. According to Flipkart Group's investor disclosures via Walmart's 2024 annual report, Myntra serves 60M+ monthly active users across 6,000+ brands and is the country's anchor channel for apparel, footwear and beauty. For India-specific fashion intelligence — trend tracking, brand sell-through analysis, price-positioning research — Myntra is the canonical primary source. The blocker for systematic access is that Myntra has no public product API; the Partner Portal is restricted to sellers and exposes only their own catalogue.

The job-to-be-done is structured. A fashion researcher building a longitudinal dataset of India's kurta market wants monthly category snapshots with brand, price and discount fields. A brand team monitors 300 of their own SKUs daily to detect unauthorised reseller pricing. An ops team at a competing marketplace watches Myntra's End-of-Reason-Sale to react in near-real-time. A dropshipper analyses bestseller patterns by colour and price band to source from suppliers. All reduce to keyword or category pulls returning structured product rows with price, rating and variant detail.

How does this compare to the alternatives?

Three practical options for getting Myntra product data into a pipeline:

Approach Reliability Setup time Maintenance
DIY Python with requests + BeautifulSoup Low — Myntra rate-limits aggressively and ships SSR JSON inside a JS variable that needs custom parsing 2-3 days Continuous; pagination quirks and SSR-shape changes break weekly
Generic scraping API (raw HTML) Medium — fetches HTML but you still write Myntra-specific extractors 1 day High; you own all selector and JSON-shape changes
Thirdwatch Myntra Scraper Production-tested with production-grade anti-bot tooling 5 minutes Thirdwatch tracks Myntra page changes

Myntra has no Affiliate API at the level Flipkart or Amazon expose, so the build-vs-buy decision is starker than it is for horizontal marketplaces. The Myntra Scraper actor page gives you the public catalogue at transparent per-result pricing with no application gate. See the complete guide to scraping e-commerce for the broader pattern.

How to scrape Myntra for fashion research in 4 steps

Step 1: How do I authenticate against Apify?

Sign in at apify.com (free tier, no credit card), open Settings → Integrations, and copy your personal API token. Every example below assumes the token is in APIFY_TOKEN:

export APIFY_TOKEN="apify_api_xxxxxxxxxxxxxxxx"

Step 2: How do I pull a fashion category snapshot?

Pass the category slug — either through the category enum or directly as a queries entry. The actor maps both to https://www.myntra.com/{slug}.

import os, requests, datetime, json, pathlib

ACTOR = "thirdwatch~myntra-scraper"
TOKEN = os.environ["APIFY_TOKEN"]

resp = requests.post(
    f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
    params={"token": TOKEN},
    json={
        "queries": ["women-kurtas-kurtis", "men-tshirts", "women-dresses"],
        "sortBy": "popularity",
        "maxResults": 200,
    },
    timeout=900,
)
records = resp.json()
today = datetime.date.today().isoformat()
pathlib.Path(f"snapshots/myntra-{today}.json").write_text(json.dumps(records))
print(f"{today}: {len(records)} products across 3 categories")

Three category slugs × 200 products = ~600 records — a usable steady-state daily sample for an India-fashion research project. Note: the actor defaults sortBy to relevance (which maps to Myntra's popularity internally) because Myntra's true default-sort SSR has a known pagination bug that returns page 1 forever.

Step 3: How do I clean prices and parse the category triplet?

Myntra ships INR prices as integers in the SSR payload, so no Indian-lakh string parsing is needed. The category field follows a master > sub > article triplet that's already split for you.

import pandas as pd

df = pd.DataFrame(records)
df = df.dropna(subset=["price", "original_price"])
df["discount_pct"] = (
    (df["original_price"] - df["price"]) / df["original_price"] * 100
).round(1)

# Brand-level price-band summary
band_summary = (
    df.groupby(["master_category", "brand"])
      .agg(median_price=("price", "median"),
           median_mrp=("original_price", "median"),
           median_disc=("discount_pct", "median"),
           n=("sku", "count"))
      .reset_index()
      .sort_values(["master_category", "median_price"])
)
print(band_summary.head(20))

For trend research, the article_type column (Tshirts, Kurtas, Sneakers) and gender are the two strongest grouping keys. primary_colour lets you build a colour-trend index per article type — see step 4.

Step 4: How do I build a colour and size trend index?

Myntra ships primary_colour, sizes (array) and color_variants_count per product. These are the workhorse fields for fashion-trend research because they let you measure assortment breadth without scraping product detail pages.

# Colour distribution by article type
colour_index = (
    df.groupby(["article_type", "primary_colour"])
      .size()
      .reset_index(name="listings")
      .sort_values(["article_type", "listings"], ascending=[True, False])
)

# Size availability per category — explode the sizes array
size_df = df.explode("sizes").dropna(subset=["sizes"])
size_index = (
    size_df.groupby(["article_type", "sizes"])
           .size()
           .reset_index(name="listings")
)

# Brand assortment depth — colour variants per style
brand_depth = (
    df.groupby("brand")
      .agg(styles=("sku", "count"),
           avg_variants=("color_variants_count", "mean"))
      .sort_values("styles", ascending=False)
)
print(brand_depth.head(15))

Over a 30-day longitudinal pull, the colour and size index becomes a leading indicator of next-season inventory bets — brands ramp specific colours in their assortment 4-6 weeks before they appear in marketing campaigns.

Sample output

A single record from the dataset for one women's kurta looks like the example below. Five rows of this shape weigh ~4 KB.

{
  "sku": "26314618",
  "product_name": "Anouk Women Floral Printed Straight Kurta",
  "brand": "Anouk",
  "price": 899,
  "original_price": 2499,
  "discount_amount": 1600,
  "discount_percent": 64.0,
  "currency": "INR",
  "rating": 4.2,
  "rating_count": 1843,
  "image_url": "https://assets.myntassets.com/.../26314618.jpg",
  "url": "https://www.myntra.com/kurtas/anouk/.../26314618/buy",
  "category": "Apparel > Topwear > Kurtas",
  "master_category": "Apparel",
  "sub_category": "Topwear",
  "article_type": "Kurtas",
  "gender": "Women",
  "primary_colour": "Navy Blue",
  "sizes": ["XS", "S", "M", "L", "XL", "XXL"],
  "color_variants_count": 7
}

sku (also exposed as product_id) is the canonical natural key for cross-snapshot dedup. url is the human-readable equivalent. The category field is the full breadcrumb; the three component fields (master_category, sub_category, article_type) are pre-split for analytics. color_variants_count of 7 means this style ships in seven colours under the same parent — useful for measuring brand assortment depth without crawling each variant page.

Common pitfalls

Three things trip up production Myntra pipelines. Default-sort pagination bug — Myntra's true default sort returns page 1 indefinitely when paginated; the actor side-steps this by mapping the default relevance value to popularity internally, but if you override sortBy to something exotic you should validate page coverage against your maxResults target. Variant explosion — one "style" can map to 5-10 colour SKUs each with its own sku but shared product_name; for brand-share analysis dedup by (brand, product_name) or use color_variants_count as the unit. End-of-Reason-Sale price swings — discounts can shift 30-60% within hours during EORS or Big Fashion Days; treat sale-window snapshots as a separate regime rather than blending them into steady-state trend lines.

Thirdwatch's actor handles the anti-bot work and India-region routing to stay reliable at sustained daily volumes — a 200-product category snapshot typically completes in under two minutes. Pair Myntra with AJIO and Nykaa for cross-marketplace India fashion-and-beauty coverage. Watch out for one further subtle issue: Myntra ships rating: null and rating_count: 0 for genuinely new arrivals; downstream analytics should treat these as missing rather than zero ratings.

Related use cases

Frequently asked questions

How much does it cost to scrape Myntra?

Thirdwatch's Myntra Scraper uses competitively priced pay-per-result billing with volume tiers, so cost scales with how much data you pull and drops at higher tiers. A 50-keyword India fashion sweep at 100 products each runs cheaply enough for daily refreshes, well below typical retail-monitoring SaaS for India fashion coverage.

Why scrape Myntra specifically for India fashion?

Myntra is India's largest fashion specialist marketplace, with 60M+ monthly active users per Flipkart Group disclosures. It carries deeper apparel, ethnic-wear and footwear SKU coverage than horizontal players like Flipkart or Amazon India. For brand teams, trend researchers and India fashion analysts, Myntra is the table-stakes primary source.

What fields are returned per product?

Each record includes product_name, brand, price, original_price (MRP), discount_amount, discount_percent, rating, rating_count, sizes (array), primary_colour, color_variants_count, gender, master_category, sub_category, article_type, image_url and url. All prices are in INR, and category triplets follow Myntra's apparel taxonomy.

How does this compare to Myntra's official channels?

Myntra has no public product API. The Partner Portal is only open to sellers and surfaces their own catalogue, not the public marketplace. Thirdwatch's actor accesses the same listings any shopper sees, with no application gate and no use-case restriction beyond standard public-data scraping norms.

How fresh is the data?

Every run pulls live from myntra.com at request time. Prices and stock change frequently during End-of-Reason-Sale, Big Fashion Days, and Republic Day events — sometimes hourly inside the window. For active sale monitoring, schedule the actor hourly; for steady-state catalogue tracking, daily is sufficient.

Can I scrape a full category rather than search queries?

Yes — set the category enum (e.g. women-kurtas-kurtis, men-tshirts) or pass a slug directly to queries. The actor maps either input to https://www.myntra.com/{slug} and reads the same SSR product list. Use subcategorySlug to drill into a deeper path.

Related

Try it yourself

100 free credits, no credit card.

About 30 real searches. Add the MCP to Claude or Cursor in two minutes.