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.7 to 5.2 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.

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.

  • Trends by feature & cohort

    Event trends sliced by feature and user cohort over the last 30 days — see which surfaces get used and by whom, 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, product keys checked against an origin allowlist. Replays and retries can't double-count.

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 replay player loads as a separate, on-demand chunk — the core SDK stays at 4.4 KB gzipped; nobody pays the replay bytes until you press play.
  • 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 4.4 KB product analytics SDK.

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 3.7 KB script on your marketing site captures pageviews, traffic sources, top paths, outbound clicks, 404s, and custom events. 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. 3.7 KB gzipped, measured.

The SDKs

Four SDKs. 1.7 to 5.2 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, custom events. 3.7 KB
  • Product analytics Identified events and feature flags; session replay loads as a separate on-demand chunk. 4.4 KB
  • Support chat A chat bubble whose threads become product feedback on the spine. 5.2 KB
  • Scheduling Booking pages that land meetings on the customer record. 1.7 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.

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.
  • No cohort builder, funnels, or retention dashboards yet. Event trends by feature and cohort ship today; the deeper read-side dashboards come next.

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.