Poshmark Sold Listings Scraper avatar

Poshmark Sold Listings Scraper

Pricing

from $1.99 / 1,000 sold listings

Go to Apify Store
Poshmark Sold Listings Scraper

Poshmark Sold Listings Scraper

Scrape Poshmark sold listings by keyword or closet. Export sold price, listed and sold dates, days to sell, brand, size, condition, and seller as JSON for reseller comps.

Pricing

from $1.99 / 1,000 sold listings

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Share

Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by Poshmark. Data is read from publicly accessible sold-listing cards. No login. You are responsible for complying with applicable law and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

Scrape Poshmark sold listings by keyword or closet and export sold price, listed date, sold date, days to sell, brand, size, condition, and seller as JSON. Built for reseller comps, pricing research, and scheduled sold watches.

Best for: resale operators and data teams who want sold comps in a dataset, spreadsheet, or API — a Poshmark scraper and API alternative that runs from Python, Node.js, or MCP.

Resale suite

Pair Poshmark sold comps with eBay completed sales and Vinted monitors. This Actor is the Poshmark sold step.

eBay sold compseBay pricingPoshmark soldVinted monitor
eBay Sold Listings ScrapereBay Sold Price IntelligencePoshmark Sold Listings Scraper ◄── you are hereVinted Monitor
Completed eBay sales and sold datesRecommended price from eBay sold dataPoshmark sold price, dates, sellerNew Vinted listings
Depop new listingsMercari JapanStockX ask / bid
Depop MonitorMercari Japan ScraperStockX Listings Scraper
New Depop search cardsJapan on-sale and sold pricesLowest ask, highest bid, last sale

When to use this Actor

  • Poshmark sold comps — sold price, sold date, and days to sell for a keyword
  • Closet sold history — sold cards from one or more usernames
  • Brand and price filters — department, brand, and USD sold-price band
  • Scheduled refresh — run the same keyword on an Apify Schedule and append new rows
  • Cross-marketplace pricing — then run eBay sold comps for the same product

When this Actor is a poor fit

  • Active Poshmark listings — this Actor saves sold_out cards only
  • Offer and comment threads — likes and comment counts are on the card; full threads are not
  • Pricing recommendations — use eBay Sold Price Intelligence after you have eBay sold rows

Key features

  • Sold cards only — available inventory is dropped and is not charged
  • Comps on the search card — sold price, listed timestamp, sold timestamp, days to sell, seller, brand, size, condition
  • Keyword and closet — up to 8 targets per run
  • Pagination — 48 cards per page, up to 480 listings per target
  • HTTP onlycurl_cffi Chrome impersonation, 256 MB, no browser
  • Proxy off by default — enable Apify Proxy in the input only if a run is blocked
  • Deduped listing IDs — the same listing found twice in one run is saved once

Input

ParameterTypeDefaultDescription
searchTermsArraylululemon alignSold-search keywords
usernamesArrayCloset usernames, sold cards only
brandStringBrand filter on every target
departmentStringAllAll, Women, Men, Kids, Home, Pets, Electronics
minPrice / maxPriceNumberSold price band in USD
sortByStringadded_descadded_desc, price_asc, price_desc, relevance
maxItemsInteger48Max sold rows per keyword or closet (1–480)
proxyConfigurationObjectOffLeave off unless a run is blocked

Input example

{
"searchTerms": ["lululemon align"],
"department": "Women",
"maxItems": 48,
"sortBy": "added_desc",
"proxyConfiguration": { "useApifyProxy": false }
}

Closet example

{
"usernames": ["closet_username"],
"maxItems": 48
}

Output

Each dataset row is one sold listing.

FieldDescription
listingIdListing id
titleListing title
urlPublic listing URL
soldPriceSold price on the card
originalPriceCompare-at price when the seller set one
currencyCurrency code
brand / size / conditionCard attributes
department / category / colorCatalog labels
likeCount / commentCount / shareCountEngagement on the card
sellerUsername / sellerUrlCloset
listedAt / soldAtListed and sold timestamps
daysToSellDays between those timestamps
quantitySoldUnits sold on the card
sourceKeyword or closet:{username}
scrapedAtUTC time the row was parsed

Output example

{
"listingId": "6ab2b71bcf8005b79104fada",
"title": "Lululemon Align Tank",
"soldPrice": 36.0,
"originalPrice": 88.0,
"currency": "USD",
"brand": "lululemon athletica",
"size": "4",
"condition": "nwt",
"department": "Women",
"sellerUsername": "seller_name",
"listedAt": "2026-09-19T12:49:45-07:00",
"soldAt": "2026-09-22T09:42:45-07:00",
"daysToSell": 2.87,
"quantitySold": 1,
"source": "lululemon align",
"url": "https://poshmark.com/listing/Lululemon-Align-Tank-6ab2b71bcf8005b79104fada"
}

originalPrice is null when the card has no compare-at price. Search results are capped by the site at about 5,000 cards per query.

Use cases

JobWhat you get
Reseller compsSold price, sold date, and days to sell for a keyword
Brand watchSold cards for one brand and department
Closet researchSold history for specific usernames
Scheduled datasetSame input on an Apify Schedule, new rows each run
Cross-market checkPoshmark sold price next to eBay sold comps

Integration examples

Replace APIFY_TOKEN with your Apify API token. Actor name: crawloop/poshmark-sold-listings-scraper.

Node.js

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("crawloop/poshmark-sold-listings-scraper").call({
searchTerms: ["lululemon align"],
maxItems: 48,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient(token="APIFY_TOKEN")
run = client.actor("crawloop/poshmark-sold-listings-scraper").call(
run_input={"searchTerms": ["lululemon align"], "maxItems": 48}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["soldPrice"], item["daysToSell"], item["sellerUsername"])

cURL

curl -X POST "https://api.apify.com/v2/acts/crawloop~poshmark-sold-listings-scraper/runs?token=APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"searchTerms\":[\"lululemon align\"],\"maxItems\":48}"

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call crawloop/poshmark-sold-listings-scraper.

Example prompts:

  • "Run Poshmark Sold Listings Scraper for 'lululemon align', max 20 rows, and return sold price, days to sell, and seller as JSON."
  • "Scrape sold listings from closet username example_seller and summarize the median sold price."
  • "Run Poshmark Sold Listings Scraper for 'nike dunk', then run eBay Sold Listings Scraper for the same keyword and compare sold prices."

Suite next step

After Poshmark sold comps, run eBay Sold Listings Scraper for the same keyword, then eBay Sold Price Intelligence if you want a recommended price from the eBay side. For live fashion asks, use Depop Monitor or Vinted Monitor. For Japan sold prices, use Mercari Japan Scraper. For StockX ask, bid, and last sale, use StockX Listings Scraper.

FAQ

Does this include active listings?

No. Every saved row is a sold card. Available inventory is skipped.

How many listings can one run return?

Up to maxItems per keyword or closet (480). The site itself stops a broad search around 5,000 cards.

Do I need a proxy?

Leave proxy off. If a run fails because the search was blocked, enable Apify Proxy in the input and run again.

What is days to sell?

The number of days between listedAt and soldAt on the card. Both timestamps are kept so you can check the raw values.

Can I monitor new sales?

Put the Actor on an Apify Schedule with the same keyword. Each run appends the current sold cards. Dedupe listingId in your warehouse if you merge runs.