How Bain Benchmarked 18M+ Second-Hand Listings Across 6 Platforms
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.

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:

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.

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

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.

To capture all listings, large categories were split into smaller buckets:
- Per-price split: "Dresses β¬0-10", "Dresses β¬10-20", "Dresses β¬20-30"...
- 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:

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 producer per platform: discovers categories, creates tasks
- N consumers: scrape products in parallel
- 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:

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 deploymentf

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

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.

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.

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