Grailed Resale Listings Scraper
ECOMMERCELEAD GENERATION
Independent tool. Trademarks referenced on this page are the property of their respective owners and are used only to identify the public website this tool reads. No affiliation or endorsement.
Grailed Resale Listings Scraper
Scrape Grailed designer and streetwear resale listings — both active and SOLD — via the Algolia search API. Returns full listing data including sold price, seller score, original retail price, and arbitrage-ready comparables.
What it does
This actor queries Grailed's Algolia search index directly, giving you fast and complete listing data without relying on rendered HTML. Each run:
- Fetches live Algolia credentials from the Grailed page (the search key rotates — hardcoded keys don't work)
- Pages through active listings in the
Listing_productionAlgolia index - Optionally pages through sold listings in the
Listing_sold_productionindex - Returns structured records with all fields needed for resale comps and arbitrage analysis
Use cases
- Resale comps: filter by designer and category to see what items actually sold for vs. asking price
- Brand arbitrage: track original retail price vs. resale price across brands and categories
- Inventory research: survey active listings for a designer or category to understand market depth and pricing
- Seller intelligence: combine seller score and total transactions to identify top-rated sellers
Input
| Field | Type | Required | Description |
|---|---|---|---|
category |
string | one of these | Grailed category slug (e.g. outerwear, tops, bottoms, footwear, accessories) |
designer |
string | one of these | Designer / brand name (e.g. Supreme, Rick Owens, Comme des Garcons) |
includeSold |
boolean | no | Include SOLD listings (default: true) |
maxItems |
integer | no | Max total listings to return. 0 = no limit (default: 0) |
Either category or designer (or both) must be provided.
Example — sold Supreme outerwear comps:
{
"category": "outerwear",
"designer": "Supreme",
"includeSold": true,
"maxItems": 500
}
Example — all active outerwear listings:
{
"category": "outerwear",
"includeSold": false
}
Output
Each record contains:
| Field | Description |
|---|---|
listing_id |
Grailed listing ID |
title |
Listing title |
designer |
Brand or designer name |
department |
menswear or womenswear |
category |
Top-level category (e.g. outerwear) |
sub_category |
Sub-category (e.g. parkas) |
size |
Item size |
condition |
Condition string (e.g. is_gently_used) |
price |
Asking price in USD |
original_price |
Original retail price in USD |
sold |
true if the listing has sold |
sold_price |
Final sold price in USD (sold listings only) |
sold_at |
ISO-8601 timestamp when sold |
seller_username |
Grailed username of the seller |
seller_score |
Seller rating average (0–5) |
location |
Seller's country |
listing_url |
Full URL to the listing on Grailed |
photo_url |
Primary listing photo URL |
created_at |
When the listing was created |
updated_at |
When the listing was last updated |
scrapedAt |
ISO-8601 scrape timestamp |
Performance and limits
- Speed: ~1000 listings/page, ~200ms between pages — expect ~5-10k listings/minute
- Memory: 256 MB
- Algolia limits: Max 500 pages x 1000 hits = 500k results per query. For categories with more than 500k listings, use designer + category filters together to scope queries under that limit.
- Setup: none — run it as it ships.
Notes
- Grailed's Algolia search key rotates. The actor extracts the live key from the page on each run — do not attempt to hardcode credentials.
- Sold listings data is only available for items sold through the Grailed platform.
- The
original_pricefield is populated only when the seller entered it manually.