Poshmark Listings Scraper avatar

Poshmark Listings Scraper

Pricing

from $1.79 / 1,000 results

Go to Apify Store
Poshmark Listings Scraper

Poshmark Listings Scraper

Scrape public Poshmark listings using search phrases or supported search, brand, and category URLs. Results include titles, brands, sizes, asking prices, seller names, likes, comments, and image URLs. Embedded page data provides listing records without a separate request for every item.

Pricing

from $1.79 / 1,000 results

Rating

0.0

(0)

Developer

Axiom Works

Axiom Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Returns: one row per Poshmark listing with id, sourceUrl, title, price, currency, status, seller, and daysToSell. Input: {"searchQueries":["nike hoodie"],"maxItems":20} Best for: resale price comparisons, sold listing research, and public inventory datasets.

{
"id": "6abd5b1fadedd1ae8fbbdf56",
"sourceUrl": "https://poshmark.com/listing/6abd5b1fadedd1ae8fbbdf56",
"title": "Nike hoodie",
"price": 8,
"currency": "USD",
"status": "sold_out",
"seller": "dannielleweyer",
"daysToSell": 3.9
}

This Poshmark scraper provides public listing data for Poshmark API workflows. The record above came from a local run of the input shown above.

What does Poshmark Listings Scraper do?

Poshmark Listings Scraper collects public listing information from Poshmark search, brand, and category pages. Give it a search phrase such as nike hoodie, a public Poshmark search URL, or a brand or category URL. It reads the listing data included in the page, follows Poshmark's search cursor when more pages exist, and saves one dataset item for each unique listing. You can request sold listings, active listings, or both. The Actor does not require a Poshmark login.

The output is useful when comparing asking prices, examining a product category, or building a research dataset from publicly visible listings. For sold listings, the output includes the time when Poshmark's inventory status changed to sold out. The daysToSell value is calculated from that timestamp and the first publication timestamp. This is an estimate based on public page data. It is not a transaction record. In particular, price is the listing price visible in the search data; a private offer or negotiated final sale amount is not publicly established by this Actor.

The Actor runs as a batch job. It can traverse subsequent search pages until it reaches maxItems, runs out of pages, or finds no more eligible unique records. A single query may expose only a limited search depth, so narrower search phrases and filters can give more focused coverage. Search results and availability can change between runs as Poshmark updates its site.

What data can you get?

Each dataset item represents one Poshmark listing. Empty optional values appear as null rather than invented values. The dataset schema permits nulls because sellers do not fill in every detail and search pages may omit some properties.

FieldMeaning
idStable listing identifier used to remove duplicates within a run.
sourceUrlPublic listing URL associated with the item.
titleListing title.
priceListed price shown in search data.
currencyCurrency code of that listed price.
statusInventory status, such as sold_out.
listedAtFirst publication timestamp from the listing object.
createdAtTimestamp when the listing was created.
commentsNumber of comments on the listing.
soldAtInventory status change timestamp when the item is sold out.
daysToSellDifference between soldAt and listedAt, in days, rounded to one decimal.
brandBrand text on the listing, when provided.
sizeSize text on the listing, when provided.
originalPriceSeller supplied original price, when available.
conditionRaw condition code supplied by Poshmark.
departmentCatalog department display name.
categoryCatalog category display name.
sellerPublic seller username included in the search data.
likesListing like count.
imageMain listing picture URL.

A zero original price is returned as null because the source does not provide a meaningful original price in that case. The condition field retains the site's short code rather than translating it into a potentially misleading description. Times include the UTC offset provided in the page data. soldAt and daysToSell are null for active listings.

How to use

Open the Actor's input form in Apify Console. Enter one or more search phrases in Search queries. Choose sold, active, or all for availability, then set Maximum items to the number of unique listings you want to save. Run the Actor and open its dataset after the run finishes. The default input searches for sold Nike hoodies and asks for a small sample.

You can also pass a public Poshmark search, brand, or category URL in Start URLs. Existing URL filters are retained unless an input filter explicitly overrides them. The Actor validates the URL host and path before requesting the page. It accepts only HTTPS Poshmark target pages for this input. A malformed or unsupported URL fails input validation with a message explaining the accepted URL forms. A valid dead or blocked target saves no records and the Actor continues to the next target. A search phrase with no matches yields a warning and no placeholder records.

For multiple queries, the Actor collects them in input order and deduplicates listings by id. The maxItems limit applies across the whole run, not separately to each phrase. Search pages have a cursor; the Actor passes that cursor to the next page and stops if the site reports that no next page exists. It keeps request concurrency low and waits between requests. If a page is blocked or rate limited, the Actor retries with backoff and a fresh proxy session.

Input

InputDescriptionExample
searchQueriesSearch phrases to look up. Supply this or startUrls.["nike hoodie"]
startUrlsPublic Poshmark search, brand, or category URLs.[{"url":"https://poshmark.com/brand/Nike"}]
availabilitysold, active, or all; defaults to sold."sold"
brandOptional search brand filter."Nike"
sizeOptional search size filter."L"
departmentOptional department filter: Women, Men, Kids, Home, Pets or Electronics."Men"
minPriceOptional lower price bound; listings below it are dropped.20
maxPriceOptional upper price bound; listings above it are dropped.100
maxItemsMaximum unique results across the run, from 1 to 5000.20
proxyConfigurationApify Proxy configuration. Residential proxy is the default.{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}

Example input:

{
"searchQueries": ["nike hoodie"],
"availability": "sold",
"maxItems": 20,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

The required target is a search phrase or start URL. Optional brand and size inputs are passed as search filters. Poshmark controls the meaning and supported values of those filters. maxItems is a hard output and charging limit: if seven eligible unique listings are available and you set seven, exactly seven are saved. If fewer exist, only the listings found are saved. If no eligible listings exist, the dataset stays empty.

The hidden __verifySnapshots input can be set to true for source verification. It saves the raw listing JSON for the first ten records to the key value store as SNAPSHOTS, keyed by listing ID and output field. This diagnostic option does not add dataset items.

Output

The following item is from a local run using the sample sold query. It shows the shape of a real dataset item; live results may differ because listings and search order change.

{
"id": "6ab054e156502b35e0bba744",
"sourceUrl": "https://poshmark.com/listing/6ab054e156502b35e0bba744",
"title": "Nike White Hoodie with Black and Gold Logo",
"price": 10,
"currency": "USD",
"status": "sold_out",
"listedAt": "2026-09-20T14:55:16-07:00",
"soldAt": "2026-09-20T15:20:22-07:00",
"daysToSell": 0,
"brand": "Nike",
"size": "3XL",
"originalPrice": 40,
"condition": "ug",
"department": "Men",
"category": "Shirts",
"seller": "lsilbe",
"likes": 1,
"comments": 0,
"createdAt": "2026-09-20T14:50:02-07:00",
"image": "https://di2ponv0v5otw.cloudfront.net/posts/2026/09/20/6ab054e156502b35e0bba744/m_6ab05545f00c5594759926fb.jpg"
}

The Actor writes one item at a time with the result event. The listing ID is stable enough to identify the same public listing across search pages in a run. The main image URL is returned as text; the Actor does not download or store image files. If your downstream workflow needs the picture, it can use that URL separately under the target site's applicable conditions.

How much does it cost?

This Actor is charged per saved result. Set maxItems to cap both the number of dataset records and the number of result events for a run. Open the Actor's Pricing tab for the current terms. A run with zero saved listings has no result events. Retries and duplicate listings do not create extra result events, because charging is attached to each successful dataset push.

Proxy traffic and platform usage depend on your Apify account and run settings. Search pages can be relatively large, so narrower queries and a modest item limit can reduce run time. The Actor does not publish fixed price figures in this documentation because the Pricing tab is the current source for billing details.

Use with AI agents (MCP)

Apify's MCP server can expose the Actor as a tool to compatible AI agents. Configure an MCP server using https://mcp.apify.com/?tools=axiomworks/poshmark-listings-scraper and authorize it with your Apify account in the client. The tool's input schema tells the agent which search phrases and limits to send, while the output schema describes the listing fields it can read.

Example prompt: “Find up to twenty public sold Nike hoodie listings and show their listed prices, sold timestamps, and days to sell.” Another prompt: “Collect active listings for levis 501 jeans and compare the title, size, brand, and listed price.” Ask the agent to keep the maxItems limit small when exploring a broad category. An agent should treat missing optional fields as missing data rather than filling them from intuition.

The MCP tool returns data produced by the Actor run. The timestamps and numeric fields are calculated or copied by the Actor from public search JSON; there is no third party AI enrichment in this Actor. This helps the agent distinguish observed listing values from its own interpretation of those values.

Integrations and API

The dataset can be consumed in Apify Console, via Apify API, or through common integrations supported by the Apify platform. The examples below start a run with a small input. Replace YOUR_APIFY_TOKEN in your own environment; do not place a token in a public repository. The snippets use the Store path for this Actor.

Python example:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("axiomworks/poshmark-listings-scraper").call(run_input={
"searchQueries": ["nike hoodie"], "availability": "sold", "maxItems": 20
})
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())

JavaScript example:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('axiomworks/poshmark-listings-scraper').call({
searchQueries: ['nike hoodie'], availability: 'sold', maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

cURL example:

curl -X POST 'https://api.apify.com/v2/acts/axiomworks~poshmark-listings-scraper/runs' \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"searchQueries":["nike hoodie"],"availability":"sold","maxItems":20}'

The run response contains a run ID and dataset reference. Read the finished run's default dataset to retrieve the listing items. For repeat research, save the input JSON alongside the run ID so you know which search filters produced a dataset. Because site content changes, the same input can produce a different dataset at a later time.

FAQ

Is price the amount the buyer paid? No. It is the listed price in the public search data. Poshmark does not expose any private negotiated payment in this output. Treat it as an asking price, including for sold listings.

What does soldAt mean? It is the public inventory status change time for a sold out listing. It is the best timestamp available in the search item for this purpose, but it is not an independently verified payment timestamp. daysToSell uses this time and the first publication time.

Why is daysToSell zero sometimes? The calculation rounds to one decimal day. A listing that changes to sold out shortly after publication can therefore appear as zero. The source timestamps remain in listedAt and soldAt for more precise calculations.

Why are some values null? A search item may not contain a brand, condition, size, seller, image, or other optional attribute. The Actor does not guess values. Active listings also have no sold timestamp or days to sell value.

Can I collect more than one query? Yes. Add multiple phrases to searchQueries. The Actor processes them in order, removes duplicate IDs, and stops at the run-wide maxItems limit. If you need balanced samples for separate phrases, use separate runs with their own limits.

Can I use an existing filtered URL? Yes, if it is a public HTTPS Poshmark search, brand, or category page. The Actor retains URL filters and adds the availability, brand, and size controls specified in the input. Other hosts and unsupported URL paths are rejected before a request.

Why might a run return zero records? The query may have no matching public listings, a filter combination may be too narrow, or the site may have changed its search output. Review the final status and Actor log. Broaden the search, relax brand, size, department or price filters, or replace a dead URL with a public search or brand URL. If the log reports a persistent block, check your proxy settings and retry later. Successful targets still contribute records when another target fails.

Public listing information can be accessed without logging in, but rules for collecting and using it depend on your jurisdiction, purpose, and Poshmark's current terms. You are responsible for evaluating those conditions for your use. This Actor does not access private accounts or private sale details. It uses modest request pacing and retries temporary blocks with backoff. It is an independent tool and is not affiliated with, endorsed by, or operated by Poshmark.

Feedback

If a field becomes empty or a search page stops parsing, include a safe example input, the approximate run time, and the relevant error text when reporting the issue through the Actor's Apify Store feedback channel. Do not share access tokens or private account information. A report with the target URL and expected public field helps distinguish an input problem from a site data change. For data interpretation questions, specify whether the listing was active or sold and which timestamps or prices you compared.