# Depop Product Search Scraper (`stealth_mode/depop-product-search-scraper`) Actor

Scrape product listings from Depop with precision. Collect brand names, descriptions, pricing, images, locations, and 18+ fields per item. Perfect for fashion resellers, market researchers, and e-commerce professionals tracking secondhand trends.

- **URL**: https://apify.com/stealth_mode/depop-product-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Depop Product Search Scraper: Extract Secondhand Fashion Data Fast

***

### What Is Depop?

Depop is a leading peer-to-peer marketplace for secondhand fashion, vintage clothing, and collectibles. With millions of active sellers and buyers worldwide, Depop hosts an ever-growing inventory of unique items across categories like womens, mens, vintage, and designer brands. Manually searching and extracting product data is tedious — the **Depop Product Search Scraper** automates this, collecting structured product intelligence at scale.

***

### Overview

The **Depop Product Search Scraper** extracts detailed product listings from Depop search results and category pages, converting dynamic marketplace data into clean, structured records. It supports two powerful scraping modes:

- **URL-based scraping**: Extract from specific search result or category pages
- **Filter-based search**: Find items by keyword, price range, condition, and sale status

Ideal for:

- **Resellers** researching pricing trends and competitor inventory
- **Market researchers** analyzing secondhand fashion demand
- **Price monitoring tools** tracking item value over time
- **Aggregator platforms** feeding Depop data into multi-marketplace dashboards
- **Fashion brands** tracking where their products are resold

The scraper handles pagination gracefully, supports filtering by condition and price, and can skip failed URLs without interrupting your collection.

***

### Input Format & Configuration

#### Mode 1: Scrape by URLs

Provide direct links to Depop search results or category pages:

```json
{
  "urls": [
    "https://www.depop.com/search/?q=jersey&sort=newest",
    "https://www.depop.com/category/womens/bottoms/jeans/?moduleOrigin=meganav"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

| Parameter | Description | Example |
|---|---|---|
| `urls` | Array of Depop search or category page URLs | `["https://www.depop.com/search/?q=jersey"]` |
| `ignore_url_failures` | If `true`, skips failed URLs and continues | `true` |
| `max_items_per_url` | Maximum items collected per URL | `20`, `200` |

#### Mode 2: Scrape by Search Filters

Search dynamically using keywords and filter criteria (leave `urls` empty to use this mode):

```json
{
  "keyword": "jersey",
  "sort_by": "newest",
  "price_min": 10,
  "price_max": 10000,
  "condition": "used_good",
  "on_sale": true,
  "max_items_per_url": 200
}
```

| Parameter | Description | Valid Values |
|---|---|---|
| `keyword` | Search term | Any text (e.g., `"vintage polo"`, `"nike shoes"`) |
| `sort_by` | Sort order | `"relevance"`, `"priceAscending"`, `"priceDescending"` |
| `price_min` | Minimum price filter (USD) | Numeric value (e.g., `10`) |
| `price_max` | Maximum price filter (USD) | Numeric value (e.g., `10000`) |
| `condition` | Item condition filter | `"brand_new"`, `"used_like_new"`, `"used_excellent"`, `"used_good"`, `"used_fair"`, or empty for any |
| `on_sale` | Only collect discounted items | `true` or `false` |
| `max_items_per_url` | Maximum results per search | Integer (e.g., `200`) |

> **Tip:** Use Mode 1 for specific categories you've already identified. Use Mode 2 for broad market research across multiple price points and conditions.

***

### Output Format

**Sample output:**

```json
{
  "id": 952206334,
  "brand_id": 13291,
  "brand_name": "Majestic Athletic",
  "active_status": "active",
  "status": "STATUS_ONSALE",
  "category_name": "Jerseys",
  "description": "Vintage Chicago White Sox Paul Konerko Majestic Athletic Jersey\nSize: Large\nWhite with black pinstripes\n#baseball #mlb #vintage #y2k #athletic",
  "pictures": [
    {
      "id": 4936522591,
      "formats": {
        "p0": {
          "height": 1280,
          "width": 1280,
          "url": "https://media-photos.depop.com/b1/447290577/4936522591_d3652708bfb8479996597a81723d3781/P0.jpg"
        }
      },
      "original_width": 1280,
      "original_height": 1280,
      "is_square": true
    },
    {
      "id": 4936525697,
      "formats": {
        "p0": {
          "height": 1280,
          "width": 1280,
          "url": "https://media-photos.depop.com/b1/447290577/4936525697_32a81fea4a3f4c38b666ba444e66e420/P0.jpg"
        }
      },
      "original_width": 1280,
      "original_height": 1280,
      "is_square": true
    },
    {
      "id": 4936525326,
      "formats": {
        "p0": {
          "height": 1280,
          "width": 1280,
          "url": "https://media-photos.depop.com/b1/447290577/4936525326_5d52c40303594018a9c55d2d7ff58647/P0.jpg"
        }
      },
      "original_width": 1280,
      "original_height": 1280,
      "is_square": true
    },
    {
      "id": 4936525327,
      "formats": {
        "p0": {
          "height": 1280,
          "width": 1280,
          "url": "https://media-photos.depop.com/b1/447290577/4936525327_102fafff11ce4a1cb21dc31d3d775f86/P0.jpg"
        }
      },
      "original_width": 1280,
      "original_height": 1280,
      "is_square": true
    },
    {
      "id": 4936525040,
      "formats": {
        "p0": {
          "height": 1280,
          "width": 1280,
          "url": "https://media-photos.depop.com/b1/447290577/4936525040_c390cc8cef7a4ec9bd6a13f0684cccc0/P0.jpg"
        }
      },
      "original_width": 1280,
      "original_height": 1280,
      "is_square": true
    }
  ],
  "location": "Garland, United States",
  "country": "US",
  "slug": "heslockedi4-vintage-chicago-white-sox-paul-f68e",
  "variant_set_id": 54,
  "variants_all": [
    {
      "id": 5,
      "quantity": 1,
      "status": "STATUS_ONSALE",
      "variant": "L"
    }
  ],
  "listed_quantity": 1,
  "attributes": {
    "condition": "used_good",
    "colour": [
      "white"
    ],
    "brand": "majestic-athletic",
    "gender": "male",
    "is_kids": false,
    "group": "tops",
    "product_type": "jerseys"
  },
  "shipping_method": {
    "shipping_id": "USPS",
    "parcel_size": "under_12oz",
    "payer": "buyer",
    "ship_from": 36134589
  },
  "is_boosted": false,
  "boosted_at": "2026-10-13T02:04:31.210498Z",
  "sizes": [
    {
      "name": "L",
      "id": 5,
      "quantity": 1,
      "status": "STATUS_ONSALE",
      "variant": "L"
    }
  ],
  "preview": {
    "id": 4936522591,
    "formats": {
      "p0": {
        "height": 1280,
        "width": 1280,
        "url": "https://media-photos.depop.com/b1/447290577/4936522591_d3652708bfb8479996597a81723d3781/P0.jpg"
      }
    },
    "original_width": 1280,
    "original_height": 1280,
    "is_square": true
  },
  "like_count": 6,
  "pricing": {
    "currency": "USD",
    "currency_name": "USD",
    "current_price": {
      "total_price": "13.00",
      "price_breakdown": {
        "price": {
          "amount": "13.00"
        },
        "buyer_fee": {
          "amount": "0.00"
        },
        "tax": {
          "amount": "0.00",
          "tax_type": "n/a"
        },
        "shipping": {
          "amount": "1.99",
          "shipping_boundary": "INTERNATIONAL",
          "shipping_id": "USPS"
        }
      }
    },
    "original_price": {
      "total_price": "15.00",
      "price_breakdown": {
        "price": {
          "amount": "15.00"
        },
        "buyer_fee": {
          "amount": "0.00"
        },
        "tax": {
          "amount": "0.00",
          "tax_type": "n/a"
        },
        "shipping": {
          "amount": "1.99",
          "shipping_boundary": "INTERNATIONAL",
          "shipping_id": "USPS"
        }
      }
    },
    "discounted_price": {
      "total_price": "13.00",
      "price_breakdown": {
        "price": {
          "amount": "13.00"
        },
        "buyer_fee": {
          "amount": "0.00"
        },
        "tax": {
          "amount": "0.00",
          "tax_type": "n/a"
        },
        "shipping": {
          "amount": "1.99",
          "shipping_boundary": "INTERNATIONAL",
          "shipping_id": "USPS"
        }
      }
    },
    "total_price_components": {
      "buyer_fee": false,
      "shipping_price": false,
      "tax": false
    },
    "display_price": {
      "headline_price": {
        "amount": "13.00",
        "currency": "USD"
      },
      "strikethrough_price": {
        "amount": "15.00",
        "currency": "USD"
      },
      "headline_price_components": {
        "buyer_fee": false,
        "shipping_price": false,
        "tax": false
      }
    },
    "campaigns": {
      "applied": []
    },
    "is_reduced": true,
    "final_price_key": "discounted_price",
    "discount_percentage": 13.333333333333334
  },
  "from_url": "https://www.depop.com/search/?q=jersey&sort=newest&priceMin=10&priceMax=10000&isDiscounted=true&conditions=used_good"
}
```

Each product record contains 21 comprehensive fields:

#### Product Identity & Metadata

| Field | Meaning & Use |
|---|---|
| `ID` | Unique Depop product identifier for tracking and deduplication |
| `Slug` | URL-friendly product identifier for building direct links or dashboards |
| `Brand ID` | Internal brand identifier for brand-level analytics |
| `Brand Name` | Brand or designer name — essential for market segmentation and competitor analysis |
| `Category Name` | Product category (e.g., "womens/bottoms/jeans") — enables filtering and inventory classification |
| `Status` | Current listing status (active, sold, removed) — filters out unavailable inventory |
| `Active Status` | Boolean indicating if the item is currently available — useful for real-time availability tracking |

#### Product Details & Media

| Field | Meaning & Use |
|---|---|
| `Description` | Full product text including size, fabric, condition notes, and seller narrative — critical for understanding item appeal |
| `Pictures` | Array of product image URLs — enables visual comparison tools and reseller sourcing |
| `Attributes` | Structured product attributes (color, material, decade, style tags) — powers advanced filtering and attribute-based pricing models |
| `Sizes` | Available size options or size of the listed item — essential for fashion inventory matching |
| `Preview` | Thumbnail or preview image URL for quick catalog browsing |

#### Shipping & Logistics

| Field | Meaning & Use |
|---|---|
| `Shipping Method` | Delivery options offered by the seller (e.g., standard, express, flat-rate) — impacts total cost calculations |
| `Location` | Seller city and region — indicates shipping time and delivery cost to buyers |
| `Country` | Country of origin — necessary for international shipping analysis and compliance |

#### Pricing & Demand

| Field | Meaning & Use |
|---|---|
| `Pricing` | Current price, original price, and discount percentage — core metric for price benchmarking and trend analysis |
| `Like Count` | Number of user favorites — indicates demand and social proof for demand-driven pricing models |

#### Listing Optimization & Status

| Field | Meaning & Use |
|---|---|
| `Is Boosted` | Whether the listing has paid promotional boost — shows seller investment and placement priority |
| `Boosted At` | Timestamp when boosting was activated — helps correlate boost timing with sales velocity |
| `Variant Set ID` | Groups multiple variants (colors, sizes) under one product — enables variant-level analytics |
| `All Variants` | Complete list of available variants — useful for inventory aggregation across colors and sizes |
| `Listed Quantity` | Number of identical items available — differentiates single items from bulk inventory |

***

### How to Use

#### Quick Start with URLs

1. **Find your search URLs** — Browse Depop and copy the URL from search results or a category page (e.g., `https://www.depop.com/search/?q=jersey&sort=newest`).
2. **Configure the input** — Paste URLs into the `urls` array and set `max_items_per_url` (start with `20` for testing, increase to `200` for production).
3. **Run the scraper** — Start the actor; it will extract all visible products on each page.
4. **Export results** — Download as JSON, CSV, or Excel for analysis.

#### Quick Start with Search Filters

1. **Define your search criteria** — Choose a keyword, price range, and condition filter.
2. **Leave `urls` empty** — The scraper will automatically search Depop with your parameters.
3. **Set `max_items_per_url`** — Higher values (e.g., `200`) return more results per search execution.
4. **Run and export** — Results download in your preferred format.

**Best practices:**

- Use specific keywords (`"vintage polo"` vs. `"clothing"`) to narrow results and improve relevance.
- Filter by condition to target consistent quality (e.g., `"used_good"` for budget-conscious shoppers).
- Enable `ignore_url_failures: true` for large multi-URL runs to prevent interruptions.
- Start with small batches (`max_items_per_url: 20`) to test your URLs before scaling.

***

### Use Cases & Business Value

- **Price intelligence**: Monitor competitor pricing and margin trends in real-time across categories
- **Inventory research**: Identify hot items, trending brands, and emerging vintage categories before competitors
- **Reseller tools**: Feed Depop product data into personal inventory trackers or multi-channel listing tools
- **Market analysis**: Analyze demand signals (likes, boost adoption) to predict item velocity and optimize sourcing
- **Academic research**: Study secondhand fashion economics, sustainability trends, and consumer behavior

The Depop Product Search Scraper transforms browsing and manual data entry into systematic, scalable data collection—unlocking competitive advantages for resellers, platforms, and researchers.

***

### Conclusion

The **Depop Product Search Scraper** is your essential tool for harvesting secondhand fashion data at scale. With flexible input modes, rich output fields, and reliable performance across thousands of items, it eliminates hours of manual work while enabling data-driven decision-making. Start scraping today.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the product search list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `keyword` (type: `string`):

Enter the keyword to search for items

## `sort_by` (type: `string`):

Sort items by options

## `price_min` (type: `string`):

Enter the minimum price to search for items

## `price_max` (type: `string`):

Enter the maximum price to search for items

## `condition` (type: `string`):

Enter the condition to search for items

## `on_sale` (type: `boolean`):

If true, only scrape items that are on sale

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.depop.com/category/womens/bottoms/jeans/?moduleOrigin=meganav"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.depop.com/category/womens/bottoms/jeans/?moduleOrigin=meganav"
    ],
    "ignore_url_failures": true,
    "on_sale": false,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/depop-product-search-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": ["https://www.depop.com/category/womens/bottoms/jeans/?moduleOrigin=meganav"],
    "ignore_url_failures": True,
    "on_sale": False,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/depop-product-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.depop.com/category/womens/bottoms/jeans/?moduleOrigin=meganav"
  ],
  "ignore_url_failures": true,
  "on_sale": false,
  "max_items_per_url": 20
}' |
apify call stealth_mode/depop-product-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,stealth_mode/depop-product-search-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/HNdv6hWS0EogX9mNS/builds/0YDSsryOg4coztIeC/openapi.json
