Secondhand-fashion pricing and resale research
Use Depop endpoints to turn secondhand-fashion pricing and resale research into repeatable API requests with documented inputs and JSON responses.
Turn public Depop pages into structured resale-fashion data — keyword and filtered listing search, full item detail with photos and seller info, a seller's shop catalog, and the category taxonomy, all as normalized JSON. Credential-free.
Search Depop listings and get item detail, seller shops, and the category taxonomy as structured JSON.
Endpoint families
6
Documented params
42
Examples
10
Live catalog snapshot
Active endpoints
10
Methods
GET
Required params
17
Schema refs
10
{
"platform": "Depop",
"endpoint": "depop-search",
"method": "GET",
"path": "/depop/search",
"auth": "apiKey"
}Use cases
Search Depop listings and get item detail, seller shops, and the category taxonomy as structured JSON.
Use Depop endpoints to turn secondhand-fashion pricing and resale research into repeatable API requests with documented inputs and JSON responses.
Use Depop endpoints to turn seller and shop monitoring into repeatable API requests with documented inputs and JSON responses.
Use Depop endpoints to turn category and trend tracking into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live Depop endpoint catalog — 10 endpoints, 42 documented request parameters, and 10 published response schemas — the same catalog Docs and Playground run against.
10 documented Depop endpoints, grouped into 8 request families — Item, Search and Brands, plus 5 more.
42 request parameters are documented across those Depop endpoints, 17 of them required — the full input contract is public before you write any integration code.
10 of the 10 Depop endpoints ship a recorded example response, and 10 carry a documented response schema — you can code against the real JSON before the first request.
Depop endpoints document their error responses (400, 404, 500 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
10 hosted MCP tools back the Depop endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Coverage map
These cards are generated from the active endpoint catalog, so the landing page reflects the same API surface used by Docs and Playground.
/depop/item/{slug}
/depop/search
/depop/brands
/depop/categories
/depop/search-sellers
/depop/shop/{username}
Endpoint catalog
/depop/searchSearches Depop's resale-fashion marketplace by free-text keyword, with optional price, condition, colour, category, subcategory, gender, kids-department, brand, discount, and sort filters, returning normalized listing summaries (title, price, brand, condition, like count, photos, sizes), a pagination cursor, and the total matching count. Public data sourced from Depop's own search API.
Response notes
- `id` is the item's URL slug (e.g. `ag_boutique-vintage-mid-rise-bootcut-levi-2476`), not a numeric database id — pass it directly as the `slug` path parameter to `/depop/item/{slug}` for full item detail. - `price_cents` and `shipping_cents` are omitted (zero) when Depop's own response doesn't include a parseable amount for that listing. - `like_count` is the listing's like count, requested by default on every search (`0` is omitted from the response, same as other zero-valued optional fields). - `has_more` and `next_cursor` reflect Depop's own pagination state — when `has_more` is `true`, pass `next_cursor` as the following request's `after` value to fetch the next page. `next_cursor` is an opaque string; don't parse it. - A search with no matching listings returns `200` with `"items": []`. - A missing `query` returns `400` before any upstream request is made. - An unrecognized `condition`, `colours`, `sort`, `category`, or `gender` value, a malformed `subcategory`, `brand_ids`, or `sizes` entry, or `price_min` greater than `price_max` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "nike jacket", "total_results": 90627, "has_more": true, "next_cursor": "MnwyNHwxNzg1OTUzNjM1.BOOSTED_EXHAUSTED.0", "items": [ { "id": "harsisonmn-nike-virginia-tech-track-and-27fc", "url": "https://www.depop.com/products/harsisonmn-nike-virginia-tech-track-and-27fc/", "title": "Nike College Track and Field black windbreaker jacket #trackandfield", "description": "Nike College Track and Field black windbreaker jacket #trackandfield\n\nNike womens medium jacket, #trackandfield\n#nike #jacket", "brand_name": "Nike", "condition": "used_excellent", "colours": ["black"], "price_cents": 800, "currency": "USD", "shipping_cents": 199, "thumbnail_url": "https://media-photos.depop.com/r1/329377772/4357366076_0948c314910046e9946f466fc1d87e70/P0.jpg", "photos": [ "https://media-photos.depop.com/r1/329377772/4357366076_0948c314910046e9946f466fc1d87e70/P0.jpg" ], "sizes": ["M"], "location": "Charlotte, United States", "like_count": 3 } ] } } ```
MCP tool depop_search
/depop/item/{slug}Returns a normalized Depop item-detail page: description, all photos, price, condition, brand, size, seller info, and a "similar items" carousel when the page has one. Public data sourced from Depop's own item pages.
Response notes
- `title` is the item's description text up to its first line break — Depop does not expose a separate, shorter title field; `description` is the full text. - `seller` (username, id, verification status, display name, avatar) is only available on this endpoint, not on `/depop/search`'s listing summaries. - `similar_items` is populated when the item page has a "Similar items" carousel, using the same shape as `/depop/search`'s listing summaries. Omitted (not an empty array) when the page doesn't have one. A separate "More from this seller" carousel is also visible on Depop's own item page but isn't included here — it loads via a client-side-only fetch this endpoint doesn't reproduce. For a richer, paginated (up to 150 results) similar-items lookup, use [`GET /depop/item/{slug}/similar`](depop-item-similar.md) instead. - An unknown or delisted item slug returns `404`. - A missing `slug` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "id": "ag_boutique-vintage-mid-rise-bootcut-levi-2476", "url": "https://www.depop.com/products/ag_boutique-vintage-mid-rise-bootcut-levi-2476/", "title": "Vintage Mid rise Bootcut Levi Jeans", "description": "Vintage Mid rise Bootcut Levi Jeans\nSize 6 (28-30 inch waist) They are mid rise *not low rise*\nInseam: 31 inches\n#Levis #flare", "brand_name": "Levi's", "condition": "used_like_new", "colours": ["blue", "navy"], "price_cents": 1500, "original_price_cents": 1800, "currency": "USD", "shipping_cents": 399, "photos": [ "https://media-photos.depop.com/b1/42916032/4363725919_6c94f1277d5b4ba4890ff74980b79b23/P0.jpg" ], "location": "Monroe, United States", "sizes": ["6"], "seller": { "id": 42916032, "username": "ac_boutique", "verified": false, "first_name": "Alaina", "picture_url": "https://media-photos.depop.com/b1/42916032/3675424939_2e6b5627f8084c269b32054ed071f56e/U1.jpg" }, "similar_items": [ { "id": "lsamcminn-vintage-inspired-levis-superlow-flare-jeans-bb57", "url": "https://www.depop.com/products/lsamcminn-vintage-inspired-levis-superlow-flare-jeans-bb57/", "title": "Vintage-inspired Levi's Superlow Flare jeans in a light wash", "brand_name": "Levi's", "condition": "used_good", "colours": ["blue"], "price_cents": 1700, "currency": "USD", "shipping_cents": 399, "thumbnail_url": "https://media-photos.depop.com/r1/39600511/4353764468_d4c5a9c42c714b679ae7e63f9c9ee22d/P0.jpg", "location": "Santa Rosa, United States" } ] } } ```
MCP tool depop_item
/depop/shop/{username}Returns a Depop seller's public shop: profile (rating, sold count, followers, bio) plus current listings, with optional price, condition, colour, category, subcategory, gender, discount, and sort filters. Public data sourced from Depop's own shop pages.
Response notes
- This endpoint parses the shop page's rendered HTML, not a JSON API (none was found for per-seller listings) — so each item in `items` is a lighter shape than `/depop/search`'s: no brand, condition, colour, description, or size, since the shop page doesn't render those per card. `id` is the item's URL slug, same identifier space as `/depop/search`'s `id` and `/depop/item/{slug}`'s `slug` — chain any item into `/depop/item/{slug}` for full detail. - `followers_count` and `following_count` are approximate once Depop abbreviates them in the UI (e.g. "2.35K" → `2350`) — Depop doesn't render the exact count past a certain size. - `currency` is always `"USD"` — inferred from the `$` symbol the page renders, not read from an explicit field (unlike `/depop/search` and `/depop/item/{slug}`, which get an explicit currency code from Depop's own JSON). - A shop with no current listings returns `200` with `"items": []`. - An empty or malformed `username` returns `400` before any upstream request is made. An unrecognized `condition`, `colours`, `sort`, `category`, or `gender` value, a malformed `subcategory` or `sizes` entry, or `price_min` greater than `price_max`, also returns `400`. - A nonexistent username returns `404`. Example response: ```json { "code": 200, "msg": "OK", "data": { "username": "villafanashop", "display_name": "Julian A Villafana", "bio": "Welcome to my shop! I specialize in cute and trendy graphic tees. Fast shipping, friendly service, and quality guaranteed. Tysm", "avatar_url": "https://media-photos.depop.com/b1/415677839/3527467429_405c6ee819bc4c9d89713521974688b9/U1.jpg", "verified": true, "rating": 4.7, "rating_count": 1445, "sold_count": 8810, "followers_count": 2350, "following_count": 12, "activity_status": "Active today", "items": [ { "id": "vill7fanashop-supreme-tiger-graphic-t-shirt-black-00e8", "url": "https://www.depop.com/products/vill7fanashop-supreme-tiger-graphic-t-shirt-black-00e8/", "thumbnail_url": "https://media-photos.depop.com/b1/415677839/4067598019_5faee8ecbec942739452db1dfdc5563a/P8.jpg", "price_cents": 1686, "original_price_cents": 2286, "currency": "USD" } ] } } ```
MCP tool depop_shop
/depop/categoriesReturns Depop's full department, category, and subcategory taxonomy -- every value usable with /depop/search's and /depop/shop/{username}'s category/subcategory filters. Tries a live refresh from Depop's own category-filter API first and falls back to a static snapshot on any failure, so this never errors.
Response notes
- `departments` has exactly 4 entries: `womenswear` (gender `female`), `menswear` (gender `male`), `kidswear` (`is_kids: true`, no gender), and `everything-else` (no gender, not kids-scoped — items outside clothing, e.g. beauty, home, art). - Each department's `categories[].slug` is the value to pass as `/depop/search`'s or `/depop/shop/{username}`'s `category` query parameter. Most category slugs are shared across departments (e.g. `tops` exists under both `womenswear` and `menswear`) — pair a category slug with the matching department's `gender`/`is_kids` when you also want to scope by department. - Each category's `subcategories[].slug` is the value to pass as `subcategory` (comma-separated for multiple), scoped to that category — a subcategory slug from one category is not guaranteed valid under a different category. - This data changes rarely. When the live refresh succeeds, a newly added category or subcategory shows up immediately; when it fails (upstream down, blocked, or unexpected shape), the response falls back to a static snapshot that lags until this package is re-synced. Example response (truncated): ```json { "code": 200, "msg": "OK", "data": { "departments": [ { "id": "womenswear", "name": "Women", "gender": "female", "categories": [ { "slug": "tops", "name": "Tops", "subcategories": [ { "slug": "tshirts", "name": "T-shirts" }, { "slug": "hoodies", "name": "Hoodies" } ] } ] }, { "id": "kidswear", "name": "Kids", "is_kids": true, "categories": [ { "slug": "bundles", "name": "Clothing bundles", "subcategories": [ { "slug": "bundles", "name": "Clothing bundles" } ] } ] }, { "id": "everything-else", "name": "Everything else", "categories": [ { "slug": "beauty", "name": "Beauty", "subcategories": [ { "slug": "makeup", "name": "Makeup" }, { "slug": "skincare", "name": "Skincare" } ] } ] } ] } } ```
MCP tool depop_categories
/depop/brandsReturns Depop's full brand directory (id, name, slug), not just brands with active listings for a given search -- resolves the search endpoint's otherwise-opaque brand_ids filter to human-readable names. Public data sourced from Depop's own brand-directory API.
Response notes
- The directory changes rarely, so it is served from a cached snapshot refreshed about once a day; most calls return in well under a second, and a snapshot is still served while a refresh is in progress or failing. - Only the very first fetch (no snapshot yet) goes to Depop live, which can take 20-75 seconds because Depop's JSON API sits behind a stricter bot-protection tier; `503` then means every fetch path was blocked. Retry later. - `brands` is sorted by numeric `id` for a deterministic order. - `id` is the same numeric brand id `/depop/search`'s `brand_ids` filter accepts. Example response: ```json { "code": 200, "msg": "OK", "data": { "total": 4213, "brands": [ {"id": 1, "name": "Aloye", "slug": "aloye"}, {"id": 2, "name": "Diamond Supply Co.", "slug": "diamond-supply-co"}, {"id": 270, "name": "Nike", "slug": "nike"} ] } } ```
MCP tool depop_brands
/depop/item/{slug}/similarReturns items similar to a given Depop listing, via Depop's dedicated similar-items API -- richer and paginated (up to 150 per page) compared to the small, non-paginated "similar items" carousel already included in item detail. Public data sourced from Depop's own similar-items API.
Response notes
- Depop's JSON API sits behind a stricter bot-protection tier than its product pages. Calls first try a fast direct request and then fall back to a rendered browser fetch, so responses can take 20-60 seconds; `503` means both paths were blocked. Retry later. - Items are shaped identically to `/depop/search`'s listing summaries (title, price, brand, condition, like count, photos, sizes). - Resolving `slug` to the source item requires an internal item-page fetch before the similar-items lookup — allow for slightly higher latency than `/depop/search`. - `has_more` and `next_cursor` reflect Depop's own pagination state — when `has_more` is `true`, pass `next_cursor` as the following request's `after` value to fetch the next page. - An unknown or delisted source item slug returns `404`. - A missing `slug` or a `limit` over `150` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "items": [ { "id": "rayofsuashineva-artsy-chic-boho-luxe-eclectic-d9c0", "url": "https://www.depop.com/products/rayofsuashineva-artsy-chic-boho-luxe-eclectic-d9c0/", "title": "Artsy chic", "description": "Artsy chic\n\nBoho luxe\n\nMichael Simon jacket, multicolor plaid jacket", "brand_name": "Other", "condition": "used_excellent", "colours": ["multi"], "price_cents": 2500, "currency": "USD", "shipping_cents": 199, "thumbnail_url": "https://media-photos.depop.com/b1/264682642/4443656880_c7418b1968634a5a8a7e98ba0a863801/P0.jpg", "sizes": ["M"], "location": "Durham, United States", "like_count": 0 } ], "has_more": true, "next_cursor": "NQ" } } ```
MCP tool depop_item_similar
/depop/search-sellersFinds Depop users/sellers by name or username. A matched result's username can be passed directly to GET /depop/shop/{username} for that seller's full shop. Public data sourced from Depop's own user-search API.
Response notes
- Depop's JSON API sits behind a stricter bot-protection tier than its product pages. Calls first try a fast direct request and then fall back to a rendered browser fetch, so responses can take 20-60 seconds; `503` means both paths were blocked. Retry later. - `first_name`/`last_name` reflect whatever the seller has set on their profile — either or both may be empty. - `avatar_url` is omitted when the seller has no profile picture set. - A missing `query` returns `400` before any upstream request is made. - A query with no matching sellers returns `200` with `"sellers": []`. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "red corte", "sellers": [ { "id": 22564880, "username": "red4201", "first_name": "Red", "last_name": "Cortes" }, { "id": 51552506, "username": "redecorate", "first_name": "kai", "avatar_url": "https://media-photos.depop.com/b1/51552506/2384449778_27b1e362ea8c462096725bfe9f018bc3/U1.jpg" } ] } } ```
MCP tool depop_search_sellers
/depop/search/facetsReturns result-count breakdowns per department/category/subcategory for a search query, via Depop's dedicated aggregates API -- a distinct upstream call from search itself, not embedded in its response. Public data sourced from Depop's own search-aggregates API.
Response notes
- Depop's JSON API sits behind a stricter bot-protection tier than its product pages. Calls first try a fast direct request and then fall back to a rendered browser fetch, so responses can take 20-60 seconds; `503` means both paths were blocked. Retry later. - `departments` is sorted alphabetically by department name; each department's `categories`/`subcategories` are sorted alphabetically by `id` for a deterministic order. - `categories`/`subcategories` are already department-scoped — unlike `/depop/search`'s own `category`/`subcategory` filters, which apply across all departments, a facet's `count` here only covers listings within that specific department. - `subcategories` are omitted (not an empty array) for a department with no subcategory breakdown in the upstream response. - A missing `query` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "bandage dress", "departments": [ { "department": "menswear", "count": 39, "categories": [ {"id": "coats-jackets", "count": 4}, {"id": "fancy-dress", "count": 14}, {"id": "tops", "count": 12} ], "subcategories": [ {"id": "jackets", "count": 4}, {"id": "tshirts", "count": 5} ] }, { "department": "womenswear", "count": 23744, "categories": [ {"id": "dresses", "count": 22504}, {"id": "tops", "count": 509} ], "subcategories": [ {"id": "shift-dresses", "count": 22}, {"id": "wedding-dresses", "count": 7} ] } ] } } ```
MCP tool depop_search_facets
/depop/sizesReturns Depop's full, multi-region size taxonomy -- every composite id usable with /depop/search's and /depop/shop/{username}'s sizes filter. Public data sourced from Depop's own size-filter API.
Response notes
- Depop's JSON API sits behind a stricter bot-protection tier than its product pages. Calls first try a fast direct request and then fall back to a rendered browser fetch, so responses can take 20-60 seconds; `503` means both paths were blocked. Retry later. - `departments` only includes `kidswear`, `menswear`, and `womenswear` — `everything-else` (see [`/depop/categories`](depop-categories.md)) has no clothing sizes and is omitted. - Each department groups its sizes into `categories` (e.g. "Tops", "Bottoms", "Shoes"), each of which groups sizes further into `regions` (`EUR`, `UK`, `US`, `AU`). - Each size's `id` (e.g. `"4.17"`) is the exact value to pass — comma -separated for multiple — as `/depop/search`'s or `/depop/shop/{username}`'s `sizes` query parameter. It omits the region suffix Depop's own page URLs display (e.g. `4.17-US`) — that suffix is decorative only; the bare `id` is what both endpoints actually key off. - A size id is not scoped to a specific `category`/`gender`/`is_kids` combination by `/depop/search` or `/depop/shop/{username}` — pairing an id from the wrong category (e.g. a Shoes id while filtering Tops) simply returns zero results rather than an error. Example response (truncated): ```json { "code": 200, "msg": "OK", "data": { "departments": [ { "id": "womenswear", "name": "Women", "categories": [ { "id": "wmns-tops-sizes", "name": "Tops", "regions": [ { "region": "US", "sizes": [ { "id": "4.17", "name": "M" }, { "id": "4.18", "name": "L" } ] } ] } ] } ] } } ```
MCP tool depop_sizes
/depop/suggestReturns Depop's own search-box autocomplete suggestions for a partial query, including the category a suggestion maps to when relevant. Public data sourced from Depop's own search-suggestions API.
Response notes
- Depop's JSON API sits behind a stricter bot-protection tier than its product pages. Calls first try a fast direct request and then fall back to a rendered browser fetch, so responses can take 20-60 seconds; `503` means both paths were blocked. Retry later. - `value` is the suggested phrase with Depop's own bold-match markup stripped (the upstream API wraps the substring matching `query` in `**...**` for highlighting; this endpoint returns the plain text). - `group`, `suggested_filter_label`, and `gender` are present when the suggestion maps to a specific Depop category/department (e.g. `group` `tops`, `suggested_filter_label` `"in Women's Tops"`, `gender` `female`) — all three omitted for a plain free-text suggestion with no category match. - A missing `query` returns `400` before any upstream request is made. - Suggestions with no results return `200` with `"suggestions": []`. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "red corte", "suggestions": [ { "value": "red corset", "group": "tops", "suggested_filter_label": "in Women's Tops", "gender": "female" }, { "value": "red corset" }, { "value": "red corset top" } ] } } ```
MCP tool depop_suggest
Related APIs
Marketplaces & Retail
Collect marketplace product signals from Amazon without building brittle storefront scrapers.
Marketplaces & Retail
Build resale, pricing, and marketplace workflows from structured eBay data.
Marketplaces & Retail
Turn public Shop.app product and merchant pages into structured JSON for e-commerce product intelligence, price research, shop monitoring, and marketplace discovery workflows.
Company coverage
Etsy, Inc. · ETSY
Depop is operated by Etsy, Inc. (ETSY). Crawlora's SEC endpoints take the same company's CIK, so filings, financials, insider transactions and 13F holdings come from the same API key as the Depop endpoints above.
Other Etsy, Inc. platforms in the catalog
How to scrape Depop
Crawlora's Depop endpoints cover search, listings, seller shops, and Depop's discovery APIs (facets, autocomplete, similar items, seller search, brands, and sizes) as normalized JSON with one API key. Depop search is large and precise. carhartt jacket matched 116,421 listings on 2026-09-18, and each listing returns its price and shipping in cents plus the item's location.
/depop/search takes a query plus price_min and price_max (USD), condition (brand_new, used_like_new, used_excellent, used_good, used_fair), colours, category and subcategory, gender, is_kids, brand_ids, sizes, on_sale, and sort. It returns 24 listings per page with total_results and a next_cursor, which you pass back as after.
price_cents and shipping_cents are integer cents. An $80.00 jacket with $5.99 shipping comes back as 8000 and 599. Item detail adds original_price_cents for markdowns. The id is the listing's URL slug, which /depop/item/{slug} takes directly.
/depop/search/facets returns result counts per department, category, and subcategory for a query. /depop/suggest returns Depop's autocomplete, including the category a suggestion maps to (for example in Women's Tops). /depop/brands resolves the numeric brand_ids filter to names.
/depop/item/{slug}/similar pages up to 150 similar listings. /depop/search-sellers finds sellers by name, and /depop/shop/{username} returns a seller's shop with most of the same filters as search. Depop blocks some automated requests; a 503 means blocked upstream, so retry later.
FAQ
brand_ids takes Depop's internal numeric ids, which Depop doesn't publish. Look them up in /depop/brands, which maps each id to a brand name and slug.
brand_new, used_like_new, used_excellent, used_good, and used_fair. Pass them comma-separated to /depop/search or /depop/shop/{username}.
Depop blocked that request upstream. It is not an empty result. Retry after a pause.