# Poshmark Scraper — Listings & Sold Prices (US, Canada) (`yugenox/poshmark-scraper`) Actor

Scrape Poshmark listings for sale or sold, on poshmark.com and poshmark.ca, by keyword, department, category, brand, size, colour, condition and price: title, brand, price, original price, size, condition, photos, likes, sold date and description. No login, no seller data.

- **URL**: https://apify.com/yugenox/poshmark-scraper.md
- **Developed by:** [Yugenox Corp](https://apify.com/yugenox) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 listings

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

## Poshmark Scraper: listings and sold prices on poshmark.com and poshmark.ca

Scrape **Poshmark** listings that are **for sale or already sold**, on the US site (**poshmark.com**, USD) and the Canadian one (**poshmark.ca**, CAD). Search by **keyword**, or browse a **department, category, subcategory or brand**, with Poshmark's own filters: **size, colour, condition, price range, free shipping** and **sort order**. Each listing comes with the **title, brand, price, original price, first listed price, size, condition, colours, category, every photo, likes, comments, shares and offers**. Sold listings also get the **date they sold**. The **description** is included too, with contact details removed. No login, no cookies, no Poshmark account.

The scraper collects **item data only**. Poshmark sellers are private individuals, so it never collects seller names, usernames, closet links or profile pictures. It removes phone numbers, e-mail addresses, @handles, profile links and sign-up codes that sellers write into titles and descriptions.

### What you get

| | |
|---|---|
| **Listing** | Listing ID, title, Poshmark URL, brand, every photo (large), photo and video count |
| **Price** | Asking price and currency, the original (retail) price the seller entered, the price when it was first listed, the recent price drop in % |
| **Item** | Department, category, subcategories, size (and every size of multi-size listings), condition, colours, style tags |
| **Status** | For sale or sold, **sold date**, units available and sold |
| **Popularity** | Likes, comments, shares, active buyer offers, deal badge, free or discounted shipping |
| **Dates** | Created, first published, last updated |
| **Description** | The seller's text (measurements, fabric, flaws…) with contact details removed, or leave it out |

### How to use it

1. Enter one or more **search terms**, e.g. `nike tech fleece`, `lululemon align` or `coach tabby`. To browse without a keyword, pick a **department** and, optionally, a **category** and **brands** instead.
2. Choose **For sale** or **Sold**. Sold listings show what items actually went for.
3. Optionally narrow it down with **category** and **subcategories** (as poshmark.com names them, e.g. `Jackets & Coats`, `Puffers`), **brands**, **sizes**, **colours**, **condition**, **min/max price**, **shipping** and **sort**, then set **Max listings**.
4. For Canada, set **Market** to `poshmark.ca`. Prices are then in CAD.

You can also paste **Poshmark URLs**. A search URL (`poshmark.com/search?query=…`), a category page (`poshmark.com/category/Men-Jackets_&_Coats`) or a brand page (`poshmark.com/brand/Nike`) keeps its own keyword and filters. A listing URL (`poshmark.com/listing/…`) scrapes that one listing.

**Max listings** is the total for the run, shared fairly between your searches. A listing found by two searches is saved and charged once.

#### Input examples

Sold Coach Tabby bags, newest sales first, to price your own:

```json
{
  "searchTerms": ["coach tabby"],
  "availability": "sold_out",
  "department": "Women",
  "category": "Bags",
  "sortBy": "added_desc",
  "maxItems": 200
}
```

New-with-tags Nike jackets in size M, $20 to $60, cheapest first:

```json
{
  "searchTerms": ["jacket"],
  "department": "Men",
  "category": "Jackets & Coats",
  "brands": ["Nike"],
  "sizes": ["M"],
  "condition": ["nwt"],
  "minPrice": 20,
  "maxPrice": 60,
  "sortBy": "price_asc",
  "maxItems": 100
}
```

Every The North Face puffer on poshmark.ca, without a keyword:

```json
{
  "market": "ca",
  "department": "Men",
  "category": "Jackets & Coats",
  "subcategories": ["Puffers"],
  "brands": ["The North Face"],
  "maxItems": 1000
}
```

Pasted URLs:

```json
{
  "startUrls": [
    { "url": "https://poshmark.com/search?query=lululemon%20align&department=Women&price%5B%5D=20-50&shipping_discount_type=free&sort_by=price_asc" },
    { "url": "https://poshmark.com/brand/The_North_Face-Women-Jackets_&_Coats" },
    { "url": "https://poshmark.com/listing/Coach-Crystal-Tabby-36-Denim-Shoulder-Bag-in-Blue-and-Gold-6abc4b2be625d215138f271e" }
  ]
}
```

### Output example

```json
{
  "id": "6abc4b2be625d215138f271e",
  "url": "https://poshmark.com/listing/Coach-Crystal-Tabby-36-Denim-Shoulder-Bag-in-Blue-and-Gold-6abc4b2be625d215138f271e",
  "title": "Coach Crystal Tabby 36 Denim Shoulder Bag in Blue and Gold",
  "brand": "Coach",
  "price": 672,
  "currency": "USD",
  "originalPrice": 1000,
  "firstPrice": 750,
  "department": "Women",
  "category": "Bags",
  "subcategories": ["Shoulder Bags"],
  "size": "OS",
  "condition": "uln",
  "conditionText": "Like new",
  "colors": ["Blue", "Gold"],
  "status": "sold_out",
  "sold": true,
  "soldAt": "2026-09-30T16:13:04.000Z",
  "imageUrl": "https://di2ponv0v5otw.cloudfront.net/posts/2026/09/29/6abc4b2be625d215138f271e/l_6abc4b527e297bc9a04225a7.jpg",
  "imageCount": 6,
  "likes": 7,
  "comments": 0,
  "shares": 9,
  "description": "Coach Tabby 36 shoulder bag with crystal-embellished denim exterior. Gold-tone C clasp and hardware. Single top strap for shoulder carry. Signature monogram pattern across the flap and body.",
  "market": "us",
  "createdAt": "2026-09-29T23:35:07.000Z",
  "firstPublishedAt": "2026-09-29T23:40:45.000Z",
  "searchQuery": "coach tabby",
  "searchFilters": "Women › Bags, sold, just in",
  "matchType": "exact",
  "position": 8
}
```

Every row has the same 43 columns (see the Output tab). A value Poshmark doesn't show for that listing is `null`.

### Use cases

- **Reselling and sourcing**: what a brand, model or size really sells for (sold prices), and how fast it sold.
- **Pricing your own listings**: compare asking prices, original prices and recent price drops for the same item.
- **Deal hunting**: catch new listings under a price with **Just in** sorting and a schedule.
- **Brand and trend research**: likes, shares and offers by brand, category and condition, in the US and Canada.

### FAQ

**Do I need a Poshmark account, cookies or a login?** No. The scraper reads the same public listings any visitor sees on poshmark.com and poshmark.ca. It never logs in and needs nothing from you except what to search for.

**Can I get sold listings?** Yes. Set **Listings** to **Sold**. Each row then has `sold: true` and `soldAt`, the moment Poshmark marked it sold. `price` is the price it was listed at when it sold. If a buyer and seller agreed on a lower offer, Poshmark doesn't show that number.

**Which countries work?** The US (poshmark.com, USD) and Canada (poshmark.ca, CAD). Pick one with **Market**. Pasted URLs use their own site.

**How many listings can I get?** Poshmark shows up to 5,000 listings per search. The scraper follows its result pages, 100 listings at a time, until Poshmark runs out or **Max listings** is reached. To get more than 5,000, split a big search by brand, size, price range or condition. Set Max listings to 0 for everything.

**How fast is it?** About 1–2 seconds per page of 100 listings, so 1,000 listings take under half a minute.

**What are "similar results"?** When a search term matches few or no listings, Poshmark fills the page with listings that don't contain it. By default the scraper keeps exact matches only and never charges for the others. Turn on **Include similar results** to keep them; they are marked `matchType: "similar"`.

**Why was my category skipped?** Poshmark ignores a category it doesn't know and shows everything instead. The scraper detects this, skips that search, doesn't charge for it, and names it in the status message. Use the names poshmark.com shows, e.g. `Jackets & Coats` rather than `Jackets`. A category also needs a department. Without one, Poshmark uses Women.

**Are seller details included?** No, never. Poshmark is a marketplace of private individuals. The scraper doesn't collect seller names, usernames, closet links, profile pictures or seller IDs, and it doesn't collect comments, likes or shares by other users, only their counts. It doesn't scrape seller closets either. Phone numbers, e-mail addresses, @handles, links to social or payment profiles and Poshmark sign-up codes in titles and descriptions are replaced with `[phone removed]`, `[email removed]`, `[handle removed]`, `[link removed]` and `[code removed]`. Turn off **Include descriptions** to leave descriptions out entirely.

**Which proxy should I use?** Keep the default (Apify Proxy, datacenter). It comes with every Apify plan, including the free one. If Poshmark refuses datacenter IPs for a while, the run switches to residential proxies when your account has them, and carries on without them when it doesn't.

**What does a run cost?** You pay per listing saved, plus a small fee per run. See the Pricing tab. "Similar" results you didn't ask for, skipped searches and duplicates are never charged.

**Is it legal to scrape Poshmark?** This Actor only collects publicly available data: listings that anyone can see on Poshmark without an account, such as titles, brands, prices, sizes, conditions, photos and sold dates. Collecting publicly available data is generally legal, but you're responsible for how you use it. Listings are published by private individuals; the scraper leaves out every seller detail and removes contact details from listing text. You must follow privacy laws such as CCPA, PIPEDA and GDPR, as well as Poshmark's terms. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?** No. Everything comes from what Poshmark shows to any visitor without logging in. It never uses a login, never likes, comments, shares or makes offers, never opens seller closets or profiles, and follows Poshmark's robots.txt.

*This Actor is not affiliated with, endorsed by or sponsored by Poshmark. Poshmark is a trademark of its owner.*

# Actor input Schema

## `searchTerms` (type: `array`):

What to look for, e.g. "nike tech fleece", "lululemon align", "coach tabby". Each term is searched separately with the filters below. Leave empty to browse a department, category or brand instead.

## `startUrls` (type: `array`):

Paste Poshmark search URLs (poshmark.com/search?query=…, with any filters you set on the site), category or brand pages (poshmark.com/category/Men-Jackets\_&\_Coats, poshmark.com/brand/Nike) or listing URLs (poshmark.com/listing/…). poshmark.ca URLs work too. Seller closets are not supported.

## `market` (type: `string`):

Which Poshmark: the US site (poshmark.com, prices in USD) or the Canadian one (poshmark.ca, prices in CAD). Pasted URLs use their own site.

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

Listings for sale, or listings that have already sold (sold prices and sold dates — the actual market value).

## `department` (type: `string`):

Only listings in this department. Needed to browse a category without a search term.

## `category` (type: `string`):

A category of the department, as poshmark.com names it, e.g. "Jackets & Coats", "Dresses", "Shoes", "Bags", "Tops", "Jeans". A category Poshmark doesn't know is skipped (and named in the status message), never charged.

## `subcategories` (type: `array`):

Subcategories of the category, e.g. "Puffers", "Midi", "Sneakers".

## `brands` (type: `array`):

Only these brands, e.g. "Nike", "lululemon athletica", "The North Face" (any capitalisation).

## `sizes` (type: `array`):

Only these sizes, as Poshmark writes them, e.g. "M", "XL", "8", "10.5", "32".

## `colors` (type: `array`):

Only listings in these colours.

## `condition` (type: `array`):

Only listings in these conditions.

## `minPrice` (type: `integer`):

Only listings at or above this price (USD on poshmark.com, CAD on poshmark.ca).

## `maxPrice` (type: `integer`):

Only listings at or below this price.

## `shipping` (type: `string`):

Only listings with free or discounted shipping.

## `sortBy` (type: `string`):

Order of the results.

## `includeSimilar` (type: `boolean`):

When a search term matches few or no listings, Poshmark fills the page with "similar" listings that don't contain it. Off = exact matches only (similar ones are skipped and never charged). On = keep them, marked matchType "similar".

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

Maximum number of listings for the whole run, shared fairly between your searches. Poshmark shows up to 5,000 listings per search. 0 = as many as possible.

## `includeDescription` (type: `boolean`):

Adds the seller's description (measurements, fabric, flaws…). Phone numbers, e-mails, @handles, profile links and sign-up codes in it are removed.

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

Apify Proxy (datacenter) is the default and comes with every Apify plan. If Poshmark refuses datacenter IPs for a while, the run switches to residential proxies when your account has them.

## Actor input object example

```json
{
  "searchTerms": [
    "nike tech fleece"
  ],
  "market": "us",
  "availability": "available",
  "department": "All",
  "shipping": "any",
  "sortBy": "best_match",
  "includeSimilar": false,
  "maxItems": 48,
  "includeDescription": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped listings.

## `run` (type: `string`):

Status and statistics for this run.

## `report` (type: `string`):

RUN_REPORT: how the run ended, counts, requests and proxy use.

# 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 = {
    "searchTerms": [
        "nike tech fleece"
    ],
    "maxItems": 48,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/poshmark-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 = {
    "searchTerms": ["nike tech fleece"],
    "maxItems": 48,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/poshmark-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 '{
  "searchTerms": [
    "nike tech fleece"
  ],
  "maxItems": 48,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/poshmark-scraper --silent --output-dataset

```

## MCP server setup

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