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_productsFor 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_exclusionAssortment Comparison Matrix
Create a matrix comparing your assortment against competitors:
| Subcategory | Your Brand | Competitor A | Competitor B | Competitor C |
|---|---|---|---|---|
| Wireless Earbuds | 8 SKUs | 12 SKUs | 5 SKUs | 3 SKUs |
| Over-Ear Headphones | 4 SKUs | 6 SKUs | 8 SKUs | 0 SKUs |
| Neckband Earphones | 2 SKUs | 0 SKUs | 3 SKUs | 5 SKUs |
| True Wireless ANC | 3 SKUs | 4 SKUs | 2 SKUs | 1 SKU |
| Gaming Headsets | 0 SKUs | 3 SKUs | 5 SKUs | 2 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 analysisAssortment 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.
- Building an Automated Price Parity Monitor with Proxies
- How to Build a Digital Shelf Monitoring System with Proxies
- How to Scrape AliExpress Product Data Without Getting Blocked
- Amazon Buy Box Monitoring: Proxy Setup for Continuous Tracking
- AdsPower Proxy Setup: Multi-Account Browser Configuration
- AdsPower vs GoLogin: Features, Pricing, and Proxy Support Compared
- Building an Automated Price Parity Monitor with Proxies
- How to Build a Digital Shelf Monitoring System with Proxies
- How to Scrape AliExpress Product Data Without Getting Blocked
- Amazon Buy Box Monitoring: Proxy Setup for Continuous Tracking
- AdsPower Proxy Setup: Multi-Account Browser Configuration
- AdsPower Tutorial: Team Browser Management Guide 2026
- Building an Automated Price Parity Monitor with Proxies
- How to Build a Digital Shelf Monitoring System with Proxies
- How to Scrape AliExpress Product Data Without Getting Blocked
- Amazon Buy Box Monitoring: Proxy Setup for Continuous Tracking
- AdsPower Proxy Setup: Multi-Account Browser Configuration
- AdsPower Tutorial: Team Browser Management Guide 2026
- Building an Automated Price Parity Monitor with Proxies
- How to Build a Digital Shelf Monitoring System with Proxies
- How to Scrape AliExpress Product Data Without Getting Blocked
- Amazon Buy Box Monitoring: Proxy Setup for Continuous Tracking
- AdsPower Proxy Setup: Multi-Account Browser Configuration
- AdsPower Tutorial: Team Browser Management Guide 2026
Related Reading
- Building an Automated Price Parity Monitor with Proxies
- How to Build a Digital Shelf Monitoring System with Proxies
- How to Scrape AliExpress Product Data Without Getting Blocked
- Amazon Buy Box Monitoring: Proxy Setup for Continuous Tracking
- AdsPower Proxy Setup: Multi-Account Browser Configuration
- AdsPower Tutorial: Team Browser Management Guide 2026