We measured 188 industrial supplier and distributor sites against sixteen traits of machine readability. Three independent runs, 98 percent stability, the distribution compressed into a narrow band. Below are all the numbers, the methods, and what follows from them.
Purchasing is moving into the machine. The buyer increasingly does not open the site but asks: do you have this, how many, how fast, at what price for us, and send the document. The agent that asks these questions does not read pages with its eyes: it reads markup, fields, responses to requests. If there is no answer in machine form, the supplier does not exist for that buyer, even if it has an excellent catalogue and twenty years in the market.
We measured not the beauty of the sites but exactly one thing: whether a machine can get what it needs. Sixteen traits, from "does it let you in at all" to "can the catalogue be queried and paid by invoice". This is not an assessment of business quality, it is a measurement of the interface.
The sixteen traits are divided into four groups by the nature of the requirement. Each is measured once programmatically, and each has a single unambiguous "solved" criterion.
| Group | Trait | What counts as solved |
|---|---|---|
| Access | machine_access | The page serves readable content with no signs of machine protection |
| real_404 | A nonexistent address answers with a real 404 error, not a page with code 200 | |
| discovery_map | The sitemap lists product pages so the machine can find them | |
| Declared rules | bot_rules | The robots rules file names at least one AI agent and says what it may do |
| llms_txt | A file describes the site for language models | |
| Structured data | product_markup | Product markup with an identifier and price, not just page text |
| price_and_stock | Price and availability are read by the machine as fields, not as text | |
| Query and transaction | catalogue_query | The catalogue can be queried, not only read as pages |
| api_surface | A public machine entry point for queries | |
| api_catalog | The catalogue is available through the machine entry point | |
| agent_description | A file explaining to the agent what is allowed here and how | |
| agent_card | A declaration of an agent card with identity and rules | |
| ard_catalog | A description of the catalogue in machine-readable form for agents | |
| authorisation | A clear way to gain access by key or token | |
| oauth_protected_resource | Protected resource metadata, if access requires authorisation | |
| machine_payment | Payment or invoicing by machine, not a form for a human |
A measurement that changes from run to run is useless: you cannot sell on it or argue with it. So we measured each site three times, independently, and compared the answers. The result was stronger than we expected, and it makes everything else in this document admissible.
| Stability check | Result | What it means |
|---|---|---|
| The same answer in all three runs | 185 of 189 (98 percent) | A single measurement of a site is reproducible |
| Median score spread between runs | 0.0 points | For a typical site the score does not move at all |
| Worst spread | 2.4 points | There are four sites that answer differently |
| Sites that changed their answer | 4 of 189: kendallelectric.com, abcsupply.com, thermofisher.com, zoro.com | This is the noise band, and we name it rather than hide it |
| Sites with no answer | 1: schaeffler.com | Excluded from all calculations, the denominator is 188, not 189 |
98 percent stability means that a site report is not an opinion or an eyeball assessment but a measurement that anyone can repeat. We can show a client its failure, it can go and re-measure itself, and it will get the same. This is exactly what the whole commercial part stands on: a dispute over whether it is true or not is impossible.
The picture spread into three bands, and only one of them means competition.
| Band | Traits | What this says about the market |
|---|---|---|
| Half the vertical (45-48 percent) | Sitemap, access, real 404 | This is hygiene. Falling out of it is shameful, being in it gives nothing: half the market is already there |
| A handful can do it (0.5-13 percent) | llms.txt 25 sites, robots rules 16, authorisation 10, protected resource metadata 6, price with stock 2, product markup 1, machine payment 1 | This is where it is decided who gets the order. The thresholds are so low that the work pays back from the first large buyer |
| Nobody can do it (zero) | Queryable catalogue, machine entry point, catalogue through it, agent description, agent card, agent catalogue description | This is not competition, it is an empty field. Zero out of 188 means there is no leader, no standard, no habit here |
At least one site out of 188 publishes product markup with a price, and there are two if you count price with stock. No site out of 188 lets you query the catalogue. That is, in an industry that lives on selling goods from stock, there is not a single supplier where a machine could ask "do you have this, how many, when, at what price for us". This is not a lag, it is the absence of an interface as a class.
The mean score is 4.5 out of 16, the median 4.1. The bottom ten percent bottom out at 3.8, the top ten reach 5.5, the best site in the sample scored 7.3, the worst 2.9. Sixty-one percent of sites are below five points. Exactly one is above seven points.
Such a compressed band is explained by structure, not by uniformity of quality. Six traits are solved by nobody, so those six points are unavailable to everyone: the maximum is practically ten, and the difference between a strong and a weak site fits in a narrow corridor. The score here does not measure how good a supplier is. It measures how machine-readable it is, and the ceiling of that measurement currently rests on zero solved tasks of the top layer.
From this follows an important practical conclusion: a shift in score of one or two points does not mean an improvement of ten percent. It means a transition to another band, because the traits are few and discrete. Each solved trait from a rare band is worth disproportionately much.
The traits are not independent: one layer is a precondition of another. A machine will not read data it has no access to. You cannot query a catalogue that does not exist in structured form. You cannot invoice for what is not queried. So we ordered the traits into four layers and looked at how far each site actually gets.
| Layer | Passed completely | Partially | Meaning |
|---|---|---|---|
| A. Reachable by machine | 56 of 188 (30 percent) | 115 | Crawler, real 404, sitemap |
| B. Declared rules | 8 of 188 (4 percent) | 33 | Rules for AI agents, file for models |
| C. Data in structure | 1 of 188 (1 percent) | 2 | Product markup, price and stock as fields |
| D. Can be queried and paid | 0 of 188 | 10 | Catalogue query, identity, invoice |
And we checked the direction of dependency not in words but by measurement: of 91 sites with a proper sitemap, one publishes product markup, meaning that being findable does not mean having something to show. Of 25 sites with a file for models, not one publishes markup: declaring rules does not mean having data. Of 16 sites with rules, half have a file for models: these two traits live together, because they are one job, not two. Of 10 sites with authorisation, six have protected resource metadata: that too is one job.
The only site with product markup is both reachable and has a sitemap, but it is one, and you cannot build a conclusion on a single point. What works here is the logic of necessity, not statistics: the layers are ordered by that without which the next is impossible. The measurement only confirms that nobody contradicts the logic, and that all who declared rules have no data, while all who have data also have access.
This is the main result of the measurement, and it comes out if you do not count failures separately but ask at which layer a site stopped first. Then the sixteen items add up to one cause per site, and the picture becomes manageable.
| First unpassed step | Sites | Share | What this means in business language |
|---|---|---|---|
| A. Does not even let the machine in | 132 | 70 percent | The site is made only for humans: the catalogue exists but the machine will not get it. This is not a data problem, it is an entry problem |
| B. Lets it in but declared nothing | 50 | 27 percent | The machine can enter and does not know what it is allowed. A few hours of work, not a project |
| C. Declared but no data in structure | 6 | 3 percent | The only real data task: there is no structured source from which price and stock come |
| D. Reachable, declared, structured | 0 | 0 percent | Nobody got there. This layer requires work that nobody in the industry has started |
The report "sixteen checks, eight failed" sells a project. The report "you do not let the machine in, so the other fifteen traits do not matter, and here are three actions for this week" sells a result. A root cause turns a list into an order of work, and an order of work turns a conversation into a decision.
We counted which traits fail at the same sites. A joint failure means not two problems but one job that is simply measured in two ways.
| Pair of traits | Joint failure | One job |
|---|---|---|
| Product markup and price with stock | 0.99 (186 sites) | Introduce a structured data source about the product. Price and stock will not appear in markup separately from it |
| Product markup and machine payment | 0.99 (186) | The same: without structure there is nothing to invoice |
| Authorisation and protected resource metadata | 0.98 (178) | Set up access by key. This is one job, not two |
| Protected resource metadata and machine payment | 0.96 (181) | Configured access and invoicing live together, because both are about identifying who is asking |
The practical meaning is simple: in the current report the client sees eight red rows and postpones everything. The right presentation is three jobs at different prices, of which two cost a few hours and one requires a decision about data.
The six traits that nobody solves are excluded from the joint failure calculation. If a trait fails for everyone, its joint failure with anything is one hundred percent and means nothing: it is not a relationship, it is arithmetic. Such traits are counted separately, as an empty field of the market, not as a correlation.
We computed mean scores by category where the sample has at least three sites. The result turned out to be unexpected and is explained equally well by market logic and technical logic.
| Worst | Mean | Best | Mean |
|---|---|---|---|
| Electrical, data and security (n=12) | 3.82 | Customs, freight and trade services (n=4) | 5.45 |
| Drives, bearings, motion control (n=8) | 4.01 | Compliance and supply chain data platforms (n=4) | 5.43 |
| Fasteners and components (n=5) | 4.04 | Associations, media and analytics (n=6) | 5.27 |
| Medical, laboratory and life sciences (n=7) | 4.09 | Food products and forest goods (n=6) | 5.13 |
| Auto parts and heavy aftermarket (n=7) | 4.14 | Medical devices and pharmaceuticals (n=4) | 4.95 |
The categories that lose the most on a machine query answer the worst. Electrical and fasteners are exactly the case where the buyer asks "do you have this, how many, when, at what price", and they are at the bottom of the sample. And at the top are those who do not sell hardware at all: customs brokers, compliance platforms, analytics and associations. That is, the vertical answers the better the less physical goods it has to manage. This is not about technology, it is about where in the company the question of machine readability actually sits: for those who sell data it is inside the product, and for a distributor it belongs to nobody.
The order of work is derived from the layers, not from the number of red rows, because the layers depend on one another. Below are three jobs, by price and by who needs them.
| Job | Who needs it | What it gives | Cost of effort |
|---|---|---|---|
| 1. Let the machine in: open access, replace soft answers with a real 404, serve the sitemap | 132 sites (70 percent), stuck at layer A | A move into the band where half the vertical lives, and the opening of all the other traits | Hours of an engineer, without a project and without data |
| 2. Declare the rules: rules for AI agents and a file for models | 50 sites (27 percent), stuck at layer B | The machine knows what it may do and stops guessing. Plus it shows in the score for those who did it first | One or two days, but this is work almost nobody has done: only 8 sites out of 188 passed the layer completely |
| 3. Give the data in structure: a structured product source from which price and stock come | 6 sites (3 percent), stuck at layer C | The only thing that answers the question "is there this and how much does it cost". This is where the purchase decision sits | A project: this is work about data, not about the site |
| 4. Give the ability to query and pay: a queryable catalogue, agent identity, invoicing to the machine | Nobody has got there yet | Full participation in machine purchasing | A project of several months, and the first in the industry takes the position entirely |
The measurement turns into a conversation with a client if you show it not a list of failures but its step and its category. The report format is this: where you are stuck, how you look next to others in your category, what fails together and therefore is one job, and three actions in order.
An example from the sample. A real site is taken from the group stuck at the declared rules layer: gfs.com, score 5.4 out of 16, category of food equipment and packaging. A clarification that makes the example honest: this is not the middle of the whole sample but the lower bound of its own group. All fifty sites stuck at this layer live in the band from 5.4 to 7.3, and 5.4 here is at once the minimum and the median, that is, the site is a typical representative of it.
Hence a conclusion more important than the example itself: the score is almost entirely determined by the step. Sites stuck at the access layer live in the band 3.8-6.2, those stuck at the rules layer in the band 5.4-7.3. So an improvement of fractions of a point means nothing, while a move to the next step shifts the site into a different band entirely. You have to work on the step, not on the point.
| Trait | Result | What the scanner measured |
|---|---|---|
| machine_access | solved | HTTP 200 and readable content (367316 bytes) with no browser fingerprints |
| bot_rules | partially | robots.txt exists but never mentions an AI agent: 1 agents named, none of them AI |
| real_404 | solved | a path that does not exist answers a real 404 |
| product_markup | failed | no Product markup on the product page we located: an agent reading your site cannot tell what you sell in mach |
| price_and_stock | failed | neither price nor availability is machine-readable: a comparison agent has nothing to work with |
| catalogue_query | partially | no public tool endpoint found (MCP or equivalent): the catalogue cannot be queried, only read as pages |
| discovery_map | solved | /sitemap.xml lists 1998 URLs, so product pages can be discovered |
| agent_description | partially | nothing at /agents.txt or /.well-known/ai.txt: a machine has no description of what it may ask for |
| llms_txt | partially | no llms.txt at the root |
| agent_card | partially | no agent card: your site does not describe itself to another agent |
| ard_catalog | partially | no /.well-known/ai-catalog.json: an agent has no list of the resources this site offers it |
| api_catalog | partially | no /.well-known/api-catalog (RFC 9727): a discovery client has no machine list of the APIs |
| oauth_protected_resource | partially | no /.well-known/oauth-protected-resource (RFC 9728): a client cannot find who authorises access |
| api_surface | partially | no machine-callable API surface found |
| authorisation | partially | nothing declares how an agent may be authorised, so anything beyond anonymous reads has to be guessed |
| machine_payment | partially | no machine payment declaration (x402 or equivalent): an agent cannot pay per call |
In this form the report reads in a minute: the step is diagnosed, it is visible that part of the failures are the same gap, and it names where to start. The general list of sixteen rows does not get read at all and is postponed.
Corpus. 189 domains of industrial suppliers, distributors and adjacent services, gathered from industry distributor rankings and from categories in the market map. 188 were measured, one site did not respond and is excluded.
Traits. Sixteen, each checked programmatically against one unambiguous formulation. A trait counts as solved only at full compliance: a partial hit is a separate state and does not go into the score as a solution.
Reporting. A trait that returns a warning brings half a point; a failure zero; a solution one. The score is the sum over sixteen, so the maximum is sixteen, and the actual maximum of the sample is 7.3.
Three runs. Each site was measured three times independently, the answers were compared. Identical answers are 98 percent, the median spread is zero, the worst 2.4. The four sites that changed their answer are named in the stability section: they mean the site has unstable output, and this too is a measurement result, not our error.
Direction of dependency. Determined by conditional shares: among those who solved trait X, the share who solved Y was counted. Where the share is near zero, the layer is a precondition, not a consequence. Where the shares are high in both directions, the traits form one job.
Joint failures. Counted only for traits that at least someone solves. A trait failed by everyone was excluded from this arithmetic, because its joint failure with anything is one hundred percent and carries no information.
A separate table of exclusions, because a measurement without it looks more precise than it is.
| What is excluded | Why |
|---|---|
| schaeffler.com | The site did not respond to the measurement, zero features obtained. Counted as a measurement failure, not a site failure, and removed from all denominators |
| kendallelectric.com, abcsupply.com, thermofisher.com, zoro.com | They answer differently in different runs. Their scores are given with a caveat, they are not removed from the aggregates, but their behaviour is named as noise |
| Six traits with zero solutions | Excluded from the joint failure calculation: without variation the coefficient means nothing. Counted separately as an empty field of the market |
| Comparison with an industry leader | There is no leader: the best site in the sample scored 7.3 out of 16, and it is the only one above seven. So the comparison is with the standard and with the category, not with a champion |
Limitations, honestly. 189 sites is a sample of the vertical, not the whole industry. The trait set will change together with the standards, which are themselves still drafts. The proof of the direction of dependency rests on conditional shares where rare bands have only one or two sites, and a conclusion is not built on a single point. The best site in the sample still does not answer the question "is there this and how much", so what is measured is not the quality of the business but only the readiness of the interface.
What is next. Three things this measurement allows you to do at once. First: re-measure the same sites in a few weeks and show movement, not a state, because progress matters more to a client than a score. Second: take one category whole and bring it to a complete layer, because in business search density wins, not reach. Third: turn the measurement into a public argument, because numbers anyone can repeat are argued differently from an opinion.
The rule of this report applies to us too. We measured Connect by the same trait as the 188 sites above, and the number travels with its boundary. What is measured: the share of Connect pages with machine-readable offer markup. Assumption: only schema.org markup (Product and Offer) in JSON-LD is counted, pages are taken from the sitemap on 3 November 2026, and llms.txt, agents.txt and field-run.json are machine-readable but do not describe an offer, so they are not in this share. The share is 15.4 percent (2 pages of 13). What this assumption breaks: 84.6 percent of pages do not declare an offer to a machine.
In an industry that lives on selling goods from stock, not one of the 188 suppliers lets the machine ask what it has today and at what price for us. This is not a lag, it is the absence of an interface as a class, and that is exactly why first place here is open.
ARLI membership: the notes from the workshop
One site of yours, measured, with the price for the work in the same document
ARLI, Inc., a Delaware corporation. Questions: hq@arliwork.com.