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.
- Site
- eBay, Germany
- Version
- v3 of 3
- Runs, last 7 days
- No reports yet
- sha256
- 37ee35a9b051…
Run it with your agent
after installing WieldAsk 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- 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.
Parameters
from your agentReturns
to your agentWhere 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.
curl -s https://wield.run/api/v1/recipes/ebay.de/search-listings | shasum -a 256 # 37ee35a9b051667d37c40fd0f94887645529006862cb6edb251526a2c7b6d2a2
{ "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 }