Reports
Dimensions (platform and app version too), filters, compare, segments, funnels, paths, retention cohorts, realtime, export, notes and alerts.
Everything an analytics property collects can be read in three places: the dashboard, the splithub CLI and the MCP server. They answer from the same reports, so an agent and a teammate looking at the dashboard see the same numbers. Reports are counts, not experiment results: for a verdict use npx splithub results.
Reports with dimensions, filters, visits and conversions are SplitHub Cloud features. A self-hosted property answers raw counts (see Self-hosted).
Where to read them
| Report | Dashboard (property page) | CLI | MCP tool |
|---|---|---|---|
| Every property, last 30 days | Analytics | npx splithub analytics |
splithub_analytics |
| Totals, goals, top pages and sources | Overview | analytics <id> |
splithub_analytics with property |
| By a dimension | Pages, Sources, Audience, Events & goals | analytics <id> --by <dimension> |
splithub_analytics with by |
| Funnels | Funnels | analytics funnel <id> |
splithub_analytics_funnel |
| Paths | Paths | analytics paths <id> |
splithub_analytics_paths |
| Retention | Retention | analytics retention <id> |
splithub_analytics_retention |
| Right now | Realtime | analytics realtime <id> |
splithub_analytics_realtime |
| Latest raw rows | Raw events | analytics events <id> |
splithub_analytics_events |
| Event props | Events & goals | analytics props <id> --event <name> |
— |
| CSV | Export | analytics export <id> |
— |
| Notes | Notes | npx splithub notes |
splithub_notes |
| Saved segments | the filter bar | analytics segments |
splithub_segments |
Every CLI command takes --json. npx splithub status also lists each property's last 7 days against the 7 before, and npx splithub report adds them as an Analytics table.
Totals
npx splithub analytics sh-x1h78w --days 7
npx splithub analytics sh-x1h78w --from 2026-10-01 --to 2026-10-31
Visitors, new visitors, identified users, visits, pageviews, events, bounce rate and visit duration, then each goal (conversions, completions, revenue), the top pages, the top sources and the notes in the range. The default range is the last 30 days; one report covers at most 400 days. Days follow the project's time zone (Settings).
Dimensions
--by groups the report by one dimension:
| Group | Dimensions |
|---|---|
| Pages | page, entry, exit |
| Sources | source, referrer, channel, utm_source, utm_medium, utm_campaign, utm_term, utm_content |
| Audience | country, region, city, device, os, browser, language, host |
| Apps | platform (ios, android, web…), app_version |
| Actions | event, goal |
| Your data | trait --key plan (an identify trait), variant --experiment hero (the variant each visitor saw) |
npx splithub analytics sh-x1h78w --by channel
npx splithub analytics sh-x1h78w --by source --goal signup # conversions of signup per source
npx splithub analytics sh-x1h78w --by variant --experiment hero
npx splithub analytics sh-x1h78w --by trait --key plan
With a visit dimension, --goal <key> adds that goal's conversions per row.
Filters
--filter dimension=value[,value] narrows the visits a report starts from. Repeat it to combine filters; several values of one filter mean any of them.
npx splithub analytics sh-x1h78w --by page --filter country=DE,FR --filter source="(none)"
Any visit dimension, page and event filter this way. Four prefixes reach your own data:
| Filter | Keeps visits |
|---|---|
p.gclid=abc |
whose landing page had that query parameter |
t.plan=pro |
of users with that identify trait |
e.signup.plan=pro |
that sent the event signup with that prop value |
x.hero=bold |
of visitors who saw that variant of the experiment |
Compare
npx splithub analytics sh-x1h78w --days 7 --compare # the 7 days right before
npx splithub analytics sh-x1h78w --days 7 --compare year # the same days a year earlier
npx splithub analytics sh-x1h78w --compare 2026-08-01..2026-08-31 # days you choose
The answer gains previous, and the CLI prints the change per row.
Segments
A segment is a saved set of filters that every report can apply.
npx splithub analytics segments --save "German traffic" country=DE
npx splithub analytics sh-x1h78w --segment "German traffic" --by page
npx splithub analytics segments # the list
npx splithub analytics segments --delete "German traffic"
--property <id> keeps a segment to one property. A --filter on the same dimension wins over the segment's.
Funnels
npx splithub analytics funnel sh-x1h78w --steps "page:/,event:Signup,goal:paid"
npx splithub analytics funnel sh-x1h78w --steps "page:/pricing,goal:paid" --within 7d --by country
Two to eight steps: page:/path (patterns like page:/blog/* work), event:<name> or goal:<key>. Visitors count for a step only after the steps before it. --within is visit (the default, all in one visit), 7d or 30d from the first step. Each step answers visitors, conversion (share of step 1) and dropoff (share lost since the step before).
Paths
npx splithub analytics paths sh-x1h78w --page /pricing # where visits went next
npx splithub analytics paths sh-x1h78w --page /pricing --prev # where they came from
Rows are pages with their visits; (exit) means the visit ended there, (entrance) that it started on the page.
Retention
npx splithub analytics retention sh-x1h78w
npx splithub analytics retention sh-x1h78w --start event:Signup --return visit --period day
Visitors are grouped by the day or week they started (--start visit, event:<name> or goal:<key>), and each cohort shows how many came back (--return visit or event:<name>) in each period after. The default is visit to visit, by week.
With --json the answer is cohorts[] { start, users, retained[] }: retained[0] is the cohort period itself, retained[n] / users the share back in period n. One report covers up to 90 days or 26 weeks (clamped: true when cut). For an app this is the report to watch; screens count as visits like pages do (see Apps).
Realtime
npx splithub analytics realtime sh-x1h78w
Visitors in the last 5 minutes, pageviews and events per minute over the last 30 minutes, top pages and sources. The quickest check that tracking works after a deploy.
Event props
npx splithub analytics props sh-x1h78w --event Signup # the prop names of Signup
npx splithub analytics props sh-x1h78w --event Signup --key plan # the values of one prop
Export
npx splithub analytics export sh-x1h78w --by day > daily.csv
npx splithub analytics export sh-x1h78w --by page > pages.csv
npx splithub analytics export sh-x1h78w --raw > events.csv
CSV to stdout, for the range and filters you pass. --raw exports the raw tail (see Retention).
Notes
A note marks a day on every chart, so a jump in traffic has its reason next to it.
npx splithub notes add "Launched new pricing" --kind win --property sh-x1h78w --day 2026-10-05
npx splithub notes --property sh-x1h78w
Add one whenever you ship something that may move traffic.
Alerts
Alerts on a property are a Pro feature, set in the dashboard (Alerts) or with the CLI:
npx splithub alerts add traffic_drop --property sh-x1h78w --percent 50
npx splithub alerts add traffic_spike --property sh-x1h78w --percent 50
npx splithub alerts add goal_silent --property sh-x1h78w --goal signup --hours 24
npx splithub alerts add event_count --property sh-x1h78w --event Signup --count 1000 --repeat
The digest covers properties too: visitors, top sources and pages, goals and events against the period before. Channels and schedules: Alerts, digest, AI reviews.
Words
| Word | Meaning |
|---|---|
| visitor | one browser, by its sh_vid cookie |
| user | a visitor you identified with identify() |
| visit | a run of pageviews and events that ends after 30 minutes without any (sessions in JSON) |
| bounce | a visit with one page and no event; bounce rate is bounces divided by visits |
| duration | time in a visit, in milliseconds in JSON |
| source | the UTM source, or the referrer's site (Google, Facebook…); (none) is direct |
| channel | sources grouped: Direct, Organic Search, Paid Search, Organic Social, Paid Social, Email, Referral, Affiliate, Other |
| entry, exit | the first and the last page of a visit |
| conversion | a visitor reaching a goal, counted once per visitor in the range |
| completions | how many times the goal happened |
Bots are never counted.
For agents
The analytics skill that npx splithub skills installs teaches an agent these commands. Ask it in plain words ("where did signups come from last week?", "how many visitors reach checkout from pricing?") and it picks the report, the range and the filters, and quotes the counts as they are.