# Grailed Product Search Scraper (`soft_alexist/grailed-product-search-scraper`) Actor

Scrape Grailed.com search results to collect designer fashion data. Capture 40+ product attributes including price, condition, size, designer, and sale history — perfect for market analysis, price tracking, and streetwear intelligence.

- **URL**: https://apify.com/soft\_alexist/grailed-product-search-scraper.md
- **Developed by:** [Soft Alexist](https://apify.com/soft_alexist) (community)
- **Categories:** Automation, Developer tools, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 Product Search Scraper: Extract Fashion & Streetwear Listings

***

### What Is Grailed.com?

Grailed.com is a premier online marketplace for men's fashion, streetwear, and designer clothing. It hosts hundreds of thousands of new and vintage items sold by independent sellers and boutiques worldwide. Grailed's search function returns curated listings, but extracting and analyzing this product data manually is impractical at scale — the **Grailed Product Search Scraper** automates this collection.

***

### Overview

The **Grailed Product Search Scraper** harvests product listings directly from Grailed search results pages, converting them into structured datasets. It is ideal for:

- **Price intelligence analysts** tracking designer and streetwear market trends
- **Resellers** monitoring category prices and competitor inventory
- **Fashion researchers** studying vintage and contemporary menswear availability
- **E-commerce aggregators** feeding Grailed inventory into comparison platforms
- **Business intelligence teams** benchmarking product assortment and pricing

The scraper handles pagination automatically, respects rate limits, and optionally continues past URL failures — ensuring robust, large-scale data collection.

***

### Input Format

The scraper accepts configuration in JSON:

```json
{
  "urls": [
    "https://www.grailed.com/shop?query=shirt"
  ],
  "max_items_per_url": 200,
  "ignore_url_failures": true
}
```

| Parameter | Type | Description |
|---|---|---|
| `urls` | Array | Grailed search result page URLs. Example: `https://www.grailed.com/shop?query=shirt` or `https://www.grailed.com/shop?department=shoes&brand=Nike` |
| `max_items_per_url` | Integer | Maximum products scraped per URL (default: 100, max: 200+). Higher values = longer runtime but more complete results |
| `ignore_url_failures` | Boolean | If `true`, the scraper skips broken URLs and continues. If `false`, it halts on any error. Recommended: `true` for bulk runs |

> **Tip:** Use specific search queries (e.g., `?query=vintage+denim`) or filter URLs (brand, department, price range) to target product segments.

***

### Output Format

**Sample output**

```json
{
  "badges": [],
  "bumped_at": "2026-07-30T12:58:30.460Z",
  "buynow": true,
  "category_path_size": "tops.short_sleeve_shirts.l",
  "category_path": "tops.short_sleeve_shirts",
  "category_size": "tops.l",
  "category": "tops",
  "color": "black",
  "condition": "is_used",
  "cover_photo": {
    "id": 757195358,
    "listing_id": 102034473,
    "created_at": "2026-07-30T12:58:30.403Z",
    "updated_at": "2026-07-30T12:58:30.480Z",
    "width": 0,
    "height": 0,
    "url": "https://media-assets.grailed.com/prd/listing/temp/e72e82c668cd4336bfb0ee4f14f6132e",
    "position": 0,
    "rotate": 0,
    "image_url": "https://media-assets.grailed.com/prd/listing/temp/e72e82c668cd4336bfb0ee4f14f6132e"
  },
  "created_at_i": 1785416320,
  "created_at": "2026-07-30T12:58:40.751Z",
  "deleted": false,
  "department": "menswear",
  "designer_names": "Band Tees",
  "designers": [
    {
      "id": 17603,
      "name": "Band Tees"
    }
  ],
  "dropped": false,
  "followerno": 0,
  "heat_f": 4612.614201388889,
  "id": 102034473,
  "location": "United States",
  "makeoffer": true,
  "marketplace": "grailed",
  "price_drops": [],
  "price_i": 50,
  "price_updated_at_i": 1785416320,
  "price_updated_at": "2026-07-30T12:58:40.751Z",
  "price": 50,
  "repost_id": null,
  "size": "l",
  "sold_at": null,
  "sold": false,
  "strata": "basic",
  "styles": [],
  "title": "Vintage Black Carcass Reek of Putrefaction T shirt",
  "traits": [
    {
      "name": "color",
      "value": "black"
    }
  ],
  "user": {
    "id": 11540332,
    "username": "DegreedsCentigrade_",
    "total_bought_and_sold": 5,
    "avatar_url": "https://media-assets.grailed.com/prd/avatar/11540332/6abd6a21db714f6d80bd7141db0c89ab",
    "seller_score": {
      "rating_average": 5.0,
      "rating_count": 1
    },
    "trusted_seller": false
  },
  "sold_price": 0,
  "sold_price_includes_shipping": null,
  "sold_shipping_price": null,
  "sold_at_i": 0,
  "shipping": {
    "us": {
      "amount": 6.99,
      "enabled": true
    },
    "ca": {
      "amount": 10,
      "enabled": true
    },
    "uk": {
      "amount": 10,
      "enabled": true
    },
    "eu": {
      "amount": 10,
      "enabled": true
    },
    "asia": {
      "amount": 10,
      "enabled": true
    },
    "au": {
      "amount": 10,
      "enabled": true
    },
    "other": {
      "amount": 10,
      "enabled": true
    }
  },
  "heat_recency": 9225.228402777779,
  "photo_count": 4,
  "measurement_count": 0,
  "object_id": null,
  "from_url": "https://www.grailed.com/shop?query=shirt"
}
```

Each product record contains 40+ attributes spanning pricing, condition, metadata, and marketplace activity:

#### Product Identity

| Field | Meaning |
|---|---|
| `ID` | Unique Grailed product identifier |
| `Object ID` | Internal database ID |
| `Title` | Product name as listed (e.g., "Vintage Levi's 501 Denim") |
| `Marketplace` | Sale channel (e.g., "Grailed") |
| `Repost ID` | Tracking ID if the listing was reposted |

#### Pricing & Offers

| Field | Meaning |
|---|---|
| `Price` | Current asking price (USD or local currency) |
| `Price I` | Indexed/normalized price for comparison |
| `Price Updated At` | Timestamp of last price change |
| `Price Updated At I` | Indexed price update timestamp |
| `Price Drops` | Number of times price was reduced |
| `Sold Price` | Final sale price if item sold |
| `Sold Price Includes Shipping` | Boolean flag for shipping inclusion in sale price |
| `Sold Shipping Price` | Shipping cost on the sold transaction |
| `Make Offer` | Whether "Make an Offer" negotiation is enabled |
| `Buy Now` | Whether instant purchase option is available |

#### Product Condition & Attributes

| Field | Meaning |
|---|---|
| `Condition` | Item state (New, Excellent, Good, Fair, Poor) |
| `Size` | Garment size (S, M, L, XL, etc., or numeric) |
| `Color` | Product color(s) |
| `Styles` | Fashion categories (e.g., "Casual", "Streetwear", "Vintage") |
| `Traits` | Additional attributes or tags |
| `Department` | Product category (Tops, Outerwear, Footwear, etc.) |
| `Category` | Refined subcategory |
| `Category Path` | Full category hierarchy (e.g., \["Menswear", "Tops", "Shirts"]) |
| `Category Path Size` | Number of category levels |
| `Category Size` | Inventory count within the category |

#### Designer & Brand

| Field | Meaning |
|---|---|
| `Designers` | Designer or brand name(s) |
| `Designer Names` | Formatted designer names (for display) |

#### Media & Visuals

| Field | Meaning |
|---|---|
| `Cover Photo` | URL of the primary product image |
| `Photo Count` | Number of images in the listing |
| `Measurement Count` | Number of garment measurements provided |

#### Seller & Engagement

| Field | Meaning |
|---|---|
| `User` | Seller username or account info |
| `Location` | Seller or item location |
| `Badges` | Seller badges (e.g., "Trusted", "Verified") |
| `Follower No` | Seller's follower count |

#### Activity & Status

| Field | Meaning |
|---|---|
| `Created At` | Date the listing was posted |
| `Created At I` | Indexed creation timestamp |
| `Bumped At` | Last time the listing was bumped/refreshed |
| `Sold` | Boolean — whether the item sold |
| `Sold At` | Date of sale |
| `Sold At I` | Indexed sale date |
| `Heat F` | Engagement metric (popularity/interest) |
| `Heat Recency` | How recently the item received engagement |
| `Dropped` | Whether the item was delisted |
| `Deleted` | Whether the item was removed |
| `Shipping` | Shipping policy details |

#### Advanced Metrics

| Field | Meaning |
|---|---|
| `Strata` | Price tier classification (budget, mid, luxury) |

**Example output snippet:**

```json
{
  "ID": "12345678",
  "Title": "Vintage Levi's 501 1990s Denim Jacket",
  "Designers": "Levi Strauss",
  "Price": 85,
  "Condition": "Excellent",
  "Size": "M",
  "Color": "Blue",
  "Department": "Outerwear",
  "Created At": "2024-01-15",
  "Sold": false,
  "Heat F": 8.2,
  "Photo Count": 6
}
```

***

### How to Use

1. **Find search URLs** — Navigate to Grailed.com, build a search with filters (brand, category, price range), and copy the URL from your browser's address bar.
2. **Prepare input** — Paste URLs into the `urls` array. Set `max_items_per_url` based on desired data volume (start with 50–100 for testing).
3. **Enable fault tolerance** — Set `ignore_url_failures: true` to prevent bulk runs from halting on temporary network issues.
4. **Execute** — Start the actor and monitor progress. The scraper processes each URL and returns structured JSON.
5. **Analyze results** — Export as JSON or CSV, then import into spreadsheets, databases, or analytics tools.

**Best practices:**

- Use narrow queries (e.g., `?query=vintage+denim&department=outerwear`) to reduce runtime and focus on relevant products.
- Increase `max_items_per_url` gradually; Grailed may throttle very high values.
- Store outputs timestamped — create price history by running scrapes on a schedule.

**Handling common issues:**

- If a URL yields 0 items, verify the search returns results manually in your browser.
- Rate limiting: Space out large runs or use proxy services to avoid temporary blocks.

***

### Use Cases & Business Value

- **Market price tracking** — Monitor designer and vintage item prices across Grailed over time
- **Inventory benchmarking** — Identify trending styles and undersupplied product segments
- **Competitive reselling** — Track competitor listings and adjust pricing strategy
- **Fashion research** — Quantify vintage and streetwear demand by brand, size, and color
- **Aggregator platforms** — Syndicate Grailed inventory into multi-source fashion marketplaces

By automating data collection, teams reduce research time from hours to minutes and unlock data-driven insights into menswear markets.

***

### Conclusion

The **Grailed Product Search Scraper** is a powerful tool for anyone extracting market intelligence from Grailed.com. With access to 40+ product attributes and configurable scraping limits, it transforms unstructured search results into rich datasets ready for analysis, pricing decisions, and trend forecasting. Start scraping today and gain a competitive edge in fashion resale and market research.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the product list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.grailed.com/shop?query=shirt"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 100
}
```

# 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 = {
    "urls": [
        "https://www.grailed.com/shop?query=shirt"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("soft_alexist/grailed-product-search-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 = {
    "urls": ["https://www.grailed.com/shop?query=shirt"],
    "ignore_url_failures": True,
    "max_items_per_url": 100,
}

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

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

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

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.grailed.com/shop?query=shirt"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 100
}' |
apify call soft_alexist/grailed-product-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=soft_alexist/grailed-product-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/5r3KjaEDl9K9lYHoi/builds/Tvp1LVgqwl7cHT5oC/openapi.json
