How Bain Benchmarked 18M+ Second-Hand Listings Across 6 Platforms

Sasha Bouloudnine●
20 Jun 2026

●
4 min read

How do you size a market when no public data exists?

In 2021, the second-hand fashion market was growing rapidly. Vinted, Vestiaire Collective, Depop β€” the platforms were well-known, but reliable competitive data was scarce. No industry reports compared inventory size, pricing, or category mix across players.

Second-hand marketplace landscape in Europe

When Bain & Company needed to benchmark these platforms for an M&A due diligence, traditional research methods fell short. The solution: collect the data directly from the platforms.

The initial request from Bain was clear and structured:

Email from Bain consultant outlining the scraping requirements

Scope

The engagement required collecting listings across 6 platforms in 3 countries:

France: Vinted FR, Vestiaire Collective FR, Videdressing

UK: Vinted UK, Depop, eBay UK

Germany: Vinted DE, eBay Kleinanzeigen

Each listing required structured metadata: price, brand, category, condition, and creation date. The scope covered 14 product categories β€” from dresses to sneakers, bags to jackets.

Bain specification document showing data points to extract

The deadline was 3 weeks, aligned with the deal timeline.

Email confirming the ETA and project scope

Technical approach

Bain partnered with lobstr.io to collect the dataset. The project involved two interdependent challenges.

Handling pagination limits

Most marketplaces cap search results β€” Vinted stops at 3,000 items, Vestiaire Collective at 1,080. A category containing millions of listings only displays a fraction.

Screenshot showing display limit on marketplace

To capture all listings, large categories were split into smaller buckets:

  1. Per-price split: "Dresses €0-10", "Dresses €10-20", "Dresses €20-30"...
  2. Per-brand split: "Dresses Zara", "Dresses H&M", "Dresses Nike"...

On Vinted, this meant splitting by 2,800+ brands β€” from Adidas (2.1M items) to niche luxury labels:

Brand split strategy showing item counts per brand

Each sub-query returns under the display limit. Combined, they form the complete dataset.

However, this approach generates thousands of micro-tasks per platform.

Parallel execution

Running thousands of queries sequentially would exceed the timeline. The solution was a producer/consumer architecture.

One thread per platform discovered categories and subcategories, generating tasks stored in PostgreSQL. Multiple workers then consumed these tasks in parallel:

class VestiaireCollectiveBackend(Application, CeleryTask): def main(self, task_id): p = current_process() self.ip_index = p.index session = self.Session() self.main_task(task_id, session)
f
  1. 1 producer per platform: discovers categories, creates tasks
  2. N consumers: scrape products in parallel
  3. PostgreSQL: stores tasks and handles concurrent writes

This architecture reduced collection time from months to 3 weeks.

Infrastructure

All data flowed into a normalized PostgreSQL schema β€” categories, products, and metadata linked for efficient querying:

SQL database schema showing category, product, and meta tables

The project required 75 commits across 4 developers over 14 days:

8109252 [depop] add depop module 9f17113 [vinted] celery_backend a9638e5 [vestiairecollective] add algolia module 461590d [depop] add bisect per-price split e7cde01 [vinted] finalized per-brands split b018157 [vinted] 20210301 deployment
f
Commit activity during the Bain project

Deliverables

Each listing was extracted with structured metadata. Below is a sample from the Vinted export β€” 43 columns per product:

CSV export sample showing structured product data
Fields include: id, url, title, price, currency, brand, category, condition, gender, size, created_at, country, seller_id, photo_count, and more.

All data was delivered in CSV format, ready for pivot tables and market sizing models.

Results

The final dataset covered 6 platforms across 3 countries:

Platform Unique Listings Categories
Vinted (FR/UK/DE) 5,680,000 2,828
eBay UK/FR 4,400,000 704
eBay Kleinanzeigen 3,050,000 44,000
Depop 2,900,000 1,121
Vestiaire Collective 960,000 2,831
Facebook Marketplace 780,000 3,900
Total 17,770,000+ 55,000+

With structured data across all major players, the deal team could answer key questions:

Vinted: 3-6x more inventory than any competitor. Clear market leader.

Vestiaire Collective: Fewer listings but significantly higher average price. Premium positioning confirmed.

Depop: Concentrated in UK. Strong local player with limited geographic expansion.

Category depth: Inventory distribution across bags, sneakers, coats β€” now quantifiable.

Within hours of delivery, the deal team began building market share models.

Volume breakdown per platform

Vinted alone had more listings than Vestiaire Collective, Depop, and Facebook Marketplace combined β€” a finding that would have required months to validate through traditional research methods.

blog-not-found
In due diligence, you need hard numbers, not estimates. Having actual inventory counts per platform changed the level of confidence in our market sizing.
blog-not-found
Sophie Ladousse,Manager, Bain & Company

Key takeaways

  1. 18 million+ listings collected across 6 platforms in 3 countries
  2. 3 weeks from kickoff to delivery
  3. Pagination limits bypassed via per-brand and per-price splitting
  4. Quantitative benchmark enabling M&A-grade market sizing

Related Articles

Related Squids