Cleaned sold prices for used clothing, shoes and bags: Poshmark US and Canada, plus Mercari.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Your SoldStack API key (free at https://soldstack.dev, 100 lookups a month)
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Whether an item is worth buying at a given cost to resell on Poshmark (or Mercari with source="mercari"): buy, maybe or pass with the reason, judged from its clean sold comps after the marketplace's fee. Call it for one item at a time; if it reports busy, wait the given number of seconds and call again. query: brand + item, e.g. "patagonia better sweater". cost: what you'd pay, e.g. the thrift-store tag price in USD. min_profit: smallest profit after fees worth the effort (default 10). size / condition: same filters as sold_comps. source: "poshmark" (US, default), "poshmark_ca" (Poshmark Canada, CAD) or "mercari" (beta). Mercari sales have no sold date, so days and days to sell don't apply and results can include older sales.
Whether an item is worth buying at a given cost to resell on Poshmark (or Mercari with source="mercari"): buy, maybe or pass with the reason, judged from its clean sold comps after the marketplace's fee. Call it for one item at a time; if it reports busy, wait the given number of seconds and call again. query: brand + item, e.g. "patagonia better sweater". cost: what you'd pay, e.g. the thrift-store tag price in USD. min_profit: smallest profit after fees worth the effort (default 10). size / condition: same filters as sold_comps. source: "poshmark" (US, default), "poshmark_ca" (Poshmark Canada, CAD) or "mercari" (beta). Mercari sales have no sold date, so days and days to sell don't apply and results can include older sales.
| Argument | Type | Description |
|---|---|---|
| cost* | number | |
| size | any | |
| query* | string | |
| source | string | |
| condition | any | |
| min_profit | number |
{
"type": "object",
"title": "buy_or_passArguments",
"required": [
"query",
"cost"
],
"properties": {
"cost": {
"type": "number",
"title": "Cost"
},
"size": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Size",
"default": null
},
"query": {
"type": "string",
"title": "Query"
},
"source": {
"type": "string",
"title": "Source",
"default": "poshmark"
},
"condition": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Condition",
"default": null
},
"min_profit": {
"type": "number",
"title": "Min Profit",
"default": 10
}
}
}What an item actually sold for on Poshmark (or Mercari with source="mercari"): median sold price, typical range (p10-p90), days to sell, what the seller keeps after fees, price by condition, a confidence rating, and the matching sales. Call it for one item at a time; if it reports busy, wait the given number of seconds and call again. query: brand + item, e.g. "coach tabby 26" or "lululemon align leggings", or a plain item type like "womens jeans". For kids' clothing put girls, boys, kids, toddler or youth in the query ("girls jeans"); otherwise kids' sizes are removed. size: only this size, e.g. "8", "M" or "10.5". Leave it out unless the user named a size: it can leave very few sales. condition: "new", "used", a plain word (nwt, like new, excellent, very good, good, fair, poor), or an exact grade: new_with_tags, not_new_with_tags, used_like_new, used_excellent, used_good, used_fair (comma-separated for several). days: only sales from the last N days (1-365). Poshmark lists sold results by relevance, not date, so without it the sales can be years old; days=365 (or 90) keeps prices recent. limit: how many individual sales to include in `sales` (default 10, 0-50). Each sale has the same fields as a /v1/sold item. exclude_seller: comma-separated seller usernames to leave out (case-insensitive). sort: order of the included sales: "recent" (newest first), "price_asc" or "price_desc". Stats are unaffected. department: comma-separated: Women, Men, Kids, Home, Pets, Electronics. "Kids" also keeps kids' sizes, and adds "kids" to a query with no kids' word ("snow pants" searches "kids snow pants"; query_note says so). category: comma-separated Poshmark categories, e.g. "Jeans". kids_age: only kids' sales in "baby" (0-24 months), "toddler" (2T-5T) or "big_kids" (4/5 and up) sizes. Kids' searches otherwise keep 12-24 month and toddler sizes, as Poshmark's Kids department does. include_removed: true also returns removed_items, the sales cleaning dropped, each with a removed_reason. deep: true reads up to ~190 sales (4 pages of up to 48, in Poshmark's relevance order) instead of one page (slower when not cached, about 10s; one lookup). source: "poshmark" (US, default), "poshmark_ca" (Poshmark Canada, CAD) or "mercari" (beta). Mercari sales have no sold date, so days and days to sell don't apply and results can include older sales.
Fair-market values for a whole donation list (clothing, shoes and bags), each item with the Poshmark sales behind it, a list total and a dated method paragraph the donor can keep with their records. One call values up to 100 items and costs one lookup per item. Call it once with the whole list, not once per item. items: a list of objects, one per item. Only description is required. description: what it is, as the donor would say it: "womens handbag", "mens suit", "kids snow pants", "Levi's 501 jeans". Put brand and model in brand or description. brand: optional, e.g. "Coach". With a brand the item is priced from that brand's own sales when enough are saved, else from its category. condition: optional. new_with_tags, used_like_new, used_excellent, used_good, used_fair, a plain word (like new, good, fair), or new or used. Default used, which is right for most donations. category, department, size: optional; read from the description when left out. A kids' size such as "4T" marks the item as kids'. kids_age: optional, for kids' items: "baby" (0-24 months), "toddler" (2T-5T) or "big_kids" (4/5 and up). quantity: optional, default 1. total is value times quantity. source: "poshmark" (US, USD, default) or "poshmark_ca" (Poshmark Canada, CAD). examples_per_item: how many of the sales behind each value to include (0-5, default 2). Each has a title, price, sold date and link. days: only sales from the last N days (1-3650); 365 is the last 12 months. Default: every sale. sold_after, sold_before: only sales sold on or after / on or before these dates (YYYY-MM-DD). Each item gets value (the median sold price), low and high (the 25th and 75th percentiles), p10 and p90 (the 10th and 90th), sales_used, oldest_sold and newest_sold (within the window), matched_on ("brand + item", "item description", "category + department" or "category, all departments"), broadened (true when the value comes from wider sales than the item as described: no brand match, a description reduced to its category, all departments, or the condition group instead of the exact grade), condition_matched (the grade or group the sales are in), by_condition (median and range per grade), a confidence rating and a reason that says why. basis is the older name of matched_on. An item with nothing to go on has value null and a reason; never guess a value for it. The list has total, items_valued, method and disclaimer. This is resale market data, not tax or legal advice; appraisal_may_be_needed is true when the total is over $5,000.
| Argument | Type | Description |
|---|---|---|
| days | any | |
| deep | boolean | |
| size | any | |
| sort | any | |
| limit | integer | |
| query* | string | |
| source | string | |
| category | any | |
| kids_age | any | |
| condition | any | |
| department | any | |
| exclude_seller | any | |
| include_removed | boolean |
{
"type": "object",
"title": "sold_compsArguments",
"required": [
"query"
],
"properties": {
"days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Days",
"default": null
},
"deep": {
"type": "boolean",
"title": "Deep",
"default": false
},
"size": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Size",
"default": null
},
"sort": {
"anyOf": [
{
"enum": [
"recent",
"price_asc",
"price_desc"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Sort",
"default": null
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 10
},
"query": {
"type": "string",
"title": "Query"
},
"source": {
"type": "string",
"title": "Source",
"default": "poshmark"
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Category",
"default": null
},
"kids_age": {
"anyOf": [
{
"enum": [
"baby",
"toddler",
"big_kids"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Kids Age",
"default": null
},
"condition": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Condition",
"default": null
},
"department": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Department",
"default": null
},
"exclude_seller": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Exclude Seller",
"default": null
},
"include_removed": {
"type": "boolean",
"title": "Include Removed",
"default": false
}
}
}| Argument | Type | Description |
|---|---|---|
| days | any | |
| items* | array | |
| source | string | |
| sold_after | any | |
| sold_before | any | |
| examples_per_item | integer |
{
"type": "object",
"$defs": {
"DonationItem": {
"type": "object",
"title": "DonationItem",
"required": [
"description"
],
"properties": {
"size": {
"anyOf": [
{
"type": "string",
"maxLength": 30
},
{
"type": "null"
}
],
"title": "Size",
"default": null,
"description": "Optional; a kids' size such as 4T marks it as kids'"
},
"brand": {
"anyOf": [
{
"type": "string",
"maxLength": 60
},
{
"type": "null"
}
],
"title": "Brand",
"default": null,
"description": "Optional, e.g. 'Coach'. With a brand the item is priced from that brand's own sales"
},
"category": {
"anyOf": [
{
"type": "string",
"maxLength": 60
},
{
"type": "null"
}
],
"title": "Category",
"default": null,
"description": "Optional, e.g. handbag, suit or pants; read from the description when missing"
},
"kids_age": {
"anyOf": [
{
"enum": [
"baby",
"toddler",
"big_kids"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Kids Age",
"default": null,
"description": "Optional, for kids' items: baby (0-24 months), toddler (2T-5T) or big_kids (4/5 and up) sizes only"
},
"quantity": {
"type": "integer",
"title": "Quantity",
"default": 1,
"maximum": 1000,
"minimum": 1,
"description": "How many of this item; total is value times quantity"
},
"condition": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "null"
}
],
"title": "Condition",
"default": null,
"description": "new_with_tags, used_like_new, used_excellent, used_good, used_fair, a plain word (like new, good, fair), or new or used. Default used"
},
"department": {
"anyOf": [
{
"type": "string",
"maxLength": 30
},
{
"type": "null"
}
],
"title": "Department",
"default": null,
"description": "Optional: women, men, girls, boys, baby, kids or unisex; read from the description when missing"
},
"description": {
"type": "string",
"title": "Description",
"maxLength": 200,
"minLength": 2,
"description": "What the item is, as the donor would say it, e.g. 'womens handbag'"
}
},
"description": "One item on a donation list, as POST /v1/value takes it (ValueItemIn in main.py)."
}
},
"title": "value_donation_listArguments",
"required": [
"items"
],
"properties": {
"days": {
"anyOf": [
{
"type": "integer",
"maximum": 3650,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Days",
"default": null
},
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/DonationItem"
},
"title": "Items",
"maxItems": 100,
"minItems": 1
},
"source": {
"enum": [
"poshmark",
"poshmark_ca"
],
"type": "string",
"title": "Source",
"default": "poshmark"
},
"sold_after": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Sold After",
"default": null
},
"sold_before": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Sold Before",
"default": null
},
"examples_per_item": {
"type": "integer",
"title": "Examples Per Item",
"default": 2,
"maximum": 5,
"minimum": 0
}
}
}