Sign inTry it

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

Searches eBay.de like the site's search page: title, current price (or price range), bids and time left for auctions, Buy It Now price, best-offer flag, shipping cost, condition, private or business seller, seller rating, image and link. Filters: price range, condition, auction or Buy It Now, free shipping, located in Germany, sort. Promoted listings (marked 'Anzeige') are dropped by default.

No reports yetRead-only, no login
Site
eBay, Germany
Version
v3 of 3
Runs, last 7 days
No reports yet
sha256
37ee35a9b051…

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.de/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. Promoted listings are identified by their accessible label: each card's footer has aria-labelledby ids, and the ids whose element reads 'Anzeige' (in a container directly under <body>) mark it as an ad. That is the label screen readers announce; the visible label is an obfuscated image.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 promoted listings (marked sponsored) = false
located_in_germanybooleanOnly items located in Germany = false
max_pricenumberMaximum price in EUR
min_pricenumberMinimum price in EUR
pageinteger = 1
querystringrequiredSearch words, e.g. 'iphone 13 128gb', 'fahrrad 28 zoll', 'lego 75192'
sortenumprice_low/price_high include shipping "best_match" | "price_low" | "price_high" | "newest" | "ending_soonest" = "best_match"

Returns

to your agent
listingsobject[]auction, best_offer, bids, buy_it_now_price_eur, condition, ends_text, id, image, new_listing, pickup_only, price_eur, price_max_eur, price_text, seller, seller_positive_pct, seller_ratings, seller_type, shipping_eur, sponsored, title, top_rated, url
pageinteger
querystring
totalintegereBay's result count (shown as '9.200+', so a lower bound)

Where it can send

  • www.ebay.de

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_eur > `0`]) == length(output.listings)
  • length(output.listings[?price_eur > `400`]) == `0`
  • length(output.listings[?sponsored]) == `0`
  • output.listings[0].url != `null`

Raw recipe

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

Check it yourself
curl -s https://wield.run/api/v1/recipes/ebay.de/search-listings | shasum -a 256
# 37ee35a9b051667d37c40fd0f94887645529006862cb6edb251526a2c7b6d2a2
ebay.de/search-listings.json, v3
{
  "description": "Searches eBay.de like the site's search page: title, current price (or price range), bids and time left for auctions, Buy It Now price, best-offer flag, shipping cost, condition, private or business seller, seller rating, image and link. Filters: price range, condition, auction or Buy It Now, free shipping, located in Germany, sort. Promoted listings (marked 'Anzeige') are dropped by default.",
  "effect": "read",
  "id": "ebay.de/search-listings",
  "keywords": [
    "ebay",
    "kaufen",
    "gebraucht",
    "auktion",
    "sofort-kaufen",
    "angebote",
    "preisvergleich",
    "schnäppchen",
    "second hand",
    "auction",
    "buy it now",
    "used",
    "listings",
    "marketplace"
  ],
  "output": {
    "schema": {
      "properties": {
        "listings": {
          "items": {
            "properties": {
              "auction": {
                "type": "boolean"
              },
              "best_offer": {
                "type": "boolean"
              },
              "bids": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "buy_it_now_price_eur": {
                "description": "Buy It Now price next to an auction",
                "type": [
                  "number",
                  "null"
                ]
              },
              "condition": {
                "description": "e.g. 'Gebraucht', 'Neu', 'Sehr gut - Refurbished'",
                "type": [
                  "string",
                  "null"
                ]
              },
              "ends_text": {
                "description": "When the auction ends, as eBay shows it, e.g. 'Heute 10:30'",
                "type": [
                  "string",
                  "null"
                ]
              },
              "id": {
                "type": "string"
              },
              "image": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "new_listing": {
                "type": "boolean"
              },
              "pickup_only": {
                "type": "boolean"
              },
              "price_eur": {
                "description": "Current price; the lower end for a price range",
                "type": [
                  "number",
                  "null"
                ]
              },
              "price_max_eur": {
                "description": "Upper end when the listing has variants",
                "type": [
                  "number",
                  "null"
                ]
              },
              "price_text": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "seller": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "seller_positive_pct": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "seller_ratings": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "seller_type": {
                "enum": [
                  "private",
                  "business",
                  null
                ],
                "type": [
                  "string",
                  "null"
                ]
              },
              "shipping_eur": {
                "description": "0 for free delivery; null when only pickup or not shown",
                "type": [
                  "number",
                  "null"
                ]
              },
              "sponsored": {
                "type": "boolean"
              },
              "title": {
                "type": "string"
              },
              "top_rated": {
                "type": "boolean"
              },
              "url": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "type": "array"
        },
        "page": {
          "type": "integer"
        },
        "query": {
          "type": "string"
        },
        "total": {
          "description": "eBay's result count (shown as '9.200+', so a lower bound)",
          "type": [
            "integer",
            "null"
          ]
        }
      },
      "type": "object"
    },
    "value": "let $ads = steps.search[0].ad_label_ids || `[]`, $keep_ads = params.include_sponsored == `true` in {query: params.query, total: (steps.search[0].count_text && to_number(replace(replace(split(steps.search[0].count_text, ' ')[0], '.', ''), '+', ''))) || `null`, page: params.page || `1`, listings: map(&(let $c = @, $pt = replace(replace(price_text || '', 'EUR ', ''), '.', ''), $at = attributes_text || '', $ct = condition_text || '', $st = seller_text || '' in {id: $c.id, title: $c.title, price_eur: to_number(replace(split($pt, ' bis ')[0], ',', '.')), price_max_eur: contains($pt, ' bis ') && to_number(replace(split($pt, ' bis ')[1], ',', '.')) || `null`, price_text: $c.price_text, auction: $c.bids_text != `null`, bids: $c.bids_text && to_number(split($c.bids_text, ' ')[0]) || ($c.bids_text && `0`) || `null`, ends_text: $c.time_end && replace(replace($c.time_end, '(', ''), ')', '') || `null`, buy_it_now_price_eur: $c.bin_price_text && to_number(replace(replace(replace($c.bin_price_text, 'EUR ', ''), '.', ''), ',', '.')) || `null`, best_offer: contains($at, 'Preisvorschlag'), shipping_eur: (contains($at, 'Gratis') || contains($at, 'Kostenloser Versand') || contains($at, 'Kostenlose Lieferung')) && `0` || (contains($at, '+EUR ') && to_number(replace(replace(split(split($at, '+EUR ')[1], ' ')[0], '.', ''), ',', '.'))) || `null`, pickup_only: contains($at, 'Abholung') && !(contains($at, 'Lieferung') || contains($at, 'Versand')), condition: trim(split($ct, '|')[0]) || `null`, seller_type: (contains($ct, 'Privat') && 'private') || (contains($ct, 'Gewerblich') && 'business') || `null`, seller: $st && split($st, ' ')[0] || `null`, seller_positive_pct: $st && contains($st, '% positiv') && to_number(replace(split(split($st, '% positiv')[0], ' ')[1], ',', '.')) || `null`, seller_ratings: $st && contains($st, '(') && to_number(replace(split(split($st, '(')[1], ')')[0], '.', '')) || `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.de/itm/', $c.id])}), steps.search[0].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 promoted listings (marked sponsored)",
        "type": "boolean"
      },
      "located_in_germany": {
        "default": false,
        "description": "Only items located in Germany",
        "type": "boolean"
      },
      "max_price": {
        "description": "Maximum price in EUR",
        "minimum": 0,
        "type": "number"
      },
      "min_price": {
        "description": "Minimum price in EUR",
        "minimum": 0,
        "type": "number"
      },
      "page": {
        "default": 1,
        "maximum": 20,
        "minimum": 1,
        "type": "integer"
      },
      "query": {
        "description": "Search words, e.g. 'iphone 13 128gb', 'fahrrad 28 zoll', 'lego 75192'",
        "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"
      }
    },
    "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. Search page GET /sch/i.html with eBay's own URL filters (_sop sort codes 12/15/16/10/1, _udlo/_udhi price, LH_ItemCondition 1000/3000, LH_Auction, LH_BIN, LH_FS, LH_PrefLoc, _pgn, _ipg). Cards are li.s-card[data-listingid]; rows inside a card are text, so flags (Preisvorschlag, Gratis Lieferung, Abholung) are read from the joined row text. Promoted listings: the footer's aria-labelledby ids that point to an element reading 'Anzeige' (the accessible label). Verified in a browser tab on 2026-11-07. v2 (2026-11-07): the output reads steps.search[0] (search is a one-item foreach step, so its result is a list); v1 read steps.search.items and failed in every real run with map() on null. Found by running the real interpreter over the in-page response. v3 (2026-11-07 22:38): tos.notes only; requests and output unchanged.",
    "recorded_at": "2026-11-07T18:30:00+01:00",
    "recorded_by": "C4"
  },
  "requires_login": false,
  "schema": "https://wield.run/schema/recipe/v1.json",
  "site": {
    "country": "DE",
    "id": "ebay.de",
    "language": "de",
    "login_url": "https://signin.ebay.de/ws/eBayISAPI.dll?SignIn",
    "name": "eBay",
    "origin": "https://www.ebay.de",
    "origins": [
      "https://www.ebay.de"
    ]
  },
  "steps": [
    {
      "description": "The search results page (server-rendered cards). The one-item foreach maps the filter params to eBay's URL codes. Promoted listings are identified by their accessible label: each card's footer has aria-labelledby ids, and the ids whose element reads 'Anzeige' (in a container directly under <body>) mark it as an ad. That is the label screen readers announce; the visible label is an obfuscated image.",
      "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]"
              },
              "attributes_text": {
                "selector": ".su-card-container__attributes__primary"
              },
              "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_text": {
                "selector": ".s-card__subtitle:has(> span + span)"
              },
              "href": {
                "attr": "href",
                "selector": "a.s-card__link"
              },
              "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_text": {
                "selector": ".su-card-container__attributes__primary > .s-card__attribute-row:first-child"
              },
              "seller_text": {
                "selector": ".su-card-container__attributes__secondary .s-card__attribute-row:not(:has(.su-icon))"
              },
              "time_end": {
                "selector": ".s-card__time-end"
              },
              "title": {
                "selector": ".s-card__title .su-styled-text.primary"
              },
              "top_rated": {
                "selector": ".su-card-container__attributes__secondary .su-icon--legacy-top-rated-seller"
              }
            },
            "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.located_in_germany == `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.de's robots.txt disallows AI crawlers (ClaudeBot, anthropic-ai), 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_eur > `0`]) == length(output.listings)",
      "length(output.listings[?price_eur > `400`]) == `0`",
      "length(output.listings[?sponsored]) == `0`",
      "output.listings[0].url != `null`"
    ],
    "example_params": {
      "condition": "used",
      "max_price": 400,
      "query": "iphone 13 128gb"
    },
    "max_ms": 6000
  },
  "version": 3
}