Marketplace Assortment Analysis: What Products Competitors Carry

Marketplace Assortment Analysis: What Products Competitors Carry

Understanding what your competitors sell is as important as understanding how they sell it. Assortment analysis—the systematic study of which products competitors offer, how they structure their product lines, and how their assortments evolve over time—reveals strategic insights that pricing or ranking data alone cannot provide.

When a competitor launches a new product line, exits a category, or shifts their product mix toward a different price segment, these are strategic moves that signal where the market is heading. Brands that track these moves systematically gain advance warning and the ability to respond proactively.

This guide explains how to build an assortment analysis capability using marketplace data, proxy infrastructure, and structured analytics.

What Assortment Analysis Reveals

Product Line Breadth and Depth

How many products does each competitor offer? How are those products distributed across subcategories?

  • Breadth: The number of different product categories or subcategories a competitor covers
  • Depth: The number of SKUs within each category, including variants (sizes, colors, configurations)

A competitor with broad but shallow coverage is taking a different strategic approach than one with narrow but deep coverage. Understanding this positioning helps you identify where you are directly competing and where you have differentiated coverage.

New Product Launch Tracking

Detecting when competitors launch new products enables you to:

  • Assess the competitive threat of new offerings
  • Identify emerging product trends before they become mainstream
  • Inform your own product development pipeline
  • Prepare competitive positioning and marketing responses

Product Discontinuation Monitoring

When competitors discontinue products, it can signal:

  • Category exit or strategic retreat
  • Product quality issues
  • Supply chain problems
  • Market demand shifts

Discontinued competitor products may also represent opportunities for you to capture their former customers.

Price Segment Strategy

Analyzing a competitor’s assortment by price point reveals their strategic positioning:

  • Are they focused on budget, mid-range, or premium segments?
  • Are they expanding into new price tiers?
  • How does their product quality (as reflected by ratings) vary across price points?

Feature and Specification Trends

By analyzing the attributes of competitor products, you can identify:

  • Which features are becoming standard in the category
  • Which specifications differentiate premium from budget products
  • Emerging features that competitors are starting to offer
  • Features you offer that competitors do not (and vice versa)

Data Collection for Assortment Analysis

What to Collect

For each competitor, collect their complete product catalog from each marketplace:

class AssortmentCollector:
    def __init__(self, proxy_manager):
        self.proxy_manager = proxy_manager

    async def collect_competitor_catalog(self, competitor, platform, country):
        """Collect all products from a competitor's store page."""
        proxy = self.proxy_manager.get_proxy(country)
        parser = self.get_parser(platform)

        all_products = []
        page = 1

        # Navigate to the competitor's store page
        store_url = parser.build_store_url(competitor['store_id'])

        while True:
            url = parser.add_pagination(store_url, page)
            page_data = await self.fetch_page(url, proxy)

            if not page_data:
                break

            products = parser.parse_store_products(page_data)
            if not products:
                break

            for product in products:
                all_products.append({
                    'competitor': competitor['name'],
                    'product_id': product['id'],
                    'title': product['title'],
                    'price': product['price'],
                    'original_price': product.get('original_price'),
                    'category': product.get('category'),
                    'subcategory': product.get('subcategory'),
                    'rating': product.get('rating'),
                    'review_count': product.get('review_count'),
                    'sales_count': product.get('sales_count'),
                    'images': product.get('images', []),
                    'platform': platform,
                    'country': country,
                    'collected_at': datetime.utcnow(),
                })

            page += 1
            if page > 100:  # Safety limit
                break

        return all_products

For each product, capture:

  • Product ID and title
  • Price and any promotional pricing
  • Category and subcategory classification
  • Key attributes and specifications
  • Rating and review count
  • Sales indicators (if visible)
  • Image URLs for visual analysis
  • First seen date (to identify new products)
  • Last seen date (to identify discontinuations)

Collection Frequency

Assortment analysis does not require the same frequency as price monitoring:

  • Full catalog crawl: Monthly for each competitor
  • New product detection: Weekly searches for recent listings
  • Quick checks: Daily for high-priority competitors during product launch seasons

Proxy Requirements

Collecting complete competitor catalogs requires navigating through many pages of a seller’s store, which can trigger anti-bot measures if done without proper proxy infrastructure.

DataResearchTools mobile proxies are ideal for assortment collection because:

  • Store page crawling requires maintaining a browsing session, which mobile proxies support through sticky sessions
  • Different competitors may have stores across different SEA countries, requiring geo-targeted proxies
  • Large catalog crawls need distributed IP addresses to avoid rate limiting
  • Mobile proxies access the same store views that mobile shoppers see, which may differ from desktop views on platforms like Shopee

Assortment Analysis Framework

Product Taxonomy Mapping

To compare assortments meaningfully, you need a consistent product taxonomy:

class ProductTaxonomyMapper:
    def __init__(self):
        self.taxonomy = self.load_taxonomy()

    def classify_product(self, product):
        """Map a product to your standard taxonomy."""
        # Use title, category, and attributes to classify
        raw_category = product.get('category', '')
        title = product.get('title', '')
        attributes = product.get('attributes', {})

        # Rule-based classification
        for category in self.taxonomy:
            if self.matches_category(title, raw_category, attributes, category):
                return category['id']

        return 'unclassified'

    def matches_category(self, title, raw_category, attributes, category_def):
        """Check if a product matches a taxonomy category definition."""
        keywords = category_def.get('keywords', [])
        exclusions = category_def.get('exclusions', [])

        title_lower = title.lower()

        has_keyword = any(kw.lower() in title_lower for kw in keywords)
        has_exclusion = any(ex.lower() in title_lower for ex in exclusions)

        return has_keyword and not has_exclusion

Assortment Comparison Matrix

Create a matrix comparing your assortment against competitors:

SubcategoryYour BrandCompetitor ACompetitor BCompetitor C
Wireless Earbuds8 SKUs12 SKUs5 SKUs3 SKUs
Over-Ear Headphones4 SKUs6 SKUs8 SKUs0 SKUs
Neckband Earphones2 SKUs0 SKUs3 SKUs5 SKUs
True Wireless ANC3 SKUs4 SKUs2 SKUs1 SKU
Gaming Headsets0 SKUs3 SKUs5 SKUs2 SKUs

This immediately reveals:

  • Where you have assortment advantages (more SKUs than competitors)
  • Where you have gaps (competitors have products in categories you do not cover)
  • Where the market is crowded (many SKUs from multiple competitors)

Change Detection

Track changes in competitor assortments over time:

class AssortmentChangeDetector:
    def __init__(self, db):
        self.db = db

    def detect_changes(self, competitor, current_products, platform, country):
        """Compare current catalog against previous collection."""
        previous = self.db.get_last_catalog(competitor, platform, country)

        if not previous:
            return {'new_products': current_products, 'discontinued': [], 'unchanged': []}

        previous_ids = {p['product_id'] for p in previous}
        current_ids = {p['product_id'] for p in current_products}

        new_ids = current_ids - previous_ids
        discontinued_ids = previous_ids - current_ids
        unchanged_ids = current_ids & previous_ids

        return {
            'new_products': [p for p in current_products if p['product_id'] in new_ids],
            'discontinued': [p for p in previous if p['product_id'] in discontinued_ids],
            'unchanged': len(unchanged_ids),
            'new_count': len(new_ids),
            'discontinued_count': len(discontinued_ids),
        }

Price Segment Analysis

Segment each competitor’s assortment by price tier:

def analyze_price_segments(competitor_products, price_tiers):
    """Analyze how a competitor's assortment is distributed across price tiers."""
    segments = {tier['name']: [] for tier in price_tiers}

    for product in competitor_products:
        for tier in price_tiers:
            if tier['min'] <= product['price'] < tier['max']:
                segments[tier['name']].append(product)
                break

    analysis = {}
    total = len(competitor_products)

    for tier_name, products in segments.items():
        count = len(products)
        analysis[tier_name] = {
            'count': count,
            'percentage': (count / total * 100) if total > 0 else 0,
            'avg_price': sum(p['price'] for p in products) / count if count > 0 else 0,
            'avg_rating': (
                sum(p.get('rating', 0) for p in products) / count
                if count > 0 else 0
            ),
        }

    return analysis

Assortment Velocity

Measure how quickly competitors are expanding or contracting their product lines:

  • Net new products per month: New launches minus discontinuations
  • Category expansion rate: Number of new categories entered per quarter
  • SKU growth rate: Percentage growth in total SKU count

Strategic Applications

Gap Analysis

Identify categories or price segments where competitor assortments are weak or absent. These represent potential opportunities for your brand to differentiate.

Competitive Threat Assessment

A competitor rapidly expanding their assortment in your core category is a direct threat. Early detection gives you time to prepare:

  • Strengthen your content and pricing for affected products
  • Accelerate planned product launches
  • Increase advertising in threatened categories

Product Development Intelligence

Competitor assortment data informs product development:

  • Which features are competitors introducing in new products?
  • What price points are they targeting with new launches?
  • Are there unserved customer needs visible in review data for competitor products?

Distribution Strategy

Assortment analysis across platforms reveals competitor distribution strategies:

  • Do they prioritize certain marketplaces over others?
  • Are they present on platforms where you are not?
  • How does their assortment differ by platform?

SEA Market Considerations

Platform-Specific Assortments

Competitors may offer different products on different SEA platforms. A brand might list its full catalog on Shopee but only premium products on LazMall. Cross-platform assortment comparison reveals these strategic choices.

Regional Product Variations

Products sold in different SEA countries may have different specifications (voltage, language, regulatory compliance). Track whether competitors offer localized product variants.

Seller Ecosystem

On Shopee and Lazada, a brand’s effective assortment includes products listed by authorized resellers. Monitoring the combined assortment of a brand’s direct store plus reseller network gives a more accurate picture of competitive positioning.

DataResearchTools for Assortment Analysis

Comprehensive assortment analysis requires crawling competitor store pages across multiple marketplaces and countries. DataResearchTools provides:

  • Mobile proxy coverage across SEA markets for geo-accurate catalog data
  • Sticky sessions for navigating multi-page store catalogs
  • High concurrency for collecting large product catalogs efficiently
  • Reliable access to marketplace store pages without blocking

Whether you are tracking five competitors or fifty, DataResearchTools provides the proxy infrastructure needed to collect complete, accurate assortment data.

Conclusion

Assortment analysis provides a strategic lens on the competitive landscape that complements pricing and ranking intelligence. By systematically tracking what competitors sell, how their product lines evolve, and where gaps exist in the market, brands can make more informed decisions about product development, category investment, and competitive positioning. In fast-moving SEA markets where new products launch daily, the brands that maintain real-time visibility into competitor assortments gain a meaningful strategic advantage.


Related Reading

Scroll to Top