Poshmark Scraper - Listings, Sold Prices & Closets
Pricing
from $1.40 / 1,000 listing or seller records
Poshmark Scraper - Listings, Sold Prices & Closets
Scrape Poshmark fashion-resale listings: keyword search, brand and category browse, sold listings with sold dates, seller closet stats (followers, following). Filters for department, condition and availability. Incremental monitoring, resume, MCP export.
Pricing
from $1.40 / 1,000 listing or seller records
Rating
5.0
(1)
Developer
Abot API
Maintained by CommunityActor stats
3
Bookmarked
1
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
Share
Poshmark Scraper: Listings, Sold Prices & Seller Closets
Poshmark Scraper turns Poshmark into a clean secondhand-fashion data feed. Get listing details, sold prices with sold dates, seller closet profiles and social counts across every department and brand. Search by keyword, brand or seller closet, or paste specific listing, closet, brand, category or search links, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.
Why This Scraper?
- Two ways to find data. Search mode covers keywords, brands and seller closets with filters applied. URL mode reads any listing, closet, brand, category or search link exactly as pasted.
- Sold listings with sold dates. Switch Availability to Sold (or All) to pull sold-out listings alongside their sold date and quantity sold, the site's own price-history surface.
- Seller closet profiles. Add a seller username or closet link and get that seller's follower, following and listing counts, followed by every listing in the closet.
- Detail enrichment on demand. Turn it on to add the seller's full aggregate stats, the complete photo set and the shipping note to each listing, billed only for listings that were actually read.
- Filters that are honest. Availability, department and condition are narrowed on the site's own servers. Filters the site would silently ignore, like size or color, are not offered.
- Built for monitoring. Incremental mode returns only new, updated and reappeared listings on repeat runs, and a refused run fails loudly instead of returning an empty dataset.
- Resume large pulls. Paste a previous run or dataset ID to continue an interrupted pull without paying to re-collect records it already has.
Use Cases
- Resale sourcing and arbitrage: scan brand and keyword listings for underpriced items worth reselling.
- Price and market research: collect sold listings with their sold dates and last asking prices to see which similar items sell, and when.
- Closet and competitor tracking: monitor specific sellers' closets for new listings and price changes.
- Fashion trend analysis: build datasets of styles, brands, colors and conditions across departments and categories.
- Deal alerting: run Incremental mode on a saved search or brand to get only newly listed or price-changed items.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
kind | "listing" (also "seller" on closet profile records) |
recordId | "e1111111111111111111111a" |
listingId | "e1111111111111111111111a" |
url | "https://poshmark.com/listing/Sample-Wool-Coat-e1111111111111111111111a" |
title | "Sample Brand Co Wool Coat" |
brand | "Sample Brand Co" |
size / sizeDisplay | "M" / "US M" |
condition / conditionLabel | "nwt" / "New With Tags" |
price | 40.0 (the listing's asking price; on sold listings, the last asking price, not the private accepted-offer amount) |
originalPrice | 120.0 |
currency | "USD" |
availability | "available" (also "sold", "coming soon") |
soldAt / soldQuantity | "2026-01-05T10:00:00-07:00" / 1 (sold listings only) |
department / category | "Women" / "Coats & Jackets" |
colors / styleTags | ["Tan"] / ["Vintage"] |
description | "Barely worn wool coat, smoke-free home." |
likeCount / commentCount / shareCount | 12 / 2 / 4 |
sellerUsername / sellerName | "sample_seller" / "Sample Seller" |
pictureUrls | ["https://images.example.invalid/sample.jpg"] |
shippingNote | "$6.49 Shipping" (detail enrichment only) |
sellerFollowers / sellerFollowing | 500 / 40 (detail enrichment only) |
changeType / changedFields | "NEW" / [] (incremental mode only) |
Seller records (kind: "seller", one per closet scraped) carry username, displayName, closetUrl, bio, city, state, joinedAt, lastActiveAt and the same followers / following / likes / shares counts instead of listing fields.
How to Use
- Pick a mode:
search(keywords, brands and seller closets) orurl(paste specific links). - In search mode, add any combination of keyword searches, brands or closets, and apply the availability, department and condition filters. In URL mode, paste listing, closet, brand, category or search links.
- Set Max items to control run size and cost, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it through the API.
Keyword search:
{"mode": "search","searchQueries": ["wool coat"],"maxItems": 20}
Sold listings from one brand, one department:
{"mode": "search","brands": ["Madewell"],"availability": "sold_out","department": "Women","maxItems": 50}
Watch a seller's closet for new listings:
{"mode": "search","closets": ["sample_seller"],"incrementalMode": true,"stateKey": "seller-watch"}
Paste a link, with detail enrichment on:
{"mode": "url","listingInputs": ["https://poshmark.com/brand/Madewell"],"fetchDetails": true,"maxItems": 10}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/poshmark-scraper").call(run_input={"mode": "search", "searchQueries": ["wool coat"], "maxItems": 20})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["price"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/poshmark-scraper').call({ mode: 'search', searchQueries: ['wool coat'], maxItems: 20 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
How Max items shapes a run
Every target (a keyword, brand or closet) gets an even share of Max items. A target's own walk stops when its share is spent, or when it reaches the site's own end (an empty page, or no further page cursor), whichever comes first. Shares round down and a share one target leaves unused is not handed to the next, so a run can return fewer records than Max items. With closets, the seller record takes one slot of that closet's share. Detail enrichment reads one extra page per listing that is actually pushed and carries its own small surcharge; leave it off unless you need the seller's full stats, the complete photo set or the shipping note.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor skips every record id already collected there, so you don't pay twice. - Incremental mode (
incrementalMode) is for running the same search, brand or closet again and again, for example daily. Each record is classifiedNEW,UPDATED(withchangedFields),UNCHANGED(suppressed and not billed unlessemitUnchangedis on),REAPPEARED, orEXPIRED(only withemitExpiredon, and only after a run whose every target finished cleanly). When you turn onemitExpired, set Max items to0so every target is scanned to its end: listings a capped run never reached can otherwise be reported asEXPIRED.stateKeynames or shares a monitoring campaign; leave it empty and the actor derives one automatically from your targets and filters. With incremental mode off, output is exactly as before.
Resume and Incremental mode solve two different problems: Resume continues one specific run that got interrupted, while Incremental mode is for scheduling the same search repeatedly and getting only what changed.
Send results into your apps (MCP connectors)
Send results into the apps you already use via MCP connectors (Model Context Protocol). Authorize a connector under Apify, Settings, API & Integrations, then select it here: Notion gets a rich page per item, other connectors get a best-effort write. The export writes a condensed, human-readable summary per record (a title plus key fields), not the full JSON; the complete record always stays in the Apify dataset. Leave mcpConnectors empty to skip this entirely.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search for keywords, brands and closets, or url for pasted links. |
searchQueries | array | ["tote bag"] | Search mode: keywords to search, one entry per search. |
brands | array | (none) | Search mode: brand names or brand-page paths. |
closets | array | (none) | Search mode: seller usernames or closet links. Each emits the seller's profile followed by that closet's listings. |
availability | string | available | available, sold_out, or all. All availability includes dropping-soon items. |
department | string | (none) | Keep listings from one department only. Leave empty for all departments. |
condition | string | (none) | Keep listings in one condition tier only: New With Tags, Like New, Good, or Fair. |
listingInputs | array | sample | URL mode: listing links or bare listing ids, closet links, brand links, category links or search links. |
urls | array | sample | Alias for listingInputs, accepted under the name other Apify actors use. |
fetchDetails | boolean | false | Read each listing's own page and merge seller stats, the full photo set and the shipping note. Adds a per-listing surcharge when on. |
maxItems | integer | 20 | Stop after this many records (0 = no limit). Sellers count as records too when closets are scraped. |
resumeFromRunId | string | (none) | Paste a previous run ID or dataset ID to continue a large pull without returning items already collected there. |
incrementalMode | boolean | false | Turn this on for daily or recurring monitoring. Returns only new, updated and reappeared records on repeat runs. |
stateKey | string | (none) | Optional. Name a monitoring campaign to keep its state stable, or share state across differently configured runs. |
emitUnchanged | boolean | false | Also return (and bill) records that have not changed since the last run. |
emitExpired | boolean | false | Also return (and bill) records no longer found, once a run has fully scanned every tracked target. Use with Max items 0. |
mcpConnectors | array | (none) | Optional: send a summary of each record to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which item pages are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset. |
proxyConfiguration | object | Apify Proxy | Connection settings. The default standard pool works; no special proxy group is required. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"kind": "listing","recordId": "e1111111111111111111111a","listingId": "e1111111111111111111111a","url": "https://poshmark.com/listing/Sample-Wool-Coat-e1111111111111111111111a","title": "Sample Brand Co Wool Coat","brand": "Sample Brand Co","brandPath": "Sample-Brand-Co","size": "M","sizeDisplay": "US M","condition": "nwt","conditionLabel": "New With Tags","price": 40.0,"originalPrice": 120.0,"currency": "USD","availability": "sold","soldAt": "2026-01-05T10:00:00-07:00","soldQuantity": 1,"department": "Women","category": "Coats & Jackets","colors": ["Tan"],"description": "Barely worn wool coat, smoke-free home.","likeCount": 12,"commentCount": 2,"shareCount": 4,"sellerUsername": "sample_seller","sellerName": "Sample Seller","sellerUrl": "https://poshmark.com/closet/sample_seller","pictureUrls": ["https://images.example.invalid/sample.jpg"]}
Plan Requirement
The default proxy setting works out of the box; no special proxy group is required. The actor already retries automatically with a different connection profile when one is refused, so most runs need no extra configuration. Detail enrichment reads one extra page per listing and carries its own small surcharge, shown on the Pricing tab; leave it off unless you need the seller's full stats, the complete photo set or the shipping note.
FAQ
How much does it cost?
You pay per record returned, plus the optional detail-enrichment surcharge only for listings whose detail page was actually read. The Pricing tab shows the current rates. Use Max items to cap the cost of any run.
Is it legal to scrape Poshmark?
This actor collects only publicly available marketplace data. You are responsible for how you use it: follow Poshmark's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Listing details are generally facts, but photos and seller-submitted text may be subject to third-party rights.
Can I get only new or changed listings on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared records, and unchanged ones are not billed unless you turn on Emit unchanged.
What is the difference between Resume and Incremental mode?
They solve two different problems. Resume continues ONE specific run that got interrupted, using its run or dataset ID so you don't pay to re-collect what it already has. Incremental mode is for running the same search, brand or closet again and again, for example daily, and getting only what changed.
Why did my run fail instead of returning an empty dataset?
If every request the run made was refused or unreadable, the run stops with a clear message so "no matching listings" is never confused with "nothing could be read". Run it again in a few minutes. If only some targets or pages could be read, you still get what was found, and the run still succeeds.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
๐ Want more fashion data?
Pair this actor with these related scrapers from the same team:
| ๐ท๏ธ ThredUp Scraper Scrape ThredUp resale listings by keyword, department, brand, size, condition, price or... | ๐ท๏ธ Vinted.fr Scrape Vinted.fr, France's C2C second-hand fashion marketplace: search with... |
| ๐ KREAM Korea Scraper Scrape KREAM (kream.co.kr) sneaker and fashion resale data by keyword search, filters... | ๐ KLEKT Sneaker & Apparel Resale Scraper Scrape sneaker and streetwear listings from KLEKT (klekt.com). Browse the catalog with... |
| โฝ Whatnot Scraper Scrape Whatnot live and upcoming shows, queued items and lots, and seller profiles... | ๐ SSENSE Scraper Scrape SSENSE by keyword, category, designer or URL. Every row carries the selling price... |
๐ Browse all abotapi scrapers
๐ฌ Support & custom scrapers
- ๐ Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- ๐ ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
- โญ Enjoying it? A quick review on the actor page helps other users find it.