Sign inTry it

Search eBay listings with price, bids, shipping and seller.

Searches eBay.com like its search page: title, price in USD (or range, plus the crossed-out price), bids, time left and end for auctions, Buy It Now price, Best Offer, shipping cost, item location, number sold, condition, seller with positive feedback and rating count, Top Rated, image and link. Filters: price, condition, auction or Buy It Now, free shipping, US-only, sort. Sponsored listings are dropped by default.

No reports yetRead-only, no login
Site
eBay, United States
Version
v2 of 2
Runs, last 7 days
No reports yet
sha256
ec2927cf2355…

Run it with your agent

after installing Wield

Ask in plain words. Your agent finds this recipe and calls it:

“Search eBay listings with price, bids, shipping and seller.”

Read-only: it changes nothing on the site. No login needed.

{
  "tool": "run",
  "arguments": {
    "recipe_id": "ebay.com/search-listings",
    "params": {
      "condition": "used",
      "max_price": 400,
      "query": "iphone 13 128gb"
    }
  }
}

Requests

sent from your browser, in order
  1. 1GET/sch/i.html?LH_Auction&LH_BIN&LH_FS&LH_ItemCondition&LH_PrefLoc&_ipg&_nkw&_pgn&_sop&_udhi&_udloThe search results page (server-rendered cards). The one-item foreach maps the filter params to eBay's URL codes. Sponsored listings are identified by their accessible label: each card's footer has aria-labelledby ids, and the ids whose element reads 'Sponsored' (in a container directly under <body>) mark it as an ad; the visible label is an obfuscated image. The attribute rows are read one by one because their text runs together.repeats, max 1

Parameters

from your agent
conditionenum "any" | "new" | "used" = "any"
formatenumAuctions only, Buy It Now only, or both "any" | "auction" | "buy_it_now" = "any"
free_shippingboolean = false
include_sponsoredbooleanKeep sponsored listings (marked sponsored) = false
max_pricenumberMaximum price in USD
min_pricenumberMinimum price in USD
pageinteger = 1
querystringrequiredSearch words, e.g. 'iphone 13 128gb', 'lego 75192', 'road bike 56cm'
sortenumprice_low/price_high include shipping "best_match" | "price_low" | "price_high" | "newest" | "ending_soonest" = "best_match"
us_onlybooleanOnly items located in the United States = false

Returns

to your agent
listingsobject[]auction, best_offer, bids, buy_it_now_price_usd, condition, ends_text, id, image, located_in, new_listing, price_max_usd, price_text, price_usd, seller, seller_positive_pct, seller_ratings, shipping_usd, sold, sponsored, time_left, title, top_rated, url, was_price_usd
pageinteger
querystring
totalintegereBay's result count (shown as '4,900+', so a lower bound)

Where it can send

  • www.ebay.com

Anything else is blocked by the extension.

Reads from your session

Nothing. Your browser attaches the site's cookies by itself.

Used only in requests to the addresses on the left. Never sent to wield.run or your agent.

Checks

a run passes when
  • length(output.listings) > `5`
  • length(output.listings[?price_usd > `0`]) == length(output.listings)
  • length(output.listings[?price_usd > `400`]) == `0`
  • length(output.listings[?sponsored]) == `0`
  • length(output.listings[?starts_with(url, 'https://www.ebay.com/itm/')]) == length(output.listings)
  • output.total > `100`

Raw recipe

Served as canonical JSON from /api/v1/recipes/ebay.com/search-listings, so its sha256 matches the ETag and the index.

Check it yourself
curl -s https://wield.run/api/v1/recipes/ebay.com/search-listings | shasum -a 256
# ec2927cf235556060be7e715d9b969b693f5b2349c75634cb0a856fd53c56953
ebay.com/search-listings.json, v2
{
  "description": "Searches eBay.com like its search page: title, price in USD (or range, plus the crossed-out price), bids, time left and end for auctions, Buy It Now price, Best Offer, shipping cost, item location, number sold, condition, seller with positive feedback and rating count, Top Rated, image and link. Filters: price, condition, auction or Buy It Now, free shipping, US-only, sort. Sponsored listings are dropped by default.",
  "effect": "read",
  "id": "ebay.com/search-listings",
  "keywords": [
    "ebay",
    "buy",
    "used",
    "pre-owned",
    "auction",
    "buy it now",
    "best offer",
    "deals",
    "second hand",
    "marketplace",
    "listings",
    "refurbished",
    "cheap"
  ],
  "output": {
    "schema": {
      "properties": {
        "listings": {
          "items": {
            "properties": {
              "auction": {
                "type": "boolean"
              },
              "best_offer": {
                "type": "boolean"
              },
              "bids": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "buy_it_now_price_usd": {
                "description": "Buy It Now price next to an auction",
                "type": [
                  "number",
                  "null"
                ]
              },
              "condition": {
                "description": "e.g. 'Pre-Owned', 'Brand New', 'Excellent - Refurbished'",
                "type": [
                  "string",
                  "null"
                ]
              },
              "ends_text": {
                "description": "When the auction ends, as eBay shows it in the viewer's time zone, e.g. 'Mon, 07:35 PM'",
                "type": [
                  "string",
                  "null"
                ]
              },
              "id": {
                "type": "string"
              },
              "image": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "located_in": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "new_listing": {
                "type": "boolean"
              },
              "price_max_usd": {
                "description": "Upper end when the listing has variants",
                "type": [
                  "number",
                  "null"
                ]
              },
              "price_text": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "price_usd": {
                "description": "Current price; the lower end for a price range. Null when eBay shows another currency",
                "type": [
                  "number",
                  "null"
                ]
              },
              "seller": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "seller_positive_pct": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "seller_ratings": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "shipping_usd": {
                "description": "0 for free shipping; null when not specified for the viewer's location",
                "type": [
                  "number",
                  "null"
                ]
              },
              "sold": {
                "description": "Sold count shown on the card (a lower bound for '1K+ sold')",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "sponsored": {
                "type": "boolean"
              },
              "time_left": {
                "description": "e.g. '1d 22h left'",
                "type": [
                  "string",
                  "null"
                ]
              },
              "title": {
                "type": "string"
              },
              "top_rated": {
                "type": "boolean"
              },
              "url": {
                "type": "string"
              },
              "was_price_usd": {
                "description": "Crossed-out previous price",
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "type": "object"
          },
          "type": "array"
        },
        "page": {
          "type": "integer"
        },
        "query": {
          "type": "string"
        },
        "total": {
          "description": "eBay's result count (shown as '4,900+', so a lower bound)",
          "type": [
            "integer",
            "null"
          ]
        }
      },
      "required": [
        "query",
        "listings"
      ],
      "type": "object"
    },
    "value": "let $s = steps.search[0], $ads = steps.search[0].ad_label_ids || `[]`, $keep_ads = params.include_sponsored == `true` in {query: params.query, total: ($s.count_text && to_number(replace(replace(split($s.count_text, ' ')[0], ',', ''), '+', ''))) || `null`, page: params.page || `1`, listings: map(&(let $c = @, $rows = [r2, r3, r4, r5, r6, r7][?@ != `null`], $st = seller_text || '' in let $ship = ($rows[?contains(@, 'delivery') || contains(@, 'hipping')] | [0]) || '', $loc = ($rows[?starts_with(@, 'Located in ')] | [0]), $sold = ($rows[?ends_with(@, ' sold')] | [0]), $rt = $st && contains($st, '(') && split(split($st, '(')[1], ')')[0] || '' in {id: $c.id, title: $c.title, price_usd: $c.price_low && starts_with($c.price_low, '$') && to_number(replace(replace($c.price_low, '$', ''), ',', '')) || `null`, price_max_usd: $c.price_high && starts_with($c.price_high, '$') && to_number(replace(replace($c.price_high, '$', ''), ',', '')) || `null`, was_price_usd: $c.was_price && starts_with($c.was_price, '$') && to_number(replace(replace($c.was_price, '$', ''), ',', '')) || `null`, price_text: $c.price_high && join('', [$c.price_low, ' to ', $c.price_high]) || $c.price_low || `null`, auction: $c.bids_text != `null`, bids: $c.bids_text && to_number(split($c.bids_text, ' ')[0]) || ($c.bids_text && `0`) || `null`, time_left: $c.time_left || `null`, ends_text: $c.time_end && replace(replace($c.time_end, '(', ''), ')', '') || `null`, buy_it_now_price_usd: $c.bin_price_text && starts_with($c.bin_price_text, '$') && to_number(replace(replace($c.bin_price_text, '$', ''), ',', '')) || `null`, best_offer: length($rows[?contains(@, 'Best Offer')]) > `0`, shipping_usd: (contains($ship, 'Free') && `0`) || (contains($ship, '+$') && to_number(replace(split(split($ship, '+$')[1], ' ')[0], ',', ''))) || `null`, located_in: $loc && replace($loc, 'Located in ', '') || `null`, sold: $sold && to_number(replace(replace(replace(replace(split($sold, ' ')[0], '+', ''), ',', ''), 'K', '000'), '.', '')) || `null`, condition: $c.condition || `null`, seller: $st && split(trim($st), ' ')[0] || `null`, seller_positive_pct: $st && contains($st, '% positive') && to_number(split(trim(split($st, '% positive')[0]), ' ')[-1]) || `null`, seller_ratings: ($rt && ends_with($rt, 'K') && floor(to_number(replace($rt, 'K', '')) * `1000` + `0.5`)) || ($rt && ends_with($rt, 'M') && floor(to_number(replace($rt, 'M', '')) * `1000000` + `0.5`)) || ($rt && to_number(replace($rt, ',', ''))) || `null`, top_rated: $c.top_rated != `null`, new_listing: $c.new_listing != `null`, sponsored: length(split($c.ad_ids || '', ' ')[?contains($ads, @)]) > `0`, image: $c.image, url: join('', ['https://www.ebay.com/itm/', $c.id])}), $s.items[?id != `null` && title != `null`] || `[]`)[?$keep_ads || !(sponsored)]}"
  },
  "params": {
    "additionalProperties": false,
    "properties": {
      "condition": {
        "default": "any",
        "enum": [
          "any",
          "new",
          "used"
        ],
        "type": "string"
      },
      "format": {
        "default": "any",
        "description": "Auctions only, Buy It Now only, or both",
        "enum": [
          "any",
          "auction",
          "buy_it_now"
        ],
        "type": "string"
      },
      "free_shipping": {
        "default": false,
        "type": "boolean"
      },
      "include_sponsored": {
        "default": false,
        "description": "Keep sponsored listings (marked sponsored)",
        "type": "boolean"
      },
      "max_price": {
        "description": "Maximum price in USD",
        "minimum": 0,
        "type": "number"
      },
      "min_price": {
        "description": "Minimum price in USD",
        "minimum": 0,
        "type": "number"
      },
      "page": {
        "default": 1,
        "maximum": 20,
        "minimum": 1,
        "type": "integer"
      },
      "query": {
        "description": "Search words, e.g. 'iphone 13 128gb', 'lego 75192', 'road bike 56cm'",
        "maxLength": 120,
        "minLength": 2,
        "type": "string"
      },
      "sort": {
        "default": "best_match",
        "description": "price_low/price_high include shipping",
        "enum": [
          "best_match",
          "price_low",
          "price_high",
          "newest",
          "ending_soonest"
        ],
        "type": "string"
      },
      "us_only": {
        "default": false,
        "description": "Only items located in the United States",
        "type": "boolean"
      }
    },
    "required": [
      "query"
    ],
    "type": "object"
  },
  "provenance": {
    "method": "browser-inspect",
    "notes": "eBay answers servers with 403 (bot protection), so this runs only in the user's browser. Same search page and URL filters as ebay.de/search-listings (GET /sch/i.html: _sop sort codes 12/15/16/10/1, _udlo/_udhi price, LH_ItemCondition 1000/3000, LH_Auction, LH_BIN, LH_FS, LH_PrefLoc=1 for US-only items, _pgn, _ipg). Cards are li.s-card[data-listingid]. The condition is the last .s-card__subtitle-row of the card header (the row before it, when present, lists product specs; product star ratings may follow it). Auction cards often show no seller block. Attribute rows (format, shipping, location, sold) are read one by one by position and matched by their text. Seller rating counts use K/M suffixes (42.4K). Sponsored: the footer's aria-labelledby ids that point to an element reading 'Sponsored'. Prices are in US dollars on ebay.com, also for visitors from abroad (shipping then often reads 'Shipping not specified' → null). v2 (2026-11-07 22:38): tos.notes only; requests and output unchanged.",
    "recorded_at": "2026-11-07T21:37:00+01:00",
    "recorded_by": "C4"
  },
  "requires_login": false,
  "schema": "https://wield.run/schema/recipe/v1.json",
  "site": {
    "country": "US",
    "id": "ebay.com",
    "language": "en",
    "login_url": "https://signin.ebay.com/ws/eBayISAPI.dll?SignIn",
    "name": "eBay",
    "origin": "https://www.ebay.com",
    "origins": [
      "https://www.ebay.com"
    ]
  },
  "steps": [
    {
      "description": "The search results page (server-rendered cards). The one-item foreach maps the filter params to eBay's URL codes. Sponsored listings are identified by their accessible label: each card's footer has aria-labelledby ids, and the ids whose element reads 'Sponsored' (in a container directly under <body>) mark it as an ad; the visible label is an obfuscated image. The attribute rows are read one by one because their text runs together.",
      "expect": {
        "assert": "contains(body, 'srp-results') || contains(body, 'srp-save-null-search')",
        "content_type": "html",
        "status": [
          200
        ]
      },
      "extract": {
        "html": {
          "ad_label_ids": {
            "all": true,
            "attr": "id",
            "selector": "body > div > div[id^='s-']:not(:empty)"
          },
          "count_text": {
            "selector": ".srp-controls__count-heading"
          }
        },
        "html_items": {
          "items": {
            "fields": {
              "ad_ids": {
                "attr": "aria-labelledby",
                "selector": ".s-card__footer [aria-labelledby]"
              },
              "bids_text": {
                "selector": ".s-card__attribute-row:has(.s-card__time)"
              },
              "bin_price_text": {
                "selector": ".s-card__attribute-row:has(.s-card__time) ~ .s-card__attribute-row .s-card__price"
              },
              "condition": {
                "selector": ".su-card-container__header > .s-card__subtitle-row:not(:has(~ .s-card__subtitle-row)) .s-card__subtitle"
              },
              "id": {
                "attr": "data-listingid",
                "selector": ":scope"
              },
              "image": {
                "attr": "src",
                "selector": "img.s-card__image"
              },
              "new_listing": {
                "selector": ".s-card__title .s-card__new-listing"
              },
              "price_high": {
                "selector": ".su-card-container__attributes__primary > .s-card__attribute-row:first-child .s-card__price + .s-card__price + .s-card__price"
              },
              "price_low": {
                "selector": ".su-card-container__attributes__primary > .s-card__attribute-row:first-child .s-card__price"
              },
              "r2": {
                "selector": ".su-card-container__attributes__primary > .s-card__attribute-row:nth-child(2)"
              },
              "r3": {
                "selector": ".su-card-container__attributes__primary > .s-card__attribute-row:nth-child(3)"
              },
              "r4": {
                "selector": ".su-card-container__attributes__primary > .s-card__attribute-row:nth-child(4)"
              },
              "r5": {
                "selector": ".su-card-container__attributes__primary > .s-card__attribute-row:nth-child(5)"
              },
              "r6": {
                "selector": ".su-card-container__attributes__primary > .s-card__attribute-row:nth-child(6)"
              },
              "r7": {
                "selector": ".su-card-container__attributes__primary > .s-card__attribute-row:nth-child(7)"
              },
              "seller_text": {
                "selector": ".su-card-container__attributes__secondary .s-card__attribute-row:not(:has(.su-icon))"
              },
              "time_end": {
                "selector": ".s-card__time-end"
              },
              "time_left": {
                "selector": ".s-card__time-left"
              },
              "title": {
                "selector": ".s-card__title .su-styled-text.primary"
              },
              "top_rated": {
                "selector": ".su-card-container__attributes__secondary .su-icon--legacy-top-rated-seller"
              },
              "was_price": {
                "selector": ".su-card-container__attributes__primary > .s-card__attribute-row:first-child .strikethrough"
              }
            },
            "max": 60,
            "selector": "ul.srp-results > li.s-card[data-listingid]"
          }
        }
      },
      "foreach": {
        "as": "f",
        "in": "[{sop: (params.sort == 'price_low' && `15`) || (params.sort == 'price_high' && `16`) || (params.sort == 'newest' && `10`) || (params.sort == 'ending_soonest' && `1`) || `12`, cond: (params.condition == 'new' && '1000') || (params.condition == 'used' && '3000') || `null`, auction: params.format == 'auction' && '1' || `null`, bin: params.format == 'buy_it_now' && '1' || `null`, fs: params.free_shipping == `true` && '1' || `null`, loc: params.us_only == `true` && '1' || `null`}]",
        "max": 1
      },
      "id": "search",
      "request": {
        "headers": {
          "Accept": "text/html"
        },
        "method": "GET",
        "query": {
          "LH_Auction": "{{f.auction}}",
          "LH_BIN": "{{f.bin}}",
          "LH_FS": "{{f.fs}}",
          "LH_ItemCondition": "{{f.cond}}",
          "LH_PrefLoc": "{{f.loc}}",
          "_ipg": "60",
          "_nkw": "{{params.query}}",
          "_pgn": "{{params.page}}",
          "_sop": "{{f.sop}}",
          "_udhi": "{{params.max_price}}",
          "_udlo": "{{params.min_price}}"
        },
        "url": "/sch/i.html"
      }
    }
  ],
  "task": "Search eBay listings with price, bids, shipping and seller",
  "tos": {
    "notes": "eBay.com's robots.txt disallows Claude-User (AI agents acting for users) on search URLs and Anthropic's crawlers site-wide, and eBay's user agreement restricts automated access and scraping without permission. Wield runs it only when the user asks, in the user's own browser, one search page per call: no bulk collection, no bidding or buying.",
    "reviewed": false
  },
  "verify": {
    "checks": [
      "length(output.listings) > `5`",
      "length(output.listings[?price_usd > `0`]) == length(output.listings)",
      "length(output.listings[?price_usd > `400`]) == `0`",
      "length(output.listings[?sponsored]) == `0`",
      "length(output.listings[?starts_with(url, 'https://www.ebay.com/itm/')]) == length(output.listings)",
      "output.total > `100`"
    ],
    "example_params": {
      "condition": "used",
      "max_price": 400,
      "query": "iphone 13 128gb"
    },
    "max_ms": 6000
  },
  "version": 2
}