Poshmark Sold Listings Scraper
Pricing
from $1.99 / 1,000 sold listings
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
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 comps | eBay pricing | Poshmark sold | Vinted monitor |
|---|---|---|---|
| eBay Sold Listings Scraper | eBay Sold Price Intelligence | Poshmark Sold Listings Scraper ◄── you are here | Vinted Monitor |
| Completed eBay sales and sold dates | Recommended price from eBay sold data | Poshmark sold price, dates, seller | New Vinted listings |
| Depop new listings | Mercari Japan | StockX ask / bid |
|---|---|---|
| Depop Monitor | Mercari Japan Scraper | StockX Listings Scraper |
| New Depop search cards | Japan on-sale and sold prices | Lowest 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_outcards 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 only —
curl_cffiChrome 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
| Parameter | Type | Default | Description |
|---|---|---|---|
searchTerms | Array | lululemon align | Sold-search keywords |
usernames | Array | — | Closet usernames, sold cards only |
brand | String | — | Brand filter on every target |
department | String | All | All, Women, Men, Kids, Home, Pets, Electronics |
minPrice / maxPrice | Number | — | Sold price band in USD |
sortBy | String | added_desc | added_desc, price_asc, price_desc, relevance |
maxItems | Integer | 48 | Max sold rows per keyword or closet (1–480) |
proxyConfiguration | Object | Off | Leave 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.
| Field | Description |
|---|---|
listingId | Listing id |
title | Listing title |
url | Public listing URL |
soldPrice | Sold price on the card |
originalPrice | Compare-at price when the seller set one |
currency | Currency code |
brand / size / condition | Card attributes |
department / category / color | Catalog labels |
likeCount / commentCount / shareCount | Engagement on the card |
sellerUsername / sellerUrl | Closet |
listedAt / soldAt | Listed and sold timestamps |
daysToSell | Days between those timestamps |
quantitySold | Units sold on the card |
source | Keyword or closet:{username} |
scrapedAt | UTC 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
| Job | What you get |
|---|---|
| Reseller comps | Sold price, sold date, and days to sell for a keyword |
| Brand watch | Sold cards for one brand and department |
| Closet research | Sold history for specific usernames |
| Scheduled dataset | Same input on an Apify Schedule, new rows each run |
| Cross-market check | Poshmark 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 ApifyClientclient = 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.