smolanalytics
menu
log inStart trial
every feature

Everything inside. One ask bar.

Your AI assistant admits it can hallucinate your numbers. This one calls exact, deterministic reports instead of writing a query, so every answer is the same number the dashboard renders.

This page lists every capability. You will never need to memorize any of it: you ask in plain English, in your editor or on the dashboard, and the right one runs.

79 MCP tools14 prompts12 report types9 CLI commands6 editors auto-wired6 import formats~7 bytes per event at rest
smolanalytics is one analytics tool with incumbent-level depth behind a plain-english ask bar. One snippet captures web analytics (visitors, live-now, referrers, UTM, devices, plus an AI-assistant referral channel) and product analytics (funnels, retention, trends, breakdowns, paths, lifecycle, stickiness, B2B group roll-ups) from the same events. If the app you are measuring is itself an AI agent, the same engine computes its observability from those events: tool-call health (calls, error rate, latency p50/p90/p99), an error taxonomy, and conversation health (turns, re-ask rate, abandon rate, time to first token, resolution). For the one question counting cannot answer, what people are asking about, your OWN model does the reading: over MCP it samples whole conversations (sample_conversations), infers labels like intent, sentiment or frustration, and writes them back as append-only events (label_conversation), and then smolanalytics counts conversations per label value (agent_labels). The labels are that model's inference and are always reported with the model named plus labeled and unlabeled counts; the counts over them are computed like every other number. It runs on the model you already pay for, so it is free and unmetered on every plan, unlike tools that run an LLM server-side over every message and bill per message. Your editor's AI gets 94 MCP tools and 15 built-in prompts. Also included: a verdict that says what to fix, a morning brief email, threshold alerts to Slack or signed webhooks, goals with first-touch attribution, Google Search Console with money-pages analysis, cohorts, saved reports, read-only share links, a plan-as-code CI drift gate that also works against PostHog, importers from PostHog, Mixpanel, Amplitude, Umami, CSV and JSONL, one-call GDPR erasure, cookieless mode, and a single MIT Go binary that stores events at about 7 bytes each. Self-host free, or use the cloud where every project is an isolated instance.
web analytics

Know your traffic

Everything a web-analytics tool does, from the same one snippet that powers your product analytics.

you ▸ how's traffic? who's on the site right now?
Visitors, pageviews, live-right-now, top pages, entry pages, referrers, devices. One answer, no menus.
you ▸ where are my visitors from? on what browser?
Countries (with flags), browser, OS, device, full UTM source/medium/campaign, and a 24-hour activity rhythm. Browser and OS parse from the user agent at ingest; country resolves at ingest and the IP is discarded, never stored.
you ▸ what did this one user actually do?
Pull any user's full timeline, every event in order, their traits, first and last seen. The clean per-user journey GA4 never gave you a straight look at.
you ▸ how much traffic comes from ChatGPT?
Humans clicking out of chatgpt.com, claude.ai, perplexity.ai, gemini and copilot are counted as their own named channel, separate from AI crawlers.
you ▸ is any of this bot traffic?
Filtered before it hits your charts: a curated user-agent list including the 2026 AI-crawler wave (GPTBot, ClaudeBot, PerplexityBot). Web traffic only; your backend events are never UA-filtered.
you ▸ what are my top search queries?
Google Search Console built in: clicks, impressions, CTR, position, movers vs the prior period, and money pages: quick wins sitting at position 4 to 15, CTR problems, cannibalization.
you ▸ why is my search data empty?
Read-only connection diagnostics. Setup is your own Google OAuth client, two env vars, readonly scope, a daily poller.
you ▸ which channel actually converts?
Goals on an event or a path glob like /thanks*, with conversions, rate, and first-touch attribution by referrer host and utm_source.
you ▸ how did the blog do vs the app this week?
The SDK stamps every event with its hostname, so one instance holds unlimited sites and any report filters by site. The brief splits per product.
you ▸ just the mobile traffic from Germany
Click any row anywhere: country, browser, page, campaign, and the entire dashboard scopes to it. Filters stack, live in the URL, and every view is shareable. 7/30/90-day ranges recompute everything, with deltas vs the prior window.
you ▸ visitors where path contains /blog but browser is not Safari
A real filter builder on every view: is, is not, contains, doesn't contain, regex, greater/less than, set/not set, multi-value ORs, and an all/any join toggle. Property and value typeahead comes from your own data, so you pick, never guess. Click any filter chip's operator to flip it, no modal.
you ▸ what happened in the last week of June?
Arbitrary date ranges beside the presets: pick any two dates and every number, delta, chart, and breakdown recomputes over exactly that window.
you ▸ chart checkouts weekly, with the actual numbers
The main chart plots any event at daily, weekly, or monthly grain, with the prior window as a grey ghost at the same scale, and a data table underneath: every bucket's count, its prior-window value, and the signed change. Chart and table are one unit, like they should be.
you ▸ signups vs checkouts on one chart
Multi-series trends: up to 8 events on one canvas over the API and MCP (events=a,b,c), at any grain from hourly to monthly.
you ▸ show me the raw events
An events explorer: the latest stream as a filterable table, type anything to filter across names, visitors, paths, and properties.
$ every view is a URL
Filters, operators, join mode and dates all serialize into the link. Any deep-dive pastes into Slack and reopens exactly as you left it.
$ <script src="https://your-instance/sdk.js">
One tag autocaptures pageviews and clicks. Anything else sends from any language with a 5-line POST to /v1/events, single or batch.
product analytics

Know what users do

12 report types, computed exactly. Every one accepts property filters (eq / neq / contains / gt / lt / in / notin / set / notset, or shorthand like plan=pro), AND-combined, so "pro users from HN or Twitter" is one query.

you ▸ where do users drop off, and how long does it take?
Ordered conversion funnel with per-step drop-off, the median time to convert, a configurable window, and an optional breakdown to compare conversion by any property (e.g. by source).
you ▸ do weekly users come back?
Cohorts and the percent returning on period 1 through N, in daily, weekly, or monthly buckets, so a weekly product isn't understated, plus a rolling / unbounded mode. Honest denominators: only cohorts old enough to observe a period are counted.
you ▸ total revenue per day? average order value?
Daily series per event, unique-users option, breakdown lines, and numeric aggregation over a property, sum / average / min / max / median / p90, so revenue, AOV and p90 latency just work.
you ▸ where do signups come from?
Counts per property value, sorted descending.
you ▸ what do users do after signup?
Ranked next-step flows from any start event.
you ▸ are we growing or churning?
Daily new, returning, resurrected and dormant users.
you ▸ how engaged are users?
DAU, WAU, MAU and the DAU/MAU ratio.
you ▸ which companies are most active?
B2B roll-up by any group property: accounts, 7-day and 30-day active, top accounts.
you ▸ what did user u123 do?
One user's full timeline, first and last seen, traits.
you ▸ did my signup event arrive?
The newest raw events with their properties. This is how you debug instrumentation.
you ▸ track paying users as a group
A named user group (match any or all events), reusable as a filter on any report, with live member counts.
you ▸ pin that funnel to my dashboard
Pins funnels, trends, breakdowns and retention to your board.
you ▸ where do people drop off? (typed on the dashboard)
The ask bar is built into the dashboard too: type a question at /, it runs the same reports. It shows your real event names and top pages as clickable chips, so you ask about exactly what you track ("visitors to /pricing", "mau for /pricing") without guessing names. Zero setup.
agent observability

Know what your AI agent actually does

If the app you are measuring is itself an AI agent, the same engine computes its health from the same events: every number here is computed from your events. The one thing counting can't do is read what people said, so your own model does that part over MCP, and we keep its inferences visibly separate from the computed counts.

you ▸ which tool is slowest, and how often does it error?
Per-tool health from agent_tool_call events: calls, error rate, and latency p50/p90/p99, with the client split (cursor, claude, copilot, windsurf). The slow, error-prone tool surfaces on top.
you ▸ what are my agent's errors, grouped by type?
Error taxonomy over the failing tool calls, grouped by error_type (timeout, rate_limit, bad_args), optionally scoped to one tool.
you ▸ what is my re-ask rate? do conversations resolve?
Conversation health from agent_turn events: turns per conversation, re-ask rate, abandon rate, time-to-first-token, and resolution rate (computed only when you send a resolved bool, never invented).
you ▸ read a sample of my conversations so you can label them
Hands your own model whole conversations: agent_turn events grouped by conversation_id, oldest turn first. Capped (20 by default, 100 max) and deterministic, same data in, same sample out. A turn only carries text if your app sent a text property, so nothing is invented about what was said, and already-labeled conversations are marked so your model can skip them.
you ▸ label these by intent, sentiment and frustration
Your model writes its inference back, one label set per conversation. It appends a new agent_label event carrying the conversation id, the labels, and which model wrote them; nothing already recorded is ever mutated. Naming the model is required, because a label is an inference, not a measurement.
you ▸ what are people actually asking my agent about?
Conversation counts per value of one label (intent, sentiment, frustration, whatever your model wrote). The values are that model's inference; the counts over them are computed from your event log and computed, and every result names the labeling model plus how many conversations are labeled and unlabeled. Nothing labeled yet gets an honest empty answer telling you to sample first, never a fabricated split.
the verdict + morning brief

Told what to fix, before you ask

The opposite of a wall of charts: the product leads with a verdict, and it is honest about sample sizes.

you ▸ how's it going? what's broken?
A proactive verdict: 24h drops and spikes, the biggest drop-off in your auto-detected journey, the worst-converting segment through it, the week-over-week headline, a retention read. Computed exactly.
you ▸ can I trust a verdict on 12 users?
No, and it won't give you one: findings under 20 samples are suppressed as noise, and anything under 100 says "small sample" out loud.
$ smolanalytics brief
The self-hosted morning brief: cron plus mail, or --webhook to Slack. Pulse, per-product breakdown, verdict findings. Same engine as the cloud email, so they cannot disagree.
you ▸ (cloud: no ask needed, it's a daily email)
The cloud pulls each instance's own brief every morning and emails every member of your org. What changed, what to fix first.
you ▸ alert me if signups drop below 10 a day
A threshold on a rolling-window count, checked every 5 minutes, fired to your webhooks. Last-checked value and last fire are inspectable.
you ▸ send alerts to Slack
Slack URLs are auto-detected. Everything else gets HMAC-SHA256-signed JSON (X-Smolanalytics-Signature) so you can verify it's really us.
you ▸ prove the Slack hook works
A real delivery down the exact same path alerts and the digest use, and it reports the HTTP status back.
ask in your editor

All 94 tools, by category

On the cloud it is one connection: the organization API token at smolanalytics.com/api/mcp operates every project (pass a project name to any tool), and the read key stays server-side. Self-hosting, smolanalytics connect wires the MCP server into every coding assistant you have installed: Claude Desktop, Claude Code, Cursor, Windsurf, VS Code / Copilot, Cline, over stdio (reads the data file directly, no server running) or Streamable HTTP at /mcp. Your own model does the talking either way, so the AI part costs nothing extra and is never metered, including the sample-and-label loop that turns your agent's conversations into counted intents. Here is the entire surface, each tool as the question that invokes it.

reports / ask

21 tools
whats_notable
you ▸ how's it going? what's broken?
overview
you ▸ give me the headline numbers
list_events
you ▸ what events am I tracking?
funnel
you ▸ where do users drop off?
retention
you ▸ do users come back?
trends
you ▸ signups by source over time?
breakdown
you ▸ where do signups come from?
web_overview
you ▸ who's on the site right now?
recent_events
you ▸ did my signup event arrive?
user_activity
you ▸ what did user u123 do?
lifecycle
you ▸ are we growing or churning?
stickiness
you ▸ how engaged are users?
paths
you ▸ what do users do after signup?
groups
you ▸ which companies are most active?
people
you ▸ who are my users, and what do I know about them?
errors
you ▸ what is broken, ranked by how many people hit it?
formula
you ▸ a derived metric: revenue per signup, arithmetic across series
explain_change
you ▸ when did this number change, and what shipped near it?
rows_behind
you ▸ show me the exact rows behind that number, recomputed
run_sql
you ▸ answer something no other tool covers, read-only SQL
fix_brief
you ▸ turn one verdict finding into something I can act on

agent observability

6 tools
agent_tools
you ▸ which tool is slowest, and how often does it error?
agent_errors
you ▸ what are my agent's errors, grouped by type?
agent_conversations
you ▸ what's my re-ask rate? do conversations resolve?
sample_conversations
you ▸ read a sample of my conversations so you can label them
label_conversation
you ▸ label these by intent, sentiment and frustration
agent_labels
you ▸ what are people actually asking my agent about?

actions

14 tools
create_alert
you ▸ alert me if signups drop below 10 a day
list_alerts
you ▸ what alerts do I have?
delete_alert
you ▸ delete the signups alert
add_webhook
you ▸ send alerts to Slack
list_webhooks
you ▸ which webhooks are wired up?
delete_webhook
you ▸ remove that webhook
test_webhook
you ▸ prove the Slack hook works
create_cohort
you ▸ track paying users as a group
create_sequence_cohort
you ▸ cohort everyone who did signup then checkout, in order
list_cohorts
you ▸ what cohorts exist, and how big are they?
delete_cohort
you ▸ drop the churn-risk cohort
save_report
you ▸ pin that funnel to my dashboard
list_saved_reports
you ▸ what's pinned right now?
delete_saved_report
you ▸ unpin the old funnel

instrumentation / plan

9 tools
propose_instrumentation
you ▸ read my repo and tell me exactly what to track
verify_instrumentation
you ▸ prove each event is wired and firing
suggest_instrumentation_fix
you ▸ this event isn't arriving, fix it
regenerate_plan_from_code
you ▸ rebuild the tracking plan from my track() calls
define_event
you ▸ name a business event from clicks I already capture
list_defined_events
you ▸ what defined events exist?
delete_defined_event
you ▸ remove that defined event
instrumentation_coverage
you ▸ what does my product do that nothing measures?
event_source
you ▸ where is this event fired from, and is it arriving?

instance control

9 tools
get_settings
you ▸ show my instance config
set_project
you ▸ set my timezone to Europe/Berlin
set_retention
you ▸ keep 90 days of events
list_api_keys
you ▸ what API keys exist?
create_api_key
you ▸ make a key for the iOS app
revoke_api_key
you ▸ kill that key now
set_tracking_plan
you ▸ declare the events this app should send
instrumentation_health
you ▸ is my tracking broken?
delete_user_data
you ▸ delete everything about user u123

goals

4 tools
create_goal
you ▸ count every hit on /thanks* as a conversion
list_goals
you ▸ what goals are set?
delete_goal
you ▸ remove the demo goal
goal_report
you ▸ which channel converts?

share links

3 tools
create_share_link
you ▸ give my investor a read-only traffic link
list_share_links
you ▸ what share links are live?
revoke_share_link
you ▸ revoke the investor link

search console

4 tools
search_console_report
you ▸ what are my top search queries?
gsc_status
you ▸ why is my search data empty?
ai_visibility
you ▸ how often do the AI engines cite me?
ai_crawlers
you ▸ which AI crawlers actually read my site?

import / export

3 tools
import_events
you ▸ import my PostHog or Mixpanel history
create_export_link
you ▸ give me a download of everything
migrate_from
you ▸ pull my history straight out of PostHog or Mixpanel

deploys

4 tools
record_deploy
you ▸ mark that I shipped v2.1 just now
list_deploys
you ▸ what did I ship, and when?
delete_deploy
you ▸ remove that mis-recorded deploy
deploy_impact
you ▸ did last night's deploy move signups?

flags / experiments

9 tools
create_flag
you ▸ roll the new checkout out to 20% of users
list_flags
you ▸ what flags are live, and who's in each?
set_flag_enabled
you ▸ kill the flag, send everyone back to control
delete_flag
you ▸ remove the old experiment flag
evaluate_flag
you ▸ which variant does user u123 get?
flag_impact
you ▸ did the treatment arm convert better?
plan_experiment
you ▸ how big does this test need to be, at my traffic?
experiment_plan
you ▸ read or pre-register the analysis plan
experiment_health
you ▸ did the traffic actually split the way I configured it?

surveys

5 tools
create_survey
you ▸ ask an NPS question on the pricing page
list_surveys
you ▸ what surveys are running?
set_survey_active
you ▸ pause the onboarding survey
delete_survey
you ▸ remove the old survey
survey_results
you ▸ what did people say, and what's the NPS?

sessions / heatmaps

3 tools
list_sessions
you ▸ show me recent sessions worth inspecting
session_timeline
you ▸ replay user u123's journey step by step
heatmap
you ▸ where do people click on the pricing page?
the 15 prompts

Whole workflows, one name each

Built into the MCP server. Instead of asking ten questions in a row, you invoke one prompt and your model runs the whole routine against your real numbers.

/instrument-my-app
the full setup loop: pick events, wire tracking, set the plan, verify with instrumentation_health, set a drop alert
/whats-broken-today
the morning check: verdict, tracking health, traffic anomalies
/did-my-deploy-break-anything
before/after on your last ship: which events moved, what regressed, what to roll back
/weekly-review
founder-grade weekly: growth, the leak, retention, traffic, and THE one fix
/monthly-report
client-ready monthly with deltas and 3 next-month actions
/search-performance
GSC deep read: query movers, landing pages, what searchers did next
/content-gaps
queries with impressions but weak rank, crossed against your existing pages
/funnel-leak
the biggest drop-off, the segment to blame, one measurable fix
/channel-review
a keep / cut / watch table with honest sample sizes, AI-assistant channel included
/retention-review
a D1/D7 verdict plus exactly 2 levers
/launch-day
a live situation room: live visitors, spike source, a conversion-vs-traffic lag flag, a safety-net alert
/portfolio-review
multi-product: per-site pulse, which product earned the week
/growth-experiments
exactly 3 experiments from measured baselines. no baseline, no experiment
/money-pages
quick wins, CTR problems, cannibalization, with a specific fix per row
ci + plan-as-code

Your numbers, under test

The claim in the headline is enforced by a build, and your tracking itself can be a CI gate.

you ▸ (no ask needed: it's a test in our CI)
A test in CI asserts the answer over MCP equals the number the dashboard shows. If they ever diverge, our build fails. There is no second query path that can drift.
$ smolanalytics plan init && smolanalytics plan push
Your tracking plan lives in git as smolanalytics.plan.json: the events this app should send and their expected properties. Plan-as-code.
$ smolanalytics plan check
Verifies live traffic against the plan and exits 1 on breakage. Put it in CI and a deploy that silently kills your signup event fails the build.
$ smolanalytics plan check --source=posthog
The same drift gate pointed at an existing PostHog project, straight over their API. Try the gate before migrating anything. No server needed.
you ▸ is my tracking broken?
Reality vs plan, on demand: which events are arriving, which are missing, which properties are missing, what's arriving unplanned.
import + export + gdpr

In, out, and gone on request

No lock-in is a feature with mechanisms, not a promise.

you ▸ import my PostHog history
Six formats: jsonl, csv, posthog, mixpanel, amplitude, umami. Amplitude exports (gzipped .json.gz) are auto-detected. Original timestamps preserved, one bad row never aborts the run, per-reason skip counts, and dry_run to preview first. Also a CLI: smolanalytics import.
you ▸ give me a download of everything
A one-time link, jsonl (re-importable) or csv, 1-hour expiry, dead after the first download.
$ curl https://your-instance/v1/export?format=jsonl
The JSONL round-trips back into /v1/events, so your whole backup strategy can be one nightly curl.
you ▸ delete everything about user u123
GDPR erasure across every storage tier in one call, confirm required, returns the count of what it removed. Also DELETE /v1/users/{id}/data.
you ▸ keep 90 days of events
Retention is a setting, pruned periodically. 0 means forever.
privacy + cookieless

Analytics without the banner

$ smolanalytics.init(key, { anonymous: true })
Cookieless mode: nothing is stored on the device. The server derives a daily-rotating anonymous id, unlinkable across days, so funnels still work within a day and no consent banner is needed. Users who sign in keep full analytics.
you ▸ (safe by default: no ask needed)
The server binds 127.0.0.1 out of the box, and refuses to serve on a public address until you set a dashboard password.
the engine

Small on purpose

No Kafka, no ClickHouse, no database beside it. One binary that would rather be boring than distributed.

you ▸ (storage: no ask needed, it just holds)
An append-only hot log, fsynced per batch, sealed every 50,000 events into immutable, compressed, CRC-checked columnar segments. About 7 bytes per event at rest. Flat RAM. Exactly one writer; no consensus, no cluster, by design.
you ▸ (cold tier)
Optional S3, R2 or Tigris cold storage for sealed segments, so the disk stays small.
$ smolanalytics scrub
CRC-checks every segment, cleans orphaned blobs, exits 1 on problems. Verify your archive in CI or cron.
$ docker run ghcr.io/arjun0606/smolanalytics demo
One static MIT-licensed Go binary, no cgo. demo seeds a full dashboard in about 30 seconds. Also install.sh, go run, or fly launch.
$ smolanalytics <serve|demo|mcp|connect|gsc|import|brief|plan|scrub>
The whole CLI is 9 subcommands. That's the entire surface you could ever need to learn, and connect does the learning for you.
you ▸ (settings UI at /settings)
Account and password, API keys, retention, taxonomy, exports, webhooks, alerts, audit log. For the days you'd rather click.
the cloud

Same engine, run for you

smolanalytics.com is the hosted version: every fact below is literally true in the billing and provisioning code.

An isolated instance per project
Every project gets its own Fly app: a dedicated volume, a scale-to-zero machine, its own keys, sized by plan. A breach of one tenant is a breach of one tenant.
Events never touch the control plane
Your traffic goes straight to your instance. The cloud site has exactly 4 subprocessors (Vercel, Neon, Fly.io, Dodo), scrypt-hashed passwords, per-project scoped keys. All of it is spelled out on the security page.
Prompt minting for AI builders
On the project page, pick Lovable, Bolt, v0, Replit, or Cursor / Claude Code and get one paste-ready prompt with your real host and write key. The builder's AI wires the snippet, track() and identify() itself.
One MCP connection for your whole org
The organization API token at smolanalytics.com/api/mcp is a single connection that operates every project. Your agent provisions analytics with create_project (no browser) and queries or manages any project by passing project="<name>" to any tool, which routes to that project's own instance. The secret read key stays server-side; scope it with ?project=<id> or ?read_only=true. Set it up once, it persists.
The morning brief, delivered
A daily job pulls each instance's own brief and emails every member of your org.
Share links for the cofounder and investors
Ask for one: a revocable, read-only traffic page at its own URL. The token is hashed after minting.
Plans that meter usage, never features
Two plans: Pro $19 and Scale $49 per month; annual is 10x monthly, so 2 months free. Plans meter volume, instances and retention. Sites are never the meter: unlimited sites on every plan.
A free tier, and a trial on top of it
1M events a month with no card, forever. New accounts get 14 days of the full product first, and nothing collected is deleted when it ends. Self-hosting is free with no limits at all.
Overage that never locks you out
On a paid plan, a flat $6 per million, metered to the cent rather than in whole blocks, and emailed before it's charged. The dashboard never locks. After the trial nothing already collected is deleted and you keep read access to it.
Exactly two trial emails, ever
One when the trial is ending, one when it ends. Deduped so you never get either twice.
Nothing deleted without notice
If a trial lapses: 7 days of grace, then the machine stops with data kept, an export notice at day 30, destruction at day 37 only if that notice went out at least 7 days earlier. Otherwise it stays stopped and intact.
Teams
Orgs with owner, admin and member roles and invite links. Built for solo devs and small teams, never metered per seat.
Referrals
Share your smolanalytics.com/r/ code: 25,000 bonus events to both of you when they sign up.
what's not here

The never-list

Flags, experiments, heatmaps, surveys, and a session inspector all ship. The two below are deliberate omissions, not roadmap gaps. Knowing what a tool refuses to be is part of trusting it.

Pixel-perfect DOM session recording
the session inspector replays a user's journey from their events (pages, clicks with positions, rage-clicks, timing), but we don't record the DOM or stream video of the screen. That's a different product and a heavier privacy posture than we will carry.
An LLM of ours reading your conversations
the standard move is to run a model server-side over every message and bill you per message. We run no model at all. Your own model, already connected over MCP, samples the conversations and writes its labels back, and we only count them. That is why conversation intelligence is free and unmetered on every plan.
questions

Common questions

Is all of this really included?
Yes. The 14-day trial is the full product, and paid plans meter event volume, retention and isolated instances, never features and never sites. Everything on this page that is part of the engine also ships in the open-source binary, MIT-licensed, free to self-host forever.
Do I have to learn all this?
No, and that is the point of this page. You never memorize a tool name or a menu path. You ask in plain English, in your editor or in the dashboard's ask bar, and the right capability runs. The 15 prompts exist so whole workflows, like a weekly review, are one name instead of ten questions.
How does the AI not hallucinate my numbers?
It never generates SQL or estimates anything. Every answer is computed by the same deterministic report engine that renders the dashboard.
If a model labels my conversations, are the numbers still computed?
The two halves are kept apart on purpose. The labels are an inference: your own model reads a sample of conversations over MCP and writes what it thinks the intent, sentiment or frustration was back as an append-only event, and every report names the model that wrote them plus how many conversations are labeled and unlabeled. The counts over those labels are computed from your event log by the same deterministic engine as everything else, and GET /v1/agent/labels, the agent_labels MCP tool and the dashboard all read that same count. So you always know which part is a guess and which part is a measurement. We never run a model over your conversations ourselves, which is also why it costs nothing and is never metered.
What is NOT included?
Feature flags, A/B experiments, click heatmaps, surveys, and a session inspector all ship now. The one thing we deliberately don't do is pixel-perfect DOM session recording, the screen-recording, video-replay kind. The session inspector replays a user's journey reconstructed from their events (pages, clicks with positions, rage-clicks, timing), but it never records the DOM or streams video, which is a different product with a heavier privacy posture. If you need pixel-perfect screen recording, use a tool built for it alongside smolanalytics.

And if we vanish tomorrow, you lose nothing: the export is one curl, the binary is MIT with no CLA, and self-hosting is the free tier. Every capability on this page keeps working on your own machine.

no credit card · or self-host free