Grailed Scraper avatar

Grailed Scraper

Pricing

from $0.88 / 1,000 listing results

Go to Apify Store
Grailed Scraper

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

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

11

Total users

2

Monthly active users

8 days ago

Last modified

Categories

Share

Banner

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

FieldTypeDefaultDescription
modestringsearchsearch, byDesigner, or byCategory.
searchQuerystring—Free-text query (mode = search). Leave empty to filter by designer, category or other filters alone.
designerstring—Designer name to filter by, e.g. Nike, Supreme, Rick Owens.
categorystring—Category to filter by, e.g. footwear, tops, outerwear, bottoms, accessories.
departmentstring``menswear, womenswear, or any.
conditionstring``is_new, is_gently_used, is_used, is_worn, or any.
soldOnlybooleanfalseScrape the sold archive instead of active listings.
sortBystringrelevancerelevance, newest, most_popular, price_low_to_high, price_high_to_low.
minPriceinteger—Only emit listings at or above this price.
maxPriceinteger—Only emit listings at or below this price.
onSaleOnlybooleanfalseKeep only price-dropped listings.
maxResultsinteger5Cap on results. Set 0 for no cap (max 1000 per query).
maxPagesinteger5Maximum pages to walk (48 per page, max 21). Not used in incremental runs.
createdAfterstring—Only listings created or renewed at or after this moment. ISO timestamp, epoch seconds, or relative (6 hours, 2 days).
soldAfterstring—Sold mode only. Only listings sold at or after this moment.
incrementalbooleanfalseContinue from where the previous run of the same search stopped.
incrementalStateKeystring—Optional name for the saved position. Set a new name to start over.

Output schema

FieldTypeDescription
idnumberGrailed listing ID.
titlestringListing title.
urlstringFull listing URL.
designerstringDesigner name(s) as shown.
designersarrayIndividual designer names.
departmentstringmenswear or womenswear.
categorystringTop-level category.
categoryPathstringFull category path.
sizestringItem size.
colorstringPrimary color.
conditionstringItem condition.
stratastringGrailed tier (e.g. hype, grailed, basic).
pricenumberCurrent price (USD).
priceDropsarrayPrice-drop history.
onSalebooleanHas had a price drop.
makeOfferbooleanAccepts offers.
buyNowbooleanBuy-now enabled.
priceUpdatedAtstringWhen the price last changed.
shippingUSnumberUS shipping cost.
soldbooleanWhether the listing is sold.
soldPricenumberSold price (sold archive only).
soldAtstringSold date (sold archive only).
heatnumberGrailed heat / popularity score.
followerCountnumberListing followers.
photoCountnumberNumber of photos.
measurementCountnumberNumber of measurements provided.
coverPhotoUrlstringCover photo URL.
locationstringSeller region.
createdAtstringWhen the listing was created or last renewed on Grailed.
sellerKeystringAnonymous seller identifier. The same seller always gets the same key in your account, so you can group listings by seller.
sellerRatingnumberSeller average rating.
sellerRatingCountnumberNumber of seller reviews.
sellerTotalSoldnumberSeller's total bought and sold.
sellerTrustedbooleanTrusted-seller flag.
marketplacestringSource marketplace.
sourcestringAlways Grailed.
scrapedAtstringISO 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 maxResults stops 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 maxResults to 0 for 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 on id in your database.
  • Price changes and sales of listings you already collected do not appear in a created-after feed. Use a soldAfter feed 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.

EndpointReturnsBilled 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.

ResultsCost
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 sizeTypical time
100 resultsunder 30 seconds
1,000 results1–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 OUTPUT and HEALTH keys

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