Tony Wang6 min readHow to Scrape Poshmark in 2026 (API & Python)
Scrape Poshmark in 2026 — listings, closets, brands, and trends via DIY Python, no-code tools, or a structured API — plus what Poshmark's ToS allows.
Poshmark doesn't offer a general-purpose public API for reading its catalog, so the fastest reliable path in 2026 is a structured scraping API that returns normalized JSON for search results, listing detail, seller closets, and brand/category data — instead of parsing Poshmark's listing pages yourself. Poshmark sits in the same resale genre as StockX, but the shape is different: it's social-selling, not an order book, so the data worth collecting is closet reputation and community activity (likes, comments, followers) as much as price.
Why scrape Poshmark data?
- Resale-price research — track what a brand or item category actually sells for on a peer-to-peer resale platform, as a comp against retail or other marketplaces.
- Brand and trend tracking — pull listing counts and pricing by brand, or follow a curated trend (e.g., "Vintage Celine Handbags") to see what's circulating.
- Seller/closet monitoring — watch a specific closet's inventory, rating, and sold-item count over time for competitive or sourcing research.
- Market and category research — use the department/category taxonomy to size how many active listings exist in a given niche.
- AI pipelines and agents — feed normalized listing and brand data into a pricing or sourcing agent instead of screen-scraping HTML.
Is it legal to scrape Poshmark?
Option 1: DIY in Python (and why it breaks)
A naive scraper fetches a search results page or closet page and parses listing cards out of the rendered markup:
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://poshmark.com/search?query=nike+jacket",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Listing cards render from client-side state (React), so a plain HTML
# parse mostly returns an empty shell — you end up reverse-engineering
# the app's internal JSON endpoints instead
It demos once, then breaks:
- The ToS is explicit. Section 4(b) names scraping, harvesting, and automated collection directly, and Poshmark's
robots.txtdisallows/search,/listings, and/apifor every crawler. - Anti-bot defenses. Poshmark fronts its site with bot detection; datacenter IPs and headless requests get rate-limited or blocked quickly, especially on search and closet pages.
- Client-rendered markup. Listing grids, closet stats, and trend pages render from JavaScript state, not stable server HTML — a layout change silently breaks CSS-selector scraping.
- No sanctioned alternative. Unlike eBay or StockX, Poshmark doesn't run a developer portal at all, so there's no official-but-gated API to fall back on.
Option 2: No-code / ready-made tools
Browser extensions and point-and-click scrapers can export a single search page or closet snapshot, but tracking a brand's resale prices or a seller's inventory over time means re-pulling the same pages on a schedule — a job for a stable endpoint with stored history, not a one-off export.
Option 3: A structured Poshmark API
For a repeatable workflow, a Poshmark scraping API returns normalized JSON for search, listing detail, closets, brands, categories, and trends — no page parsing, no waiting on an app that doesn't exist. Search by keyword:
curl "https://api.crawlora.net/api/v1/poshmark/search?query=nike+jacket" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"total": 5000,
"has_more": true,
"next_max_id": "ENC_eyJtYXhfaWRzIjpbNDksMSwxXSwicGFnZV9udW0iOjIsInBhZ2VfZ3JvdXBfaWQiOiI2YTcyZTE3OTI1MzYyMTUzMDNhMmVmMWEifQ",
"listings": [
{
"id": "6a6353cb88849a5f185280ea",
"title": "Nike Jacket",
"price": 19,
"original_price": 98,
"condition": "gu",
"brand": "Nike",
"category": "Jackets",
"department": "Men",
"size": "M",
"colors": ["Black"],
"status": "published",
"cover_shot": "https://di2ponv0v5otw.cloudfront.net/posts/2026/07/24/x/m_x.jpg",
"like_count": 12,
"comment_count": 2,
"seller_username": "maltimar",
"url": "https://poshmark.com/listing/6a6353cb88849a5f185280ea"
}
],
"source_url": "https://poshmark.com/search?query=nike+jacket"
}
}
query is required; department and max_id (cursor pagination, from next_max_id) narrow and page results. Pull full listing detail, a seller's closet, or a brand's active listings:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/poshmark"
hits = requests.get(f"{base}/search", headers=h, params={"query": "nike jacket"}).json()["data"]["listings"]
listing_id = hits[0]["id"]
listing = requests.get(f"{base}/listing/{listing_id}", headers=h).json()["data"]
closet = requests.get(f"{base}/closet/maltimar", headers=h).json()["data"]
brand = requests.get(f"{base}/brand/Nike", headers=h).json()["data"]
A listing detail call carries the full seller reputation object — closet rating breakdown, items sold, and orders shipped, alongside listing comments (real fields — check the docs):
{
"code": 200,
"msg": "OK",
"data": {
"id": "6a3fed1de9c77df92e2c0cc6",
"title": "NWT Farm Rio Shorts",
"price": 55,
"original_price": 95,
"condition": "nwt",
"brand": "FARM Rio",
"category": "Shorts",
"department": "Women",
"size": "S",
"colors": ["Red", "Yellow"],
"status": "published",
"like_count": 111,
"comment_count": 4,
"seller": {
"username": "maltimar",
"full_name": "Mary Altimar",
"followers": 9096,
"items_sold_display": "500+",
"rating_average": 4.93,
"rating_count": 368,
"rating_breakdown": {
"five_star": 355,
"four_star": 7,
"three_star": 2,
"two_star": 3,
"one_star": 1
},
"orders_shipped": 522,
"url": "https://poshmark.com/closet/maltimar"
},
"comments": [
{ "comment": "Hi can you tell me the width of the waist?", "creator_username": "muvlax20" }
],
"source_url": "https://poshmark.com/listing/6a3fed1de9c77df92e2c0cc6"
}
}
/poshmark/categories returns the full department/category tree (path values like Women-Shoes) to drive /poshmark/category/{path}, and /poshmark/trend/{id} pages a curated trend collection the same way search results page.
What you can collect
- Search results: title, price, original price, condition, brand, category, department, size, colors, like/comment counts, and listing URL
- Listing detail: description, cover shot and pictures, full seller reputation (rating average, rating breakdown, items sold, orders shipped), and visible comments
- Seller closets: profile plus paginated active listings for a given username
- Brand data: full brand directory (29,000+ names with aliases) and per-brand active listings
- Category taxonomy: department → category tree with path identifiers for browsing
- Trend collections: curated groupings (e.g., a designer or style trend) with their listings
Limitations
- No official API exists. Poshmark doesn't run a developer portal at all — there's no gated-but-sanctioned alternative to fall back on, unlike eBay or StockX.
- ToS and robots.txt both restrict scraping. Section 4(b) names scraping and harvesting directly, and
robots.txtdisallows/search,/listings, and/apifor every crawler — this isn't an ambiguous case. - Prices and stats are a snapshot. Poshmark items get repriced, bundled, or marked sold constantly, and closet rating/follower counts shift daily — timestamp what you store.
- Public data only. This covers public listing, closet, and brand pages — not private messages, offers, or a way to place an order on a buyer's behalf.
- Cursor pagination. List endpoints use an opaque
max_id/next_max_idcursor rather than page numbers — carry it forward rather than trying to compute offsets.
Where this gets used
- Resale and sourcing research — compare a brand's Poshmark asking prices against retail or another resale marketplace.
- Closet and competitor monitoring — track a seller's inventory, pricing, and reputation growth over time.
- Trend and category sizing — measure how many active listings exist for a brand, category, or curated trend.
Sources
Start collecting
Try it first, free: run any public URL through the Free Web Scraper, or check whether a site blocks bots with the Anti-Bot Checker — no signup.
Test the search, listing, closet, and brand endpoints in the Playground, check the request and response schema in the API docs, and review credit costs on the pricing page. Poshmark is the social-selling counterpart to the live order-book resale data in how to scrape StockX and the fixed-price listings in how to scrape eBay — pair them for a fuller secondhand-market picture, or add the handmade/vintage angle from how to scrape Etsy. See also how to scrape Mercari for the general secondhand-marketplace version of the same closet-selling model and is web scraping legal.
Part of our how-to-scrape guide series — every platform we cover, in one index.
Frequently asked questions
Does Poshmark have an official public API?
No. Poshmark does not publish a developer portal or a general-purpose public API for reading its catalog, unlike marketplaces such as eBay or StockX that offer a gated developer API. Third-party scraping APIs are the practical way to get normalized listing, closet, and brand data.
Is it legal to scrape Poshmark?
Public listing facts aren't copyrightable and accessing purely public data generally isn't a CFAA violation, but Poshmark's Terms of Service (Section 4(b)) explicitly prohibit scraping, harvesting, and automated data collection, and its robots.txt disallows crawling /search, /listings, and /api. This isn't legal advice — treat it as a real restriction, not a gray area, and see our full legal breakdown for more.
What data can I get from a Poshmark listing?
A listing detail call returns title, description, price, original price, condition, brand, category, department, size, colors, cover photo and pictures, like and comment counts, visible comments, and the seller's closet reputation object (rating average, rating breakdown, items sold, orders shipped).
How do I look up a Poshmark seller's closet?
Call the closet endpoint with the seller's username (e.g. /poshmark/closet/{username}). It returns the seller's profile — followers, rating, items sold, orders shipped — plus a paginated list of their active listings, using a cursor (max_id) for pagination.
How does Poshmark pagination work?
Search, category, closet, brand, and trend endpoints all use cursor-based pagination: the response includes has_more and (for search) a next_max_id token. Pass that value back as the max_id parameter on the next call instead of computing a page offset.
Can I track how a brand is trending on Poshmark?
Yes — the brand endpoint returns active listings and a total count for a given brand, and the trend endpoint returns listings for a curated trend collection (for example a designer or style trend), both useful for tracking resale demand over time.
Is Poshmark price data reliable for market research?
Treat it as a snapshot. Poshmark sellers frequently reprice items, bundle listings, or mark them sold, and closet stats like followers and rating change daily, so timestamp anything you store rather than treating a single pull as a fixed price.