Mercari active listings

GET /v1/mercari/listings searches one page of Mercari US active listings by keyword, with condition, price, category and brand filters.

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

Search Mercari US listings that are for sale now. Each call returns one page of up to 100 rows, in the order you pick with sort.

displayed_price is the price Mercari shows. listed_at is when the listing was created. displayed_shipping and shipping_text are always null, because we can't verify Mercari's shipping amounts. promoted, bid_count, ends_at, best_offer and location_text are always null too. format is always fixed_price.

condition is Mercari's label, like Like New, and condition_id is its number. Rows also have Mercari's seller, category and brand IDs. brand and size are always null, because Mercari search doesn't return those names. Listings with a sale in progress are left out.

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.
marketplacemercarimercariOptional. If sent, it must be mercari.
countryususOnly us is supported.
conditionnew, like_new, good, fair or poorOne Mercari condition: new, like_new, good, fair or poor. Rows return Mercari's label and condition_id.
cursorstringThe previous page's next_cursor. Leave it out on page 1. Keep every other parameter the same.
countinteger, 1–100100Most rows per page. Mercari can return fewer.
sortbest_match, newest, price_asc, price_desc or most_popularbest_matchMercari's result order. newest sorts by when the listing was created.
category_idinteger, 1–2147483647Mercari numeric category ID. Optional.
brand_idinteger, 1–2147483647Mercari numeric brand ID. Optional.
curl -G https://api.soldgraph.com/v1/mercari/listings \  -H "Authorization: Bearer $SOLDGRAPH_KEY" \  --data-urlencode "q=sony headphones" \  -d page=1 \  -d count=25

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

#Filters and sorting

  • condition takes one Mercari condition: new, like_new, good, fair or poor.
  • min_price and max_price are whole US dollars. You can send either one alone.
  • category_id and brand_id are Mercari's numeric IDs.
  • count sets the most rows per page, from 1 to 100.
  • sort is best_match (default), newest, price_asc, price_desc or most_popular. newest orders by when the listing was created.

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

#Pages and cursors

Start with page=1 and no cursor. For the next page, send page set to next_page and cursor set to next_cursor from the last result.

  • A later page without a cursor, a cursor from a different search, or a cursor in the wrong format returns 422.
  • When next_cursor is null, you're on the last page. You can request at most 100 pages.
  • page_size counts the rows Mercari returned before we removed listings that aren't for sale. So count can be smaller.
  • Results are in the order you pick with sort. reported_total may be capped.
  • The same listing can show up on more than one page. Deduplicate by id when you combine pages.

The dashboard Playground has Next page and Start over buttons that handle cursors for you.

#Example response

Response
{  "request_id": "00000000-0000-4000-8000-000000000001",  "status": "complete",  "credits": 1,  "cached": false,  "result": {    "provider": "mercari",    "country": "us",    "query": "sony headphones",    "page": 1,    "page_size": 1,    "count": 1,    "reported_total": 1,    "next_page": null,    "collected_at": "2026-09-23T14:02:11Z",    "schema_version": 1,    "completeness": "provider_page_only",    "data": [      {        "id": "m00000000001",        "title": "Illustrative Sony headphones listing",        "link": "https://www.mercari.com/us/item/m00000000001/",        "promoted": null,        "format": "fixed_price",        "displayed_price": {          "amount": 42,          "currency": "USD"        },        "displayed_price_text": "$42.00",        "displayed_shipping": null,        "shipping_text": null,        "condition": "Good",        "brand": null,        "size": null,        "listed_at": "2026-09-27T10:04:12-07:00",        "bid_count": null,        "ends_at": null,        "best_offer": null,        "seller_text": "123456789",        "location_text": null,        "image": null,        "condition_id": 3,        "brand_id": 1,        "category_id": 1594,        "seller_id": "123456789",        "status": "active"      }    ],    "field_notes": "Displayed prices are marketplace listing amounts, not independently verified transaction or accepted-offer amounts. Sold timestamps are source-reported and may be absent. Trading items are excluded. Brand/category IDs are source IDs; labels and size are null. Reported totals may be capped. Results cover one source page only.",    "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 Mercari 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 Mercari.
result.data[].formatstringAlways fixed_price on Mercari.
result.data[].displayed_priceobject{ amount, currency } of the price Mercari shows.
result.data[].displayed_price_textstring | nullThe price text, like $35.00.
result.data[].displayed_shippingnullAlways null on Mercari.
result.data[].shipping_textnullAlways null on Mercari.
result.data[].conditionstring | nullMercari's condition label: New, Like New, Good, Fair or Poor.
result.data[].brandnullAlways null on Mercari. Search doesn't return the brand name.
result.data[].sizenullAlways null on Mercari. Search doesn't return the size.
result.data[].listed_atstring | nullWhen the listing was published, as an ISO 8601 timestamp.
result.data[].bid_countnullAlways null on Mercari.
result.data[].ends_atnullAlways null on Mercari.
result.data[].best_offernullAlways null on Mercari.
result.data[].seller_textstring | nullThe seller's Mercari ID, as a string.
result.data[].location_textnullAlways null on Mercari.
result.data[].imagestring | nullImage URL on Mercari's image CDN.
result.data[].statusstringAlways active on this route. Listings with a sale in progress are left out.
result.data[].seller_idstring | nullThe seller's Mercari ID.
result.data[].condition_idinteger | nullMercari's condition number: 1 new, 2 like new, 3 good, 4 fair, 5 poor.
result.data[].category_idinteger | nullMercari's category ID for the listing.
result.data[].brand_idinteger | nullMercari's brand ID. The brand name isn't returned.
Try it
Request
curl -G https://api.soldgraph.com/v1/mercari/listings \  -H "Authorization: Bearer $SOLDGRAPH_KEY" \  --data-urlencode "q=sony headphones" \  -d count=25
Sign in to runFree account, no card.