- alice@fernwood.co identified · ended 4:32
- anon-7f3a2c anonymous · timeout 1:08
- theo@fernwood.co identified · ended 2:47
Example data
Analytics · Replay · Flags
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
Product and web analytics, first-party — captured by your own SDK and joined to the 360. Click through the angles.
Example data
Product analytics
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.
identify() ties events to real users; anonymous sessions stitch to the same person once they sign in. No identity glue code on your side.
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.
Event trends by feature and cohort, plus funnels, retention and product paths over the last 30 days — next to the revenue those users represent.
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
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.
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.
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 $.
The real routes users take through the product — branch points and dead ends, drawn from your own events, not a sampled guess.
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
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.
init({ replay: true }). Turn replay off and visitors never pay the bytes.Example data
Feature flags
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.
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.
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.
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
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.
<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
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.
5.8 KB 6.6 KB 5.9 KB 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
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.
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.
Every identity match is recorded in an identity map you can inspect — automatic by email domain, manual when you tag someone yourself.
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
Analytics you can run in the EU without a legal review spiral. The SDKs ship respectful out of the box.
Early access
We're onboarding design partners now. Connect your site in minutes and watch pageviews, sessions, and flags land joined to real customer accounts.
FAQ