experience_impression event. Once the event is in your analytics tool, you can
break any chart, funnel, or retention curve down by variant using your own
conversion data. The event flows through the SDK already on the page; ABTestly
never sees it.
Each destination is off by default. Enable the ones you use per site under
Site → Analytics integration.
ABTestly’s built-in results remain the primary analysis
surface (clean significance math, sample-ratio checks, per-variant lift with
confidence intervals). Forwarding to product analytics is for slicing your
existing reports by variant — not a replacement for the experiment readout.
How it works
When a consented visitor is bucketed into a running experiment, the snippet callstrack on whichever SDKs you’ve enabled:
- Consent-gated. Nothing fires until the visitor has consented (the snippet gates on your consent signal, same as bucketing).
- Exposure only. ABTestly forwards the impression, not your conversions.
Join it to your own events on
experiment_id/variant_idinside your analytics tool. - Skipped when absent. If the SDK isn’t on the page, that destination is quietly skipped — no errors, no queued events.
- Preview never sends. Preview and QA sessions are suppressed, so your production numbers stay clean.
- Never blocks the page. Each call is wrapped so a throwing or misconfigured SDK can’t affect your site.
What gets sent
Everyexperience_impression event carries the same four properties. Register
them as custom properties in your destination if it needs an explicit schema.
Segment
ABTestly callswindow.analytics.track('experience_impression', { … }). Segment then routes
that event to every destination you’ve connected — your warehouse, Amplitude,
Mixpanel, and so on — so you only have to wire ABTestly once. It fires only if
the Segment SDK (analytics.js) is already on the page.
RudderStack
Identical to Segment (RudderStack implements the sameanalytics.js API):
ABTestly calls
window.rudderanalytics.track('experience_impression', { … }), and RudderStack
routes the event to your connected destinations. Fires only if the RudderStack
SDK is on the page.
Amplitude
ABTestly callswindow.amplitude.track('experience_impression', { … }),
falling back to logEvent() on the legacy Amplitude SDK. The event lands in
Amplitude so you can split any chart, funnel, or retention analysis by
variant_id. Fires only if Amplitude is on the page.
Mixpanel
ABTestly callswindow.mixpanel.track('experience_impression', { … }). The
event lands in Mixpanel so you can break any report down by variant_id. Fires
only if Mixpanel is on the page.
Analyzing by variant
Because ABTestly forwards the exposure and not your conversions, the analysis pattern is the same everywhere: build a segment or breakdown per variant from theexperience_impression event (filter on experiment_id, group by
variant_id), then compare your existing conversion metric across those
variants. This is exposure-based attribution — a visitor counts toward a variant
from the moment they’re bucketed.
Want ABTestly’s own significance verdict, sample-ratio check, and per-variant
confidence intervals instead of rebuilding them downstream? That’s the
results dashboard — product-analytics forwarding is for
reusing your existing reports, not re-deriving the experiment result.