The number above the grid is not a count of your matches
Search our library for robot and the API answers with a total of 3,152 results across sixteen pages. Result 72 is Vision Camera, which lists "robot" in its keywords. Result 73 is 100 Points. Then 3D Glasses, then 8 Ball. None of them is a robot, and none of them contains the word "robot" anywhere in the record we return. The remaining 3,080 results run in alphabetical order all the way to Zombie Woman.
If you are building an icon picker on our API, that total is the first thing you put on screen and the number your pagination trusts. We spent an afternoon finding out what it is worth. The short version: for most words it is exact, and for a handful of words it is wrong by a factor of forty.

How we measured it
On 9 September 2026 we ran 48 search terms through our own public endpoint at limit=200 and paginated every one of them to the last page. The library held 13,340 icons that day.
Then we applied one test to every result: does the query string appear anywhere in the record the API returns for that icon. That record carries the name, the keyword list, the description, the alt tag, the meta title and description, the slug and all three category slots. The test is a plain substring match, so "cargo" counts as a hit for "car" and "padlock" counts as a hit for "lock". That is deliberately generous. A result that fails it does not mention your word in any form, in any field, anywhere. Being generous means these numbers can understate the problem and cannot overstate it.
Thirty-nine of the forty-eight words were exact
Worth saying before anything else: the search is not broken. For 39 of the 48 terms, every result the API reported mentioned the query. Stethoscope reported 2 and both are stethoscopes. Passport reported 8, toolbox 11, calendar 37, camera 67, dashboard 80, star 116, book 173, map 327. In each case the reported total is the real number, and you can paginate the whole set without wasting a request.
The exact terms are not only the rare ones, which is the reassuring part. "User", "star", "search" and "settings" are about as broad as words get in an icon library, and all four came back clean.
Nine words padded the list, always in the same shape
The other nine behaved differently, and the gap is not subtle. Robot reported 3,152 and 72 mention a robot. Rocket reported 751 and 19 mention a rocket. Wallet reported 825 against 28. Shield 501 against 17. Email 320 against 11.

All nine share a shape. The icons that mention the query sit in one unbroken block at the top of the results. Then comes a cliff rather than a slope: relevance does not decay down the list, it stops. Below the cliff, in all nine cases, the remaining results are sorted alphabetically by icon name.
That shape is the useful part of this whole exercise. A gradual decline would be hard to handle in a client, because you would have to guess where good enough ends. A cliff you can detect exactly.
Rocket: 751 results, 19 rockets
Ranks 1 to 12 are named rockets, from Rocket to V2 Rocket. Ranks 13 to 18 do not carry "rocket" in the name but earn their place through keywords: Bazooka lists "rocket launcher", Jetpack lists "rocket pack", and Launch Pad, Missile, Cruise Missile and Blue Spaceship all name it too. Those are good results, and a keyword match that surfaces a bazooka for "rocket" is the search doing its job.
Rank 19 is Air. Rank 20 is Al-Khwarizmi, then Alan Turing, Albert Einstein, Alembic, Alexander Graham Bell. From there the list runs alphabetically for another 733 entries and finishes at Zoologist.
The filler is not random. Of the 751 results, 635 of them, 84.6%, carry Science & Space in one of their three category slots, which is the first category on most of the rockets at the top. Read charitably, that is "more from this shelf". The charitable reading does not survive the robot case though: of robot's 3,152 results only 401, 12.7%, carry Technology in any slot, and the biggest block below the cliff is Objects at 1,537 icons. Whatever fills the space under the cliff, "more like this" is not a description you can rely on.
Three unrelated words, one identical total
Email reports 320. Message reports 320. Phone reports 320. Lock reports 501 and shield reports 501. Three unrelated words returning the same total to the digit is the clearest tell that the number is not counting your matches. The real counts behind those five totals are 11, 43, 119, 154 and 17.
This is not blanket behaviour, though. We tried two strings that match nothing, zzzqqxv and qwertyuiop. Both returned a total of 0 and an empty array. The endpoint is perfectly willing to tell you there is nothing there, which means the padding is triggered by something about the query rather than applied to everything.
What it costs to believe the number
We paginated the full robot result set the way a client would if it trusted the total: 16 requests at 200 records each, 4,573,062 bytes of JSON, or 4.36 MB. The 72 icons that mention a robot fit in a single request of 106,599 bytes, 104.1 KB. That is 42.9 times the payload and 16 times the round trips for the same 72 icons.
The cost on screen is worse than the cost on the wire. A picker that renders whatever it is handed shows the user two rows of robots followed by 150 rows of the rest of the library in alphabetical order. That reads as a broken search, not a generous one, and the user's next move is to type a different word rather than scroll.
The rule that fixes it in your client today
Request limit=200, then stop reading at the first result that does not mention your query in its name or keywords. That is the whole fix.
We checked what the rule costs. Across the nine padded terms it keeps 480 of the 507 icons that mention the query, 94.7% of them, and discards 6,747 results that do not mention it at all. The 27 it misses are strays: icons that do mention the query but were sorted into the alphabetical block anyway, so they sit below the cliff. If you want those too, do not stop at the cliff. Scan the rest of the page and keep every result that mentions the query, which costs you nothing extra because you already have the page.
One request is enough because the matching block is always small. The largest head we measured was lock, at 147 results, comfortably inside a single 200-record page. For the 39 exact terms the rule changes nothing at all: no result fails the test, so none gets cut.
The same habit is worth carrying to any icon API you did not write. Treat a result count as a claim rather than a measurement, and let the records themselves tell you where the answer ends. It takes one line of filtering to check, and the check is free once the page is in memory.
What we would rather ship
We would rather return 19 results for rocket than 751. A search that says it found nineteen rockets is more useful than one that pads to 751 and hopes nobody scrolls, and a total is only worth printing when it is a count. There is a version of this that is defensible, where the extra results are clearly labelled as suggestions and separated from the matches, but silently appending 733 alphabetical icons to the same array is not it.
Until we change it on our side, the cliff is easy to find and easy to cut. Now you know it is there.
Free 3D icons for this
Every icon on Thridy is free to download and use. A few that fit this piece:
- Bug Viewer 3D icon
- Bug Report 3D icon
- Markdown File 3D icon
- Blue Photon Engine 3D icon
- Archaeologist 3D icon
- Astrobiologist 3D icon
Browse all 2,600+ free 3D icons or explore them by category.
