# Grailed Scraper — Designer & Streetwear Resale (`hipersoft/grailed-scraper`) Actor

Scrape Grailed designer and streetwear resale listings in bulk: title, brand, size, price, condition, seller and sold prices. Filter by designer, category, size and price.

- **URL**: https://apify.com/hipersoft/grailed-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Categories:** E-commerce, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.0015 / listing scraped

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Grailed Scraper — Designer & Streetwear Resale (Bulk)

Scrape **Grailed** listings into clean JSON, CSV or Excel. Search any keyword — designer, brand, garment or silhouette — and pull **title, designer/brand, size, price, condition, seller and photo** for every result, plus a dedicated **sold-listings mode** that returns the final **sold price** for real resale comps.

Built for **resale price research, market and trend analysis, sourcing, reselling and archive tracking** across the global designer and streetwear resale market.

### Features

- **Search by keyword** — enter any query (e.g. `carhartt jacket`, `jordan 1`, `raf simons`) and collect matching listings in bulk.
- **Sold-price mode** — flip on `soldOnly` to get **sold** listings with their final sale price — the data you need for pricing comps and market valuation.
- **Rich filtering** — narrow by **designer/brand**, **category**, **size** and a **price range**. Filters combine so you can zero in on exactly the segment you want.
- **Bulk at scale** — set `maxItems` as high as you like; for large result sets the scraper automatically slices by price to gather well beyond a single query's limit.
- **Clean, structured output** — every record has a stable `id`, the listing URL, seller info and a photo link. One row per listing.

### Input

- **`query`** — the search term (e.g. `nike`, `margiela boots`). Leave empty to browse by filters alone.
- **`designers`** — optional brand filter, one per line, exactly as spelled on Grailed (e.g. `Nike`, `Supreme`, `Carhartt`).
- **`categories`** — optional top-level category filter (e.g. `tops`, `bottoms`, `footwear`, `outerwear`, `accessories`, `tailoring`).
- **`sizes`** — optional size filter (e.g. `m`, `l`, `32`, `10.5`).
- **`soldOnly`** — return sold listings with the final sold price instead of active listings.
- **`priceMin`** / **`priceMax`** — restrict to a price range, in USD.
- **`maxItems`** — cap the number of listings returned.

#### Example input

```json
{ "query": "carhartt", "categories": ["outerwear"], "priceMin": 50, "priceMax": 300, "maxItems": 500 }
```

Sold comps for a brand:

```json
{ "query": "jordan 1", "soldOnly": true, "maxItems": 200 }
```

### Output

Every listing returns one row:

| Field | Type | Description |
|---|---|---|
| `id` | string | Unique Grailed listing ID. |
| `title` | string | Listing title. |
| `designer` | string | Designer / brand name(s). |
| `category` | string | Item category path (e.g. `tops.polos`). |
| `size` | string | Item size as listed. |
| `price` | number | Current asking price (USD). |
| `originalPrice` | number | Original price before drops, when available. |
| `isSold` | boolean | Whether the listing has sold. |
| `soldPrice` | number | Final sold price (in sold mode). |
| `condition` | string | Item condition (e.g. New, Gently Used, Used). |
| `sellerUsername` | string | Seller's public username. |
| `sellerRating` | number | Seller's average rating. |
| `photoUrl` | string (URL) | Link to the listing's main photo. |
| `url` | string (URL) | Direct link to the listing page. |
| `createdAt` | string (ISO date) | When the listing was posted. |
| `collectedAt` | string (ISO date) | When the record was collected. |

#### Example output

```json
{
  "id": "104977574",
  "title": "Deadstock Vintage Y2K Nike University of Michigan Shirt",
  "designer": "Nike",
  "category": "tops.polos",
  "size": "m",
  "price": 95,
  "originalPrice": null,
  "isSold": false,
  "soldPrice": null,
  "condition": "New / Never Worn",
  "sellerUsername": "voguesquared1",
  "sellerRating": 4.85,
  "photoUrl": "https://media-assets.grailed.com/prd/listing/temp/0f5eaf348afa4fdead44c73330a6707e",
  "url": "https://www.grailed.com/listings/104977574",
  "createdAt": "2026-09-04T18:41:30.714Z",
  "collectedAt": "2026-09-04T18:45:00.000Z"
}
```

### FAQ

**How do I get sold prices?**
Turn on `soldOnly`. Each row then includes the final `soldPrice` — ideal for building resale comps and tracking market values over time.

**How many listings can I collect?**
Set `maxItems` to whatever you need. For large searches the scraper automatically works through price segments to gather more than a single query would otherwise return.

**What export formats are supported?**
Export as JSON, CSV, Excel or XML, or pull results via the Apify API.

**Can I use this with n8n?**
Yes. Run the Grailed Scraper from [n8n](https://n8n.io) using the Apify community node, or trigger a run and read the dataset via the Apify API and [webhooks](https://docs.apify.com/platform/integrations/webhooks). It also connects to [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the JavaScript/Python clients and MCP.

### Related Actors

- [Vinted Scraper](https://apify.com/hipersoft/vinted-scraper) — scrape second-hand fashion listings from Vinted.
- [Carousell Scraper](https://apify.com/hipersoft/carousell-scraper) — marketplace listings for resale price research.

### Notes

Original clean-room implementation. Use responsibly and in line with Grailed's Terms of Service. Listing data belongs to Grailed and the listing sellers.

# Actor input Schema

## `query` (type: `string`):

Keyword to search Grailed for, e.g. "nike", "carhartt jacket" or "jordan 1". Leave empty to browse everything matching your filters.

## `designers` (type: `array`):

Optional brand filter, one per line, exactly as spelled on Grailed (e.g. "Nike", "Carhartt", "Supreme"). Multiple values are combined as OR.

## `categories` (type: `array`):

Optional top-level category filter, one per line (e.g. "tops", "bottoms", "footwear", "outerwear", "accessories", "tailoring"). Multiple values are combined as OR.

## `sizes` (type: `array`):

Optional size filter, one per line, as used on Grailed (e.g. "m", "l", "32", "10.5"). Multiple values are combined as OR.

## `soldOnly` (type: `boolean`):

When enabled, returns SOLD listings with their final sold price instead of active listings. Useful for resale price research and comps.

## `priceMin` (type: `integer`):

Only include listings priced at or above this amount (in USD).

## `priceMax` (type: `integer`):

Only include listings priced below this amount (in USD).

## `maxItems` (type: `integer`):

Maximum number of listings to return. For large totals the scraper automatically slices by price to gather more than the per-query limit.

## Actor input object example

```json
{
  "query": "nike",
  "soldOnly": false,
  "maxItems": 200
}
```

# Actor output Schema

## `results` (type: `string`):

The scraped Grailed listings as dataset items.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "query": "nike"
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/grailed-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "query": "nike" }

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/grailed-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "query": "nike"
}' |
apify call hipersoft/grailed-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/grailed-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/3jOInx3YWtA033hok/builds/rqvAMRxVIcb2hThG9/openapi.json
