# Resale Price Checker - StockX, GOAT & Mercari Value (`malek_oweis/resale-price-checker`) Actor

Type an item name and get what it resells for right now: StockX 90-day average and last sale, GOAT lowest ask, Mercari US sold median, one estimated resale value and the premium over retail. Sneakers, consoles, cards, collectibles. No login.

- **URL**: https://apify.com/malek_oweis/resale-price-checker.md
- **Developed by:** [Malek Oweis](https://apify.com/malek_oweis) (community)
- **Categories:** E-commerce, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 item checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Resale Price Checker - StockX, GOAT & Mercari Value

**What is it worth right now?** Type an item name, like `jordan 4 black cat` or `nintendo switch oled`,
and get one row with its resale value across **StockX, GOAT and Mercari US**: StockX 90-day average
and last sale, GOAT lowest ask, Mercari sold-price median, one **estimated resale value** and the
**premium over retail**.

All three marketplaces are checked in parallel, so a batch of items finishes in seconds.
**No login, no cookies, no setup.** Works for sneakers, streetwear, consoles, trading cards,
collectibles and most things people resell.

### What you get per item

| Field | Meaning |
|---|---|
| `estimatedResaleValue` | Median of the prices found on the marketplaces below, in USD |
| `valueBasedOn` | Which marketplaces the estimate uses |
| `retailPrice`, `resalePremiumPct` | Original retail price and how far above (or below) retail it resells |
| `stockxAvgPrice90d`, `stockxLastSale`, `stockxSales90d` | StockX 90-day average sale, last sale and number of sales |
| `goatLowestAsk`, `goatInstantShipPrice` | Cheapest GOAT ask right now |
| `mercariSoldMedian`, `mercariSoldCount` | Median of recent matching Mercari US sold prices |
| `lowestPriceSource`, `highestPriceSource` | Where it is cheapest and most expensive |
| `sourcesDisagree` | `true` when the marketplaces disagree too much to give one honest number |
| `stockx`, `goat`, `mercari` | Match details: matched product title, link, match score, style code, stats |

#### Example row (real output)

```json
{
  "item": "jordan 1 lost and found",
  "estimatedResaleValue": 219,
  "valueBasedOn": [
    "stockx",
    "goat"
  ],
  "sourcesDisagree": false,
  "retailPrice": 180,
  "resalePremiumPct": 21.7,
  "stockxAvgPrice90d": 252,
  "stockxLastSale": 300,
  "stockxSales90d": 1220,
  "goatLowestAsk": 186,
  "mercariSoldMedian": null,
  "stockx": {
    "matched": true,
    "title": "Jordan 1 Retro High OG Chicago Lost and Found",
    "url": "https://stockx.com/air-jordan-1-retro-high-og-chicago-reimagined-lost-and-found"
  },
  "goat": {
    "matched": true,
    "title": "Air Jordan 1 Retro High OG 'Chicago Lost & Found'",
    "priceConflictWithStockx": false
  }
}
```

### How the estimate stays honest

- **Product matching:** each marketplace's search results are compared word by word with your item
  name; the matched product title and link are always in the output so you can check them.
- **Mercari noise filter:** laces, boxes, kids sizes and fakes match the words too. When StockX or
  GOAT give a price, Mercari sales far outside it (below 0.5x or above 2x) are dropped and counted in
  `mercari.outliersDropped`.
- **Conflicts are flagged, not hidden:** if GOAT's match looks like a different product, it gets
  `priceConflictWithStockx: true` and is left out. If the remaining marketplaces still disagree, the
  row returns `sourcesDisagree: true` and no single estimate, with every source's price still shown.
- StockX and GOAT prices are for **new** items; Mercari sold prices include **used** ones.

### Input

```json
{
  "items": ["jordan 4 black cat", "nike dunk low panda", "nintendo switch oled"],
  "sources": ["stockx", "goat", "mercari"],
  "mercariSoldComps": 30,
  "mercariConditions": []
}
```

- `items`: item names as you would search them. One output row per item.
- `sources`: any of `stockx`, `goat`, `mercari` (default: all three).
- `mercariSoldComps`: recent Mercari sold listings to read per item (5-50).
- `mercariConditions`: only count Mercari sales in these conditions (`new`, `like_new`, `good`, `fair`, `poor`).
- `candidatesPerSource`: StockX/GOAT search results compared with your item name (default 10).

### Use cases

- **Reselling:** is this pair worth buying at this price? What will it sell for?
- **Pricing your own listing:** see what the same item sells for on three marketplaces at once
- **Arbitrage:** spot items that are cheap on one marketplace and expensive on another
- **Collection value:** price a list of sneakers, cards or consoles in one run
- **AI assistants:** give a chatbot a real answer to "what's this worth?"

### FAQ

**Which items work?**
Sneakers and streetwear get all three marketplaces. Consoles, electronics, cards and collectibles
usually get StockX and Mercari. Anything else is priced from Mercari US sold listings.

**Why is `estimatedResaleValue` empty sometimes?**
Either nothing matched, or the marketplaces disagreed too much (`sourcesDisagree: true`). The
per-marketplace prices are still in the row. A more specific item name usually fixes it.

**Do I need accounts on StockX, GOAT or Mercari?**
No. It uses the same public pages and calls their websites make for any visitor.

**Is this allowed?**
It reads only public search results and never logs in or touches account, order or buyer data.
Respect each marketplace's terms and your local laws.

### Use it from an AI agent (Claude, ChatGPT, Cursor, any MCP client)

This Actor works as a tool for AI agents through Apify's MCP server. Add it to your AI app with this MCP URL:

```
https://mcp.apify.com/?tools=malek_oweis/resale-price-checker
```

Then just ask in plain language. Example prompt:

> What is a Jordan 4 Black Cat worth right now, and is it cheaper on StockX or GOAT?

#### Questions this Actor answers

- What is this sneaker worth right now?
- How much does a used Nintendo Switch OLED resell for?
- Is it cheaper to buy this on StockX, GOAT or Mercari?
- How far above retail does this shoe resell?
- What is my collection of sneakers or cards worth?

### Need full listings instead?

This Actor gives one answer per item. For every listing, every size or full sales data, use the
single-marketplace Actors by the same developer:

- [StockX Scraper](https://apify.com/malek_oweis/stockx-search-price-scraper): sales data, resale prices and volume
- [GOAT Sneaker Price Scraper](https://apify.com/malek_oweis/goat-sneaker-price-scraper): prices for every size
- [Mercari Sold Listings Scraper](https://apify.com/malek_oweis/mercari-sold-listings-scraper): every sold listing (price comps)
- [Chrono24 Watch Listing Scraper](https://apify.com/malek_oweis/chrono24-watch-listing-scraper): luxury watch prices
- [Shopify Store Scraper](https://apify.com/malek_oweis/shopify-store-product-price-scraper): Shopify catalogs and prices
- [Etsy Shop Scraper](https://apify.com/malek_oweis/etsy-shop-seo-auditor): Etsy listings, prices and reviews

# Actor input Schema

## `items` (type: `array`):

Item names as you would search them, e.g. 'jordan 4 black cat', 'nike dunk low panda', 'nintendo switch oled', 'pokemon booster box'. One output row per item.

## `sources` (type: `array`):

Which marketplaces to check. GOAT and StockX cover sneakers, streetwear and collectibles; Mercari covers almost anything.

## `mercariSoldComps` (type: `integer`):

How many recent Mercari sold listings to read per item for the sold-price median.

## `mercariConditions` (type: `array`):

Only count Mercari sales in these conditions. Leave empty for all conditions.

## `candidatesPerSource` (type: `integer`):

How many StockX and GOAT search results to compare with your item name to find the best match.

## `proxyConfiguration` (type: `object`):

StockX, GOAT and Mercari block plain requests, so the Apify Unblocker is used by default.

## Actor input object example

```json
{
  "items": [
    "jordan 4 black cat",
    "nintendo switch oled"
  ],
  "sources": [
    "stockx",
    "goat",
    "mercari"
  ],
  "mercariSoldComps": 30,
  "candidatesPerSource": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# Actor output Schema

## `resaleValues` (type: `string`):

One row per item: estimated resale value, retail price, premium, StockX 90-day average and last sale, GOAT lowest ask, Mercari sold median, and match details per marketplace.

## `overview` (type: `string`):

No description

# 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 = {
    "items": [
        "jordan 4 black cat",
        "nintendo switch oled"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("malek_oweis/resale-price-checker").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 = { "items": [
        "jordan 4 black cat",
        "nintendo switch oled",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("malek_oweis/resale-price-checker").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 '{
  "items": [
    "jordan 4 black cat",
    "nintendo switch oled"
  ]
}' |
apify call malek_oweis/resale-price-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,malek_oweis/resale-price-checker"
        }
    }
}
```

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/9He1UzROFQxvBGzmo/builds/rd7ajSpgu1jbyvftO/openapi.json
