
Google Ads Scraper
scrape.ly/store/querystone/google-ads-scraperLead generationSEO tools
4 monthly users

Scrape Poshmark sold listings (sold comps) and active listings by keyword, URL or seller closet: sold price, sold date, days to sell, brand, size, condition, photos and seller stats. No login needed.
Get real Poshmark sold prices (sold comps) and active listings in seconds: final sale price, sold date, days to sell, brand, size, condition, photos and seller, for any keyword, Poshmark URL or seller closet. No login, no browser, and every sold listing already includes the sold date, description and category at the base price.
Nike Air Jordan), paste Poshmark URLs, or add seller usernames.| Field | What it does |
|---|---|
searchTerms | Keywords; each runs its own Poshmark search |
startUrls | Poshmark search, brand, category, closet or listing URLs (poshmark.com or poshmark.ca) |
sellers | Usernames or closet URLs; each closet's listings are saved |
maxItems | Listings per search, URL or closet (default 20, 0 = all) |
listingStatus | sold (default), available or all |
department, category, subcategory | Poshmark catalog filters, e.g. women, Shoes, Boots |
brands, sizes, colors, conditions | Lists of brands, sizes, colors, conditions (nwt, ret, uln, ug, uf) |
shipping | any, free or discounted |
minPrice, maxPrice | Price range in USD (CAD on poshmark.ca) |
sortBy | newest (default), relevance, price_asc, price_desc, likes, price_drop |
market | us (poshmark.com) or ca (poshmark.ca) for search terms and usernames |
includeDetails | Adds shipping and seller stats (extra event) |
includeSimilarMatches | Keep Poshmark's "similar" suggestions when a term has no exact match |
{
"searchTerms": ["Lululemon leggings"],
"listingStatus": "sold",
"department": "women",
"minPrice": 20,
"maxPrice": 80,
"maxItems": 100,
"includeDetails": true
}
One row per listing.
| Field | Description |
|---|---|
listingId, url, title | Listing ID, link and title |
soldPrice, price, originalPrice, firstListedPrice, currency | Final sale price (sold listings), current price, the seller's original retail price, the first asking price |
soldAt, listedAt, daysToSell | When it sold, when it was listed, and the days in between |
brand, size, sizes, condition, nwt, boutique | Brand, size, condition label and flags |
department, category, subcategories, colors | Catalog path and colors |
description, thumbnailUrl, imageUrls, videoCount | Description and all photos |
likesCount, commentsCount, shareCount | Engagement |
sellerUsername, sellerName, sellerUrl, sellerId | The seller |
shippingCost, shippingLabel, bundleDiscount | Details add-on: what the buyer pays for shipping and the seller's bundle offer |
sellerLocation, sellerSoldCount, sellerItemsSold, sellerAvgShipDays, sellerFollowers, sellerListingCount, sellerLoveNotes, sellerJoinedAt, sellerLastActiveAt | Details add-on: seller stats |
status, isSold, market, source, scrapedAt | Status, market, the input that found it, scrape time |
Example row from a test run with details on (seller identity replaced, photos and description trimmed):
{
"listingId": "6ad9157badedd1ea5e8a07ed",
"url": "https://poshmark.com/listing/Lululemon-Fast-Free-78-Tight-II-NonReflective-Nulux-27-Black-size-6-6ad9157badedd1ea5e8a07ed",
"title": "Lululemon Fast & Free 7/8 Tight II Non-Reflective Nulux 27” Black size 6",
"brand": "lululemon athletica",
"size": "US 6",
"status": "sold",
"isSold": true,
"price": 22,
"soldPrice": 22,
"firstListedPrice": 35,
"currency": "USD",
"listedAt": "2026-10-21T12:43:57-07:00",
"soldAt": "2026-10-21T14:36:37-07:00",
"daysToSell": 0.08,
"condition": "Like New",
"conditionCode": "uln",
"nwt": false,
"department": "Women",
"category": "Women > Pants & Jumpsuits > Leggings",
"colors": ["Black"],
"description": "Lululemon Fast & Free 7/8 Tight II Non-Reflective Nulux 27” Black size 6 ...",
"likesCount": 1,
"commentsCount": 0,
"shareCount": 69,
"thumbnailUrl": "https://di2ponv0v5otw.cloudfront.net/posts/2026/10/21/6ad9157badedd1ea5e8a07ed/m_6ad9158041ae664c0e011625.jpg",
"sellerUsername": "jane_closet",
"sellerName": "Jane D",
"sellerUrl": "https://poshmark.com/closet/jane_closet",
"shippingCost": 6.49,
"shippingLabel": "$6.49 Shipping",
"sellerLocation": "Columbus, OH",
"sellerSoldCount": 7246,
"sellerItemsSold": "9000+",
"sellerAvgShipDays": 1.41,
"sellerFollowers": 365728,
"sellerLoveNotes": 837,
"sellerJoinedAt": "2013-01-19T17:25:02Z",
"market": "us",
"source": "Lululemon leggings",
"scrapedAt": "2026-10-21T22:01:33Z"
}
Pay per result:
Examples: 1,000 sold listings ≈ $2.50; 1,000 sold listings with seller and shipping details ≈ $4.00. Platform usage (compute and datacenter proxy) is billed on top and is small: about $0.002 for 1,000 listings and about $0.01 for 1,000 listings with details in our test runs.
Is it legal to scrape Poshmark? The scraper reads public listing pages that anyone can open without an account. It does not log in. Make sure your use of the data follows the laws that apply to you and Poshmark's terms, especially for personal data such as seller names.
Do I need a Poshmark account or a proxy? No account. Datacenter proxies are the default and work for Poshmark; if they are refused at the start, the run moves to US residential proxies by itself.
How many results can I get? As many as Poshmark has. One Poshmark search stops paging at about 5,000 results, so past that the scraper continues in price order, band by band, until your limit. Sold search history depends on what Poshmark still shows in search.
Why is a field empty?
Fields are empty when the seller did not fill them (for example original price or brand), when a listing is not sold (soldPrice, soldAt), or when the details option is off (shippingCost and the seller stats).
A search term returns nothing. Why? When a term has no exact match, Poshmark only suggests loosely related listings. Those are skipped by default; turn on Include similar matches to save them.
Can I schedule it or call it from code? Yes. Schedule runs in the console, or start them through the API and read the dataset as JSON, CSV or Excel.
soldAt is the time the listing became sold out; for multi-size listings it is the last size that sold.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
searchTermsarrayOptionalSearch terms
Each term runs its own Poshmark search (for example a product, brand or model), with the filters below. Leave empty when you only paste URLs or seller usernames.
startUrlsarrayOptionalPoshmark URLs
Search URLs with their filters (poshmark.com/search?query=...), brand pages (/brand/Nike), category pages (/category/Women-Shoes), seller closets (/closet/username) and single listings (/listing/...). poshmark.ca URLs work too.
sellersarrayOptionalSeller closets
Poshmark usernames or closet URLs. Each closet's listings are saved, with the same status and filters as the searches.
maxItemsintegerOptionaldefault 20Max listings per search, URL or closet
How many listings to save for each search term, URL or closet. 0 saves everything Poshmark returns. Past about 5,000 results per search, Poshmark stops paging, so the run continues price band by price band.
listingStatusenumOptionaldefault "sold"Listing status
Sold listings (sold comps, the default), listings still for sale, or both. A URL's own availability filter wins.
Narrow the results. Leave a filter empty to include everything.
departmentenumOptionaldefault "all"Department
Poshmark department.
categorystringOptionalCategory
Poshmark category name, for example Shoes, Bags, Dresses, Jackets & Coats or Pants & Jumpsuits. Pick a department too; without one, Poshmark uses Women.
subcategorystringOptionalSubcategory
Narrower category inside the category above, for example Athletic Shoes, Sneakers, Boots or Leggings.
brandsarrayOptionalBrands
Only these brands, spelled as on Poshmark (for example Nike, lululemon athletica, Coach).
sizesarrayOptionalSizes
Only these sizes, as Poshmark shows them (for example 8, 10.5, M, XL, OS).
colorsarrayOptionalColors
Only listings in these colors.
conditionsarrayOptionalCondition
Only listings in these conditions. Leave empty for all.
shippingenumOptionaldefault "any"Shipping
Only listings the seller ships free or at a discount.
minPricenumberOptionalMin price
Lowest listing (or sold) price, in USD (CAD on poshmark.ca).
maxPricenumberOptionalMax price
Highest listing (or sold) price, in USD (CAD on poshmark.ca).
sortByenumOptionaldefault "newest"Sort by
Order of the results. Newest shows the latest listings first, which for sold searches means the most recent sales.
marketenumOptionaldefault "us"Market
poshmark.com (USD) or poshmark.ca (CAD) for search terms and usernames. URLs keep their own site.
includeDetailsbooleanOptionaldefault falseSeller and shipping details
Open each listing and its seller to add the shipping price, bundle discount, seller location, items sold, average ship time, followers, love notes and join date. Slower, and billed as an extra listing-details event.
includeSimilarMatchesbooleanOptionaldefault falseInclude similar matches
When a search term has no exact matches, Poshmark suggests loosely related listings. Off: those searches return nothing. On: save the suggestions too.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies work for Poshmark and are the cheapest. If they are refused at the start, the run moves to US residential proxies by itself.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| listingId | string | null | Poshmark listing ID |
| url | string | null | Listing page |
| title | string | null | Listing title |
| brand | string | null | Brand as the seller entered it |
| size | string | null | Size with size system, e.g. US 8 |
| sizes | array | null | All sizes of the listing |
| status | string | null | sold, available or not for sale |
| isSold | boolean | null | True for sold listings |
| price | number | null | Current price; the final sale price for sold listings |
| soldPrice | number | null | Final sale price (sold listings only) |
| originalPrice | number | null | Original retail price the seller entered |
| firstListedPrice | number | null | Price when the listing went live |
| discountFromOriginalPercent | number | null | Price below the original retail price, in percent |
| currency | string | null | USD or CAD |
| listedAt | string | null | When the listing went live |
| soldAt | string | null | When the listing sold |
| daysToSell | number | null | Days from listing to sale |
| updatedAt | string | null | Last update of the listing |
| condition | string | null | New With Tags, Boutique, Like New, Good or Fair |
| conditionCode | string | null | Poshmark condition code |
| nwt | boolean | null | New With Tags |
| boutique | boolean | null | Boutique (new retail) listing |
| department | string | null | Department |
| category | string | null | Department > category > subcategory |
| categoryName | string | null | Category |
| subcategories | array | null | Subcategories |
| colors | array | null | Colors |
| description | string | null | Listing description |
| likesCount | number | null | Likes |
| commentsCount | number | null | Comments |
| shareCount | number | null | Shares |
| shippingDiscount | string | null | free or discounted when the seller covers shipping |
| thumbnailUrl | string | null | Cover photo |
| imageUrls | array | null | All photos, large size |
| videoCount | number | null | Videos on the listing |
| sellerId | string | null | Seller user ID |
| sellerUsername | string | null | Seller username |
| sellerName | string | null | Seller display name |
| sellerUrl | string | null | Seller closet |
| sellerPictureUrl | string | null | Seller avatar |
| shippingCost | number | null | Shipping price the buyer pays (details on) |
| shippingLabel | string | null | Shipping text Poshmark shows (details on) |
| bundleDiscount | string | null | Seller bundle discount (details on) |
| sellerLocation | string | null | Seller city and state (details on) |
| sellerSoldCount | number | null | Orders the seller has shipped (details on) |
| sellerItemsSold | string | null | Items sold as Poshmark shows it, e.g. 1400+ (details on) |
| sellerAvgShipDays | number | null | Seller's average ship time in days (details on) |
| sellerFollowers | number | null | Seller followers (details on) |
| sellerListingCount | number | null | Seller listings (details on) |
| sellerLoveNotes | number | null | Seller 5-star love notes (details on) |
| sellerJoinedAt | string | null | When the seller joined (details on) |
| sellerLastActiveAt | string | null | Seller last active (details on) |
| market | string | null | us or ca |
| source | string | null | Search term, URL or closet that produced the row |
| scrapedAt | string | null | When the row was scraped |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Seller and shipping details | Shipping price and seller stats for one listing (only when the details option is on). | $0.0015 |
| Listing | One saved Poshmark listing (sold date, description, category and engagement included). | $0.0025 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('shelfbright/poshmark-scraper').call({
"searchTerms": [
"Nike Air Jordan"
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run shelfbright/poshmark-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=shelfbright/poshmark-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Women's sold listings between $20 and $80 with the shipping price, seller location, items sold and average ship time.
Paste any Poshmark brand, category or search URL; its filters are kept.
Canadian sold comps in CAD.
Active listings with category, condition and price filters.
Everything a closet has sold, newest first.

Scrape Google Maps places for any search term and city, with no code or with one API call. A real run, its output, its log and its exact cost, plus the limits and the legal side.
Read the article
Paste an Amazon search or product URL into a ready-made Actor and get one row per product with price, ASIN, rating and review count. This guide covers the no-code steps, the API, ZIP code pricing, a real run and its cost.
Read the article
Scrape Google search results by query and country and get each results page as JSON: organic results with positions, People Also Ask and related searches. Run it without code or from Python, with a real run, the cost per page and Google's terms.
Read the articleScrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.