# Poshmark Sold Listings Scraper - Resale Prices & Comps (`webdata_labs/poshmark-sold-listings-scraper`) Actor

\[💵 $2.00 / 1K] Scrape Poshmark sold comps and pricing stats so resellers can estimate real resale prices, active-vs-sold spread, median sold price, and max buy price. Export CSV/JSON.

- **URL**: https://apify.com/webdata\_labs/poshmark-sold-listings-scraper.md
- **Developed by:** [WebData Labs](https://apify.com/webdata_labs) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 3 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 comp rows

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

## Poshmark Sold Listings Scraper - Resale Prices & Comps

**Know what items actually *sell* for on Poshmark before you buy or relist.**

This Actor scrapes Poshmark **sold listings** for any keyword or brand, extracts each sold comp (title, sold price, original price, discount, size, image, URL), and rolls them into reseller pricing intelligence: **median / average / min / max sold price**, an optional active-vs-sold spread, and a **suggested max buy price** - exported as CSV or JSON. Sold comps tell you the truth; active asking prices do not.

### ✅ What you get / ❌ what this isn't

| ✅ This Actor gives you | ❌ This Actor is not |
|---|---|
| Confirmed **sold** comps with real sold prices | Not a dump of optimistic active asking prices |
| Median / average / min / max sold price per query | Not raw listings you still have to do math on |
| A **suggested max buy price** for your target margin | Not after-fee net proceeds (Poshmark hides those) |
| Size, discount, image, and listing URL per comp | Not private account or buyer data |

### 🔎 Why use this Actor

- Get **real sold prices**, not optimistic active asking prices.
- See median, average, min, and max sold price for any query in one summary row.
- Optionally compare sold vs active to spot over- or under-priced inventory.
- Get a **suggested max buy price** so you protect your margin at the source.
- Export CSV-ready comps for sourcing spreadsheets, Whatnot prep, or accounting.
- No login required for public sold-listing data.

### 👥 Who it's for

Resellers and flippers sourcing inventory who need to know resale value before they spend, not after. Common jobs:

- Decide what to pay at a thrift store, estate sale, or wholesale lot.
- Price your own listings against what comparable items actually sold for.
- Spot brands/sizes with a wide active-vs-sold spread (slow movers vs fast flips).
- Build a sourcing cheat sheet of median resale values by keyword.

### ⚙️ How to check Poshmark sold prices

1. Open the Actor on Apify.
2. Enter a `query` (keyword or brand), for example `nike air max women`.
3. Set `availability` to `sold` for sold comps.
4. Optionally enable `includeActiveComparison` to also get the active-vs-sold spread.
5. Set `targetMarginPercent` to get a suggested max buy price.
6. Click **Start**.
7. Download the dataset as CSV, JSON, or Excel, or pull it from the Apify API.

If you provide no input, the Actor runs the sample query so you can see the output immediately.

### 📥 Input

```json
{
  "query": "nike air max women",
  "availability": "sold",
  "maxItems": 50,
  "includeActiveComparison": true,
  "targetMarginPercent": 50
}
```

You can also pass a `brand` (e.g. `Nike`) or a full `startUrl`.

| Field | Meaning |
|---|---|
| `query` | Keyword to search on Poshmark |
| `brand` | Optional brand page instead of search |
| `availability` | `sold` (sold comps), `available` (active), or `all` |
| `maxItems` | Max listings to extract (1-200; page is scrolled to load more) |
| `includeActiveComparison` | Also scrape active listings and compute the spread |
| `targetMarginPercent` | Margin used to compute `suggestedMaxBuyPrice` |
| `proxyEnabled` / `proxyConfiguration` | Route through Apify Proxy (residential recommended if blocked) |
| `startUrl` | Full Poshmark URL; overrides the above |

### 📤 Output

The Actor writes one **summary** row plus one row per **listing** to the default dataset.

#### Summary row

```json
{
  "recordType": "summary",
  "query": "nike air max women",
  "availability": "sold",
  "soldCount": 50,
  "medianSoldPrice": 40,
  "averageSoldPrice": 41.1,
  "minSoldPrice": 19,
  "maxSoldPrice": 72,
  "activeCount": 50,
  "activeMedianPrice": 65,
  "activeVsSoldSpread": 25,
  "targetMarginPercent": 50,
  "suggestedMaxBuyPrice": 20
}
```

#### Listing row

```json
{
  "recordType": "listing",
  "status": "sold",
  "rank": 1,
  "title": "Nike Air Max size 9 women's",
  "price": "$30",
  "priceValue": 30,
  "originalPrice": "$125",
  "originalPriceValue": 125,
  "discountPercent": 76,
  "size": "US 9",
  "listingUrl": "https://poshmark.com/listing/...",
  "imageUrl": "https://di2ponv0v5otw.cloudfront.net/...",
  "scrapedAt": "2026-06-21T20:28:00.102Z"
}
```

#### Dataset views

| View | Best for |
|---|---|
| `Sold comps` | Individual listings with price, discount, and size |
| `Pricing summary` | One-row pricing intelligence for the query |

#### Output fields

| Field | Meaning |
|---|---|
| `status` | `sold` or `active` (detected from the Poshmark badge) |
| `price` / `priceValue` | Listing price as text and number |
| `originalPrice` / `originalPriceValue` | Original retail price when shown |
| `discountPercent` | Discount off original price (0-100) |
| `size` | Parsed size token |
| `medianSoldPrice` / `averageSoldPrice` | Central sold price for the query |
| `activeVsSoldSpread` | Active median minus sold median |
| `suggestedMaxBuyPrice` | Naive max buy price for your target margin |

### 💵 How much does it cost?

You pay per result row plus Apify platform usage. A typical 50-comp sold query is cheap and finishes in under a minute. Cost scales with `maxItems` and whether `includeActiveComparison` is on (it doubles the listings scraped). Tip: enable the residential proxy only if Poshmark starts blocking repeated runs - it raises cost.

### 🔁 Run it on the Apify platform

Schedule recurring price checks, call it from the Apify API, export to CSV/JSON/Excel, or wire it into Make, Zapier, or webhooks to feed your sourcing spreadsheet automatically.

### ⚠️ Limits and caveats

- **Sold comps reflect listed sold prices, not after-fee proceeds.** Poshmark does not publicly expose final sale dates or days-to-sell, so this Actor does not promise those fields.
- `suggestedMaxBuyPrice` is a simple rule of thumb (`sold median x (1 - targetMargin)`). It ignores marketplace fees, shipping, and condition. Treat it as a starting point, not advice.
- Pricing stats are most reliable with `maxItems` of 50-200; very narrow queries return fewer comps.
- Poshmark renders with JavaScript and lazy-loads on scroll; the Actor uses a headless browser. Enable residential proxy if you hit blocks on repeated runs.
- Reads public listing data only; it does not log in or scrape private account data.

### 🧩 Related Actors

- [eBay Scraper](https://apify.com/webdata_labs/ebay-listings-scraper) - active listings with the true delivered price and item specifics.
- [OLX Brazil Scraper](https://apify.com/webdata_labs/olx-brazil-scraper) - Brazilian classifieds, past the 5,000-listing search wall.
- [Mercari Sold Listings Scraper](https://apify.com/webdata_labs/mercari-sold-listings-scraper) - what items actually sold for, not what sellers are asking.
- [Pinterest Trends Scraper](https://apify.com/webdata_labs/pinterest-trends-scraper) - keyword demand and save counts, the planning end of the funnel.
- [Website Email Scraper](https://apify.com/webdata_labs/website-contact-extractor) - turn any list of domains into emails, phone numbers and social profiles.

### ❓ FAQ

**Does it return real sold prices?** Yes - it reads Poshmark's public sold listings, not active asking prices.

**Can I compare active vs sold?** Yes - enable `includeActiveComparison` to get the spread and a max buy price.

**Does it scrape private data?** No. It reads only public listing data and does not log in.

### 🛠️ Support

If a run fails or a field is missing, open an Actor issue with the run URL, the input you used, and the field or behavior you expected.

### ⭐ Rate this Actor

If this Actor saved you time, please take 30 seconds to leave a review on the **Reviews** tab of [Poshmark Sold Listings Scraper - Resale Prices & Comps](https://apify.com/webdata_labs/poshmark-sold-listings-scraper) - reviews are the main trust signal other users see, and they directly decide which features get built next. If something is broken or a field is missing, please [open an issue](https://apify.com/webdata_labs/poshmark-sold-listings-scraper/issues) first - we typically respond within a day and would love the chance to fix it before you rate.

# Actor input Schema

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

Keyword to search on Poshmark, e.g. 'nike air max women' or 'lululemon align leggings'.

## `brand` (type: `string`):

Optional Poshmark brand name/slug. If set, the Actor starts from the brand page instead of search.

## `availability` (type: `string`):

Which listings to pull. 'Sold' gives true sold comps - what items actually sold for.

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

Maximum listing cards to extract (the page is scrolled to lazy-load more). 50-200 gives stable pricing stats.

## `includeActiveComparison` (type: `boolean`):

When scraping sold items, also scrape current active listings for the same query and compute the active-vs-sold price spread. Doubles the run cost.

## `targetMarginPercent` (type: `integer`):

Share of the median sold price you want to keep as margin. Used only to compute 'suggestedMaxBuyPrice' (a naive rule of thumb that ignores marketplace fees and shipping).

## `proxyEnabled` (type: `boolean`):

Route the browser through Apify Proxy. Recommended (residential) if Poshmark starts blocking requests on repeated runs.

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

Apify Proxy settings used when 'Use Apify Proxy' is enabled. Residential is recommended for Poshmark.

## `startUrl` (type: `string`):

Optional full Poshmark search/brand URL. Overrides query, brand, and availability.

## Actor input object example

```json
{
  "query": "nike air max women",
  "brand": "",
  "availability": "sold",
  "maxItems": 50,
  "includeActiveComparison": false,
  "targetMarginPercent": 50,
  "proxyEnabled": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "startUrl": ""
}
```

# Actor output Schema

## `summary` (type: `string`):

No description

## `comps` (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 = {
    "query": "nike air max women"
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdata_labs/poshmark-sold-listings-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 air max women" }

# Run the Actor and wait for it to finish
run = client.actor("webdata_labs/poshmark-sold-listings-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 air max women"
}' |
apify call webdata_labs/poshmark-sold-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,webdata_labs/poshmark-sold-listings-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/yYgDn8Wx2yo52cG9b/builds/YRHLgBsVMHsil8nWO/openapi.json
