Search PC hardware and high-tech products.
Searches Materiel.net like its search page: product name, link, short description, price in euros and whether the offer is a marketplace (third-party) offer. First results page (about 48 products, new and used). Returns an empty list when nothing matches.
- Site
- Materiel.net, France
- Version
- v1
- Runs, last 7 days
- No reports yet
- sha256
- 574f16e8488c…
Run it with your agent
after installing WieldAsk in plain words. Your agent finds this recipe and calls it:
“Search PC hardware and high-tech products.”
Read-only: it changes nothing on the site. No login needed.
{ "tool": "run", "arguments": { "recipe_id": "materiel.net/search-products", "params": { "query": "pc portable" } } }
Requests
sent from your browser, in order- 1GET/recherche/{{ params.query | urlencode }}/Search results page /recherche/<term>/, server-rendered; read-only GET. Each result is li.c-products-list__item with the title and link in a.c-product__link (title attribute), the description in p.c-product__description and the price in span.o-product__price. data-is-marketplace marks third-party offers.
Parameters
from your agentquerystringrequiredProduct term, e.g. 'pc portable', 'souris gaming', 'webcam'
Returns
to your agentproductsobject[]description, marketplace, name, price_eur, url
querystring
Where it can send
- www.materiel.net
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.products) > `0`
- length(output.products[?price_eur > `0`]) > `0`
- length(output.products[?starts_with(url, 'https://www.materiel.net/produit/')]) == length(output.products)
- length(output.products[?name != `null`]) == length(output.products)
Raw recipe
Served as canonical JSON from /api/v1/recipes/materiel.net/search-products, so its sha256 matches the ETag and the index.
Check it yourself
curl -s https://wield.run/api/v1/recipes/materiel.net/search-products | shasum -a 256 # 574f16e8488cd69d185649acab07d0582829994094f3561722100fecb7670b35
materiel.net/search-products.json, v1
{ "description": "Searches Materiel.net like its search page: product name, link, short description, price in euros and whether the offer is a marketplace (third-party) offer. First results page (about 48 products, new and used). Returns an empty list when nothing matches.", "effect": "read", "id": "materiel.net/search-products", "keywords": [ "materiel.net", "materiel", "high-tech", "informatique", "pc portable", "souris gaming", "webcam", "ordinateur", "composant pc", "périphérique", "électronique", "france", "laptop", "computer hardware" ], "output": { "schema": { "properties": { "products": { "items": { "properties": { "description": { "type": [ "string", "null" ] }, "marketplace": { "description": "True for a third-party marketplace offer", "type": "boolean" }, "name": { "type": "string" }, "price_eur": { "type": [ "number", "null" ] }, "url": { "type": "string" } }, "required": [ "name", "url", "marketplace" ], "type": "object" }, "type": "array" }, "query": { "type": "string" } }, "required": [ "query", "products" ], "type": "object" }, "value": "{query: params.query, products: steps.search.products[?name != `null` && href != `null`].{name: name, description: description || `null`, price_eur: (price && to_number(join('.', [replace(split(price, '€')[0], ' ', ''), split(price, '€')[1] || '00'])) ) || `null`, marketplace: marketplace == '1', url: (starts_with(href, 'http') && href) || join('', ['https://www.materiel.net', href])}}" }, "params": { "additionalProperties": false, "properties": { "query": { "description": "Product term, e.g. 'pc portable', 'souris gaming', 'webcam'", "maxLength": 100, "minLength": 2, "type": "string" } }, "required": [ "query" ], "type": "object" }, "provenance": { "method": "har", "notes": "GET /recherche/<term>/ answers 200 HTML titled 'Votre recherche sur Materiel.net : <term>' with li.c-products-list__item results (48 on the first page, with a page count link). The title and link come from a.c-product__link (title attribute and absolute href /produit/...). The price text is like '719€<sup>95</sup>', which reads as 719.95 by joining the parts around the euro sign. The ?s= search on the homepage shows promotional carousels, not results, so it is not used. Only the first page is read. No cross-site hosts are called.", "recorded_at": "2026-11-08T16:10:00.000Z", "recorded_by": "wield-forge (claude-haiku agent)" }, "requires_login": false, "schema": "https://wield.run/schema/recipe/v1.json", "site": { "country": "FR", "id": "materiel.net", "language": "fr", "name": "Materiel.net", "origin": "https://www.materiel.net", "origins": [ "https://www.materiel.net" ] }, "steps": [ { "description": "Search results page /recherche/<term>/, server-rendered; read-only GET. Each result is li.c-products-list__item with the title and link in a.c-product__link (title attribute), the description in p.c-product__description and the price in span.o-product__price. data-is-marketplace marks third-party offers.", "expect": { "content_type": "html", "status": [ 200 ] }, "extract": { "html_items": { "products": { "fields": { "description": { "selector": "p.c-product__description" }, "href": { "attr": "href", "selector": "a.c-product__link" }, "marketplace": { "attr": "data-is-marketplace", "selector": ":scope" }, "name": { "attr": "title", "selector": "a.c-product__link" }, "price": { "selector": "span.o-product__price" } }, "max": 60, "selector": "li.c-products-list__item" } } }, "id": "search", "request": { "headers": { "Accept": "text/html" }, "method": "GET", "url": "/recherche/{{ params.query | urlencode }}/" } } ], "task": "Search PC hardware and high-tech products", "tos": { "notes": "Not reviewed. One search page per call, the same page a visitor loads. The site's terms on automated access were not checked.", "reviewed": false }, "verify": { "checks": [ "length(output.products) > `0`", "length(output.products[?price_eur > `0`]) > `0`", "length(output.products[?starts_with(url, 'https://www.materiel.net/produit/')]) == length(output.products)", "length(output.products[?name != `null`]) == length(output.products)" ], "example_params": { "query": "pc portable" }, "max_ms": 5000 }, "version": 1 }