Read and explain results
The commands read results RoutingCat prepares in the background; running them computes nothing. This guide shows how to read status, show, sources and download, and how to explain what they say to a person. What the numbers mean explains the kinds of number behind them, and Read the dashboard reads the same results on the dashboard.
Check how it’s going
Run npx routingcat status. Here it is nine days after a site’s home page went live with four headlines:
$ routingcat statusinkwell · production · 2026-10-11 09:20Z · counts to 09:00Z · estimates matured to 10-11 · contract 1.0since 2026-10-04 09:20Z: 1 deploy (dp_01m4k54960e4ma9r026sfe2he2), no acts → routingcat status --since 2026-10-04
home · objective signup, 24 h · control: the defaults, 10% · live since 10-02 · publication pb_01m4k57yc0fa9vhrhd9qpf2dm2 gain +9 conversions (signup) vs defaults, no range: too few visits · measured · 341 routed / 47 control visits · maturity 0.88 hero default write-daily · 4 live write-daily default 2.2% [0.5, 3.9] · signal 3 Early · served 28% · 96 visits streaks favored 2.6% [0.7, 4.5] · +19% [−100, +145] vs default · signal 3 Early · served 40% · 135 visits prompts learning 3.3% [1.1, 5.6] · +51% [−100, +207] vs default · signal 3 Early · served 31% · 104 visits private prior 2.7% [0.4, 5.3] · +24% [−100, +177] vs default · signal 0 New · served 2% · 6 visits variant rates and contrasts are predicted; the measured gain compares routed visits with the control
tracking signup 19 in 7 days · joined 37% (visitor 32%, account 5%) · no routed visit 53% · no key 0% · unlinked 0% · outside window 11%visitors 333 on routed pages in October so far, people only · 5 automated left outvariants 3 live of the 10 the Hobby account's sites share, the defaults not countedsources 7 days, accounting: search 8 · direct 4 · social 3 · email 2 · paid 1 · unknown 1 → routingcat sourceswarnings none · deployments: dp_01m4k54960e4ma9r026sfe2he2 current (commit 2d79ae7), none unregisteredmore routingcat show home/hero:streaks · --json for every fieldLine by line:
- The header says how fresh the figures are: counts include what arrived by 09:00 UTC, and estimates use visits matured by October 11. Below it, what changed since you last ran
statuson this machine, or over the last 7 days. - The page line gives the objective and its window, and the control’s share.
gainis the page’s measured gain: the extra sign-ups its routed visits produced over the defaults, with its range once there are enough visits, the routed and control visits behind it, and the share of them matured.- Each variant shows its label, its predicted rate with its range, its predicted difference from the default with its range, its signal, the share of the slot’s routed visits it was served, and its routed visits. The line under them says which figures are predicted.
trackingsays how the objective’s conversions over 7 days joined routed visits, by visitor or by account, and why the rest didn’t. Track conversions explains each reason.visitorscounts this month’s distinct visitors on routed pages, people only, as your plan counts them, and the automated visitors left out.variants, on Hobby, counts live variants against the 10 your account’s sites share, the slots’ defaults not counted, with this site’s part when you own several, and those held past them.sourcesis 7 days of conversions by channel, as accounting.drift, when there is any, lists each place where what’s live differs from your code, as Change what’s live explains.warningslists each warning with its message id, which Messages explains.
On Hobby, a variant past the 10 live variants across your sites is held: registered, and not served until there is room. Its slot counts it apart, and its row says so. From status welcome, at the 10:
checklist default steps · 3 live · 1 held steps default 3.0% [0.4, 5.7] · signal 0 New · served 35% · 11 visits video favored 3.0% [0.4, 5.7] · 0% [−100, +128] vs default · signal 0 New · served 29% · 9 visits quiz prior 3.0% [0.4, 5.7] · 0% [−100, +128] vs default · signal 0 New · served 35% · 11 visits tour held registered, not live: past the 10 the Hobby account's sites shareThe variants line then ends · 1 held, warnings names the held variants with the way out, and show welcome/checklist:tour reads live · held by the plan.
status home shows one page with all its variants; with many pages, status shortens to a line per slot to stay under 40 lines. status --since 2026-10-04 lists what happened since then: deploys, changes, acts and warnings. --json gives every field of every command.
Look closer at one variant
npx routingcat show takes any address, or any id the other commands print. For a variant:
$ routingcat show home/hero:streakshome/hero:streaks · vr_01m3yns6z0e829v0t88n5qnn6n · live · favored · served by dp_01m4k54960e4ma9r026sfe2he2 version @v1 (rv_01m3yns6z0f2ebpyen892gv87p, 3243c8) since 10-02, ch_01m3yns6z0fz8v4em957cjc5jf "Try three headlines on the home page" headline "Keep your writing streak alive"
scores signup@1 · release rl_01m4m5qzm0f71bbb0zaavzqx05 · publication pb_01m4k57yc0fa9vhrhd9qpf2dm2 · counts to 00:50Z · matured to 10-11 rate 2.6% [0.7, 4.5] · predicted vs default +19% [−100, +145] relative · +0.4 pts [−2.1, +3.0] · predicted signal 3 · Early · 101 matured visits counted 2.5% of 122 matured visits · 3.0% of all 135, incomplete · 71.1% rendered served 40% of hero; routing currently intends 33%
scorecards ev_01m3yns6z0fm693znkpv7yttp9 vs default write-daily, since 10-02 · as served · +24% [−100, +176] predicted · run_01m4m79dn0eb28eg2mc30hyx16
by device visits served relative counted predicted mobile 68 37% 0.93 3.3% 3.0% [0.3, 6.3] desktop 64 44% 1.10 1.7% 2.1% [0.2, 4.9] other 3 30% 0.76 0.0% 2.4%, no range: too few visits also --by traffic_source, visit, time_of_day, day_type
other outcomes, counted trial_started 0.0%engagement seen 79% · 2.7 s visible · 4.0% click inside the slotrelated sl_01m3yns6z0f33vg9d3m1a5nngd · ch_01m3yns6z0fz8v4em957cjc5jf · pb_01m4k57yc0fa9vhrhd9qpf2dm2 · ev_01m3yns6z0fm693znkpv7yttp9 → routingcat show <id>versionis the variant’s current version and its content, with the commit message that made it.rateandvs defaultare predicted: its rate, and its difference from the default in percent and in points, each with a range. In--json, that difference iscontrast_with_default, and a scorecard’s islift_vs_comparator.signalgives the evidence behind the predicted rate, and the matured visits behind it.countedis its counted rate over matured visits, then over all visits so far, which reads low, and the share of its visits where the browser confirmed it rendered.servedcompares the share it got with the share routing intends now.scorecardslists the comparisons opened when it went live, each with its latest result;showwith the scorecard’s id gives its detail.by devicebreaks the variant down by a report dimension: visits, share served, relative share, and counted and predicted rates.other outcomesandengagementare counted: its rates for the other tracked outcomes, and how often the slot was seen, how long, and how often clicked inside.
Breakdowns are report options. --by picks the dimension: device, by default, traffic_source, visit, time_of_day or day_type. The relative share is the share served in that group over the share served overall: it describes where the variant was shown, not which group prefers it. A small group shows its value with no range.
Find where conversions come from
npx routingcat sources counts conversions and revenue by where each visit came from, over the last 7 days by default:
$ routingcat sources --since 7dpantry · production · 7 days to 2026-10-15 08:00Z · accounting, not lift · contract 1.0
channel arrivals signup rate trial_started purchase revenuesearch 2,883 63 2.2% 31 11 $99direct 1,816 39 2.1% 15 6 $129referral 594 14 2.4% 6 3 $102social 818 12 1.5% 7 3 $102email 356 10 2.8% 8 0 —ai 449 9 2.0% 10 0 —paid 467 8 1.7% 6 1 $9other 164 3 1.8% 2 1 $9unknown 230 7 3.0% 0 0 —no_arrival — 7 — 5 1 $9total 7,777 172 2.2% 90 26 $459
top sources google 66 · newsletter 10 · producthunt.com 8 · chatgpt.com 6top campaigns launch-thread (social) 8 · weekly-digest (email) 6 · retarget-q3 (paid) 5 · brand-search (paid) 2top landing / 97 · /pricing 15 · /changelog 9 · /blog/meal-prep-sunday 8channels as classified by program launch-1 · also --by source, campaign, landing- It is accounting, as its first line says: it shows where conversions came from, never what caused them.
- Each conversion counts under the latest arrival from outside the site before it, by the converting visitor or by the visitors linked to its account. One with none counts under
no_arrival, so totals match the events. unknownmeans the arrival carried no usable information. On your site, that includes typed and bookmarked visits, which carry no referrer: they count asdirectonly where the server helpers set the fetch-site cookie,rc_fs.othermeans tags RoutingCat didn’t recognize.--by source,campaignorlandinggroups by those instead of the channel; a page, as insources home --since 14d, counts only the conversions credited to that page’s visits.
Download the figures
npx routingcat download <report> writes a prepared report to a file in the current folder, and prints the file’s name, its rows and how fresh its counts are. cells is the most detailed report, the counts and sums each figure is built from, as CSV; the others come as JSON. --filter page=home slot=hero narrows it, --by keeps one breakdown or a pair of them, and it covers the last 90 days unless you give since= and until=. A download selects prepared figures, never rows of visitors. The command reference lists the reports.
Explain results to a person
Say each figure with its kind and its range, in plain words:
- Name the kind. Counted is what happened, predicted is the model’s belief, and measured comes from a random split, as the measured gain does. In
--json, a figure’sbasisgives its kind:descriptiveis counted,modeledis predicted, andrandomizedis measured; JSON output gives every field. - Give the range, and say “too early to call” when it spans zero.
- Say “leads” or “is shown most”, never a verdict.
- Say that browsers made the decisions. In
--json, your site’s figures carryverification: unverified: they rest on decisions your visitors’ browsers made, which RoutingCat replays from what each browser recorded. A replay shows that a decision follows from its inputs, never that a person saw it.
Worked examples, from the output above and from other sites’ status:
| The output | What to say |
|---|---|
+9 conversions (signup) vs defaults, no range: too few visits |
“Nine days in, there are too few visits to measure what routing adds. Routing shows ‘Keep your writing streak alive’ most for now, but each new headline’s predicted difference from today’s runs from −100% to well above: none is known to be better or worse yet.” |
−33 conversions (signup) vs defaults [−218, +152] |
“Three months in, routing’s effect on home-page sign-ups is somewhere between 218 fewer and 152 more than showing everyone the defaults: the direction isn’t known yet.” |
+246 conversions (signup) vs defaults [+9, +482] |
“Routing has added about 246 sign-ups on the home page over showing everyone the defaults; the evidence puts it between 9 and 482.” |
3.5% [3.0, 4.1] · −20% [−34, −5] vs default · signal 69 Strong, for the variant current |
“The model predicts the current headline converts about 20% less than the default, between 5% and 34% less, with strong evidence behind that prediction. It is a prediction, not a measured result.” |
The email row of sources above |
“Email brought 10 sign-ups last week, 2.8% of its arrivals, against 2.2% overall. That’s where sign-ups came from, not proof that email caused them.” |
The tour row above, held |
“The tour checklist is deployed but not shown yet: your sites use all 10 live variants Hobby includes. Upgrading to Pro, or retiring a variant, puts it live within about 2 minutes.” |
What never to claim
- A winner, a significant or proven result, or a confidence level. Say what the evidence shows.
- A predicted difference as a gain. Only the measured gain counts as one, and in prose a predicted difference is “the difference from the default”, never “lift”.
- A site-wide gain. Each page’s gain stands alone; never add pages’ gains together.
- A head-to-head of counted rates. Routing shows variants to different visitors, so compare their predicted differences from the default.
- An incomplete rate as final, or a missing value as zero.
- Signal as a chance of being best,
favoredas a verdict, a relative share as a preference, or sources as causes. - A result on the first good day. The range is recomputed daily and is not a stopping rule.