# Analytics streaming

Forward form analytics events to Google Analytics or Axiom, with optional respondent answers for Axiom.

> ℹ️ **Available on the Free plan.**


## Analytics streaming

Connect a workspace analytics destination once, then control event and answer forwarding for each form.

<h2 id="two-streams">Two separate streams</h2>

> ⚠️ **Answers never leave formbase by default**
> <p>
>     Connecting Axiom starts answer-free analytics events only. Full submissions stay off until you explicitly enable{' '}
>     <strong>Send respondent answers</strong> on a specific form. Google Analytics never receives answers.
>   </p>

<h2 id="event-contract">Analytics event contract</h2>

<p>Three fixed event names are forwarded:</p>

<p>
  Every event carries <code>form_id</code>, <code>form_name</code>, and <code>source</code> — <code>link</code> for a public{' '}
  <a href="/sharing-publishing/sharing-embedding">share link</a>, <code>request</code> for a <a href="/requests/overview">request</a> — so a
  dashboard can tell the two apart. When available it also carries country, device, browser, traffic source, UTM source, medium and
  campaign, referrer host, and, on <code>form_submit</code>, completion duration. Alongside them goes a pseudonymous visitor ID. Events
  never contain answer values, respondent email, or question content.
</p>

<h2 id="connect">Connect a destination</h2>

<p>
  Go to <strong>Workspace → Integrations → Analytics</strong>, then connect Google Analytics or Axiom. A destination belongs to the whole
  workspace. Event forwarding starts immediately for every form in that workspace.
</p>

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Google Analytics (GA4)](/integrations/google-analytics) — Measurement Protocol setup and reporting
  - [Axiom](/integrations/axiom) — Event queries and optional answer streaming
</div>

<h2 id="per-form">Per-form controls</h2>

<p>
  Open <strong>Form settings → Integrations → Analytics streaming</strong>. Each destination provides:
</p>

<ul>
  <li>
    <strong>Forward analytics events</strong> — disable this destination for only this form.
  </li>
  <li>
    <strong>Send respondent answers</strong> — Axiom only; opt in to full submitted payloads.
  </li>
  <li>
    <strong>Send test event</strong> — verify credentials without waiting for live traffic.
  </li>
</ul>

<h2 id="reliability">Reliability</h2>

<p>
  Event forwarding is best-effort. Each destination request is given 3 seconds, failures are swallowed so they never block a respondent, and
  a failed event is not retried. Analytics are statistical; avoiding one queue row per form view keeps the cost bounded.
</p>

<p>
  Axiom answer streaming rides the submission delivery queue instead: 5 attempts with exponential backoff. After 20 consecutive answer
  failures, that destination stops being queued until a delivery succeeds or you save a new API token.
</p>

<h2 id="privacy">Privacy and consent</h2>

<p>
  Analytics events are pseudonymous, not anonymous. They carry a random visitor ID and coarse traffic/device metadata but no answers. You
  remain responsible for telling respondents about your third-party analytics, collecting consent where required, and configuring retention
  in GA4 or Axiom.
</p>

<p>
  Axiom answer streaming can contain personal or sensitive data. Enable it only for datasets you control and only when your privacy notice,
  lawful basis, and processing agreements cover that transfer.
</p>
