Grailed Sold Listings API
Get Grailed sold prices (what buyers actually paid), sold dates, shipping, size and condition, plus active listings, with one CompSniper API key.
CompSniper has two Grailed endpoints for menswear, womenswear, streetwear and designer resale:
| Endpoint | What you get |
|---|---|
GET /v1/grailed/sold | Sold listings with the price the buyer paid, sold date, shipping, size, condition and designer |
GET /v1/grailed/listings | Active listings with asking price, US shipping, offers, size, condition and designer |
Both use the same API key, per-minute limit, monthly allowance and purchased credits as the eBay endpoints. No Grailed account is needed.
soldPrice is the price the buyer actually paid. When a buyer's offer was accepted, soldPrice is the
accepted offer and listPrice is the asking price it sold from, so you price against real sales, not
asking prices.
For an overview with code in cURL, Python and JavaScript, see the Grailed API page.
Sold listings
curl --fail-with-body \
-H "Authorization: Bearer cs_live_REPLACEWITHYOURKEY" \
"https://api.compsniper.com/v1/grailed/sold?keyword=supreme+box+logo+hoodie&department=menswear&count=40"import requests
response = requests.get(
"https://api.compsniper.com/v1/grailed/sold",
headers={"Authorization": "Bearer cs_live_REPLACEWITHYOURKEY"},
params={"keyword": "arcteryx beta ar", "department": "menswear", "condition": "gently_used", "count": 100},
timeout=45,
)
response.raise_for_status()
data = response.json()
print(data["totalResults"], "sales, median", data["summary"]["median"])
for sale in data["items"][:5]:
print(sale["soldAt"][:10], sale["size"], sale["condition"], sale["soldPrice"], sale["shippingPrice"])Parameters
| Parameter | Values | Default |
|---|---|---|
keyword | Brand, model and item, up to 300 characters | Required |
department | any, menswear, womenswear | any |
condition | any, new, gently_used, used, worn | any |
minPrice, maxPrice | Price range in USD (sold price on /sold, asking price on /listings) | None |
sortBy | Sold: recent, price_desc, price_asc. Listings: default, newest, price_asc, price_desc | recent / default |
count | 1 to 100 rows per page | 40 |
page | 1 and up, while page x count stays at or under 1000 | 1 |
A search returns up to 1,000 rows in total across its pages. For more, narrow it with department,
condition or a price range.
Sold response
{
"keyword": "supreme box logo hoodie",
"page": 1,
"count": 40,
"marketplace": "grailed",
"totalResults": 7004,
"totalItems": 40,
"hasNextPage": true,
"items": [
{
"listingId": "107710313",
"url": "https://www.grailed.com/listings/107710313",
"title": "Pink Supreme Box Logo Hoodie",
"soldPrice": 175,
"listPrice": 211,
"shippingPrice": 14.99,
"soldPriceIncludesShipping": false,
"currency": "USD",
"soldAt": "2026-10-18T01:48:11.810Z",
"designers": ["Supreme"],
"size": "m",
"condition": "Gently used",
"category": "tops.sweatshirts_hoodies",
"department": "menswear",
"location": "United States",
"imageUrl": "https://media-assets.grailed.com/..."
}
],
"summary": { "count": 40, "currency": "USD", "median": 200, "mean": 214.3, "min": 120, "max": 410, "p25": 180, "p75": 240, "avgShipping": null },
"scrapedAt": "2026-10-18T02:10:04.122Z"
}totalResultsis how many Grailed sales match the search;itemsholds this page.shippingPriceis the shipping the buyer paid.soldPriceIncludesShippingsays whethersoldPricealready includes it.conditionis one ofNew,Gently used,UsedorVery worn.summaryholds the count, median, mean, min, max, p25 and p75 of the returned sold prices.
Active listings
curl --fail-with-body \
-H "Authorization: Bearer cs_live_REPLACEWITHYOURKEY" \
"https://api.compsniper.com/v1/grailed/listings?keyword=rick+owens+geobasket&sortBy=newest&count=40"Each listing has listingId, url, title, price, shippingPrice (US shipping when offered),
acceptsOffers, designers, size, condition, category, department, location, imageUrl,
listedAt and bumpedAt. The response includes totalListings and hasNextPage for paging, and a
summary of the asking prices.
Billing
- One successful call is one request, for sold and listings alike.
- Failed requests are free.
- Repeat calls can return instantly from a short-lived saved copy and count as one request.
Errors
The Grailed endpoints use the shared error format (code, error, requestId):
| Status | Code | Meaning | What to do |
|---|---|---|---|
| 400 | invalid_params | Missing keyword, a value out of range, or page x count over 1,000 | Fix the request |
| 429 | rate_limited / quota_exceeded | Per-minute limit or monthly allowance reached | See Rate limits |
| 502, 503 | upstream_blocked / server_busy | Grailed did not answer this time | Retry after a few seconds, with a bound |
See Errors for the full list.
TCGplayer Sold Prices API
Get TCGplayer completed sales, market price history and active listings for Pokemon, Magic, Yu-Gi-Oh and other trading cards with one API key.
Depop Listings API
Search Depop listings by keyword in the US, UK, Australia and Canada with price, discount, shipping, brand, size, condition and seller, using one CompSniper API key.