How to measure generative UI

Last updated October 24, 2026

When the interface is composed for each visit, the page stops being a stable unit and classic analytics break down. Measuring generative UI means recording the surface shown, the components in it, and the decision that produced it.

Parallèles, after Nees and Molnár · #ecd51e · October 26, 2026 · colophon

Analytics assumes a stable interface. You count views of a page, steps through a funnel, clicks on a button that is in the same place for everyone. Generative UI removes the thing all of that rests on. When the interface is composed for each visit, there is no shared page to count, because two people on the same route saw different screens. This is the least settled part of generative UI, and it is the part most teams discover last.

The page stops being a unit

A funnel is a sequence of pages that enough people pass through to measure. It works because the pages are fixed: the checkout step is the same checkout step for everyone, so counting arrivals and exits tells you something. Once the checkout is assembled per visit, the step is no longer one thing. The number of people who “saw the checkout” is still countable, but what they saw varied, so the number no longer explains the behavior underneath it.

The same problem shows up in every classic report. Heatmaps average positions that were never fixed. Session replay shows one assembled screen and implies it was the screen. Conversion by page compares pages that were different for each visitor. None of these is wrong exactly. They are answering a question, how did people respond to this interface, that no longer has a single interface in it.

New units: surface, component, decision

The way through is to stop measuring the page and start measuring the parts that are stable across visits. Three units survive generation.

  • The surface. A renderable region the system created for a visit: a screen, a panel, a card. It has an identifier even though its contents vary.
  • The component. A single item from the catalog, with its own identifier, wherever it lands in the layout. A price comparison module is the same component whether it appears first or fourth.
  • The decision. The choice that produced the surface: the specification the renderer drew, the state that fed it, and any model output or seed. This is the unit most teams forget, and it is the one that makes the other two interpretable.

Keyed this way, the questions come back. How often does this component get composed into a surface, and what happens when it does. Which decisions lead to the outcomes you want. How a given person’s screen was assembled, and why. The interface is different every time, but the components and the decisions are countable.

Where to capture it

The capture point is wherever the decision and the render happen, which is usually one of two layers. If an agent drives the interface, its event stream is the natural place: the protocols that carry generative UI, AG-UI among them, already emit typed events for tool calls, state changes, and the lifecycle of a turn, and those events are where a component was chosen and shown. If a renderer draws from a catalog, the renderer is the place: it knows the specification it received and the components it drew, and can emit an event per surface and per interaction.

Either way, the model to aim for is a schema keyed to component and surface identifiers, recorded as the interface is composed rather than reconstructed afterward. This needs the same thing the interface itself needs: a store of behavioral state that is current on the request. A pipeline built for real-time behavioral events is a natural home for it, because the events that drive the decision and the events that record what was shown are the same kind of data. Snowplow Signals is one such pipeline: it computes state from behavioral events as they happen and serves it back to the application, which means the decision and the record of it can run through one place.

Keep a record of what was shown

There is an accountability version of the measurement problem, and it is sharper than the reporting one. If every visitor sees an interface composed for them, the question “what did this person see?” has no answer unless something wrote it down. Support cannot reproduce a complaint. An audit cannot check what was served. A regression cannot be confirmed, because there is no fixed screen to compare against.

The fix is to treat every generated screen as reproducible: store the specification that drew it and the inputs that produced the specification. This is not a reporting nicety. It is the difference between a system you can stand behind and one that produces an unrepeatable result and discards it. Artists who worked with generative programs learned this long ago, and kept the seed for every output. The same discipline applies here.

What the evidence looks like today

Public evidence that generative UI improves outcomes is thin, and honesty about that is worth more than a confident claim. Most reported results are from the vendors selling the tools, and most are counts of activity rather than outcomes. The clearest public figures are usage, not conversion or retention. Independent reporting through 2026 found teams shipping generative interfaces who could not say whether they worked, because the usage data was not there to tell them.

That gap is not a reason to avoid generative UI. It is a reason to instrument it from the start. The teams that will be able to show a result are the ones who decided, before shipping, what a surface is, what a component is, and what to record about the decision that produced each screen.

Common questions

Why doesn't page-view analytics work for generative UI?
Page-view and funnel analytics assume a fixed set of pages that many people see in common, so you can count views of a page and steps through a funnel. When the interface is composed per visit, there is no shared page to count. Two people on the same route saw different screens. The page stops being a stable unit, and the counts stop meaning what they used to.
What should you log when the interface is generated?
Log the decision, not just the outcome. Record the specification the renderer drew, the components and the order it chose, the state that fed the decision, and an identifier for the surface and each component. With that, a generated screen is reproducible and comparable across visits, even though no two screens are identical.
How do you reproduce what a user saw?
Keep a record of the specification that produced the screen, and the inputs that produced the specification: the state on the request and any seed or model output. If you store those, you can redraw exactly what a given person saw. If you store only that the route was visited, you cannot, because the screen was assembled and then thrown away.
Can you measure whether generative UI is working?
Yes, but you measure the decision, not the layout. Hold the components and surfaces stable as units, attach outcomes to them, and compare decisions: does composing from live intent beat composing from a segment. A/B testing the rules behind the generation is the cleanest read, which is why generative UI and experimentation work well together.