OrbTop

Grailed Resale Listings Scraper

ECOMMERCELEAD GENERATION

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:

  1. Fetches live Algolia credentials from the Grailed page (the search key rotates — hardcoded keys don't work)
  2. Pages through active listings in the Listing_production Algolia index
  3. Optionally pages through sold listings in the Listing_sold_production index
  4. 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 (no browser, pure JSON API)
  • 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.
  • Proxy: No proxy required — direct HTTP + impit TLS fingerprint works. DataImpulse residential 403s on Grailed.

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_price field is populated only when the seller entered it manually.