Poshmark Listings Scraper
Pricing
Pay per event
Poshmark Listings Scraper
Scrape live Poshmark listings by search keyword or department/category — price, condition, size, brand, seller, and photos per row, fully resolved with zero per-item fetches. We rotate fingerprints and retry blocks so your dataset stays clean.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
Share
🎯 What this scrapes
Poshmark doesn't publish a clean bulk-export of its own listings, and the field's own volume leader has zero reviews to show for 3,000+ runs. This Actor reads Poshmark's own server-rendered search and category pages — the same window.__INITIAL_STATE__ payload the site ships to every browser, not a private reverse-engineered endpoint — so resale-market researchers and inventory tools get fully-resolved listing data (price, condition, seller, brand, photos) in one pass, no per-item detail fetch required.
🔥 What we handle for you
- 🛡️ Browser fingerprint rotation —
curl-cffiimpersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python. - 🌐 Proxy rotation via Apify Proxy — fresh session and exit IP on every block.
- 🔁 Retries with exponential backoff on
408 / 429 / 503— up to 5 attempts per page,Retry-Afterhonoured. - 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
- 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
- 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.
💡 Use cases
- Reseller comps pricing — pull current asking prices by keyword or category before pricing your own inventory.
- Inventory sourcing — scan a category for underpriced items matching a brand or condition profile.
- Brand monitoring — track how many listings and what price band a brand holds on Poshmark right now.
- Resale-market research — build a keyword-level snapshot of active supply, condition mix, and seller activity.
⚙️ How to use it
- Click Try for free at the top of the page.
- Fill in the input form — provide a search query, a category, or both (query wins when both are set).
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
query | string | no* | '—' | Free-text search keyword, e.g. "nike jacket". Takes precedence over category when both are set. |
category | string | no* | '—' | Department/category path to browse instead of searching, e.g. "Women-Dresses". Ignored when query is also set. |
maxResults | integer | no | 200 | Cap on total emitted rows per run. Pagination stops early once reached. |
proxyConfiguration | object | no | {"useApifyProxy": true} | Datacenter proxy by default. Never set this to the RESIDENTIAL group — it has zero available IPs on the free plan. |
* At least one of query / category is required.
Example input
{"query": "nike jacket","maxResults": 3,"proxyConfiguration": {"useApifyProxy": true}}
📤 Output
Every row is one dataset item.
| Field | Type | Notes |
|---|---|---|
listing_id | string | Poshmark's own listing ID. |
title | string | Listing title. |
description | ['string', 'null'] | Listing description. |
price | number | Current asking price, USD. |
original_price | ['number', 'null'] | Original asking price before any markdown, USD. |
currency | string | Price currency code, default 'USD'. |
condition | ['string', 'null'] | Poshmark's own condition short code, e.g. 'uln'. |
size | ['string', 'null'] | Listing size, display form when available. |
brand | ['string', 'null'] | Brand tag. |
department | ['string', 'null'] | Department, e.g. 'Men'. |
category | ['string', 'null'] | Category, e.g. 'Jackets & Coats'. |
seller_username | string | Seller's Poshmark username. |
seller_full_name | ['string', 'null'] | Seller's display name. |
like_count | integer | Number of likes. |
comment_count | integer | Number of comments. |
status | string | Listing status, e.g. 'published'. |
is_available | boolean | Derived: true when inventory status is 'available'. |
colors | array | Listed color tags — may be empty, never null. |
picture_url | ['string', 'null'] | Cover photo URL. |
photo_urls | array | All listing photo URLs — may be empty, never null. |
listing_url | string | Canonical poshmark.com/listing/ URL, constructed with no extra fetch. |
scraped_at | string | ISO-8601 UTC timestamp when this row was recorded. |
Example output
{"listing_id": "6a6e55a3b14a06829f1dc05f","title": "Nike Sb Jacket","description": null,"price": 70.0,"original_price": null,"currency": "USD","condition": "uln","size": "L","brand": "Nike","department": "Men","category": "Jackets & Coats","seller_username": "closet_example","seller_full_name": "Example Seller","like_count": 12,"comment_count": 2,"status": "published","is_available": true,"colors": ["Black"],"picture_url": "https://di2ponv0v5otw.cloudfront.net/posts/2026/08/10/example.jpg","photo_urls": ["https://di2ponv0v5otw.cloudfront.net/posts/2026/08/10/example.jpg"],"listing_url": "https://poshmark.com/listing/Nike-Sb-Jacket-6a6e55a3b14a06829f1dc05f","scraped_at": "2026-08-15T12:00:00.000Z"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.05 | One-off warm-up charge per run |
listing-result | $0.0015 | Charged for each listing row written to the dataset |
Example: 1 000 results at the rates above ≈ $1.55. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
Sold/historical listings and seller-closet crawls are out of scope — only live, published listings from the search/category grid are returned. Custom sort order isn't supported; results follow Poshmark's own default relevance/recency ranking. Non-US Poshmark storefronts are unverified and out of scope for v1.
❓ FAQ
Do I need a Poshmark account or API key?
No. This Actor reads Poshmark's own publicly server-rendered search and category pages — no login, no API key.
What happens if I set both Search query and Category?
Search query wins — Category is ignored and a warning is logged. Neither endpoint accepts a combined filter.
Do I need a residential proxy?
No — Poshmark's search and category pages return clean 200s from datacenter IPs. proxyConfiguration defaults to standard Apify Proxy, no forced group.
Does this fetch each listing's detail page?
No — the search/category grid data already carries every field this Actor emits, so there's no extra per-item HTTP call.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.