Poshmark Listings Scraper
Pricing
from $0.48 / 1,000 item extracteds
Poshmark Listings Scraper
Search public Poshmark listings and seller closets or fetch listing URLs. Export normalized prices, brands, sizes, conditions, sellers, images, availability, and source URLs.
Pricing
from $0.48 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Export Poshmark listings from public marketplace searches, seller closets, and individual listing URLs. The Actor turns each public item into a normalized row containing listing identity, seller, brand, category, size, condition, current and original price, images, inventory status, timestamps, and source URL.
Use the output for repeatable resale inventory snapshots, price analysis, assortment research, or a spreadsheet and data-pipeline export. No Poshmark login or cookies are required.
What does Poshmark Listings Scraper do?
The Actor accepts three public input routes:
- a marketplace search phrase such as
nike shoes; - one or more Poshmark search or seller closet URLs;
- one or more individual public listing URLs.
Searches and closets are paginated until maxItems unique records have been saved or Poshmark reports no next page. Individual listing URLs use the public listing detail endpoint. You can request available, sold, or all inventory states.
The default dataset always contains the same normalized listing record shape, so downstream code does not need a separate parser for each input route.
Who is this Poshmark data for?
- Resellers comparing active inventory and asking prices before sourcing or listing products.
- Pricing analysts building sold-listing snapshots for comparable-product analysis.
- Brands and marketplace teams reviewing public assortment and seller distribution.
- Data teams loading normalized resale inventory into a warehouse or dashboard.
- Researchers studying public secondhand-market listings responsibly.
Why use this Actor?
- Search, closet, and listing-detail inputs share one output contract.
- Inventory status can be restricted to available or sold listings.
- Stable listing IDs support deduplication and snapshot comparisons.
- Pagination stops exactly at the requested unique-item limit.
- Rich search responses avoid unnecessary image downloads and detail-page requests.
- JSON, CSV, Excel, API, webhook, and integration exports are available through Apify.
The Actor does not log in, purchase items, message sellers, change listings, or bypass private-account controls.
What Poshmark listing data is extracted?
| Field | Meaning |
|---|---|
listingId | Stable public Poshmark listing identifier |
title | Listing title |
description | Seller-provided description when exposed |
sellerUsername | Public seller closet username |
sellerName | Public seller display name when exposed |
sellerUrl | Public seller closet URL |
brand | Listing brand |
department | Top-level department |
category | Listing category |
subcategory | More specific category feature when exposed |
size | Displayed size |
condition | Normalized condition label |
price | Current listing or sold price |
originalPrice | Seller-provided original price |
currency | ISO currency code |
availability | Public inventory status, such as available or sold_out |
imageUrl | Primary full-size image URL |
imageUrls | All exposed full-size image URLs |
colors | Seller-selected colors |
createdAt | Poshmark creation timestamp |
updatedAt | Poshmark update timestamp |
sourceUrl | Public listing URL |
scrapedAt | Time this Actor saved the snapshot |
Fields can be null when a seller or Poshmark does not expose a value.
How to scrape Poshmark listings
- Open the Actor in Apify Console.
- Enter a search query, add Poshmark URLs, or use both.
- Choose Available, Sold, or All inventory.
- Set the maximum number of listings.
- Click Start.
- Open the Dataset tab and export JSON, CSV, Excel, XML, or RSS.
A practical first run is:
{"searchQuery": "nike shoes","inventoryStatus": "available","maxItems": 20}
Input parameters
| Input | Type | Default | Description |
|---|---|---|---|
searchQuery | string | — | Marketplace search phrase. |
startUrls | array | [] | Public Poshmark search, closet, or listing URLs. |
inventoryStatus | string | available | available, sold, or all. |
maxItems | integer | 20 | Maximum unique records across all inputs; 1–1,000. |
Provide at least searchQuery or one URL. Supported URL forms include:
https://poshmark.com/search?query=nike%20shoes&type=listingshttps://poshmark.com/closet/sneakerdivahttps://poshmark.com/listing/product-title-65abcdef0123456789abcdef
URLs outside poshmark.com, unsupported Poshmark page types, and malformed limits fail the run with a clear non-zero error rather than silently returning an empty dataset.
Output example
A current run returns records shaped like this (public identity values below are anonymized):
{"listingId": "65abcdef0123456789abcdef","title": "Running shoes in excellent condition","description": "Lightly worn and stored in a smoke-free home.","sellerUsername": "samplecloset","sellerName": "Sample Seller","sellerUrl": "https://poshmark.com/closet/samplecloset","brand": "Sample Brand","department": "Women","category": "Shoes","subcategory": "Athletic Shoes","size": "US 8","condition": "Used - good","price": 45,"originalPrice": 90,"currency": "USD","availability": "available","imageUrl": "https://di2ponv0v5otw.cloudfront.net/posts/example/image.jpg","imageUrls": ["https://di2ponv0v5otw.cloudfront.net/posts/example/image.jpg"],"colors": ["Black", "White"],"createdAt": "2025-01-15T12:00:00-08:00","updatedAt": "2025-01-20T09:30:00-08:00","sourceUrl": "https://poshmark.com/listing/65abcdef0123456789abcdef","scrapedAt": "2025-01-20T17:30:00.000Z"}
How much does it cost to scrape Poshmark listings?
Pricing uses one $0.001 start fee per run plus a tiered fee for each unique listing saved. Current per-listing prices are:
| Plan | Price per saved listing |
|---|---|
| Free | $0.00092 |
| Bronze | $0.00080 |
| Silver | $0.000624 |
| Gold | $0.00048 |
| Platinum | $0.00048 |
| Diamond | $0.00048 |
At Bronze rates, 100 saved listings cost about $0.081 including the start event; 1,000 cost about $0.801. Empty, rejected, failed, and duplicate records do not receive an item charge. Apify shows the live charge limit before and during a run.
Recurring inventory and price snapshots
Schedule the same input daily or weekly and keep the stable listingId as the comparison key. A downstream workflow can:
- store each run with its
scrapedAttimestamp; - compare current
price,availability, andupdatedAtvalues; - detect new IDs, removed IDs, and changed listings;
- send only the change set to a dashboard or alerting system.
This Actor produces snapshots. It does not maintain history or send alerts by itself.
Export to a spreadsheet or data pipeline
From the Dataset tab, choose CSV or Excel for analysis in Google Sheets, Excel, or a BI tool. For automated pipelines, use the dataset API, a webhook, Make, Zapier, n8n, or an Apify integration.
Useful warehouse keys are:
listingIdas the source primary key;scrapedAtas the snapshot time;priceandcurrencyas separate typed columns;availabilityfor active-versus-sold segmentation.
Run with the Apify API
Replace APIFY_TOKEN with your Apify token.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~poshmark-public-listings-api/runs?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQuery":"nike shoes","inventoryStatus":"available","maxItems":20}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/poshmark-public-listings-api').call({searchQuery: 'nike shoes',inventoryStatus: 'available',maxItems: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient(token='APIFY_TOKEN')run = client.actor('automation-lab/poshmark-public-listings-api').call(run_input={'searchQuery': 'nike shoes','inventoryStatus': 'available','maxItems': 20,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with MCP and AI agents
Add the Actor to Claude Code through Apify MCP:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/poshmark-public-listings-api"
Claude Desktop, Cursor, and VS Code
Claude Desktop, Cursor, and VS Code clients can use this HTTP MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/poshmark-public-listings-api"}}}
Example prompts:
- “Find 50 available Poshmark listings for vintage denim and summarize the price distribution.”
- “Export 25 sold Lululemon listings and group them by size and condition.”
- “Fetch this public Poshmark closet and return listing IDs, prices, and update times.”
Reliability, pagination, and retries
The Actor uses Poshmark's public structured web endpoints rather than rendering a browser or downloading product images. Each request has a 45-second timeout. Network failures, HTTP 429 responses, and temporary 5xx responses are retried up to three times with exponential backoff and jitter.
Invalid inputs and stable client errors are not retried blindly. If Poshmark returns an unexpected response or the retry budget is exhausted, the run fails instead of presenting a partial upstream failure as a successful empty result.
Duplicate listing IDs across combined inputs are saved and charged once.
Limitations
- Only public US Poshmark web data is supported.
- Poshmark can change undocumented public response structures without notice.
- Some fields are absent on some listings and are returned as
nullor an empty array. maxItemsis capped at 1,000 per run.- Search ranking and result availability are controlled by Poshmark.
soldmaps to Poshmark's publicsold_outinventory state.- The Actor does not scrape private data, authenticate, buy, offer, like, share, follow, or message.
- Snapshot comparison, storage history, dashboards, and alerts belong in your downstream workflow.
Responsible use and legality
Scrape only public information for a lawful purpose. Respect applicable privacy, database, intellectual-property, consumer-protection, and contract rules. Avoid collecting unnecessary personal data, apply retention limits, and honor valid deletion or access requests. You are responsible for your inputs, processing purpose, and downstream use.
This Actor is an independent data-extraction tool and is not affiliated with, endorsed by, or sponsored by Poshmark.
Troubleshooting
Why did my run return no listings?
Check that the search or closet currently has records in the selected inventory state. Try inventoryStatus: "all" to distinguish a status mismatch from a genuinely empty source. A valid empty source completes successfully with zero item charges.
Why was my URL rejected?
The URL must use poshmark.com and identify a search page, seller closet, or public listing. Home pages, account pages, feeds, comments, and non-Poshmark URLs are intentionally rejected.
Why did the run fail after retries?
Poshmark may be temporarily unavailable or rate-limiting requests. Review the final log message, wait briefly, and rerun. Persistent unexpected-response errors can indicate an upstream schema change.
Can I combine searches and URLs?
Yes. Set searchQuery and startUrls together. The Actor processes them in order, deduplicates by listingId, and stops at the shared maxItems limit.
FAQ
Does this require a Poshmark account?
No. It reads only public marketplace data and does not use login credentials.
Can it scrape seller closets?
Yes. Add one or more public /closet/<username> URLs to startUrls.
Can it collect sold listings?
Yes. Set inventoryStatus to sold. The normalized output reports Poshmark's source state as sold_out.
Does it download listing images?
No. It saves exposed image URLs, which reduces runtime, storage use, and network transfer.
How are duplicates handled?
The first occurrence of each listing ID is saved. Later occurrences in the same run are ignored and not charged.
Related automation-lab Actors
- Poshmark Scraper — a simpler category/search-card scraper for existing integrations using that output contract.
- Mercari US Listings Scraper — public US resale marketplace listings from Mercari.
- Facebook Marketplace Public Listings Scraper — public Marketplace listing discovery for broader local-resale research.
Support
For reproducible problems, include the public input route, a small sanitized input, run ID, expected result, and observed error. Do not include passwords, cookies, private messages, payment details, or other secrets.