Adobe Customer Journey Analytics tells you where users abandon. Fullstory tells you why — and sends that signal back to CJA as a dimension you can actually act on.
Executive Summary
Every CJA funnel report ends at a number. Fullstory starts there — embedding session replay URLs directly in CJA tables so analysts can step into the experience, ask AI what went wrong, and push a structured friction signal back as an XDM field. The funnel stops being a dead end.
The funnel identifies the leak — but can't explain why users don't complete.
One click from a CJA data row lands an analyst inside the user's session.
StoryAI Opportunities surfaces the "No Cars Found" error affecting thousands of users — before product hears about it.
One computed property in the Fullstory Data Layer becomes a CJA dimension — no engineering sprint required.
The Gap
How It Works
The closed-loop integration: CJA surfaces where, Fullstory explains why, the signal returns to CJA as a structured dimension
See It In Action
Use Case Scenarios
no_cars_found_count_fullstory.errorEncountereddead_click_count_fullstory.frictionSignalpaywall_encountered_fullstory.paywallHitlogin_error_type_fullstory.loginErrorTypeData Model
The Fullstory Data Layer publishes behavioral signals as computed properties. A single XDM schema mapping sends them to the AEP dataset that CJA reads — no custom pipeline, no ETL.
Technical Integration
| Component | Method | Endpoint / Config | Purpose |
|---|---|---|---|
| Fullstory Tag (AEP) | INIT | FS('init', { orgId }) |
Instrument the site — session capture begins immediately |
| Session Replay URL | GET | FS('getSession') |
Returns current session URL — embed in XDM as a dimension for CJA drill-through |
| Data Layer Property | CONFIG | Fullstory UI → Data Layer | Define computed properties (count, boolean, string) from behavioral signals — no code deploy |
| XDM Schema | SCHEMA | AEP → Schemas → _fullstory |
Add a custom field group under _fullstory namespace; map each Data Layer property |
| AEP Web SDK | SEND | alloy('sendEvent', { xdm }) |
Include Fullstory Data Layer values in the XDM payload on each event — flows into the dataset |
| AEP Dataset | INGEST | AEP → Datasets → Streaming | XDM events land here; CJA connects to this dataset as its data source |
| CJA Data View | CONFIG | CJA → Data Views → Add Component | Expose the _fullstory.* XDM fields as dimensions and metrics in Workspace |
| CJA Workspace | ANALYZE | Freeform Table / Fallout | Segment any funnel or journey by Fullstory friction dimension — _fullstory.noCarsFound > 0 |
| Ask StoryAI | AI | Fullstory UI → Session → Ask StoryAI | Natural-language session analysis — "What was the most frustrating part of this session?" |
| StoryAI Opportunities | AI | Fullstory UI → StoryAI → Opportunities | Aggregate anomaly detection — surfaces spiking issues before they appear in CJA trend data |
Recommendation
Start with the session URL — it's one configuration change. The full signal loop follows naturally.
session_replay_url to XDM schemaFS('getSession') to the field on every event_fullstory.sessionReplayUrl as a CJA dimensionno_cars_found_count, dead_click_count_fullstory namespace