Grailed API endpoint
Searches 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.
/grailed/sold-listingsq is optional, 1 to 200 characters when present.
designer is optional, a designer/brand name filter, from grailed-designers' own designers[].name field.
department is optional. Allowed values: menswear, womenswear.
category is optional, a category facet filter, from grailed-categories' own categories[].value field.
size is optional, a size facet filter, from grailed-categories' own sizes[].value field.
color is optional, a color facet filter, from grailed-categories' own colors[].value field.
condition is optional. Allowed values: is_new, is_gently_used, is_used, is_worn, is_not_specified.
min_price is optional, a minimum SOLD price (inclusive), in USD.
max_price is optional, a maximum SOLD price (inclusive), in USD. Must not be less than min_price when both are set.
sort is optional, defaults to recent. Allowed values: recent (most recently sold first), price_asc, price_desc (both by sold price).
page is optional, a one-based page number, defaults to 1 (1 to 500).
limit is optional, results per page, defaults to 24, maximum 100.
Notable response behavior:
count: 0, listings: []) rather than an error.USD and sold: true, with sold_price and sold_at populated -- price on a sold listing is the original asking price, kept for reference.id is the value grailed-listing's own id parameter expects for full listing detail.| Field | Filled in, of 24 checked | Values in the sample |
|---|---|---|
| id | 24 | |
| title | 24 | “Size 100/40 - Gucci Black Silver Leather Interlocking” and 23 other values |
| url | 24 | grailed.com |
| designers | 24 | median 1 entry |
| price | 24 | 122 to 972, median 182 |
| currency | 24 | USD in all 24 |
| sold | 24 | true in 24 of 24 |
| sold_price | 24 | 50 to 580, median 165 |
| sold_at | 24 | 2026-10-12 to 2026-10-13 |
| condition | 24 | is_used (12), is_gently_used (9), is_new (3) |
| size | 24 | “40” and 12 other values |
| department | 24 | menswear in all 24 |
| category | 24 | accessories (11), footwear (8), tops (4) and 1 more |
| category_path | 24 | “accessories.belts” and 12 other values |
| color | 24 | black (10), beige (5), white (4) and 4 more |
| location | 24 | United States (13), Europe (5), United Kingdom (2) and 3 more |
| cover_photo_url | 24 | media-assets.grailed.com |
| photo_count | 24 | 3 to 20, median 7 |
| follower_count | 23 | 2 to 212, median 19 |
| buy_now | 24 | true in 23 of 24 |
| make_offer | 24 | true in 22 of 24 |
| created_at | 24 | 2026-03-21 to 2026-10-12 |
| bumped_at | 24 | 2026-03-21 to 2026-10-12 |
| seller | 24 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | No | Free-text search query | gucci | |
| designer | string | No | Designer/brand name filter, from grailed-designers' own designers[].name field | Gucci | |
| department | string | No | Department filter Allowed values: menswear, womenswear. | menswear | |
| category | string | No | Category facet filter, from grailed-categories' own categories[].value field | footwear | |
| size | string | No | Size facet filter, from grailed-categories' own sizes[].value field | 9 | |
| color | string | No | Color facet filter, from grailed-categories' own colors[].value field | white | |
| condition | string | No | Condition filter Allowed values: is_new, is_gently_used, is_used, is_worn, is_not_specified. | is_used | |
| min_price | number | No | Minimum SOLD price (inclusive), in USD | 100 | |
| max_price | number | No | Maximum SOLD price (inclusive), in USD | 500 | |
| sort | string | No | recent | Sort order, defaults to recent Allowed values: recent, price_asc, price_desc. | recent |
| page | integer | No | 1 | One-based page number, defaults to 1 | 1 |
| limit | integer | No | 24 | Results per page, defaults to 24, maximum 100 | 24 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/grailed/sold-listings?q=coffee&department=menswear&condition=is_new&sort=recent&page=1&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"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,
"rating_count": 4
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/grailed.soldListingsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | grailed.SoldListingsResponse | No | ||||
| data.category | string | No | ||||
| data.color | string | No | ||||
| data.condition | string | No | ||||
| data.count | integer | No | ||||
| data.department | string | No | ||||
| data.designer | string | No | ||||
| data.fetched_at | string | No | ||||
| data.limit | integer | No | ||||
| data.listings | array | No | Listing record, 31 fields: bumped_at, buy_now, category, category_path, color, condition, cover_photo_url, created_at, currency, department, designers, follower_count and 12 more. Described under Grailed Listing Search API. | |||
| data.max_price | number | No | ||||
| data.min_price | number | No | ||||
| data.page | integer | No | ||||
| data.query | string | No | ||||
| data.size | string | No | ||||
| data.sort | string | No | ||||
| data.source_url | string | No | ||||
| data.total_pages | integer | No | ||||
| data.total_results | integer | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/grailed/sold-listings?q=coffee&department=menswear&condition=is_new&sort=recent&page=1&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"