Analytics · Replay · Flags

See what users do. Watch the session. Flip the flag.

Your analytics stack, built in — not bolted on. Product analytics, session replay, feature flags, and web analytics ship as four first-party SDKs, 1.9 to 6.6 KB gzipped, one script tag each. And because they write to the same spine as your revenue and feedback, every event lands already joined to the customer account it came from.

No tag manager. No sampling. No extra vendor.

Every angle on usage

Every read on how your product is used

Product and web analytics, first-party — captured by your own SDK and joined to the 360. Click through the angles.

Product analytics

Product analytics, first-party

  • Events, features and active users from your own SDK
  • SPA screen autocapture — paths work with zero per-route code
  • Per-account, joined to the 360

Example data

Funnels

Funnels, weighted by revenue

  • Every step carries the MRR of the accounts in it
  • The dollars stalled on each drop-off, not just the %

Retention

Net-dollar retention

  • Toggle cohorts between users and MRR retained
  • The revenue that stuck — currency-aware

Web analytics

Web analytics, gone deep

  • Page views, sources and UTM campaigns
  • Core Web Vitals + zero-tag click autocapture
  • Privacy-first, first-party capture

Audience

Who, where, on what

  • Geo, device, browser and language breakdowns
  • Resolved at ingest from first-party signals

Heatmaps

Where they actually click

  • Click heatmaps per page
  • The dead zones and the real CTAs, made visible

Product analytics

Every event arrives knowing who sent it.

Call identify() once and events stop being anonymous noise. The same visitor is one person before and after signup — their pre-auth pageviews and post-auth product events unify on the spine, attached to the company account they belong to.

  • Identified events

    identify() ties events to real users; anonymous sessions stitch to the same person once they sign in. No identity glue code on your side.

  • Zero-tag autocapture

    Universal click autocapture (Heap-style) and SPA screen tracking on by default — route changes and clicks become events with no per-element or per-route code. Opt out per surface.

  • Trends, funnels & paths

    Event trends by feature and cohort, plus funnels, retention and product paths over the last 30 days — next to the revenue those users represent.

  • Ingest with hard guarantees

    Batched ingest: up to 50 events / 32 KB per batch, deduped on event ID; a localStorage spool replays anything a page-leave would have dropped, so the tail of a busy session is never lost.

Funnels · Retention · Outcomes

The dollars behind the percentages.

Every funnel step and retention cohort carries the live MRR of the accounts behind it — because behaviour and revenue are two hops apart on one record, not two tools stitched by a nightly export. So 'where are we losing money?' is a query, not a quarter-long project.

  • Funnels, in dollars

    Each step shows the MRR of the distinct accounts in it — €48K entered → €12K converted, €31K MRR stalled on the drop-off. The dollars reconcile to your revenue topline: same accounts, same filter.

  • Net-dollar retention

    Cohorts toggle between user-count and MRR retention, so you see the revenue that stuck — not just the logos. Currency-aware; it never blends € and $.

  • Product paths & Sankey

    The real routes users take through the product — branch points and dead ends, drawn from your own events, not a sampled guess.

  • “Did this feature work?”

    Ship a feature and its task card answers itself: adoption across active accounts, the MRR that adopted, and the retention lift vs non-adopters — a verdict (working, mixed, or no signal), not a dashboard you have to go read.

Your AI can ask the same revenue-weighted questions over MCP — analyze_funnel, get_retention, analyze_paths.

Session replay

When something breaks, watch it break.

A user says 'the export didn't work' — open their session and watch exactly what they saw. DOM-level recordings of real sessions, listed newest-first, identified users and anonymous visitors alike.

  • The core SDK stays at 6.6 KB gzipped — the replay recorder is a separate ~57 KB gz chunk loaded only when you call init({ replay: true }). Turn replay off and visitors never pay the bytes.
  • Every session carries its lifecycle — start, end, duration — and chunks are deduped on upload, so a flaky connection never corrupts a recording.
  • Identified sessions show who it was; anonymous ones get a stable session ID you can match after they sign up.

Recorded sessions · newest first

  • alice@fernwood.co identified · ended 4:32
  • anon-7f3a2c anonymous · timeout 1:08
  • theo@fernwood.co identified · ended 2:47

Example data

Feature flags

Ship behind a flag. Kill it in one click.

Create flags with targeting rules and percentage rollouts, toggle them live from the dashboard, and read them in your app with one SDK call — no separate flag vendor, no extra bundle.

  • Targeting that's evaluated client-side

    The SDK evaluates flags against the user's attributes — plan, role, anything you pass — so a flag can be on for one cohort and off for everyone else.

  • Exposure events, automatically

    The first time a flag is read, the SDK emits an exposure event. You don't just know a flag was on — you know exactly who actually saw the variant.

  • The kill switch is the dashboard

    Rollout at 0%, 50%, 100% — and one toggle takes a misbehaving feature out of production. Flags ship inside the 6.6 KB product analytics SDK, and the last value is cached so flag-gated UI never flashes on first paint.

Already on LaunchDarkly or Statsig? Both connectors are live — mirror those flags and experiments onto the spine for team visibility.

Web analytics

Marketing-site numbers, no cookies attached.

One 5.8 KB script on your marketing site captures pageviews, traffic sources, top paths, outbound clicks, 404s, custom events, Core Web Vitals (LCP, CLS, INP, TTFB) and zero-tag click autocapture. No cookies — anonymous visitor profiles come from hashed device fingerprints that rotate daily.

  • Pageviews, referrers, and top paths — without a tag manager and without sampling.
  • 404s and outbound clicks tracked out of the box, so broken links surface themselves.
  • The visitor who read your pricing page is the same record as the user who signed up — the spine joins their before and after.

Install · one script tag

<script
  src="https://platform.aioproductos.com/sdk/productos.js"
  data-product-key="pk_live_e_…"
></script>

That's the whole install. Zero-code init reads the data-* attributes — no snippet, no config object. 5.8 KB gzipped, measured.

The SDKs

Four SDKs. 1.9 to 6.6 KB. One script tag each.

Real, measured gzipped sizes — your page speed won't notice us. Each SDK lives in its own global namespace, so all four run on the same page without collision.

  • Web analytics Pageviews, sources, outbound clicks, 404s, Core Web Vitals and zero-tag click autocapture. 5.8 KB
  • Product analytics Identified events, SPA screen autocapture and feature flags; session replay and in-app guides load as separate on-demand chunks. 6.6 KB
  • Support chat A chat bubble whose threads become product feedback on the spine. 5.9 KB
  • Scheduling Booking pages that land meetings on the customer record. 1.9 KB

All served from platform.aioproductos.com/sdk — one stable URL per SDK, auto-init via data-* attributes, batched ingest deduped on event ID.

Why ours and not a point tool

Joined to the account the moment it's written.

Standalone analytics tools make you export, match, and pray. Here the identity stitcher matches users to their company account by email domain — alice@fernwood.co lands on the Fernwood account automatically — and every event row carries the account and end-user it belongs to.

  • Joined on write, not at query time

    Account and end-user IDs are written onto every event as it's ingested. 'Events for this account, last 30 days' is one indexed lookup — not a fan-out join.

  • An audit trail, not magic

    Every identity match is recorded in an identity map you can inspect — automatic by email domain, manual when you tag someone yourself.

  • Usage next to revenue

    The cohort that uses a feature and the revenue they pay sit on the same record — so 'is this feature worth keeping?' is a lookup, not a research project.

Watch: events, replay, flags — one surface · Example data

Honest edge: events carry their account from the first write; the usage panels inside the customer 360 light up as each connector's join lands.

Privacy

Privacy-first is the default, not a setting.

Analytics you can run in the EU without a legal review spiral. The SDKs ship respectful out of the box.

  • DNT and GPC honored on init — a browser that says "don't track" isn't tracked. No override flag exists.
  • One opt-out silences everything — a single optOut() call sets a flag every ProductOS SDK on the page respects. All tracking stops, silently.
  • EU or US region at ingest — chosen at signup, enforced per ingest key on every event endpoint. Your data lands where you said it should.

Where the edges are — plainly

  • Web-only in v1. Mobile and server SDKs are roadmap, not shipped. If your product is a native app, we're not your analytics yet.
  • Net-dollar retention is correlational, not snapshotted. Retention and feature-outcome lift compare adopters vs non-adopters on live MRR; we don't yet snapshot per-account MRR history, so in-place expansion isn't separated out.

Early access

Drop one script tag. See your users on the spine.

We're onboarding design partners now. Connect your site in minutes and watch pageviews, sessions, and flags land joined to real customer accounts.

FAQ

Questions, answered

What's included in the analytics module?

Four first-party capabilities on one spine: product analytics with identified events, session replay, feature flags with targeting and exposure events, and cookie-free web analytics. Each is a single script tag, and every event joins to the customer account on write.

How heavy are the tracking scripts?

Light — the four web SDKs are 1.9–6.6 KB gzipped, one script tag each. They're first-party, so there's no third-party tag dragging down your page speed.

Is the web analytics cookie-free and privacy-respecting?

Yes — web analytics runs without cookies, and the SDKs honor Do Not Track and Global Privacy Control with a single opt-out. You also choose the data region, EU or US, enforced at ingest.

Where does the analytics data live?

On your own AIOProductOS spine, joined to the matching customer account on write — not pooled with other companies' data or resold. It's the same first-party data path a paying customer gets.

Is the data tied to customer records, or siloed?

Tied. Every event — product, replay, flag exposure, pageview — joins to the customer account on write, so analytics sits on the same spine as feedback, revenue and work instead of in a separate tool.

Do you have funnels and retention?

Yes — and they're revenue-weighted. Every funnel step and retention cohort carries the live MRR of the accounts behind it, so you see the dollars stalled on a drop-off or retained in a cohort, not just the percentage. Product paths and a Sankey view ship too, and all three are callable by your AI over MCP (analyze_funnel, get_retention, analyze_paths).

Do I have to tag every event by hand?

No. Web analytics includes zero-tag click autocapture and Core Web Vitals out of the box, and product analytics autocaptures SPA screen changes by default — so paths and funnels work with no per-route or per-element code. You can still send explicit events where you want precision, and opt out of autocapture per surface.