Product analytics, next to the trace

Page views arrive on their own. Track the rest from the browser, your backend or a span you already emit, and see where people stop on the same dashboards as your latency.

In motion

Find the step where people stop

Each step counts the people who reached it inside the conversion window. Switch to drop-off to see who left, how long converting took, and where they went instead.

funnel · pricing → paid conversion rate 6.4%
count by person window 24h range 30d
$pageview /pricing 100% 8,412 entered
signup_​started 35.2% 2,961 reached 35.2%
35.2% 64.8%
signup_​completed 26.0% 2,190 reached 74.0%
74.0% 26.0%
plan_​started 6.4% 538 reached 24.6%
24.6% 75.4%
signup_completed → plan_started
→converted538
↓dropped1,652
median time2h 14m
went next/docs/billing · 41%
  • plan_started trace trace 4f9ac21e
  • signup_completed server user u_8124
  • $pageview browser /pricing

Three ways in

Send events from wherever they happen

All three land in one place with the same ids, so a funnel can start in the browser and finish in a webhook handler.

browser

From the browser

One call next to the click. The event shows up in the session replay beside the requests around it.

checkout.tsx ts
MapleBrowser.track("checkout_completed", {
  plan: "pro",
  seats: 12,
})
Read the docs →

span

From a span

Two attributes on a span you already emit. No second SDK on the server.

billing.ts ts
span.setAttributes({
  "maple.product_event.name": "plan_started",
  "maple.product_event.user_id": user.id,
})
Read the docs →

server

From any backend

NDJSON over HTTP with your ingest key. For mobile apps, cron jobs and webhook handlers.

terminal bash
curl https://ingest.maple.dev/v1/events \
  -H "Authorization: Bearer $INGEST_KEY" \
  -H "Content-Type: application/x-ndjson" \
  -d '{"name":"plan_started","user_id":"u_123"}'
Read the docs →

What it does

From one event to a conversion rate

$pageview
Page views without code
The browser SDK records a page view on every navigation. Your first funnel works before you write a single track call.
maple.product_event.name
Events from spans
Tag a span you already emit and it becomes an event, with the span's attributes as properties. Works with any OpenTelemetry SDK, and the event links back to its trace.
identify()
Anonymous to signed in
Pass your user id to identify() and earlier anonymous visits join it, across your subdomains. A server event with the same user id lands on the same person.
drop-off · paths
Funnels, drop-off and paths
Up to 10 steps, a conversion window, and a breakdown by referrer, UTM, country or any property. Paths show what people did before or after any event.
source: product_events
Charts and alerts
Product events are a query source like traces, logs and metrics. Chart signups next to error rate, or alert when they drop.
query_funnel()
Ask your agent
The MCP server lists your events and runs funnels, so an agent can tell you where signups stall without leaving the editor.

Keep going

Related features

Point OTLP at Maple.

One endpoint, one key. Traces, logs, metrics and sessions, linked from the first request.