eBay active listings

GET /v1/ebay/listings searches one page of eBay US active listings by keyword, with condition, price and sort options, and returns JSON.

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

Search eBay US active listings by keyword. Each call returns one page, in the order you pick with sort. Promoted listings are included, and promoted flags them.

Coming from the eBay Browse API? See eBay Browse API vs Soldgraph.

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.
marketplaceebayebayOptional. If sent, it must be ebay.
countryususOnly us is supported.
sortbest_match, newest, price_asc or ending_soonbest_matcheBay's listing order. Promoted listings are included and flagged.
conditionOne or more of new, open_box, refurbished, used, for_parts, comma-separatedeBay's own condition groups. Send one or more, separated by commas, like new,open_box. new is Brand New, open_box is Open Box or New (Other), refurbished is every refurbished grade, used is Pre-Owned and for_parts is Parts Only. eBay applies the filter.
curl -G https://api.soldgraph.com/v1/ebay/listings \  -H "Authorization: Bearer $SOLDGRAPH_KEY" \  --data-urlencode "q=canon ae-1 program" \  -d page=1

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

#Filters

  • condition takes one or more of eBay's condition groups, separated by commas, like new,open_box. The groups are new (Brand New), open_box (Open Box or New (Other)), refurbished (every refurbished grade), used (Pre-Owned) and for_parts (Parts Only).
  • min_price and max_price are whole US dollars. You can send either one alone.

eBay applies the filters, so reported_total counts only matching listings.

#Example response

Response
{  "request_id": "00000000-0000-4000-8000-000000000001",  "status": "complete",  "credits": 1,  "cached": false,  "result": {    "provider": "ebay",    "country": "us",    "query": "canon ae-1 program",    "page": 1,    "page_size": 40,    "count": 1,    "reported_total": 1,    "next_page": null,    "next_cursor": null,    "collected_at": "2026-09-23T14:02:11Z",    "schema_version": 1,    "completeness": "provider_page_only",    "data": [      {        "id": "123456789012",        "title": "Example eBay listing",        "link": "https://www.ebay.com/itm/123456789012",        "promoted": false,        "format": "fixed_price",        "displayed_price": {          "amount": 189,          "currency": "USD"        },        "displayed_price_text": "$189.00",        "displayed_shipping": {          "amount": 0,          "currency": "USD"        },        "shipping_text": "Free delivery",        "condition": "Pre-Owned",        "brand": null,        "size": null,        "listed_at": null,        "bid_count": null,        "ends_at": null,        "best_offer": false,        "seller_text": "filmcamerashop (1,204) 100%",        "location_text": null,        "image": "https://i.ebayimg.com/images/g/example/s-l500.jpg"      }    ],    "field_notes": "Listings are in the marketplace's order; promoted listings are included and flagged. Unverified fields are 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 per page, as eBay reports it.
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[].promotedbooleanTrue for a sponsored placement.
result.data[].formatstringauction when the listing shows bids or an end time, otherwise fixed_price.
result.data[].displayed_priceobject | null{ amount, currency } parsed from the price shown: the asking price or current bid. Null if it couldn't be read. Null when eBay shows a price range for a multi-variation listing ("$247.00 to $911.00"): the amount wouldn't say which variant. The range stays in displayed_price_text.
result.data[].displayed_price_textstring | nullThe price text as shown, like $189.00.
result.data[].displayed_shippingobject | null{ amount, currency } read from exact shipping text, like +$9.99 delivery. Free delivery is 0. Estimates and Shipping not specified are null.
result.data[].shipping_textstring | nullShipping text as shown, like +$9.99 delivery or Free delivery.
result.data[].conditionstring | nulleBay's condition text as shown, like Pre-Owned.
result.data[].brandnullAlways null on eBay.
result.data[].sizenullAlways null on eBay.
result.data[].listed_atnullAlways null on eBay.
result.data[].bid_countinteger | nullNumber of bids, for auctions.
result.data[].ends_atstring | nullAuction end time, ISO 8601 UTC.
result.data[].best_offerbooleanTrue when the seller accepts Best Offers.
result.data[].seller_textstring | nullSeller text as eBay shows it: username, feedback count and positive percentage, e.g. clutch_supply (1,325) 99.7%.
result.data[].location_textstring | nullItem location text as shown.
result.data[].imagestring | nullImage URL on i.ebayimg.com.

displayed_price is the asking price or current bid that eBay shows. Fields we can't read are null.

  • displayed_shipping is read only from exact text like +$9.99 delivery. Free delivery is 0. Estimates and Shipping not specified are null.
  • condition is eBay's own text, like Pre-Owned.
  • brand, size and listed_at are always null on eBay. They exist so rows have the same fields on every marketplace.
Try it
Request
curl -G https://api.soldgraph.com/v1/ebay/listings \  -H "Authorization: Bearer $SOLDGRAPH_KEY" \  --data-urlencode "q=canon ae-1 program"
Sign in to runFree account, no card.