Grailed Scraper — Streetwear Resale & Sold Prices avatar

Grailed Scraper — Streetwear Resale & Sold Prices

Pricing

from $3.88 / 1,000 listings

Go to Apify Store
Grailed Scraper — Streetwear Resale & Sold Prices

Grailed Scraper — Streetwear Resale & Sold Prices

Collect Grailed listings from Grailed's public search service. Get prices, conditions, seller data, sold status, and URLs. Run with searchQuery; no Grailed login or API key. Pricing: $0.004 per result on Free.

Pricing

from $3.88 / 1,000 listings

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

1

Monthly active users

5 days ago

Last modified

Features

Limited permissions

Share

Grailed Listings Scraper

You do not need a Grailed login, API key or proxy to search Grailed listings through its public search service and extract prices, conditions, seller data, sold status, and URLs. The Actor reads at most maxItems × 3 search hits, or maxItems × 10 when designerFilter, categoryFilter or sizeFilter is set, so filters can return fewer than maxItems listings.

  • Search by keyword, including brands, styles, items, and designer names.
  • Track asking price, sold_price and price_drops for resale research and price monitoring.
  • Analyze categories, designers, and strata values for trends.
  • Review seller scores, review counts, parse_confidence, and warnings on every record.

What you get

The Actor returns normalized records. A field is null when the source does not provide its value.

FieldTypeDescription
listing_idintegerNumeric listing ID; null when objectID and id are missing or not integers.
titlestringListing title; null when blank.
pricenumberCurrent asking price in USD; null when absent or unparseable.
price_dropsarrayPrice-drop history; null when not a list, possibly empty when the source list is empty.
conditionstringCondition; null when blank. is_used → used, is_new → new, not_worn_once → new_with_tags; other values are preserved.
designersstringComma-separated designer names; null when absent.
categorystringTop-level category; null when absent.
category_pathstringFull category path; null when absent.
sizestringListing size; null when absent.
colorstringPrimary color; null when absent.
soldbooleanWhether the listing is marked sold; always boolean.
sold_pricenumberFinal sale price; null unless positive.
seller_usernamestringSeller username; null when there is no seller object.
seller_scorenumberSeller rating average; null when unavailable or nonnumeric.
seller_reviewsintegerSeller review count; null when unavailable or nonnumeric.
cover_photostringCover photo URL; null when absent.
locationstringSeller location; null when absent.
marketplacestringMarketplace value, such as grailed or hbx; null when absent.
stratastringSegment value, such as hype, luxury, sartorial, or basic; null when absent.
listing_urlstringCanonical listing URL; null when the listing ID cannot be built.
created_atISO 8601 stringSource created_at text with whitespace stripped; null when absent.
scraped_atISO 8601 stringUTC timestamp when the run started; always a string.
parse_confidencenumberData-quality score from 0 to 1, rounded to 3 decimals; always a number.
warningsarrayQuality codes; always an array, possibly empty. Possible codes: listing_id_missing, title_missing, price_missing, designers_missing, url_missing.

Sample output

The sample below is one complete dataset record from a successful run.

{"listing_id":110903990,"title":"‼️Nike Vintage Windbreaker Y2k Avant Garde Ykk Light Jacket‼️","price":80,"price_drops":[],"condition":"is_gently_used","designers":"Nike, Vintage","category":"outerwear","category_path":"outerwear.light_jackets","size":"xxl","color":"beige","sold":false,"sold_price":null,"seller_username":"asakuratb","seller_score":4.833,"seller_reviews":42,"cover_photo":"https://media-assets.grailed.com/prd/listing/temp/83e3727db8014773a9d3b0d73de9f605","location":"Europe","marketplace":"grailed","strata":"hype","listing_url":"https://www.grailed.com/listings/110903990","created_at":"2026-11-01T19:07:02.888Z","scraped_at":"2026-11-01T21:41:13Z","parse_confidence":1,"warnings":[]}

A listing the source does not mark sold has "sold": false and "sold_price": null.

Pricing

The Free plan uses pay-per-event billing for the events below.

You pay only for the events listed below. This Actor does not use the Pay per event + usage option, so the platform usage of your runs (compute, proxy traffic and storage) is not billed to you separately.

PlanPer run startPer result
Free$0.00005 per event on Free$0.004 per result on Free

On Free, apify-actor-start is the Per run start event and apify-default-dataset-item is the Per result event. The start event is charged once per GB of run memory, with a minimum of one event; the result event represents one scraped result with all fields.

Using the minimum one start event:

  • 1,000 results = $4.00005 on Free (1,000 × 0.004 + 0.00005)
  • 10,000 results = $40.00005 on Free (10,000 × 0.004 + 0.00005)
  • 1,249 results = $4.99605 on Free (1,249 × 0.004 + 0.00005)

The Apify Free plan includes $5 of monthly platform usage credit; the $5 credit covers 1,249 results in one run.

The events listing-item and sold-price-data have no price, so you are not charged for them.

How to use

  1. Open the Actor in your Apify account.
  2. Enter a Grailed keyword in searchQuery.
  3. Set maxItems and optionally add designer, category, or exact-size filters.
  4. Start the run and inspect the dataset records.
  5. Review price, sold_price, seller_score, and parse_confidence; for a one-result check, set maxItems to 1 and read the first record.
  6. Repeat the run through Apify Schedules, using daily as a starting point for listing or price monitoring.
{
"searchQuery": "nike vintage jacket",
"maxItems": 15,
"designerFilter": "Nike",
"categoryFilter": "outerwear",
"sizeFilter": "xl"
}

Export the dataset as JSON or CSV, or read it through the Apify dataset API.

Input parameters

ParameterWhat it doesDefault
searchQueryRequired string used to search Grailed listings.required
maxItemsMaximum listings to return, from 1 to 10000.100
designerFilterCase-insensitive substring match against designers; records without designers do not pass.""
categoryFilterCase-insensitive substring match against category or category_path; records without category data do not pass.""
sizeFilterCase-insensitive exact match against size; records without size data do not pass.""
disableUsageStatsSet to true to turn off the run summary described in Usage statistics.false

Filters are applied client-side. Size matches exactly; designer and category filters use substring matching.

Limits and edge cases

ConditionWhat you seeWhat to do
searchQuery is missing or whitespaceThe run ends as Succeeded with an empty dataset and stores {"error": "searchQuery_required"} in the OUTPUT record of the run's default key-value store; the status asks for search text.Enter a non-empty query.
maxItems is configuredThe input accepts 1 to 10000 listings. Pages contain up to 48 listings; the run stops at maxItems saved listings or when pages end.Use a value in that range.
A query is run with or without filtersThe Actor reads at most maxItems × 3 raw hits, or maxItems × 10 when designerFilter, categoryFilter or sizeFilter is set. Filters run after the fetch, so a filtered run can return fewer than maxItems listings.Use a more specific searchQuery or loosen the filters.
The query has no matching listings or all fetched hits fail active filtersThe dataset is empty and the run ends as Succeeded. OUTPUT holds only totalItems, searchQuery and scrapedAt; the status message says either that Grailed has no listings for the query or that hits were found but none passed your filters.Loosen or remove a filter; sizeFilter is an exact match.
A network error, HTTP 429, or HTTP 5xx occurs after the retriesThe request is attempted up to 3 times, waiting 1 s after the first failure and 3 s after the second. After the third failure, a 429 or 5xx raises a Grailed error and a network error raises Algolia POST failed. The run ends as Succeeded. With no saved row, OUTPUT stores the error and totalItems: 0; the status says nothing was fetched or charged.Run the same input again if the source remains unavailable.
The public search key receives HTTP 403The homepage is fetched for a fresh key and the same page is retried once.If it still fails, run again later.
A later request fails after earlier pages were fetchedRows are pushed only after the whole search fetch finishes. Earlier hits are retained and normalized, then pushed in batches of up to 100 with the remainder at the end. The run succeeds with a short dataset; OUTPUT stores the error and pushed totalItems. The status starts Partial result only when at least one row was saved. If the failure leaves no saved row, the status says nothing was fetched or charged, even when earlier pages were fetched and filtered out.Use partial data or run the same input again.
A timeout or manual abort occursRows already pushed remain in the dataset. The Actor has no handler for this case.Set maxItems to 1 and read the first record to check the result.
A source field is absent or cannot be parsedThe normalized field can be null; warnings or parse_confidence can show a quality issue.Inspect warnings and parse_confidence.
A listing is not sold or has no positive sale pricesold_price is null.Use sold with sold_price when analyzing sales.

FAQ

How much does it cost to scrape Grailed listings?

On Free, apify-actor-start costs $0.00005 per event and apify-default-dataset-item costs $0.004 per result. For example, 1,000 results = $4.00005 on Free.

Why did my search return no listings?

A narrow query can return no matches, and filters can remove matching results. Try broader words, partial designer or category values, or remove filters; sizeFilter must match exactly.

What happens if the Grailed search stops responding?

Network, 429, and 5xx responses are retried. A 403 refreshes the public key and retries. A later-page failure can leave partial results in the dataset.

The Actor uses Grailed's public search service and does not require a login. Whether collection or use is allowed depends on the source's terms and applicable law for your use case; review those requirements before using the data.

Usage statistics

This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.

A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.

To opt out, set disableUsageStats to true in the input. Nothing is sent then.

Full list of collected fields

⌂ 换网址