Depop Listings Scraper avatar

Depop Listings Scraper

Pricing

Pay per event

Go to Apify Store
Depop Listings Scraper

Depop Listings Scraper

Sweep a Depop search query across price-band filter shards and export deduplicated listing rows — title, brand, condition, price breakdown, images, canonical URL. Depop has no pagination; coverage is bounded by the shard grid you configure, not the query's full catalogue. Vintage resale fashion.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Categories

Share


🎯 What this scrapes

Depop is a fashion-resale marketplace with no working "load more" API — its search page SSRs exactly one static batch of listings per request and ignores page/offset entirely. This Actor gets around that by sweeping the same query across a grid of price-band shards (and, optionally, category/condition/brand/size shards), fetching each shard once, deduplicating by listing ID, and writing one clean row per unique listing: title, brand, category, condition, size, price breakdown, images, and the canonical product URL. Coverage is bounded by the shard grid you configure — more shards means more coverage, not an unlimited crawl.

🔥 What we handle for you

  • 🛡️ We rotate browser fingerprintscurl-cffi impersonation (Chrome / Firefox / Safari) so Depop sees a real browser, not Python.
  • 🔁 We retry with exponential backoff on 408 / 429 / 5xx and honour Retry-After — up to 5 attempts per shard.
  • 🌐 We rotate proxy sessions through Apify Proxy on every block — fresh session ID, fresh exit IP; switch to RESIDENTIAL from the input form if you need it.
  • 🧱 We never silently drop a shard — a bad shard is logged and skipped; if the grid would exceed your cap we truncate and say so in the run's status message.
  • 🧊 We keep the dataset clean — deduplicated by listing ID, Pydantic-validated rows, ISO-8601 timestamps.
  • 💰 You pay only for unique listings that land. A listing seen in two shards is billed once, not twice.

💡 Use cases

  • Resale market research — pull current asking prices for a brand or item across a price grid to benchmark resale value.
  • Sourcing leads — monitor a keyword across price bands to spot underpriced listings worth a closer look.
  • Trend tracking — sweep the same query on a schedule and diff runs to see what's newly listed or sold through.
  • Catalogue sampling — build a representative sample of a niche (brand, category, style) for downstream analysis.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
querystringyes'vintage carhartt jacket'Search term to sweep across the shard grid, matched against Depop's search/?q= endpoint. 1-100 characters.
priceShardsarrayno[[None, None], [0, 25], [25, 50], [50, 100], [100, 200], [200, None]]Price-band grid as [min, max] pairs (either bound may be null for open-ended). This is the proven shard axis — each…
extraShardAxesobjectno{}Optional candidate shard axes — category / condition / brand / size, each an array of up to 10 values. Off by default.…
maxShardsPerRunintegerno12Ceiling on the total number of shard requests this run will issue. Price shards are prioritized; any overflow is…
maxListingsPerShardintegerno20Cap on listings parsed per shard. Depop's search page SSRs about 20 listings per static batch, so values above 20 have…
proxyConfigurationobjectno{'useApifyProxy': True}Apify Proxy routing. Datacenter (the default) matches the recon setup that confirmed reach on www.depop.com — switch to…

Example input

{
"query": "vintage levis jacket",
"priceShards": [
[
null,
null
],
[
25,
50
]
],
"maxShardsPerRun": 2,
"maxListingsPerShard": 5,
"proxyConfiguration": {
"useApifyProxy": true
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
idstringDepop listing ID — the dedupe key across shards.
slugstringDepop listing slug.
urlstringCanonical listing URL: https://www.depop.com/products/{slug}/.
titlestringListing title (Depop's description field — there is no separate title field).
brandstringBrand name, when Depop has one on file for the listing.
categorystringDepop category name.
conditionstringListed condition, e.g. Good, New.
colourstringListed colour attribute.
genderstringListed gender attribute.
product_typestringListed product-type attribute, e.g. Jacket.
sizesarraySizes attached to the listing.
countrystringSeller's listed country.
like_countintegerNumber of likes on the listing at scrape time.
price_totalstringTotal price the buyer pays, as a decimal string.
price_itemstringItem price component, as a decimal string.
price_buyer_feestringBuyer fee component, as a decimal string.
price_taxstringTax component, as a decimal string.
price_shippingstringShipping component, as a decimal string.
currencystringISO currency code for the price breakdown.
image_urlsarrayListing image CDN URLs.
matched_shardobjectThe shard parameters (e.g. price_min/price_max) that produced this row — for auditability, not billed separately.
scraped_atstringISO-8601 timestamp of when this row was scraped.

Example output

{
"id": "48213771",
"slug": "vintage-carhartt-jacket-brown-medium",
"url": "https://www.depop.com/products/vintage-carhartt-jacket-brown-medium/",
"title": "Vintage Carhartt jacket, brown, size M, light wear",
"brand": "Carhartt",
"category": "Menswear",
"condition": "Good",
"colour": "Brown",
"gender": "Men",
"product_type": "Jacket",
"sizes": [
"M"
],
"country": "GB",
"like_count": 14,
"price_total": "42.50",
"price_item": "35.00",
"price_buyer_fee": "3.50",
"price_tax": "0.00",
"price_shipping": "4.00",
"currency": "GBP",
"image_urls": [
"https://media-photos.depop.com/b1/abc123.jpg"
],
"matched_shard": {
"price_min": "25",
"price_max": "50"
},
"scraped_at": "2026-09-18T12:00:00+00:00"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.2One-off warm-up charge per run
listing-scraped$0.004PPE event

Example: 1 000 listings at the rates above ≈ $4.20. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

  • No true pagination — total coverage is bounded by the shard grid (price bands plus any opt-in category/condition/brand/size axes), not by the query's full catalogue size.
  • extraShardAxes values are customer-supplied candidates; the Actor validates non-triviality at runtime but does not auto-discover which values exist on Depop.
  • Seller profiles, order history, messaging, and other authenticated Depop features are out of scope.

❓ FAQ

Will this get every listing for my query?

No — Depop has no working pagination, so coverage is bounded by the shard grid you configure. Each price band returns Depop's own static batch of listings (roughly 20), and more shards mean more coverage, not an unlimited crawl. Widen priceShards or turn on extraShardAxes to cover more of the catalogue.

Why price shards and not just "page 2, page 3"?

Depop's search endpoint ignores page/offset entirely — repeated identical requests return the same static batch. Filtering by price band is the mechanism that actually returns a different set of listings, so that's what this Actor sweeps.

What happens if a shard is duplicate of another?

Listings are deduplicated by ID across every shard in the run, so a listing that shows up under two price bands is stored and billed exactly once.

Why is my run slow or produces fewer rows than I expected?

Each shard is one request against Depop's live search page, so runtime scales with maxShardsPerRun. A 0-row shard usually means that price band genuinely has no matches for your query, not a failure — check the run's status message for what was searched.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.