Poshmark active listings

GET /v1/poshmark/listings searches one page of Poshmark US listings for sale now, by keyword, with condition, price and sort options.

GEThttps://api.soldgraph.com/v1/poshmark/listings

Search Poshmark US listings that are for sale now. Each call returns one page, in the order you pick with sort.

displayed_price is the seller's current asking price. listed_at is when the listing was published. seller_text is the seller's Poshmark username. condition is Poshmark's own code, like nwt or ug. See condition codes.

Poshmark doesn't show shipping, bids, end times or promoted placements in search. So displayed_shipping, shipping_text, promoted, bid_count, ends_at, best_offer and location_text are always null. format is always fixed_price.

ParameterTypeDefaultDescription
qstringRequiredSearch keywords, 1–200 characters, as you'd type them into the marketplace's search box. Be specific: model, size, grade, edition.
pageinteger, 1–1001Source page to fetch. On Poshmark, Mercari and Depop, pages after 1 also need cursor.
min_priceinteger, 0–1000000Lowest price, in whole US dollars. Optional. Must not be more than max_price. You can send it without max_price.
max_priceinteger, 0–1000000Highest price, in whole US dollars. Optional. You can send it without min_price.
marketplaceposhmarkposhmarkOptional. If sent, it must be poshmark.
countryususOnly us is supported.
sortbest_match, newest or price_ascbest_matchPoshmark's listing order. ending_soon isn't available on Poshmark and returns 422.
conditionnwt, uln, ug or ufOne of Poshmark's own condition codes: nwt (new with tags), uln (like new), ug (good) or uf (fair). Rows use the same codes. Poshmark filters one condition at a time, so more than one returns 422.
cursorstringThe previous page's next_cursor. Leave it out on page 1. Required on every later page.
curl -G https://api.soldgraph.com/v1/poshmark/listings \  -H "Authorization: Bearer $SOLDGRAPH_KEY" \  --data-urlencode "q=Levis 501" \  -d page=1

The first call usually returns 202 and a job to poll. Search jobs covers polling and retries.

#Filters

  • condition takes one Poshmark code: nwt, uln, ug or uf. Poshmark filters one condition at a time, so more than one returns 422.
  • min_price and max_price are whole US dollars. You can send either one alone.
  • sort is best_match, newest or price_asc. ending_soon returns 422, because Poshmark has no auctions.

Poshmark applies the filters, so reported_total counts only matching listings. Keep the same filters and sort on every page.

#Pages and cursors

Pages work the same as Poshmark sold listings. Start with page=1 and no cursor. For the next page, send page set to next_page and cursor set to next_cursor.

  • A later page without a cursor, or a cursor in the wrong format, returns 422.
  • A cursor Poshmark doesn't accept fails the job with error.code rejected. It costs nothing.
  • page_size counts the rows Poshmark returned before we removed listings that aren't for sale. So count can be smaller.

#Example response

Response
{  "request_id": "00000000-0000-4000-8000-000000000001",  "status": "complete",  "credits": 1,  "cached": false,  "result": {    "provider": "poshmark",    "country": "us",    "query": "Levis 501",    "page": 1,    "page_size": 48,    "count": 1,    "reported_total": 1,    "next_page": null,    "collected_at": "2026-09-23T14:02:11Z",    "schema_version": 1,    "completeness": "provider_page_only",    "data": [      {        "id": "000000000000000000000002",        "title": "Example Levi’s 501 jeans",        "link": "https://poshmark.com/listing/000000000000000000000002",        "promoted": null,        "format": "fixed_price",        "displayed_price": {          "amount": 42,          "currency": "USD"        },        "displayed_price_text": "$42.00",        "displayed_shipping": null,        "shipping_text": null,        "condition": "uln",        "brand": "Levi's",        "size": "30",        "listed_at": "2026-09-27T10:04:12-07:00",        "bid_count": null,        "ends_at": null,        "best_offer": null,        "seller_text": "example_closet",        "location_text": null,        "image": "https://di2ponv0v5otw.cloudfront.net/posts/example.jpg"      }    ],    "field_notes": "Listings are in the marketplace's order and priced at the seller's current ask. Only available inventory is included; unverified fields are null.",    "next_cursor": null  }}
FieldTypeDescription
request_idstringID of this request. Poll it at /v1/jobs/{request_id}.
statusstringpending, complete or failed. Always check it, even on HTTP 200.
creditsintegerRequests charged: 1 when complete, 0 while pending or when failed.
cachedbooleanTrue when the result came from the 15-minute cache.
poll_urlstringOnly while pending. A path like /v1/jobs/{id}: join it to https://api.soldgraph.com, not to the /v1 base URL.
error.codestringOnly when failed. See failed job codes.
resultobjectOnly when complete. One source page from the marketplace.
result.providerstringMarketplace ID, like ebay or poshmark.
result.countrystringAlways us.
result.querystringThe q you sent, with extra spaces removed.
result.pageintegerThe page you asked for.
result.countintegerRows in result.data on this page.
result.reported_totalintegerTotal matches the marketplace reports for the search. It may be rounded or capped.
result.next_pageinteger | nullSend this as page to get the next page. Null on the last page.
result.collected_atstringWhen we collected the page, as an ISO 8601 timestamp.
result.schema_versionintegerVersion of this response shape. Currently 1.
result.completenessstringAlways provider_page_only: one page, not a full sales history.
result.field_notesstringPlain-text notes on how to read this page's fields.
result.page_sizeintegerRows Poshmark returned before we removed listings that aren't for sale. It can be larger than count.
result.next_cursorstring | nullSend this as cursor, with page=next_page, to get the next page. Null on the last page.
result.data[].idstringThe marketplace's listing ID.
result.data[].titlestring | nullListing title as shown.
result.data[].linkstringURL of the listing on the marketplace.
result.data[].promotednullAlways null on Poshmark.
result.data[].formatstringAlways fixed_price on Poshmark.
result.data[].displayed_priceobject{ amount, currency } of the seller's current asking price.
result.data[].displayed_price_textstring | nullThe price text, like $35.00.
result.data[].displayed_shippingnullAlways null on Poshmark.
result.data[].shipping_textnullAlways null on Poshmark.
result.data[].conditionstring | nullPoshmark's own condition code, as Poshmark returns it, like nwt or ug. See condition codes.
result.data[].brandstring | nullBrand as the seller entered it.
result.data[].sizestring | nullSize as the seller entered it.
result.data[].listed_atstring | nullWhen the listing was published, as an ISO 8601 timestamp.
result.data[].bid_countnullAlways null on Poshmark.
result.data[].ends_atnullAlways null on Poshmark.
result.data[].best_offernullAlways null on Poshmark.
result.data[].seller_textstring | nullThe seller's Poshmark username.
result.data[].location_textnullAlways null on Poshmark.
result.data[].imagestring | nullImage URL on Poshmark's image CDN.
Try it
Request
curl -G https://api.soldgraph.com/v1/poshmark/listings \  -H "Authorization: Bearer $SOLDGRAPH_KEY" \  --data-urlencode "q=Levis 501"
Sign in to runFree account, no card.