Agents find it. Harnesses filter it. A human publishes it.
AI Atlas records where AI is actually deployed in the real world — which company, which process, what changed, and what was measured.
Every day, agents search the open web and filter out 85%: announcements, vendor brochures, roundups, anything with no named company or no measured outcome. A human reviewer reads the 15% that survives and decides what is worth publishing — the last 6%.
A repository of real AI deployments, for research, insight and inspiration.
Counted from 22 March 2026 to 15 September 2026.
The multi-agent architecture
drag · zoom · select any nodeThe four principles the whole design rests on
what every other decision follows fromEvery stage may do exactly one thing — and is forbidden from its neighbour's.
Search can drop a link that is obviously wrong, but it never opens the article. Validate decides, and never writes. Persist writes, and never decides again. Report only reads. The lines are drawn where they are so that when something goes wrong, it is clear which stage did it. A stage that quietly does its neighbour's job hides its own mistakes.
A day that finds nothing still says which kind of nothing it found.
Every stage passes something on, even when that something is empty, and a stage with nothing to give does not stop the run. Nothing found means a tool broke. Nothing survived means the day's questions were badly aimed. Everything already on record means the queries have gone stale. If the pipeline simply went quiet, none of that could be told apart from a crash.
A missed case is recoverable. A false one is not.
A case that gets missed today can be found again tomorrow. A vendor brochure filed as a real deployment sits in the data, and on the globe, until someone spots it. That trade is on purpose, and it is why more than eight in ten candidates are thrown out on a normal day.
The model is trusted to judge. It is not trusted to be the last word.
Reading the article and weighing it up is the part only the model can do. But it gets things wrong in the same ways over and over — it forgets to translate, it takes a vendor's own product page for a customer deployment. So everything it produces runs through plain mechanical checks before it is written down.
Where a human sits in the loop
nothing publishes itselfThe pipeline never publishes on its own authority. Everything it records arrives in an unreviewed state and waits for review.
Search
Produces a list of links worth reading, and is deliberately kept ignorant of what those links say. A searcher that starts forming opinions about content will discard things the validator would have caught, on far less evidence.
- Deciding which queries today should ask
- Choosing which tool answers each one, and recovering when a tool goes quiet
- Discarding links that structurally cannot be a case study
- Removing duplicates and normalising what survives
- Opening an article and reading it
- Treating a search snippet as if it were the article
- Repairing a broken link or inventing a missing title
- Improvising extra queries beyond what the day calls for
Design decisions
and what each one answersSearching one way finds one kind of case. The layers exist so that no one kind of coverage can quietly collapse.
| Layer | Asks about | Guards against |
|---|---|---|
| Process | Specific business workflows — claims, fraud review, code review, contact centre | Missing the ordinary, unglamorous deployments that make up most real adoption |
| Industry | A different sector each day of the week | The dataset skewing toward whichever industries publish most loudly |
| Geography | A rotating set of countries each day | An atlas that is really just a map of the United States |
A query that asks only about "AI" returns opinion. The shape that works asks for all three at once: a concrete business process, a word that means the thing is actually running, and a word that implies a measured outcome. That triple is the cheapest stand-in for the call the validator will later have to make properly — between something a company announced and something a company does. Queries that drop any leg of the triple have been measured at a zero survival rate.
A fixed set of queries stops working after about three days: it keeps finding the same articles, which are by then already on record, and the run's entire output becomes duplicates. Rotation ensures the same question does not repeat for weeks. The choice comes from the date, so the same day always asks the same questions — which matters when you are trying to explain why a particular day found nothing.
Originally every query tried the tools in one fixed order, falling through on failure. The effect was that the cheapest tool answered almost everything and the strongest semantic search was never reached at all — it went weeks without being called once. Assigning each layer a primary tool forces all of them into use, and a measured comparison showed that the starved tool produced several times more surviving candidates than the chain it had been buried under.
The failure that shaped this rule was a tool hitting its weekly quota and returning that as a successful response containing zero results. Nothing crashed, nothing was logged as broken, and the day simply recorded that the world had produced no AI deployments. Empty is now treated as a failure signal in its own right, alongside rate limits, timeouts and unparseable responses. A rerun through a different tool recovered twenty candidates and a real case that would otherwise have been lost silently.
The retry budget stops at two attempts per query. Beyond that the query is abandoned and recorded as abandoned — a run that takes all day to fail is worse than one that reports a gap.
Validate
The stage the whole pipeline exists to protect. Everything upstream is cheap and everything downstream is mechanical. This is where judgment happens, and it is adversarial by design: every candidate is marketing until the article proves otherwise.
- Actually fetching and reading each article
- Deciding whether it describes a deployment at all
- Extracting company, place, industry and outcome, in English
- Recording why each rejection was rejected
- Writing anything to the database
- Inventing a fact the article does not contain
- Keeping a case whose company cannot be identified
- Rejecting a source for the language it is written in
Design decisions
and what each one answersA Chinese power-grid deployment and a Japanese bank rollout are first-class cases. The source may be in any language. The output must be English, so a non-English article is translated, not discarded. A machine check enforces that, because the failure runs both ways: told "output must be English", a model starts throwing away perfectly good foreign-language sources; told "translate everything", it sometimes leaves the original text in place. Both have happened.
Most of what the web publishes about enterprise AI is a press release about intent. It shares almost every word with a real case study — the same company names, the same "AI", the same "deployed". The distinction comes down to verb tense.
will enable · is set to · announces a partnership · launches · no metric yet
deployed at · in production · reduced review time 40% · saved 6 hours per case
"Two hundred thousand employees now have access to an AI assistant" is a real, verifiable, well-sourced fact, and it says nothing about how anyone's work changed. The bar says so explicitly: headcount announcements are not use cases and mean nothing for the atlas. The same company becomes acceptable the moment the article names a process — claims handling, document review, fraud triage — and what changed about it.
Anonymous case studies — "a leading European insurer" — are dropped entirely rather than recorded with a blank. A model will be tempted to invent a plausible name, and one fabricated company would undermine every other record in the dataset. Consortiums, alliances, initiatives and project names are likewise not companies. The atlas is a map of who is doing this, and a point on it that names nobody is worse than an empty space.
After the validator finishes, mechanical checks run over its output looking for the specific ways it is known to fail: untranslated text left in place, vendor press domains accepted as sources, announcement phrasing, roundups and listicles, missing geography. Anything they catch is moved into the rejected pile before persistence sees it. These exist because on two separate days the validator was confident and wrong — once shipping untranslated records, once shipping seventeen vendor pages. They are not optional, and they do not get skipped when the output "looks fine" — looking fine is exactly the failure mode.
Persist
By this point every judgment about the case has been made. This stage is deliberately mechanical. Its only intelligence is about identity: has this article already been recorded, and does everything the case depends on actually resolve?
- Recognising an article the atlas has already seen
- Storing the case whole — its text, not just a link to it
- Writing it down in a state that awaits review
- Handing reporting an accurate account of what it did
- Reconsidering whether a case is good
- Promoting anything to published on its own authority
- Halting the run because one record failed to write
Design decisions
and what each one answersIf an article is already on record it is skipped — even when a reviewer read that earlier record and retired it. That is counter-intuitive but deliberate: retired means someone judged this source invalid. Re-ingesting it would overrule that decision automatically, every week, forever. Reviving a retired case is a manual act, never an automatic one.
The record keeps the deployment's full text — five hundred characters at minimum — rather than a link and a headline. Articles rot: they get retracted, paywalled, restructured, or quietly rewritten to say something softer. A case that lives only as a URL is a case that can evaporate without anyone touching the database.
It also makes a specific repair possible. When the article turns out to be poor but the deployment behind it is worth keeping, there is a set procedure: find a better source and attach it, rather than throw the case away and hope the same deployment turns up again.
A use case is not a standalone note. It carries a deployer, a place, an industry and a source, and each has to resolve to something real before the case can be written — a named organisation, coordinates that put it somewhere on the globe, an industry from the closed vocabulary. A field that does not resolve sends the case back. It is never filled with a blank.
A retired case is never revived automatically. It was retired because that article was judged bad, and nothing about a later day makes it good.
A case is written in a state that means "awaiting review". It is visible in the product, but labelled as such. That is a deliberate trade: showing it unverified is more useful than hiding it, as long as nobody can mistake it for verified. The pipeline never promotes its own work.
A malformed field is corrected and retried. A network failure is retried once. If a case still cannot be written, it is skipped and recorded as skipped, and the run continues with the rest. The stage always hands something onward, even when it wrote nothing at all — because the alternative is a day that ends in silence, and silence is the one outcome the design does not permit.
Report
The pipeline's contract with its reviewer. The least sophisticated stage and the least optional one: a day that finds nothing still ends with a message, because an absent message means something broke and nobody knows what.
- Summarising the day: added, already known, failed
- Showing which tools did the work, so a quiet tool is visible early
- Listing each new case in a form a reviewer can act on
- Surfacing the review backlog, and escalating as it grows
- Re-opening any article
- Re-checking content or re-validating a case
- Recomputing numbers the earlier stages established
The one exception is a counts-only look at the database, just to say how large the review queue has become.
Design decisions
and what each one answersA day can produce nothing in several different ways, and each calls for a different fix. Nothing was searched means a tool is broken. Nothing survived validation means the day's questions were poorly aimed. Everything was already on record means the queries have saturated and need rotating. Collapsing all three into "no results" would throw away the only signal that says what to fix.
Because everything the pipeline records waits for review, the review queue is a real bottleneck — and one the pipeline can see but not fix. So the daily message reports the backlog and changes its tone as it grows, from a note to a warning.
The day's metrics are archived after delivery is confirmed, never before. This makes the metrics history mean something precise: every line in it is a run that finished and got reported. A run that produced cases but failed to report leaves no line. That is correct: from the reviewer's point of view that day did not happen, and the gap says so honestly.
The observations at the end of each report are written against the running record of what has and has not been working, not off the day in isolation. That shared reference is what turns a daily message into a feedback loop: patterns noticed in reports become notes, notes become retired queries and new rules, and those rules change what tomorrow's search asks.
What counts as a use case, and what only looks like one
Nearly every design decision in the pipeline is downstream of this definition. It is worth stating plainly, because most of what the web publishes about enterprise AI fails it.
Where the bar sits, and why
The atlas exists to answer a question that is otherwise very hard to answer honestly: where is AI actually being used, and to do what. Announcements, headcount figures and market reports are abundant and answer none of that. The bar is not conservative by accident — it is what makes the remaining tenth worth anything.
A case qualifies when- A named company — a real business entity, not a consortium or a project
- Actually running, not planned or announced
- It changes a specific process — claims, inspection, underwriting, triage
- Something was measured — a percentage, a time, a cost, a rate
- A substantive article about the deployment, not a product page
A vendor's own writing counts only if it names the customer and reports real numbers. Otherwise it is a brochure with a case study's grammar.
What the bar rejects
Every rejected candidate is recorded with a reason, and those reasons cluster into five recognisable families. Knowing which family dominates on a given day is what tells you whether the problem is the queries, the sources, or the bar.
A separate rule set, applied by hand over records already stored, decides whether an article that passed every daily gate is reporting a deployment or selling one.
The standard fits in one line: technical detail is acceptable, pure hype is not — a named tool, platform, model or implementation step, not “improved efficiency”. One line proved too loose, so it became three tests that must all pass.
Few numbers, all anchored, beat many that float. The template it exists to catch satisfies none of the three: “X deployed AI to revolutionise Y. The system uses advanced computer vision to detect defects with high accuracy, improving quality and reducing costs.”
one pre-check · thirteen verdicts · one disposition · two audits
R1Blocklisted source — subscription walls, unknown aggregators with no editorial team, design portfolios, tool-marketing sites running “case studies” beside tutorialsR2Paid native advertising — a sponsored or brand-studio label, or the vendor speaking inside the article. Numbers do not redeem itR3Pure hype — business outcomes only — no tool, platform, method or stack named anywhereR8Synthetic composite — a customer assembled from several, or invented outright; judged by hand in the auditR10Partnership or MOU — no deployment in the past tense anywhere in the pieceR12Survey or market analysis — research findings wearing a case study's headlineR13Not about AI — the story turns out to be about something else entirelyR4Vendor blog with substance — real technical detail, and the customer is namedR5Built and run in-house — a large organisation describing its own systemR6Independent media — reporting with technical detailR7Public sector or academic — government, university or non-profit deploymentsR9Anonymous customer — the vendor is the only source — kept, confidence reducedR14Vendor self-publishing — high risk by default, with written exceptions rather than case-by-case argumentR16Content driftWhat is stored no longer matches what the source says — the article was edited, softened or replaced after the case was recorded.
R17URL now points elsewhereThe link still resolves, but to a different article than the one the case was built from. Alive is not the same as correct.
A standard agents can follow is a standard written as thresholds
"Good quality" is not executable. Every judgment here had to be turned into something with a number, a list, or a yes-or-no test attached. Without that, each day's run applies a slightly different bar, and the dataset drifts without anyone being able to say when.
Why it is written this way
the point of the whole exerciseA skill is only as reliable as the loosest thing in it. Tell a model to "reject low-quality content" and it will agree, then apply a different standard on Tuesday than it did on Monday, and nothing on record proves it drifted. Tell it that content is at least five hundred characters, that a summary is at least two hundred, that an industry must come from a fixed list of seventy-six values, that a coordinate is never zero — and every run applies the same bar, every rejection carries a reason code, and an argument becomes a question about a rule rather than about taste.
That is the trade this project made everywhere. The rules below were not written up afterwards. They are the pipeline. Each one exists because something got through without it.
What a record must be
fourteen fields · four judgementsA candidate is not scored. It is admitted or rejected. Most of the rows below only check that a field is filled and within its limit. The last four decide whether the thing is a deployment at all. Every rejection carries a reason code, which is what makes a bad day diagnosable rather than just disappointing.
titleEnglishA brief name for the AI application — not the article headline verbatim.summary200+ charsDescribes the deployment, not the organisation behind it.content500+ charsA real use-case description, never marketing copy. A non-English source is translated, never discarded.URLspecific articleA post, release or case study. Never a homepage, product or pricing page, never LinkedIn, never an academic repository.company_idmust resolveAn anonymous deployment drops the whole case. Never null, never a generated name, never a consortium standing in for a business.industry1 of 76Chosen by the deploying organisation's primary business, not by what the AI does.published_atISO-8601The article's own publication date, read from the page rather than assumed.countrystandardisedThe canonical country name, not whatever spelling the article used.citymandatoryWhere the deployment actually is.continentderivedChecked for consistency with the country, not assumed.latitude / longitudenever 0 · 999 · nullLooked up from the real city. On a globe a placeholder is not a missing value, it is a visible point in the wrong place.typeenumDeployment — in real operation, with metrics. Experiment — a pilot. Research — academic or R&D.source_nameenumMedia, company website, research report or analyst firm.statuspendingAlways pending on insert. Only a human reviewer moves it from there.Three states, enforced by the database
not a convention — a constraintThe record state is not a string anyone can invent. The database itself allows exactly three values, so a wrong one cannot be written even by mistake.
Extending that set is explicitly a two-part change: the constraint and the display logic move together, or the product shows a state it does not understand.
Designed around the assumption that things go wrong quietly
The pipeline's failure handling was not designed in advance. Almost every rule in it is the scar tissue of a day that went wrong in a way nobody noticed — and every one of those days produced plausible output. Nothing crashed, nothing threw, and the run reported success. That is the hazard of a pipeline built on a language model and a set of external services: the default failure mode is not an error, it is a confident, well-formed, wrong result. So the theme is not "retry harder" but "make the failure visible". The design spends far more on detecting silent failure — empty-as-error, mechanical checks, per-tool statistics, recorded reasons — than on recovering from loud failure, which was never the real risk.
Incidents that became rules
each one failed quietly first| What happened | Why it went unnoticed | The rule it produced |
|---|---|---|
| The same fixed queries ran for days and eventually returned nothing but articles already on record | The run looked healthy — searches succeeded, candidates arrived, they were simply all duplicates | Queries rotate daily out of a much larger pool, so a question is not repeated for weeks |
| A search tool hit its weekly quota and returned an empty success | Nothing errored. The day was recorded as a day with no AI deployments in the world | Empty results trigger a fallback to a different tool, and the substitution is recorded |
| The strongest search tool went weeks without being called | A global fallback order meant the first tool almost always succeeded first | Each query layer has its own primary tool, so all of them stay in use and stay measurable |
| Untranslated records reached the dataset | The validator was confident it had translated them | A mechanical check scans the output for untranslated text before anything is written |
| Seventeen vendor pages were recorded as deployments in one day | Each one individually read like a case study | A second mechanical check screens for vendor domains, announcement phrasing and roundups |
| The review backlog was reported as far smaller than it was | The count silently stopped at the first page of results | Backlog figures are counted at the source rather than tallied from a fetched list |
Who owns which decision
The pipeline's behaviour is not spread across code — it is written down in a set of documents, each of which is authoritative for one kind of decision. Select any of them to see what it decides and who reads it.
Stage definitions
one per stageShared standards
read by more than one stageProduct & codebase
the side that is built, not runSix months of use cases, and two filters
April through early September, read from the database itself and from the pipeline's own run log. Two things are worth separating: what the pipeline discards before writing a case down, and what review discards afterwards. Both are large, and only the first was designed.
Counted at the source on 15 September 2026.
Use cases recorded, April to September
from the databaseEverything that survives all of this ends up on one map.
Explore AI Atlas →