Skip to content
Back to skills

luxury-resale-research

ASecurity

Research luxury-fashion and watch resale listings, sold evidence, condition, and seller signals across specialist marketplaces. Use for sourcing or evidence comparison, not buying or appraisal.

  • 0 votes
  • 0 copies
  • 0 views
  • Added October 12, 2026
ai-agentsgoshellbashrailsapi

Works with

  • cursor
  • api

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned October 12, 2026

npx -y skills add Crawlora-org/crawlora-skills --skill luxury-resale-research --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of luxury-resale-research?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for luxury-resale-research
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/crawlora-org-luxury-resale-research/badge)](https://www.skillsdirectory.com/skills/crawlora-org-luxury-resale-research)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: luxury-resale-research
description: Research luxury-fashion and watch resale listings, sold evidence, condition, and seller signals across specialist marketplaces. Use for sourcing or evidence comparison, not buying or appraisal.
allowed-tools: Bash(scripts/crawlora.sh:*)
---

# Luxury resale research

Research public, read-only marketplace data for luxury fashion, handbags,
watches, sneakers, and streetwear. Use this skill when the user needs current
asks, sold comparables where the source exposes them, listing-level condition,
or seller/dealer context across luxury resale sources. It complements the broad
`resale-secondhand-research` skill; use this one when specialist luxury sources
or a disciplined evidence comparison matters.

## Tool scope and data flow

The optional shell helper is the only command this skill asks to run. It makes
GET requests only to the documented, allowlisted Crawlora routes. When invoked,
it reads `CRAWLORA_API_KEY` and sends it as an `x-api-key` header over HTTPS to
`api.crawlora.net`; it does not send the key to marketplace sites. It briefly
writes a mode-600 curl config under `TMPDIR` and removes it when the command
exits. It does not inspect other environment variables, enumerate files, install
software, or run with elevated privileges. Run it only when you want to make a
Crawlora API request; successful requests can consume credits.

Do not place orders, make offers, authenticate an item, estimate an appraisal,
claim a purchase total, or imply that a platform's condition label proves
authenticity. Do not infer fees, duties, shipping, or currency conversion when
the selected public response does not state them.

## Evidence workflow

1. Define the comparability key first: brand, model/reference or style ID,
   material/color, size, condition, and region/currency where present. Search
   active and sold datasets separately; an asking price is not sale evidence.
2. Discover opaque filters before searching. Use each platform's directory,
   categories, conditions, brands, models, or facets endpoint rather than
   guessing ids, slugs, or values.
3. Pull a compact active set, then fetch detail only for credible matches.
   Keep source URL/path and the retrieval time for every record. Follow only
   the source's cursor/page limit; narrow the query instead of deep paging.
4. Report separate fields for: **active asks**; **sold evidence** (sale price
   and sale date only where the endpoint supplies both); **condition and
   authentication signals** (source-stated, never independently verified);
   **fees/shipping/duties** (stated amount or `not provided`); **currency**;
   and **source timestamp** (listing/sale date if supplied, plus retrieval
   time). Do not pool currencies or condition grades without labeling the
   normalization assumption.
5. State evidence gaps plainly. Current inventory, recommendation rails,
   seller reputation, and marketplace-wide counts are useful context, not a
   transaction record or authenticity determination.

## Source map

Use the exact routes and parameter names below. All are `GET` public-data
reads. Braces identify a path parameter; all others are query parameters.

### Core luxury sources

- **The RealReal:** discovery: `therealreal_autocomplete` (`/therealreal/autocomplete`,
  `term`), `therealreal_categories`, `therealreal_conditions`,
  `therealreal_collections`, and `therealreal_designers` (`category`). Search:
  `therealreal_search` (`/therealreal/search`, required `query`; optional
  `category_id`, `designer_id`, `condition_id`, `price_from`, `price_to`,
  `on_sale`, `available`, `after`). Browse: `therealreal_category` (`path`,
  `on_sale`, `available`, `after`), `therealreal_designer` (`slug`, `on_sale`,
  `available`, `after`), and `therealreal_collection` (`slug`, `after`). Detail:
  `therealreal_listing` (`url`) and `therealreal_similar` (`product_id`).
  Reuse `next_after` exactly as returned.
- **Fashionphile:** discovery/catalog: `fashionphile_collections` and
  `fashionphile_products` (`page`, `limit`; default 50, maximum 250), plus
  `fashionphile_sitemaps` and `fashionphile_sitemap_urls` (`type`, `limit`).
  Search: `fashionphile_search` (`/fashionphile/search`; `q`, `condition`,
  `availability`, `vendor`, `sort`, `page`, `limit`; default 20, maximum 50).
  Use `availability=sold` specifically for its sold archive; `available` is
  the default and `all` is also accepted. Details: `fashionphile_product`
  (`handle`) and `fashionphile_product_recommendations` (`handle`, `intent`,
  `limit`; default 10, maximum 20; `intent` is `related` or `complementary`).
  Collection and static-page reads use `fashionphile_collection_products`
  (`handle`, `page`, `limit`), `fashionphile_pages` (`page`, `limit`), and
  `fashionphile_page` (`handle`); suggestions use
  `fashionphile_search_suggest` (`q`, `types`, `limit`; maximum 20).
- **Rebag:** use the same public storefront pattern with only Rebag routes:
  `rebag_search` (`/rebag/search`; `q`, `sort`, `page`, `limit`),
  `rebag_product` (`handle`), `rebag_product_recommendations` (`handle`,
  `intent`, `limit`), `rebag_products` and `rebag_collections` (`page`,
  `limit`; default 50, maximum 250), `rebag_collection_products` (`handle`,
  `page`, `limit`), `rebag_search_suggest` (`q`, `types`, `limit`; maximum
  20), `rebag_sitemaps`, `rebag_sitemap_urls` (`type`, `limit`), `rebag_pages`
  (`page`, `limit`), `rebag_page` (`handle`), and `rebag_store`.
- **Vestiaire Collective:** discovery: `vestiaire_brands`,
  `vestiaire_categories`, and `vestiaire_conditions`. Search:
  `vestiaire_search` (`/vestiaire/search`; `q`, `brand_id`, `category_id`,
  `condition_id`, `sort`, `page`, `per_page`). `per_page` is at most 60 and
  `page * per_page` must not exceed 1000; use the returned directory IDs.
  Detail/context: `vestiaire_product` (`path`), `vestiaire_search_sellers`
  (`q`), `vestiaire_seller` (`id`), and `vestiaire_suggest` (`q`).
- **Grailed:** discover filters with `grailed_categories` and designers with
  `grailed_designers` (`q`, `page`, `limit`); curated browse is
  `grailed_collections` then `grailed_collection` (`id`). Use
  `grailed_search` for active asks and `grailed_sold_listings` for sold
  evidence. Both accept `q`, `designer`, `department`, `category`, `size`,
  `color`, `condition`, `min_price`, `max_price`, `sort`, `page`, and `limit`;
  price filters mean final sold price on the sold route. Detail/context:
  `grailed_listing` (`id`), `grailed_similar_listings` (`id`, `limit`),
  `grailed_seller` (`username`, `page`, `limit`), `grailed_seller_reviews`
  (`username`, `page`), and `grailed_suggest` (`q`).
- **Chrono24:** discover `chrono24_brands`, then `chrono24_models` (`brand`),
  and `chrono24_facets` (`group`) before advanced filters. Search with
  `chrono24_search` (`/chrono24/search`; at least `query` or `brand`; optional
  `model`, `sort`, `page`, `page_size`, `condition`, `used_or_new`,
  `case_material`, `dial_color`, `bracelet_material`, `movement_type`,
  `gender`, `watch_type`, `stock_info`). The UI page sizes are 30, 60, or 120.
  Use `chrono24_listing` (`path`) for the reference number, specifications,
  price/currency, condition, seller type, and location; dealer context is
  `chrono24_dealer` (`slug`) and `chrono24_dealer_reviews` (`slug`, `page`,
  `page_size` 1–50, `min_stars` 0–5, `sort`). Suggestions:
  `chrono24_autocomplete` (`query`).

### Adjacent resale benchmarks

Use these only when they improve the requested comparison; do not substitute a
streetwear marketplace for a luxury-listing comparable without saying so.

- **Depop:** `depop_search` (`query` plus `brand_ids`, `category`,
  `subcategory`, `condition`, `colours`, `sizes`, `gender`, `is_kids`,
  `on_sale`, `price_min`, `price_max`, `sort`, `after`); discover with
  `depop_brands`, `depop_categories`, `depop_sizes`, and
  `depop_search_facets` (`query`). Detail/shop: `/depop/item/{slug}`,
  `/depop/item/{slug}/similar` (`after`, `limit`, up to 150),
  `depop_search_sellers` (`query`), and `/depop/shop/{username}` with the
  compatible filters. Suggestions: `depop_suggest` (`query`).
- **Poshmark:** use `poshmark_brands` and `poshmark_categories` for discovery;
  active browse/search is `poshmark_search` (`query`, `department`, `max_id`),
  `/poshmark/brand/{name}` (`max_id`), or `/poshmark/category/{path}`
  (`max_id`). Details are `/poshmark/listing/{id}`; seller context is
  `/poshmark/closet/{username}` (`max_id`). Reuse `next_max_id` exactly.
- **GOAT and StockX:** use product detail for market context, not a confirmed
  sale comp unless the response explicitly provides a last-sale field.
  `goat_search` supports `query`, facets, `page`, and `limit`; discover with
  `goat_search_facets`, `goat_countries`, and `goat_curated`; detail is
  `/goat/product/{slug}` (`country_code`). `stockx_search` supports `category`,
  `query`, facet filters, `page`, and `limit`; discover `stockx_categories` and
  `stockx_brands`; detail is `/stockx/product/{slug}`. `stockx_releases`
  (`from`, `page`, `limit`) is a release calendar, not resale history.

## Reporting shape

For a comparison, return a compact table or JSON list with one row per source
listing and include `source`, `listing_url_or_path`, `status` (`active`,
`sold`, or `market_context`), `price`, `currency`, `condition_text`,
`authentication_signal`, `seller_or_dealer_signal`, `sale_date`,
`fees_shipping_duties`, `source_timestamp`, and `retrieved_at`. Leave an
unsupported field null or label it `not provided`; never fill it with an
estimate. Keep active asks and sold evidence in separate summaries before any
user-requested comparison.

Files in this skill

  • SKILL.md9.5 KB
  • agents/openai.yaml217 B
  • scripts/crawlora.sh10 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.