Sign inTry it

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.

No reports yetRead-only, no login
Site
Materiel.net, France
Version
v1
Runs, last 7 days
No reports yet
sha256
574f16e8488c…

Run it with your agent

after installing Wield

Ask 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
  1. 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 agent
querystringrequiredProduct term, e.g. 'pc portable', 'souris gaming', 'webcam'

Returns

to your agent
productsobject[]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
}