Search Shpock classifieds for listings.
Searches Shpock, the German second-hand marketplace, like its results page: title, price in euros, location (postcode and place), listing link and whether the listing is promoted. Promoted (boosted) listings are left out unless include_sponsored is set. Returns the first results page only.
- Site
- Shpock, Germany
- Version
- v1
- Runs, last 7 days
- No reports yet
- sha256
- f46764d44ca8…
Run it with your agent
after installing WieldAsk in plain words. Your agent finds this recipe and calls it:
“Search Shpock classifieds for listings.”
Read-only: it changes nothing on the site. No login needed.
{ "tool": "run", "arguments": { "recipe_id": "shpock.com/search-listings", "params": { "query": "fahrrad" } } }
Requests
sent from your browser, in order- 1GET/de-de/results?qShpock's results page for the query. Its listings are in the page's __NEXT_DATA__ Apollo state as ItemSummary:* objects; the page's HTML cards show the same data.
Parameters
from your agentReturns
to your agentWhere it can send
- www.shpock.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.items) > `0`
- length(output.items[?price_eur != `null`]) > `0`
- length(output.items[?starts_with(url, 'https://www.shpock.com/de-de/i/')]) == length(output.items)
- length(output.items[?sponsored == `true`]) == `0`
Raw recipe
Served as canonical JSON from /api/v1/recipes/shpock.com/search-listings, so its sha256 matches the ETag and the index.
curl -s https://wield.run/api/v1/recipes/shpock.com/search-listings | shasum -a 256 # f46764d44ca8cbc6ceda7f5af6271852b1ba486c5ed00d73e5487665b1d56c7a
{ "description": "Searches Shpock, the German second-hand marketplace, like its results page: title, price in euros, location (postcode and place), listing link and whether the listing is promoted. Promoted (boosted) listings are left out unless include_sponsored is set. Returns the first results page only.", "effect": "read", "id": "shpock.com/search-listings", "keywords": [ "shpock", "kleinanzeigen", "gebraucht", "second hand", "flohmarkt", "angebote", "fahrrad", "marktplatz", "classifieds", "secondhand", "used items", "marketplace", "germany", "suche" ], "output": { "schema": { "properties": { "items": { "items": { "properties": { "description": { "description": "Short text from the listing card, may be truncated", "type": [ "string", "null" ] }, "is_free": { "type": "boolean" }, "location": { "description": "Postcode and place, e.g. '60386 Frankfurt am Main'", "type": [ "string", "null" ] }, "price_eur": { "type": [ "number", "null" ] }, "sponsored": { "description": "Promoted (boosted) listing", "type": "boolean" }, "title": { "type": [ "string", "null" ] }, "url": { "type": "string" } }, "required": [ "title", "url", "sponsored" ], "type": "object" }, "type": "array" }, "query": { "type": "string" } }, "required": [ "query", "items" ], "type": "object" }, "value": "let $all = map(&{title: title || `null`, description: description || `null`, price_eur: price || `null`, is_free: isFree == `true`, location: locality || `null`, sponsored: isBoosted == `true`, url: (path && join('', ['https://www.shpock.com', path])) || canonicalURL || `null`}, (steps.search.items || `[]`)) in let $kept = $all[?sponsored == `false`] in {query: params.query, items: (params.include_sponsored == `true` && $all) || $kept}" }, "params": { "additionalProperties": false, "properties": { "include_sponsored": { "default": false, "description": "Also return promoted (boosted) listings, marked sponsored: true", "type": "boolean" }, "query": { "description": "What to look for, e.g. 'fahrrad', 'puky laufrad', 'playstation 5'", "maxLength": 100, "minLength": 2, "type": "string" } }, "required": [ "query" ], "type": "object" }, "provenance": { "method": "har", "notes": "One GET to /de-de/results?q=<query>, which answers 200 HTML. The listings are in script#__NEXT_DATA__ under props.pageProps.apolloState as ItemSummary:<id> objects (title, description, price, currency, locality, path, canonicalURL, isBoosted, isFree, isSold). The keys are dynamic, so the extraction takes all ItemSummary entries with items(). Extracted values are read as steps.search.<var> (no foreach). Listing paths are relative (/de-de/i/<id>/<slug>) and are made absolute on www.shpock.com. Images are media references that the page resolves elsewhere, so they are not returned. No cross-site hosts are called. Known limits: first results page only (the 'Mehr anzeigen' button is not followed); price in whole euros; promoted listings are flagged as isBoosted and are dropped by default. Builder notes: The output expression now nests its bindings, so `$kept` can read `$all`. The rest of the recipe is unchanged.", "recorded_at": "2026-11-08T14:57:52.101Z", "recorded_by": "wield-build (claude-haiku-5-5)" }, "requires_login": false, "schema": "https://wield.run/schema/recipe/v1.json", "site": { "country": "DE", "id": "shpock.com", "language": "de", "name": "Shpock", "origin": "https://www.shpock.com", "origins": [ "https://www.shpock.com" ], "start_path": "/de-de" }, "steps": [ { "description": "Shpock's results page for the query. Its listings are in the page's __NEXT_DATA__ Apollo state as ItemSummary:* objects; the page's HTML cards show the same data.", "expect": { "content_type": "html", "status": [ 200 ] }, "extract": { "embedded_json": { "required": true, "selector": "script#__NEXT_DATA__", "vars": { "items": "map(&[1], items(props.pageProps.apolloState)[?starts_with([0], 'ItemSummary:')])" } } }, "id": "search", "request": { "headers": { "Accept": "text/html" }, "method": "GET", "query": { "q": "{{params.query}}" }, "url": "/de-de/results" } } ], "task": "Search Shpock classifieds for listings", "tos": { "notes": "Shpock's terms and robots.txt were not checked for this recipe. The recipe runs in the user's own browser, makes one search-page request per call, and does not contact sellers, log in, or change anything.", "reviewed": false }, "verify": { "checks": [ "length(output.items) > `0`", "length(output.items[?price_eur != `null`]) > `0`", "length(output.items[?starts_with(url, 'https://www.shpock.com/de-de/i/')]) == length(output.items)", "length(output.items[?sponsored == `true`]) == `0`" ], "example_params": { "query": "fahrrad" }, "max_ms": 5000 }, "version": 1 }