Grailed Scraper
Pricing
from $0.88 / 1,000 listing results
Grailed Scraper
Scrape Grailed designer and streetwear listings with full price-drop history, size, condition, designer and seller reputation. Search, browse by designer or category, filter by price and condition. Sold-archive mode adds sold price and date for market-value research. No start fee.
Pricing
from $0.88 / 1,000 listing results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
11
Total users
2
Monthly active users
8 days ago
Last modified
Categories
Share

Scrape Grailed designer and streetwear listings at scale, including the sold archive for market-value research. Search by keyword, browse by designer or category, and filter by price, condition and department. No API key required.
Why this scraper?
🏷️ Complete listing data
Price, full price-drop history, designer, size, color, condition, category, shipping, and engagement metrics on every result.
📉 Sold-comp data
Switch to the sold archive to get sold price and sold date for any search — the data resellers use to value inventory and price listings. Each sold run also reports an outlier-trimmed median sold price and median markdown percentage in the run summary.
🔍 Powerful filtering
Filter by price range, condition, department, and on-sale status. Sort by relevance, newest, popularity, or price.
⭐ Seller reputation
Seller rating, review count, total sales, trusted-seller status, and an anonymous seller key for grouping listings by seller — without exposing any individual's personal details.
💸 Low flat pricing, no start fee
Flat per-result pricing with no separate actor-start fee and no charge for retries — you pay only for listings actually returned.
Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | search | search, byDesigner, or byCategory. |
searchQuery | string | — | Free-text query (mode = search). Leave empty to filter by designer, category or other filters alone. |
designer | string | — | Designer name to filter by, e.g. Nike, Supreme, Rick Owens. |
category | string | — | Category to filter by, e.g. footwear, tops, outerwear, bottoms, accessories. |
department | string | `` | menswear, womenswear, or any. |
condition | string | `` | is_new, is_gently_used, is_used, is_worn, or any. |
soldOnly | boolean | false | Scrape the sold archive instead of active listings. |
sortBy | string | relevance | relevance, newest, most_popular, price_low_to_high, price_high_to_low. |
minPrice | integer | — | Only emit listings at or above this price. |
maxPrice | integer | — | Only emit listings at or below this price. |
onSaleOnly | boolean | false | Keep only price-dropped listings. |
maxResults | integer | 5 | Cap on results. Set 0 for no cap (max 1000 per query). |
maxPages | integer | 5 | Maximum pages to walk (48 per page, max 21). Not used in incremental runs. |
createdAfter | string | — | Only listings created or renewed at or after this moment. ISO timestamp, epoch seconds, or relative (6 hours, 2 days). |
soldAfter | string | — | Sold mode only. Only listings sold at or after this moment. |
incremental | boolean | false | Continue from where the previous run of the same search stopped. |
incrementalStateKey | string | — | Optional name for the saved position. Set a new name to start over. |
Output schema
| Field | Type | Description |
|---|---|---|
id | number | Grailed listing ID. |
title | string | Listing title. |
url | string | Full listing URL. |
designer | string | Designer name(s) as shown. |
designers | array | Individual designer names. |
department | string | menswear or womenswear. |
category | string | Top-level category. |
categoryPath | string | Full category path. |
size | string | Item size. |
color | string | Primary color. |
condition | string | Item condition. |
strata | string | Grailed tier (e.g. hype, grailed, basic). |
price | number | Current price (USD). |
priceDrops | array | Price-drop history. |
onSale | boolean | Has had a price drop. |
makeOffer | boolean | Accepts offers. |
buyNow | boolean | Buy-now enabled. |
priceUpdatedAt | string | When the price last changed. |
shippingUS | number | US shipping cost. |
sold | boolean | Whether the listing is sold. |
soldPrice | number | Sold price (sold archive only). |
soldAt | string | Sold date (sold archive only). |
heat | number | Grailed heat / popularity score. |
followerCount | number | Listing followers. |
photoCount | number | Number of photos. |
measurementCount | number | Number of measurements provided. |
coverPhotoUrl | string | Cover photo URL. |
location | string | Seller region. |
createdAt | string | When the listing was created or last renewed on Grailed. |
sellerKey | string | Anonymous seller identifier. The same seller always gets the same key in your account, so you can group listings by seller. |
sellerRating | number | Seller average rating. |
sellerRatingCount | number | Number of seller reviews. |
sellerTotalSold | number | Seller's total bought and sold. |
sellerTrusted | boolean | Trusted-seller flag. |
marketplace | string | Source marketplace. |
source | string | Always Grailed. |
scrapedAt | string | ISO timestamp of extraction. |
Example record
{"id": 99282234,"title": "Nike Thorpe United F.C. #2 L/S Jersey","url": "https://www.grailed.com/listings/99282234","designer": "Nike","designers": ["Nike"],"department": "menswear","category": "tops","categoryPath": "tops.jerseys","size": "m","color": "blue","condition": "is_gently_used","strata": "hype","price": 72,"priceDrops": [],"onSale": false,"makeOffer": true,"buyNow": true,"priceUpdatedAt": "2026-06-24T16:25:08.766Z","shippingUS": 15,"sold": false,"soldPrice": null,"soldAt": null,"heat": 4576.757581018518,"followerCount": 9,"photoCount": 9,"measurementCount": 4,"coverPhotoUrl": "https://media-assets.grailed.com/prd/listing/temp/3dbf27eb01e74bcbb8d00eeafb4f5cc1","location": "Europe","createdAt": "2026-06-24T16:25:08.766Z","sellerRating": 4.926235741444866,"sellerRatingCount": 1315,"sellerTotalSold": 3495,"sellerTrusted": true,"marketplace": "grailed","source": "Grailed","scrapedAt": "2026-06-24T16:35:10.394Z"}
Examples
Search menswear Nike under $200:
{"mode": "search","searchQuery": "nike","department": "menswear","maxPrice": 200,"maxResults": 100}
Sold-comp research for a designer:
{"mode": "search","searchQuery": "rick owens ramones","soldOnly": true,"sortBy": "newest","maxResults": 200}
On-sale outerwear, price high to low:
{"mode": "search","searchQuery": "carhartt jacket","category": "outerwear","onSaleOnly": true,"sortBy": "price_high_to_low","maxResults": 100}
Daily feed of new listings (run on a schedule):
{"mode": "byDesigner","designer": "Acne Studios","incremental": true,"maxResults": 0}
Schedule this input in the Apify Scheduler. Each run returns only the listings added since the previous run. See Incremental collection below.
Seller key
Every listing carries a sellerKey: an anonymous identifier for the seller. It's stable across all your runs, so you can group listings by seller, spot bulk uploads, cap one seller's weight in price calculations, and follow a seller's activity over time.
The key is derived from Grailed's internal seller ID with a secret we hold, so it can't be traced back to a Grailed profile. Usernames, profile links and raw seller IDs are not included: many Grailed sellers are private individuals, and we don't collect personal data. Keys are unique to your Apify account.
The run summary also reports sellers: the number of unique sellers in the run and the share of listings from the largest one.
Incremental collection
Recurring runs don't need to pay for listings you already have. Two ways to collect only what is new:
Let the actor keep track. Set incremental: true and schedule the same input. Each run continues exactly where the previous run of that search stopped. The position is saved per search in a key-value store called grailed-scraper-incremental on your account.
{"mode": "byDesigner","designer": "Balenciaga","incremental": true,"createdAfter": "2026-09-19T08:00:00Z","maxResults": 0}
createdAfter only sets the starting point of the first run. Without it, the first run starts 24 hours back. An invalid timestamp fails the run with a clear message rather than returning nothing.
Keep track yourself. Pass createdAfter on every run. The run summary (OUTPUT key) returns incremental.nextCutoff: use that value as createdAfter on the next run and nothing is skipped or collected twice.
New sold listings. With soldOnly: true, both options work on the sale date instead: use soldAfter, or incremental: true.
How it works:
- Incremental runs are not limited by Grailed's 1,000-result search cap. The actor splits the time range into smaller slices, so a busy designer with 2,000+ new listings a day is collected in full.
- If
maxResultsstops a run early, the run collects the oldest part of the range first and the next run continues from there. Nothing in between is skipped. - New listings take up to about 90 seconds to appear in Grailed's search. Each run leaves the last 5 minutes for the next run, and incremental runs also re-check the 30 minutes before their saved position, skipping anything already delivered at no charge.
- Set
maxResultsto0for incremental runs. The default of 100 caps each run, and a busy designer then builds a backlog. - Grailed gives a renewed listing a fresh creation time. Those listings appear again as new, with the same
id, so upsert onidin your database. - Price changes and sales of listings you already collected do not appear in a created-after feed. Use a
soldAfterfeed to capture sales.
Call this actor over HTTP
Besides normal runs, this actor exposes a REST API that answers each request in seconds with JSON. There is no run to start and no dataset to fetch afterwards, which suits apps, automations and AI agents that need one answer at a time. The full interactive reference is on the Endpoints tab.
| Endpoint | Returns | Billed as |
|---|---|---|
GET /search?query=… | Listings matching a search, active or sold (up to 50) | Per listing |
GET /designer?designer=… | A designer's listings (up to 50) | Per listing |
Authenticate with your Apify API token in the Authorization header:
curl -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \"https://unfenced-group--grailed-scraper.apify.actor/search?query=rick%20owens&maxResults=5"
Every response has the shape { "count": N, "items": [...] }, with the same fields as the dataset records above, billed at the same prices as a normal run. Errors and empty searches return no data and are never billed. POST with a JSON body works the same as GET.
💰 Pricing
$0.99 per 1,000 listings — you only pay for results returned. No start fees, no charges for retries.
| Results | Cost |
|---|---|
| 100 | ~$0.099 |
| 1,000 | ~$0.99 |
| 10,000 | ~$9.90 |
| 100,000 | ~$99 |
Use the Max results cap to control your spend exactly.
Flat-rate alternatives typically charge a monthly fee regardless of usage.
Use Max results to control spend exactly.
Performance
| Run size | Typical time |
|---|---|
| 100 results | under 30 seconds |
| 1,000 results | 1–2 minutes |
Known limitations
- A standard query returns at most 1,000 results. Incremental runs (
createdAfter,soldAfter,incremental) are not limited by this. - Sold data is available only in sold mode (
soldOnly: true). - Prices are in USD as provided by Grailed.
Run summary
Every run writes an OUTPUT key with the result count and dataset URL. In sold mode it also includes soldComps — the number of sold items, an outlier-trimmed medianSoldPrice, and medianMarkdownPct (median discount from original list price to final sale). Incremental runs also include incremental: the time range covered, whether it completed, and nextCutoff for the next run.
Technical details
- Source: grailed.com — designer and streetwear resale marketplace
- Memory: 512 MB
- Retry: Automatic retry with backoff on transient errors
- Output: Dataset records plus
OUTPUTandHEALTHkeys
Related scrapers
Other scrapers in our Fashion & Sneaker Resale collection:
Run it on a schedule
This actor is built for repeat use. Set it to run daily, weekly, or hourly, and the data keeps flowing without you touching it.
- Schedule runs — open the actor, go to Schedules, and pick a cadence. Each run only charges you for the results it returns.
- Connect it to your stack — push results straight to Google Sheets, Slack, a webhook, or your database using Apify Integrations. No glue code needed.
- Pull results via API — every run writes a clean dataset you can fetch with one API call, ready for whatever you build on top of it.
Set it once and it runs on its own.
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl