Poshmark Listings Scraper avatar

Poshmark Listings Scraper

Pricing

from $18.00 / 1,000 poshmark listing saveds

Go to Apify Store
Poshmark Listings Scraper

Poshmark Listings Scraper

Scrape public Poshmark browse and listing pages for resale sourcing, price research, and market analysis. Returns prices, brands, sizes, images, availability, engagement, timestamps, and public seller handles. Not for private accounts or contact harvesting. $0.018/listing plus platform usage.

Pricing

from $18.00 / 1,000 poshmark listing saveds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

15 days ago

Last modified

Share

Poshmark Listings Scraper for Resale Data

Use this Apify Actor to turn a keyword, a public Poshmark browse page, or a direct listing URL into one record per saved listing. It is built for resale sourcing, price research, assortment monitoring, and market analysis, and it returns public fields such as title, brand, size, price, availability, images, engagement counts, timestamps, and public seller handles. The actor works as an Apify Actor usable through Apify MCP, with a stable dataset-backed output for downstream analysis.

Best fit and connected workflows

This Actor fits workflows that begin with a public Poshmark search phrase or saved browse page and end with structured listing data.

Common routing patterns include:

  • Keyword research for a brand or product phrase, then comparison across price, size, and availability.
  • A curated public browse URL with Poshmark filters preserved, then extraction into a dataset for analysis.
  • A direct listing URL when you need one exact item record, its public photos, and seller context.
  • Sold-comparable research using the sold availability filter and publication timestamps.
  • Agent workflows that need a consistent JSON record per listing and a clean dataset readback through Apify MCP or the Actor API.

Practical scenario

Maya is checking a public Poshmark browse page for running shoes. She starts with the keyword nike shoes, keeps availability set to available, and lets the Actor enrich each listing page. The returned record includes title, brand, size, price, like count, published time, listing URL, and seller username. Maya uses those fields to shortlist items for sourcing and opens the listing URLs to review the public photos before choosing the next watchlist action.

Inputs

FieldTypeDefaultPurpose
searchQuerystringnike shoesProduct or brand phrase converted to a public Poshmark browse URL.
startUrlsarray[]Public Poshmark /browse/, /brand/, /category/, or /listing/ URLs.
maxResultsinteger25Maximum number of validated listings saved and billed in the run.
includeDetailsbooleantrueOpens each public listing page to refresh price, inventory, images, engagement, and timestamps.
availabilitystringavailableReturns available listings, sold listings, or both.
departmentstringWomenDepartment used for keyword-generated browse pages and server-rendered availability filters.
sortBystringrelevance_v2Browse order for keyword-generated results.
maxConcurrencyinteger3Parallel request cap for public Poshmark requests.
proxyConfigurationobjectApify Residential proxy in the USNetwork route for public Poshmark pages.

Focused input example

{
"searchQuery": "lululemon define jacket",
"availability": "sold",
"department": "Women",
"sortBy": "added_desc",
"maxResults": 20,
"includeDetails": true,
"maxConcurrency": 3
}

Output fields

Each dataset row represents one complete validated public Poshmark listing.

FieldTypeMeaning
listingIdstringStable Poshmark listing identifier.
listingUrlstringPublic canonical-style Poshmark listing URL.
titlestringPublic listing title.
descriptionstring or nullPublic seller-written description, capped at 5,000 characters.
brandstring or nullBrand assigned to the listing.
departmentstring or nullTop-level catalog department such as Women or Men.
categorystring or nullCatalog category.
subcategorystring or nullFirst catalog feature or subcategory when present.
sizestring or nullSeller-selected display size.
pricenumber or nullCurrent listing price.
originalPricenumber or nullOriginal or compare-at price.
currencystring or nullCurrency code supplied by Poshmark, normally USD.
discountPercentnumber or nullCalculated percentage below original price.
availabilitystringNormalized item inventory status.
statusstring or nullRaw public status returned by Poshmark.
isSoldbooleanWhether the listing inventory is sold out.
isMultiItembooleanWhether inventory contains multiple item units or sizes.
quantityAvailableinteger or nullSum of publicly exposed available size quantities.
imageUrlstring or nullLargest available cover image URL.
imageUrlsarrayDeduplicated public listing image URLs, capped at 12.
colorsarrayPublic color labels assigned to the listing.
styleTagsarrayPublic style tags assigned to the listing.
sellerUsernamestring or nullPublic Poshmark seller handle.
sellerDisplayNamestring or nullPublic display name shown with the listing.
sellerProfileUrlstring or nullPublic closet URL constructed from the seller handle.
likeCountintegerPublic listing like count.
commentCountintegerPublic listing comment count.
shareCountintegerPublic listing share count.
publishedAtstring or nullFirst public publication time when available.
updatedAtstring or nullLast public update time when available.
statusChangedAtstring or nullMost recent public listing or inventory status-change time.
sourceUrlstringSource page from which the listing was collected.
scrapedAtstringUTC timestamp when the record was normalized.

Illustrative output record

{
"listingId": "6a50a7029f19e233e4b2264d",
"listingUrl": "https://poshmark.com/listing/Nike-Flex-Shoes-Running-Athletic-Sneakers-Sz-11-6a50a7029f19e233e4b2264d",
"title": "Nike Flex Shoes Running Athletic Sneakers Sz. 11",
"description": "Nike Flex Running Shoes size 11. Great shape!",
"brand": "Nike",
"department": "Women",
"category": "Shoes",
"subcategory": "Athletic Shoes",
"size": "11",
"price": 13,
"originalPrice": null,
"currency": "USD",
"discountPercent": null,
"availability": "available",
"status": "published",
"isSold": false,
"isMultiItem": false,
"quantityAvailable": 1,
"imageUrl": "https://di2ponv0v5otw.cloudfront.net/posts/example.jpg",
"imageUrls": [
"https://di2ponv0v5otw.cloudfront.net/posts/example.jpg"
],
"colors": [
"Pink",
"White"
],
"styleTags": [
"Athleisure",
"Activewear"
],
"sellerUsername": "public_seller",
"sellerDisplayName": "Public Seller",
"sellerProfileUrl": "https://poshmark.com/closet/public_seller",
"likeCount": 3,
"commentCount": 0,
"shareCount": 2,
"publishedAt": "2026-07-10T08:02:25.000Z",
"updatedAt": "2026-07-13T16:05:32.000Z",
"statusChangedAt": "2026-07-10T08:02:25.000Z",
"sourceUrl": "https://poshmark.com/browse/nike-shoes",
"scrapedAt": "2026-07-15T10:00:00.000Z"
}

How it works

The Actor accepts either a search keyword or a list of public Poshmark URLs. When you provide a keyword, it converts it into a public browse URL. When you provide startUrls, those URLs take precedence.

It reads public /browse/, /brand/, /category/, and /listing/ pages only. When includeDetails is enabled, it opens each public listing page before saving the record so the dataset can include refreshed price, inventory, images, engagement, and timestamps. Saved rows are normalized into the default dataset with a consistent field contract.

Pricing

This Actor uses pay per event plus Apify platform usage.

  • Actor start: charged once per run, scaled by allocated memory
  • Poshmark listing saved: charged for each complete validated public listing saved to the default dataset
  • Apify compute and proxy usage: billed separately through the platform

For current pricing, open the live Pricing tab on the Actor page.

As an example, a run that saves ten listings records ten listing saves, and the event-based charge follows the live Pricing tab, plus platform usage.

Use with AI agents (MCP)

This Actor is available as an Apify Actor usable through Apify MCP. The tool exposes structured inputs and a dataset-backed output that agents can read after the run.

Tool description: Extract public Poshmark listings from a keyword, browse URL, or direct listing URL, then read normalized listing records from the default dataset.

Actor identity: khadinakbar/poshmark-listings-scraper

Use khadinakbar/poshmark-listings-scraper for public Poshmark resale research. Start from a keyword or browse URL, then return the dataset rows with title, brand, size, price, availability, images, seller handle, and timestamps.

Output interpretation: Each dataset row is one public listing saved as a complete validated record. availability provides the normalized inventory state, while status, isSold, quantityAvailable, and statusChangedAt add public context. sourceUrl shows the browse page or listing URL that produced the record.

Provenance and scope: The Actor works from public Poshmark pages only. It surfaces public seller handles and public closet URLs, while keeping the collection centered on listing data.

Pagination and cost guidance: maxResults sets the hard cap for validated listings saved and billed across the run. Higher maxConcurrency can speed up larger detail runs, while lower values create a gentler request pattern. includeDetails adds a public listing-page refresh before each row is saved.

Apify API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor('khadinakbar/poshmark-listings-scraper').call({
searchQuery: 'nike shoes',
availability: 'available',
department: 'Women',
sortBy: 'relevance_v2',
maxResults: 10,
includeDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Best results and outcome guidance

Use a specific brand or product phrase for keyword runs when you want broad public browse coverage. Use startUrls when you already have a filtered browse page or a direct listing URL. Set availability to match the research task, such as available listings for sourcing or sold listings for comparable-sales review. Keep includeDetails enabled when freshness, images, and engagement matter, and use a lower maxConcurrency when you want a gentler request pattern. For larger research jobs, increase maxResults only as far as the analysis needs.

Continue the workflow

Design note

I found that the dataset contract includes both sellerUsername and sellerProfileUrl, which makes public seller context easy to reuse without relying on account-internal fields.

FAQ

Can I use this Actor for a saved browse URL with Poshmark filters?

Yes. startUrls accepts public /browse/ URLs, so you can keep the Poshmark filters already present in the page.

Can I request one exact listing page?

Yes. A public /listing/ URL can be passed in startUrls to collect a single exact item record.

How do I switch between live sourcing and sold-comparable research?

Use the availability input. available is suited to live sourcing, sold to sold-comparable analysis, and all to collect both.

Which department should I pick for keyword-generated searches?

Choose the public Poshmark department that matches the item family, such as Women, Men, Kids, Home, Electronics, or Pets.

What happens if I need richer listing details?

Keep includeDetails enabled. The Actor opens each public listing page before saving it so the record can include refreshed price, inventory, images, engagement, and timestamps.

Responsible use

Use this Actor on public Poshmark pages only and in ways that align with applicable law, Poshmark's terms, privacy rules, and your own contractual obligations. The output is designed for listing analysis, resale sourcing, and market research, with a scope centered on public listing data rather than contact harvesting, private account access, or account automation.