Sign inTry it

Search icons on The Noun Project.

Searches The Noun Project icon library like its icon search page: icon title, link, preview image, creator name and license. First page of results (about 140 icons). Returns an empty list when nothing matches.

No reports yetRead-only, no login
Site
The Noun Project, United States
Version
v1
Runs, last 7 days
No reports yet
sha256
7a036bdd8bb5…

Run it with your agent

after installing Wield

Ask in plain words. Your agent finds this recipe and calls it:

“Search icons on The Noun Project.”

Read-only: it changes nothing on the site. No login needed.

{
  "tool": "run",
  "arguments": {
    "recipe_id": "thenounproject.com/search-icons",
    "params": {
      "query": "coffee"
    }
  }
}

Requests

sent from your browser, in order
  1. 1GET/search/icons/?qServer-rendered icon search page /search/icons/?q=...; read-only GET. The results are in script#__NEXT_DATA__ under props.pageProps.initialState.browse.allIconsData[].results[].

Parameters

from your agent
querystringrequiredIcon term, e.g. 'coffee', 'bicycle', 'leaf'

Returns

to your agent
iconsobject[]creator, license, thumbnail_url, title, url
querystring

Where it can send

  • thenounproject.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.icons) > `0`
  • length(output.icons[?starts_with(url, 'https://thenounproject.com/icon/')]) == length(output.icons)
  • length(output.icons[?title != `null`]) == length(output.icons)

Raw recipe

Served as canonical JSON from /api/v1/recipes/thenounproject.com/search-icons, so its sha256 matches the ETag and the index.

Check it yourself
curl -s https://wield.run/api/v1/recipes/thenounproject.com/search-icons | shasum -a 256
# 7a036bdd8bb570cb5f3355ca0096a1a691f32bada81258498094d7f51370706d
thenounproject.com/search-icons.json, v1
{
  "description": "Searches The Noun Project icon library like its icon search page: icon title, link, preview image, creator name and license. First page of results (about 140 icons). Returns an empty list when nothing matches.",
  "effect": "read",
  "id": "thenounproject.com/search-icons",
  "keywords": [
    "noun project",
    "thenounproject",
    "icons",
    "icon",
    "symbols",
    "pictograms",
    "svg",
    "vector",
    "glyph",
    "graphics",
    "design",
    "clipart"
  ],
  "output": {
    "schema": {
      "properties": {
        "icons": {
          "items": {
            "properties": {
              "creator": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "license": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "thumbnail_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "title": {
                "type": "string"
              },
              "url": {
                "type": "string"
              }
            },
            "required": [
              "title",
              "url"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "query": {
          "type": "string"
        }
      },
      "required": [
        "query",
        "icons"
      ],
      "type": "object"
    },
    "value": "{query: params.query, icons: steps.search.icons[?title != `null` && url != `null`].{title: title, url: join('', ['https://thenounproject.com', url]), thumbnail_url: thumbnails.thumbnail200 || `null`, creator: creator.name || `null`, license: (license && replace(license, 'License.', '')) || `null`}}"
  },
  "params": {
    "additionalProperties": false,
    "properties": {
      "query": {
        "description": "Icon term, e.g. 'coffee', 'bicycle', 'leaf'",
        "maxLength": 100,
        "minLength": 2,
        "type": "string"
      }
    },
    "required": [
      "query"
    ],
    "type": "object"
  },
  "provenance": {
    "method": "har",
    "notes": "GET /search/icons/?q=<query> returns server-rendered HTML with a __NEXT_DATA__ script holding the first page of icon results (id, url, title, thumbnails, tags, creator, license). Values are read from the embedded JSON; no hashed CSS classes are used. The recipe does not call other hosts.",
    "recorded_at": "2026-11-08T16:38:16.000Z",
    "recorded_by": "wield-forge (claude-haiku agent)"
  },
  "requires_login": false,
  "schema": "https://wield.run/schema/recipe/v1.json",
  "site": {
    "country": "US",
    "id": "thenounproject.com",
    "language": "en",
    "name": "The Noun Project",
    "origin": "https://thenounproject.com",
    "origins": [
      "https://thenounproject.com"
    ]
  },
  "steps": [
    {
      "description": "Server-rendered icon search page /search/icons/?q=...; read-only GET. The results are in script#__NEXT_DATA__ under props.pageProps.initialState.browse.allIconsData[].results[].",
      "expect": {
        "content_type": "html",
        "status": [
          200
        ]
      },
      "extract": {
        "embedded_json": {
          "required": true,
          "selector": "script#__NEXT_DATA__",
          "vars": {
            "icons": "props.pageProps.initialState.browse.allIconsData[].results[]"
          }
        }
      },
      "id": "search",
      "request": {
        "headers": {
          "Accept": "text/html"
        },
        "method": "GET",
        "query": {
          "q": "{{params.query}}"
        },
        "url": "/search/icons/"
      }
    }
  ],
  "task": "Search icons on The Noun Project",
  "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.icons) > `0`",
      "length(output.icons[?starts_with(url, 'https://thenounproject.com/icon/')]) == length(output.icons)",
      "length(output.icons[?title != `null`]) == length(output.icons)"
    ],
    "example_params": {
      "query": "coffee"
    },
    "max_ms": 5000
  },
  "version": 1
}