Streetwear and designer resale-price research
Use Grailed endpoints to turn streetwear and designer resale-price research into repeatable API requests with documented inputs and JSON responses.
Turn Grailed's public peer-to-peer menswear and womenswear resale marketplace into structured JSON — keyword and facet search across active listings, a separate sold-listing index for sale-price history, full listing detail with measurements and seller profile, a seller's shop view, the 7,363-designer directory, and the full department/category/condition/color/size facet taxonomy. Credential-free.
Search Grailed's active and sold listings, get listing and seller detail, and browse the designer and facet taxonomy as structured JSON.
Endpoint families
6
Documented params
48
Examples
11
Live catalog snapshot
Active endpoints
11
Methods
GET
Required params
17
Schema refs
11
{
"platform": "Grailed",
"endpoint": "grailed-search",
"method": "GET",
"path": "/grailed/search",
"auth": "apiKey"
}Use cases
Search Grailed's active and sold listings, get listing and seller detail, and browse the designer and facet taxonomy as structured JSON.
Use Grailed endpoints to turn streetwear and designer resale-price research into repeatable API requests with documented inputs and JSON responses.
Use Grailed endpoints to turn sale-price history and comparable-sales lookups into repeatable API requests with documented inputs and JSON responses.
Use Grailed endpoints to turn seller and designer demand tracking into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live Grailed endpoint catalog — 11 endpoints, 48 documented request parameters, and 11 published response schemas — the same catalog Docs and Playground run against.
11 documented Grailed endpoints, grouped into 11 request families — Categories, Collection and Collections, plus 8 more.
48 request parameters are documented across those Grailed endpoints, 17 of them required — the full input contract is public before you write any integration code.
11 of the 11 Grailed endpoints ship a recorded example response, and 11 carry a documented response schema — you can code against the real JSON before the first request.
Grailed endpoints document their error responses (400, 404, 429 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.
11 hosted MCP tools back the Grailed 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.
/grailed/categories
/grailed/collection
/grailed/collections
/grailed/designers
/grailed/listing
/grailed/search
Endpoint catalog
/grailed/searchSearches or browses Grailed's (grailed.com) peer-to-peer resale marketplace for currently-active listings. q, designer, department, category, size, color, condition, min_price, and max_price are all optional and combine as an AND -- a free-text q can be combined with any of the facet filters in the same request, or every field can be omitted to browse the full active catalog by Grailed's own "heat" relevance ranking. designer accepts one of the values grailed-designers' own designers[].name field returns; department, category, size, and color accept values from grailed-categories' own departments[].value/categories[].value/sizes[].value/colors[].value fields. condition and sort are fixed, closed enums (listed below). Keyword search is Algolia's own typo-tolerant relevance ranking, not a guaranteed exact match. A query with genuinely zero matches returns a well-formed empty result rather than an error.
Response notes
- Keyword search is Algolia's own typo-tolerant relevance ranking, not a guaranteed exact match. - A query with genuinely zero matches returns a well-formed empty result (`count: 0`, `listings: []`) rather than an error. - Every listing is currency `USD` and `sold: false` -- this endpoint only ever returns currently-active listings. See `grailed-sold-listings` for sale price history. - Each listing's `id` is the value `grailed-listing`'s own `id` parameter expects for full listing detail. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "gucci", "sort": "heat", "page": 1, "limit": 24, "count": 1, "total_results": 250601, "total_pages": 10442, "listings": [ { "id": 105379689, "title": "Chateau Marmont Gucci Tshirt Red Japan Exclusive", "url": "https://www.grailed.com/listings/105379689", "designers": ["Gucci"], "price": 400, "currency": "USD", "sold": false, "condition": "is_gently_used", "size": "m", "department": "menswear", "category": "tops", "category_path": "tops.short_sleeve_shirts", "color": "black", "location": "United States", "cover_photo_url": "https://media-assets.grailed.com/prd/listing/temp/dc6e1242b28a48bba80b5a353bb8c869", "photo_count": 7, "follower_count": 712, "buy_now": true, "make_offer": true, "seller": { "id": 10332947, "username": "woodlandstepps", "total_bought_and_sold": 52, "trusted_seller": false, "rating_average": 4.78, "rating_count": 9 } } ] } } ```
MCP tool grailed_search
/grailed/sold-listingsSearches Grailed's SOLD-listing index -- a separate dataset from active listings, carrying each item's final sale price and sale date. Same filter shape as grailed-search (q, designer, department, category, size, color, condition), but min_price/max_price filter the SOLD price, not the original asking price. Useful for sale-price-history/comparable-sales lookups (e.g. "what did this designer/category actually sell for recently"). A query with genuinely zero matches returns a well-formed empty result rather than an error.
Response notes
- A query with genuinely zero matches returns a well-formed empty result (`count: 0`, `listings: []`) rather than an error. - Every listing is currency `USD` and `sold: true`, with `sold_price` and `sold_at` populated -- `price` on a sold listing is the original asking price, kept for reference. - Each listing's `id` is the value `grailed-listing`'s own `id` parameter expects for full listing detail. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "gucci", "sort": "recent", "page": 1, "limit": 24, "count": 1, "total_results": 4865190, "total_pages": 202716, "listings": [ { "id": 99128590, "title": "Gucci Flame Sneakers", "url": "https://www.grailed.com/listings/99128590", "designers": ["Gucci"], "price": 267, "currency": "USD", "sold": true, "sold_price": 200, "sold_at": "2026-09-09T15:25:46.880Z", "condition": "is_used", "size": "9", "department": "menswear", "category": "footwear", "category_path": "footwear.low_top_sneakers", "color": "white", "seller": { "id": 555, "username": "sneakerhead", "total_bought_and_sold": 11, "trusted_seller": true, "rating_average": 5.0, "rating_count": 4 } } ] } } ```
MCP tool grailed_sold_listings
/grailed/listingReturns full normalized listing-detail data for one Grailed listing: description, every photo, measurements, designers, and the seller's full profile -- richer than the flattened summary grailed-search/grailed-sold-listings return per listing. id is the listing's numeric id, from a search or sold-listings result's own listings[].id field.
Response notes
- An unknown or deleted listing id returns a `404`. - `currency` is always `USD`. - `sold_price`/`sold_at`/`sold_shipping_price` are only populated when `sold` is `true`. - `measurements[].measurement_type_id`/`department_mapping_id` are Grailed's own internal ids (no public lookup table); `inches` is the directly usable value. Example response: ```json { "code": 200, "msg": "OK", "data": { "id": 105379689, "title": "Chateau Marmont Gucci Tshirt Red Japan Exclusive", "url": "https://www.grailed.com/listings/105379689", "description": "Gucci Chateau shirt red Japan Exclusive\nLabeled size XS truly fits accurately to a M\nVery rare", "price": 400, "currency": "USD", "sold": false, "condition": "is_gently_used", "size": "m", "pretty_size": "US M / EU 48-50 / 2", "department": "menswear", "category": "tops", "subcategory": "Short Sleeve T-Shirts", "category_path": "tops.short_sleeve_shirts", "designers": [ {"id": 79, "name": "Gucci", "slug": "gucci", "departments": ["menswear", "womenswear"]} ], "styles": ["luxury"], "traits": {"color": "black", "country_of_origin": "IT"}, "photos": [ "https://media-assets.grailed.com/prd/listing/temp/dc6e1242b28a48bba80b5a353bb8c869" ], "measurements": [ {"inches": 17, "measurement_type_id": 1, "department_mapping_id": 100} ], "follower_count": 712, "buy_now": true, "make_offer": true, "created_at": "2026-09-08T23:44:57.833Z", "seller": { "id": 10332947, "username": "woodlandstepps", "location": "United States", "total_bought_and_sold": 52, "listings_for_sale_count": 4, "follower_count": 13, "confirmed": true, "speedy_shipper": true, "sold_count": 22, "rating_average": 4.8, "rating_count": 9, "tag_list": ["fast-shipper", "quick-replies", "item-as-described"] } } } ```
MCP tool grailed_listing
/grailed/sellerReturns a Grailed seller's public profile plus a page of their current active listings (Grailed's own "shop" view of a seller). username is the seller's Grailed username, from a listing's own seller.username field or grailed.com/{username}. Listings only ever contains that seller's ACTIVE listings; use grailed-sold-listings with a designer/query filter for a broader sales-history lookup, since sold listings are not filterable by seller through this endpoint. An unknown username returns a typed not-found error.
Response notes
- An unknown username returns a `404`. - `listings` only ever contains that seller's ACTIVE listings; use `grailed-sold-listings` with a `designer`/`q` filter for a broader sales-history lookup, since sold listings are not filterable by seller through this endpoint. - `active_listings_count` is the seller's total active-listing count (not just the page returned). Example response: ```json { "code": 200, "msg": "OK", "data": { "username": "woodlandstepps", "page": 1, "limit": 24, "count": 4, "active_listings_count": 4, "total_pages": 1, "profile": { "id": 10332947, "username": "woodlandstepps", "avatar_url": "https://media-assets.grailed.com/prd/avatar/10332947/aa7027d479124825958991dc6ba83678", "total_bought_and_sold": 52, "trusted_seller": false, "rating_average": 4.78, "rating_count": 9, "confirmed": true, "banned": false }, "listings": [ { "id": 105379689, "title": "Chateau Marmont Gucci Tshirt Red Japan Exclusive", "url": "https://www.grailed.com/listings/105379689", "designers": ["Gucci"], "price": 400, "currency": "USD", "sold": false } ] } } ```
MCP tool grailed_seller
/grailed/designersReturns a page of Grailed's full designer/brand taxonomy (7,363 designers as of 2026-09-09) -- the value space grailed-search/grailed-sold-listings' own designer parameter accepts (by name). q is an optional free-text filter (typo-tolerant, e.g. a partial name for typeahead-style lookup); an empty q lists the full taxonomy ordered by Grailed's own default ranking (most-listed designers first).
Response notes
- `designers[].name` is exactly the value `grailed-search`/`grailed-sold-listings`'s own `designer` parameter expects. - `listings_count` is that designer's own live count of listings on Grailed (active and sold combined). - `departments` lists which of `menswear`/`womenswear` the designer has listings in. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "gucci", "page": 1, "limit": 24, "count": 1, "total_results": 7363, "total_pages": 307, "designers": [ { "id": 79, "name": "Gucci", "slug": "gucci", "listings_count": 250601, "departments": ["menswear", "womenswear"], "logo_url": "https://media-assets.grailed.com/prd/detail-page/gucci-logo" } ] } } ```
MCP tool grailed_designers
/grailed/categoriesReturns Grailed's full facet taxonomy for the enum-like parameters grailed-search/grailed-sold-listings accept: department, category, category_path (a more granular subcategory slug), condition, color, and size, each with its own live listing count. department and condition are exhaustive closed sets (2 and 5 values respectively); category/category_path/color/size are the full, exhaustive value space as of the request. Designer is NOT included here (7,363 values, far too large for a facet-count response) -- see grailed-designers for that discovery endpoint.
Response notes
- `departments[].value` is one of `menswear`, `womenswear` (the full, exhaustive set). - `conditions[].value` is one of `is_new`, `is_gently_used`, `is_used`, `is_worn`, `is_not_specified` (the full, exhaustive set). - `categories[].value`, `category_paths[].value`, `colors[].value`, and `sizes[].value` are the full, exhaustive value space as of the request (confirmed exhaustive live: 14/128/15/85 values respectively as of 2026-09-09) -- exactly what `grailed-search`/`grailed-sold-listings` accept as their own `category`/`color`/`size` parameters (`category_path` is a more granular subcategory slug, e.g. `tops.short_sleeve_shirts`, for callers who want finer-grained filtering than the flat `category` facet -- not itself a `grailed-search` parameter). - `sizes` spans every category Grailed sells across (apparel letter sizes, numeric shoe/waist sizes, "one size", and more) since it is one index-wide facet -- sort by count (the default) to see the most common values first. - Designer is NOT included here (7,363 values, far too large for a facet-count response) -- see `grailed-designers` for that discovery endpoint. - Every list is sorted by count descending, then value ascending. Example response: ```json { "code": 200, "msg": "OK", "data": { "departments": [ {"value": "menswear", "count": 7567001}, {"value": "womenswear", "count": 3213103} ], "categories": [ {"value": "tops", "count": 3585831}, {"value": "bottoms", "count": 1441533}, {"value": "footwear", "count": 495891} ], "category_paths": [ {"value": "tops.short_sleeve_shirts", "count": 200000}, {"value": "footwear.low_top_sneakers", "count": 100000} ], "conditions": [ {"value": "is_used", "count": 4516431}, {"value": "is_gently_used", "count": 3552087}, {"value": "is_new", "count": 2642253}, {"value": "is_worn", "count": 68671}, {"value": "is_not_specified", "count": 1802} ], "colors": [ {"value": "black", "count": 3000000}, {"value": "white", "count": 1500000} ], "sizes": [ {"value": "m", "count": 900000}, {"value": "l", "count": 800000} ] } } ```
MCP tool grailed_categories
/grailed/suggestReturns Grailed's own search-box typeahead suggestions for a partial query -- a flat list of suggested search phrases with a popularity score and live active-listing match count, no listing data. Pass a suggestion straight through to grailed-search/grailed-sold-listings' own q parameter. A query with no genuine matches returns a well-formed empty result rather than an error.
Response notes
- `suggestions[].query` is directly usable as `grailed-search`/`grailed-sold-listings`'s own `q` parameter. - `suggestions[].total_results` is that suggested query's own live active-listing match count on Grailed. - A query with no genuine matches returns a well-formed empty result (`suggestions: []`) rather than an error. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "guc", "suggestions": [ {"query": "gucci", "popularity": 89, "total_results": 259659}, {"query": "gucci hat", "popularity": 40, "total_results": 4200} ] } } ```
MCP tool grailed_suggest
/grailed/collectionReturns one Grailed curated homepage collection's full listing set. id is the collection's numeric id, from grailed-collections' own collections[].id field. An unknown id returns a typed not-found error.
Response notes
- An unknown id returns a `404`. - Listings here use `CollectionListing`, a different, upstream-native field set from `grailed-search`'s `Listing` -- the member listings are already fully enriched by the upstream, so the seller is identified only by a numeric `seller_id` and an optional aggregate `seller_rating`, not a username/avatar. - Deleted or hidden member listings are filtered out. Example response: ```json { "code": 200, "msg": "OK", "data": { "id": 20, "title": "Dark Luxury", "external_id": "20240731-022", "last_refreshed_at": "2026-09-09T05:26:45.572Z", "count": 1, "listings": [ { "id": 104155968, "title": "Rick Owens DRKSHDW Detroit Cut Waxed Dirty Blue jeans pants", "url": "https://www.grailed.com/listings/104155968", "designers": ["Rick Owens"], "price": 335, "currency": "USD", "sold": false, "condition": "is_used", "size": "30", "department": "menswear", "category_path": "bottoms.denim", "seller_id": 7914629 } ] } } ```
MCP tool grailed_collection
/grailed/collectionsReturns Grailed's own curated homepage merchandising collections (e.g. "Trending: Apparel", "Dark Luxury", "Chromed Out") -- editorial/trending shelves distinct from a plain search or facet browse. Each collection's numeric id is the value grailed-collection's own id parameter accepts.
Response notes
- `collections[].id` is the value `grailed-collection`'s own `id` parameter accepts, per this repo's enum-discovery rule -- this is a closed, upstream-curated id space with no other public listing. - `collections[].top_designers` is a short sample (up to 3) of the designers most represented in that collection, not the full designer breakdown. - `collections[].preview_photos` is a short sample (up to 5) of cover photos from listings in the collection. Example response: ```json { "code": 200, "msg": "OK", "data": { "count": 2, "collections": [ { "id": 20, "title": "Dark Luxury", "external_id": "20240731-022", "last_refreshed_at": "2026-09-09T05:26:45.572Z", "top_designers": ["Rick Owens", "Rick Owens Drkshdw", "Gucci"], "preview_photos": [ "https://media-assets.grailed.com/prd/listing/temp/39de9bbf0ae6498cbc5d8e82a68ea600" ] } ] } } ```
MCP tool grailed_collections
/grailed/seller-reviewsReturns a page of a Grailed seller's individual buyer feedback entries (rating, note, feedback tags, and the listing each review was left for) -- reputation detail grailed-seller does not carry (grailed-seller only exposes the aggregate rating_average/rating_count). username is the seller's Grailed username, from a listing's own seller.username field or grailed.com/{username}. An unknown username returns a typed not-found error.
Response notes
- An unknown username returns a `404`. - `has_more` reflects whether Grailed advertised a further page, not a total review count -- Grailed's own pagination here is cursor-style, with no total-pages field. - `reviews[].listing` is omitted when the review is not associated with a listing. Example response: ```json { "code": 200, "msg": "OK", "data": { "username": "woodlandstepps", "user_id": 7914629, "page": 1, "count": 2, "has_more": true, "reviews": [ { "id": 7333988, "rating": 5, "tags": ["item-as-described", "quick-replies", "fast-shipper"], "created_at": "2026-08-22T16:42:17.194Z", "listing": { "id": 99233636, "title": "L.G.B. Wild Flowers", "url": "https://www.grailed.com/listings/99233636-le-grande-bleu-l-g-b-l-g-b-wild-flowers", "price": 180, "sold": true } } ] } } ```
MCP tool grailed_seller_reviews
/grailed/similar-listingsReturns the listings Grailed's own product page recommends as "similar" to one listing -- the same related-items shelf shown on grailed.com's own listing-detail page. id is the listing's numeric id, from a search, sold-listings, or collection result's own id field. An id for a listing that does not exist (deleted, sold and removed, or never valid) returns a typed not-found error.
Response notes
- An `id` for a listing that does not exist (deleted, sold and removed, or never valid) returns a `404`. - Each returned listing uses the same normalized shape as `grailed-search`/`grailed-sold-listings`. Example response: ```json { "code": 200, "msg": "OK", "data": { "id": 104155968, "limit": 30, "count": 2, "listings": [ { "id": 102856918, "title": "Rick Owens Drkshdw - FW16 - Dirty Blue Detroit Cut Jeans", "url": "https://www.grailed.com/listings/102856918", "designers": ["Rick Owens"], "price": 491, "currency": "USD", "sold": false, "condition": "is_gently_used", "size": "31" } ] } } ```
MCP tool grailed_similar_listings
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.
How to scrape Grailed
Crawlora's seven Grailed endpoints return active-listing search, sold-listing history, listing and seller detail, designer lookup, and facet taxonomy as normalized JSON with one API key — active and sold listings are two separate indexes, so a comparable-sales lookup needs the dedicated sold endpoint, not a filter on search.
Call /grailed/categories for the full department/category/category_path/condition/color/size facet taxonomy with live counts (departments and conditions are small closed sets; sizes and colors are index-wide). Use /grailed/designers separately — its 7,363-value space is too large for a facet response — with an optional q for typo-tolerant typeahead lookup.
Send q, designer, department, category, size, color, condition, min_price, and/or max_price to /grailed/search — all optional and combined as an AND, or omit everything to browse the full active catalog by Grailed's own "heat" relevance ranking. sort also accepts newest, price_asc, price_desc, followers, and quality.
Send the same filter shape to /grailed/sold-listings for Grailed's separate SOLD-listing index, where min_price/max_price filter the final sold_price rather than the original asking price — useful for comparable-sales research on a designer or category.
Pass a listing's id from any search result to /grailed/listing for its full description, measurements, and seller profile. Pass a username to /grailed/seller for that seller's public profile and current active listings (sold listings are not filterable by seller — use /grailed/sold-listings with a designer or q filter instead).
FAQ
Pass designer (from /grailed/designers' own name field), category, size, or color (from /grailed/categories' own facet values) and condition (one of is_new, is_gently_used, is_used, is_worn, is_not_specified) to /grailed/search — every filter is optional and combines as an AND with any keyword q.
Yes — /grailed/sold-listings is a separate SOLD-listing index carrying each item's final sold_price and sold_at date, with the same filter shape as /grailed/search. Every listing there has sold: true; price is kept as the original asking price for reference.
7,363 as of the last verified count. /grailed/designers pages through the full taxonomy (24 per page by default, up to 100), each with its own live listings_count and which departments (menswear, womenswear) it has listings in.
Yes — page (1-500) and limit (default 24, max 100) paginate both /grailed/search and /grailed/sold-listings, and the response's total_pages reflects the true match count for the current filters.
No — only your Crawlora API key. Grailed's search, listing, seller, designer, and facet data are collected from its public, credential-free marketplace surface.