Poshmark Scraper
On Poshmark, one of the largest US resale marketplaces, competitors reprice constantly and checking them by hand takes an evening.
On Poshmark, one of the largest US resale marketplaces, competitors reprice constantly and checking them by hand takes an evening. Rows give price, original price, brand, size, condition and like count; search covers active listings only, not sold comps. No seller usernames collected.
$3.00 / 1,000 · 100.0% success over 27 public runs in the last 30 days.
Run it on Apify → Free to try - runs bill per result on your own account.
What you give it
Every field is optional unless marked; sensible defaults do the rest.
| Field | Type | What it does | Default |
|---|---|---|---|
searchQuery |
string | What to search for on Poshmark, exactly as you would type it in the site's search box, e.g. "nike cortez" or "lululemon leggings". Leave it out when you only re-check listings through listingIds. | nike |
listingIds |
array | Re-check listings you already know instead of searching: one listing ID per line (the 24-character code at the end of every Poshmark listing address, and the listingId of every dataset item), or the listing's full address. Each one is read from its own page and comes back in exactly the shape a search result has - price, size, condition, availability (sold_out once it sells), likes - plus the full description, whether or not Scrape details is on. A listing that was deleted is skipped, named in the log and not billed. When given, the search fields of this form are ignored and the run status says which. Up to 50. |
[] |
priceMinUsd |
integer | Only include listings costing at least this many dollars. | - |
priceMaxUsd |
integer | Only include listings costing at most this many dollars. | - |
sortBy |
string | Order of results: newest (just in, best for monitoring), price_asc, price_desc, or relevance. | newest |
postedAfter |
string | Only include listings posted on or after this date. With newest-first sorting the run stops early once older listings are reached. Format: YYYY-MM-DD (for example 2026-09-08) or a full ISO timestamp such as 2026-09-08T14:30:00Z. Slash dates like 08/09/2026 are refused on purpose: they are read as September in Europe and August in the United States, and this actor will not guess which you meant. |
- |
postedBefore |
string | Only include listings posted on or before this date. Format: YYYY-MM-DD (for example 2026-09-08) or a full ISO timestamp such as 2026-09-08T14:30:00Z. Slash dates like 08/09/2026 are refused on purpose: they are read as September in Europe and August in the United States, and this actor will not guess which you meant. |
- |
maxItems |
integer | Stop after this many listings. Free-plan runs are capped at 5 items. The form starts at 25 for a cheap first run - that is the form's prefill, not a cap on your plan; clear it to use the default of 500. | 500 |
scrapeDetails |
boolean | Read each listing's own page for the seller's full description, which the search results do not carry. This makes one extra request per listing, so a run is slower and costs one more page fetch each. The seller's handle, name and profile are never read; only the description text reaches the output. Leave off for a fast search-only sweep. The same page carries every photo of the listing, delivered as imageUrls. |
False |
reportFailures |
boolean | When a run fails, send the developer the actor name and build, an error category, the error message (truncated) and a one-way hash of your input - so a bug can be fixed without anyone asking you to reproduce it. Your input itself, your results and your identity are never sent, and successful runs send nothing at all. Switch this off and the actor behaves exactly the same. | True |
What you get back
One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.
A real result row from a recent run:
{
"availability": "available",
"brand": "Nike",
"colors": [
"White",
"Black"
],
"commentCount": 0,
"condition": "used",
"coverImageUrl": "https://di2ponv0v5otw.cloudfront.net/posts/2026/10/17/6ad340159d7e08fa29aece9c/m_6ad340159d7e08fa29aece9d.jpeg",
"currency": "USD",
"department": "Men",
"likeCount": 0,
"listingId": "6ad340159d7e08fa29aece9c",
"newWithTags": false,
"originalPriceUsd": null,
"priceUsd": 57,
"publishedAt": "2026-10-17T02:30:03-07:00",
"size": "US 12",
"title": "\"NIKE AIR JORDAN\" Men's AR-4430-106, SZ 12, Scuffs See Pics PLZ, Lift Off",
"url": "https://poshmark.com/listing/NIKE-AIR-JORDAN-Men-s-AR-4430-106-SZ-12-Scuffs-See-Pics-PLZ-Lift-Off-6ad340159d7e08fa29aece9c"
}
| Field | Type | Meaning |
|---|---|---|
listingId |
string | Poshmark listing ID. |
url |
string | Direct link to the listing. |
title |
string | Listing title as posted. |
brand |
['string', 'null'] | Brand as tagged by the seller. |
priceUsd |
['integer', 'null'] | Asking price in dollars. |
originalPriceUsd |
['integer', 'null'] | The seller's stated original retail price, when given. |
currency |
string | Currency code, USD on poshmark.com. |
size |
['string', 'null'] | Size with its system, e.g. "US 10". |
condition |
['string', 'null'] | new_with_tags or used. |
newWithTags |
boolean | True for new-with-tags listings. |
department |
['string', 'null'] | Department, e.g. Men, Women, Kids. |
colors |
array | Colors as tagged by the seller. |
availability |
['string', 'null'] | Inventory status. Always 'available' here: Poshmark's default search index carries live listings only. Sold comps come from the Poshmark Sold Comps actor. |
likeCount |
integer | How many users liked the listing - a demand signal. |
commentCount |
integer | Number of comments on the listing. |
publishedAt |
['string', 'null'] | When the listing was published (ISO timestamp). |
coverImageUrl |
['string', 'null'] | Cover photo URL. |
description |
string | The seller's full free-text description, read from the listing's own page. Only present when Fetch descriptions is on. The seller's handle, name and profile are never read. |
imageUrls |
array | Every photo of the listing, medium size, in the seller's order (up to 8). Present when the listing's own page was read: through listingIds, or with scrapeDetails on. The search grid carries only coverImageUrl. |
Health
100.0% success over 27 public runs in the last 30 days. Live record, failures included: status page.
Full documentation, examples and the AI-assistant prompt live on the store page.