Collect
Two independent streams land on DataFramer:- Signals:
track/identify/groupevents from the browser SDK, ingested through/api/signals/*. - Traces: your AI calls, either pulled from a connected observability tool (Langfuse or LangSmith today), or auto-tagged as they’re created if you’re on Langfuse v2 and using
dataframer-journey.
journey_id, generated by the browser SDK and propagated by the server library.
Correlate
DataFramer matches signals to traces on two keys:journey_id: the primary match. Any signal and any trace sharing a journey id are grouped into the same journey timeline.- Direct datapoint id: some signals (like a reviewer’s edit) point at one exact trace explicitly, independent of journey id. This is resolved immediately at ingest, so it’s exact even if the journey correlation is looser.
Next steps
View & Filter Journeys
See the stitched result in the Journeys UI

