Grailed Listings & Price Scraper
Pricing
Pay per event
Grailed Listings & Price Scraper
Search Grailed's menswear and streetwear resale marketplace by keyword. One row per active listing with price, brand, size, condition, seller, and photo - built for resale-arbitrage comps. No login required; we handle the retries.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
🎯 What this scrapes
Grailed is the go-to resale marketplace for menswear and streetwear - archive fashion, hyped drops, and everyday brands alike. This Actor runs your keyword searches against the same JSON search index Grailed's own /shop page calls to render its results grid, so we're never scraping brittle HTML/CSS selectors - just structured listing data, mapped into one clean row per active listing: price, brand, size, condition, seller, and photo.
🔥 What we handle for you
- 🔁 Retries with exponential backoff on
408 / 429 / 5xxand network errors - up to 5 attempts per page,Retry-Afterhonoured. - 🔄 Browser fingerprint rotation -
curl-cffiimpersonates Chrome and Firefox TLS handshakes on every retry, defense-in-depth even though live recon found no fingerprint sensitivity on Grailed's search page. - 🌐 Apify Proxy wired in from the start - shared datacenter pool by default, one click to switch to residential if you ever need it.
- 🧱 Fault-isolated pages - one malformed listing never takes down the rest of the page; a query that matches nothing still succeeds with zero rows.
- 🧊 Clean, typed dataset rows - Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
- 💰 Pay-Per-Event pricing - you only pay for results that hit your dataset. No data, no charge.
💡 Use cases
- Resale-arbitrage comps - price streetwear/menswear stock against live Grailed asks.
- Streetwear reselling - track new listings for a designer or drop across searches.
- Market research - monitor pricing trends for archive fashion and hyped brands.
- Inventory sourcing - surface underpriced listings matching a keyword watchlist.
⚙️ How to use it
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
queries | array | yes | ['jacket', 'carhartt'] | One or more free-text Grailed shop searches, e.g. "jacket", "carhartt", "raf simons". Each query runs its own paginated… |
maxPagesPerQuery | integer | no | 2 | How many /shop pages to fetch per query before moving to the next query. A page that yields zero listings stops that… |
category | string | no | '—' | Optional free-text category filter, folded into the search query (e.g. "outerwear"). Leave blank to search every… |
proxyConfiguration | object | no | {'useApifyProxy': True} | Apify Proxy configuration. Defaults to Apify's shared datacenter pool - live recon found no anti-bot fingerprinting on… |
Example input
{"queries": ["jacket","carhartt"],"maxPagesPerQuery": 2,"proxyConfiguration": {"useApifyProxy": true}}
📤 Output
Every row is one dataset item.
| Field | Type | Notes |
|---|---|---|
listing_id | string | Grailed's own listing ID. |
title | string | Listing title. |
brand | string | Designer/brand tag, when set by the seller. |
price | string | Asking price, normalised to dollars as a decimal string, e.g. "480.00". |
currency | string | ISO 4217 currency code ("USD" unless the listing exposes another explicitly). |
size | string | Size tag, when set by the seller. |
condition | string | Condition label, e.g. "Gently Used". |
seller_username | string | Seller's Grailed username, when present. |
listing_url | string | Canonical Grailed listing URL. |
image_url | string | Primary listing photo URL, when present. |
query_used | string | The search query that produced this row. |
page | integer | The /shop page number that produced this row. |
scraped_at | string | ISO-8601 UTC timestamp when this row was recorded. |
Example output
{"listing_id": "58421093","title": "Raf Simons AW03 Consumed Bomber","brand": "Raf Simons","price": "480.00","currency": "USD","size": "M","condition": "Gently Used","seller_username": "archive_dealer","listing_url": "https://www.grailed.com/listings/58421093-raf-simons-aw03-consumed-bomber","image_url": "https://media.grailed.com/photos/58421093/full.jpg","query_used": "raf simons","page": 1,"scraped_at": "2026-09-14T12:00:00.000Z"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.2 | One-off warm-up charge per run |
item-result | $0.0048 | Per unique dataset item |
Example: 1 000 results at the rates above ≈ $5.00. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
- Active listings only - this Actor scrapes the public
/shopsearch, not sold/completed-sale history. - No per-listing detail-page enrichment beyond what the search results page already carries.
- No structured facet filters (size/designer as distinct params) -
categoryfolds into the free-text query string. - USD/
.comstorefront only - no other Grailed region variants in v1. - No authenticated views - saved searches, offers, and the sold tab require a login this Actor doesn't use.
❓ FAQ
Is this legal?
We only fetch what Grailed's public shop-search page already serves to any visitor. Respect Grailed's Terms of Service before using the output commercially.
How do I search multiple brands or terms at once?
Add each term as its own entry in the queries list - the Actor runs one paginated search per entry and merges the results into a single dataset.
Why did a query return zero rows?
Either nothing on Grailed matched that search, or the search genuinely has no results. The run still succeeds - an empty match isn't treated as a failure.
Can I get sold/completed listings instead of active ones?
Not in v1 - this Actor covers Grailed's public active-listing search only. Open an Issue if you need sold-comp data and we'll scope it.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.