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
- `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
- 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
- `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
- `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
- `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
- `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 return listing search, item detail, seller shops, and categories as normalized JSON with one API key — no login or account required.
Send a keyword to /depop/search, with optional price, condition, colour, and category filters.
Pass an item slug from a search result to /depop/item/{slug} for full detail, photos, and seller info.
Pass a username to /depop/shop/{username} for that seller's shop catalog.
Use /depop/categories for the full department/category/subcategory taxonomy.
Add the sizes param (composite ids from /depop/sizes) to /depop/search or /depop/shop/{username} to filter listings by size.
FAQ
Send a keyword to Crawlora's /depop/search endpoint and get normalized listing cards — title, price, brand, condition, photos — as structured JSON.
No Depop account or login is required from the caller — only your Crawlora API key.
Yes — /depop/shop/{username} returns a seller's shop listing catalog as structured JSON.
Yes — pass a size composite id (from /depop/sizes) to /depop/search's or /depop/shop/{username}'s sizes param to restrict results to that size.