One client, from the first message to a catalogue that answers machines
This is the whole loop run on a client that does not exist, so that the real one is not the first. The company is fabricated, the catalogue is fabricated, the money is illustrated. What is not fabricated: the before numbers are a real site from our field run, and the after state is live at a real address you can scan yourself with the same twelve checks.
Northline Industrial Supply
12 live parts, 3 branches (Cleveland OH, Green Bay WI, Charlotte NC), catalogue served from an ERP export, nightly CSV, read-only. Prices set per account, from account price matrix exported from the ERP.
5.1 of 10
Their site as it stood on 16 October 2026: 2 checks failed, 7 partly answered. A machine could read a sitemap and nothing else.
10.0 of 10
2 failures fixed and 7 partial answers made whole, on the same twelve checks, with the catalogue still on their side.
$9,500 first month
Diagnostic $2,500 credited, gateway $1,500 a month, integration $8,000 once. From the published rate card, not from a negotiation.
The same twelve checks, before and after
The acceptance test is not our opinion of the work. It is the same scanner, run against the client before we started and against the gateway when we finished.
| check | weight | before | after | what changed |
|---|---|---|---|---|
| A non-browser client can read the site | 3.0 | pass | pass | HTTP 200 and readable content (3346 bytes) with no browser fingerprints |
| Rules for AI agents are published and permit them | 2.0 | warning | pass | robots.txt names AI agents and lets them in: Amazonbot, CCBot, ClaudeBot, GPTBot, Google-Extended, OAI-SearchBot |
| Products are stated in machine terms | 2.0 | fail | pass | Product markup found on NL-ELC-CB-4MM, identifier present (NL-ELC-CB-4MM), price published (214.00) |
| Price and availability are machine-readable | 2.0 | fail | pass | price and availability are both readable by a machine on the product page |
| The catalogue can be queried, not only browsed | 2.0 | warning | pass | /.well-known/mcp.json publishes a tool interface a model can call |
| There is a map of what you sell | 1.0 | pass | pass | /sitemap.xml lists 15 URLs, so product pages can be discovered |
| A machine description of what may be requested | 1.0 | warning | pass | /agents.txt describes the service to a machine (961 bytes) |
| llms.txt is present | 0.5 | warning | pass | llms.txt is present and contains real text (1146 bytes) |
| The site describes itself to other agents | 1.0 | warning | pass | /.well-known/agent-card.json declares the service to other agents |
| A callable API surface exists | 1.5 | warning | pass | /openapi.json returns a machine-readable API description |
| A way to authorise an agent is declared | 0.5 | pass | pass | /.well-known/oauth-authorization-server is present, so an agent has a defined way to be authorised |
| Per-call payment is declared | 0.5 | warning | pass | /.well-known/x402 declares machine payment support |
Six questions a buyer asks, and the answers
Asked over the gateway as a program with no browser, on the day of acceptance. The answers below are the answers that came back, verbatim from the run.
The eight stages, and the list they have to hand over
Every stage says what we do, what we need from the client, and how long it takes. Nothing else is requested, and nothing is requested twice.
| stage | what we do | what we need | time |
|---|---|---|---|
| Contact | Nothing. They arrive from the scan, or we open with a score we measured on their own domain. | The domain, the product line, and who owns the website. | 1 day |
| Intake call | Thirty minutes. They describe the catalogue and where the price lives. | Who the price depends on, which accounts exist, how many parts are live, which systems hold the truth. | 1 day |
| Diagnostic | We scan their public domain with the twelve checks and send the transcript. | Read-only access to nothing. The scan is public. | 2 days |
| Access | They open a read-only path to the catalogue and a staging copy of the site. | A catalogue export (CSV or API), the account price matrix, the stock source, and a staging hostname we may call. | 3 to 5 days |
| Gateway build | We stand the gateway in front of the staging catalogue and answer the six buyer questions. | One named engineer on their side who can answer questions about fields; a decision on what an anonymous caller may see. | 10 working days |
| Acceptance | The twelve checks are re-run against staging, and three real buyer questions must be answered correctly. | A person on their side who says yes to the result, in writing. | 2 days |
| Live | The gateway is published in front of production under their domain, with the log delivered to them. | A DNS change or a proxy rule, and a named owner for the log. | 2 days |
| First month | Weekly call, the log reviewed, the twelve checks re-run monthly. | The account list quarterly so the price tiers stay true. | 30 days |
What this client would pay, from the published card
A catalogue of this size starts on the standard tier. Nothing here was negotiated, and the diagnostic is credited, so the client is never paying for a conversation.
| line | usd | why |
|---|---|---|
| Diagnostic | 2,500 | credited in full against the first month, so it is not an extra cost |
| Standard gateway, 50,000 calls a month | 1,500 | the tier a catalogue of this size starts on |
| Integration, one-time | 8,000 | their export, their staging, their rule set, their log |
| First month, all in | 9,500 | diagnostic credited: 2500 + 1500 + 8000 minus the 2500 credit |
| Year one | 27,500 | diagnostic and integration once, the gateway for twelve months |
What is real here. The client, the catalogue and the prices are made up, and the page says so everywhere. The before column is a real company from the field run, named in the raw data. The after column is a live gateway: scan it with /api/check?url=157-180-49-112.sslip.io:8099 and you get the same ten out of ten, and read the raw acceptance at loop-2026-10-16.json.