{"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}